Une mise en œuvre légère du protocole ATProto pour s'amuser avec Bluesky
Après avoir examiné les bibliothèques déjà disponibles pour communiquer avec ATProto, j'ai décidé de suivre mon propre chemin. Je m'abstient en quelque sorte d'utiliser des bibliothèques qui incluent une douzaine d'autres bibliothèques de leur composer.json tandis que la fonctionnalité de communication réelle peut être couverte par la façon dont moins de composants tiers.
Actuellement (je l'appellerais pré-alpha) Je n'inclus qu'une seule bibliothèque tierce, à savoir
Peut-être que cela deviendra plus à l'avenir.
Pour en faire moins un gâchis, j'ai renommé presque toutes les fonctions ..... vous pouvez trouver une liste des fonctions que j'ai implémentées ici:
Fonctions implémentées triées par point de terminaison.md
Fonctions implémentées triées par le nom de la fonction.md
Vous pouvez installer la bibliothèque avec Composer en exécutant
composer require schnoog/php_atproto
Cela installera la bibliothèque dans le répertoire du fournisseur habituel. Copiez maintenant le fichier /vendor/schnoog/php_atproto/src/config.dist.php php_atproto/src/config.dist.php à votre répertoire d'installation et renommez-le à config.php
ou utilisez la commande suivante à partir de votre répertoire d'installation pour copier automatiquement le fichier (s'il y a déjà un nom de fichier config.php dans le répertoire d'installation, il ne sera pas écrasé.
php -r 'if(!file_exists(__DIR__ . "/config.php")) copy (__DIR__ . "/vendor/schnoog/php_atproto/src/config.dist.php", __DIR__ . "/config.php");'
Modifiez le contenu de la config.php et entrez vos informations d'identification
C'est la voie à suivre si vous n'avez pas du tout installé compositeur.
J'ai créé un deuxième référentiel qui comprend tous les fichiers nécessaires pour exécuter cette chose.
Téléchargez la version zippé à partir d'ici: version PHP_ATPROTO emballée
Décompressez-le, définissez vos informations d'identification dans la config.php et vous êtes prêt à partir. Oui, c'est vraiment si facile
Cela signifie que vous avez une copie de l'ensemble du référentiel
ou
Une fois que vous avez les fichiers dans le répertoire souhaité, copiez le fichier config.dist.php dans votre répertoire d'installation et renommez-le sur config.php
N'oubliez pas d'installer la dépendance en exécutant composer install
Modifiez le contenu de la config.php et entrez vos informations d'identification
Je n'en ai (actuellement) que quelques-uns:
Je ne suis pas le plus grand fan de OOP. Tout dans mon monde numérique ne doit pas être une classe. Je vais donc garder l'interface purement fonction (evenso que la création en particulier d'un message serait plus facile à encapsuler dans une classe)
Ok, vérifions ce qui est disponible
Ce petit exemple s'authentifie simplement contre le serveur et stocke le jeton localement. Si un jeton stocké local est disponible et que le dernier chèque de validité a été effectué plus que spécifié dans $config['atproto']['storedsession_validity'] il y a quelques secondes, la validité sera vérifiée par rapport au backend (dans mon cas Bluesky)
Et ici un rappel pour moi: coller if (!atp_session_get())return false; Au début des fonctions d'interface (post, obtenez de la chronologie ...).
<?php
require_once(__DIR__ . "/src/includer.php");
if (!atp_session_get()){
echo "UNABLE TO ESTABLISH SESSION" . PHP_EOL;
print_r($config['error']);
}else{
echo "Session estalished and checked" . PHP_EOL;
}
Oui, cette chose peut réellement publier dans la chronologie. Tout ce que vous avez à faire (après avoir inclus l'inclusion.php) est d'appeler la fonction.
Mais cela vient avec des limites (comme tout sur Terre):
Voici un peu les paramètres de la fonction principale atp_create_post
$text = "This is the text to post, n containing mentioning @develobot.bsky.social and a link https://github.com/schnoog/php_atproto";
$lang = ['de','en'];
$add_link_facets = true;
$add_mentions_facets = true;
$images = [ __DIR__ . "/pic01.jpg" , __DIR__ . "/pic02.jpg"];
$images_alts = [ '', 'Alt text for second image'];
Comme mentionné précédemment, vous pouvez avoir des images ou une carte Web. Si vous avez défini les deux (et fournissez la fonction avec eux;)), seule la carte Web sera affichée
$website_uri = "https://github.com/schnoog/php_atproto";
$website_title = "My user defined title";
$website_description = "My user defined description";
$website_image = __DIR__ . "/website_image.png";
Ok, regardons comment certains appels tu as fait
<?php
require_once(__DIR__ . "/src/includer.php");
/*
Let's define some variables
*/
$text = "This is the text to post, n containing mentioning @develobot.bsky.social and a link https://github.com/schnoog/php_atproto";
$lang = ['de','en'];
$add_link_facets = true;
$add_mentions_facets = true;
$images = [ __DIR__ . "/pic01.jpg" , __DIR__ . "/pic02.jpg"];
$images_alts = [ '', 'Alt text for second image'];
$website_uri = "https://github.com/schnoog/php_atproto";
$website_title = "My user defined title";
$website_description = "My user defined description";
$website_image = __DIR__ . "/website_image.png";
//The most simple text post - parsing of mentions and links is ENABLED by default
$answer = atp_create_post($text);
//Now a post, just like above, but this time with the 2 defined images attached, and the $lang keys
$answer = atp_create_post($text,$lang,true,true,$images,$images_alts);
//And now a post which includes a webcard, for which we only provide the URL
$answer = atp_create_post($text,$lang,true,true,[],[],$website_uri);
//Why not a post with a full user defined webcard? Own title, description and image
$answer = atp_create_post($text,null,true,true,[],[],$website_uri,$website_title,$website_description,$website_image);
Oui, la lecture également de la chronologie (ou le flux ou comme ça s'appelle) est également assez facile. Tbh, la chose la plus facile disponible
<?php
require_once(__DIR__ . "/src/includer.php");
//Get 27 entries of the own timeline and print it by DebugOut
$timeline = atp_get_own_timeline(27);
DebugOut($timeline);
Cette fonction est en quelque sorte limitée. Je ne suis actuellement pas en mesure de recevoir aucun résultat valide sur app.bsky.feed.searchPosts . Donc, au lieu de cela, je lis sur https://search.bsky.social/search/posts
Pas gentil, mais ça marche cependant
<?php
require_once(__DIR__ . "/src/includer.php");
//Search for posts containing "Arduino" and print the result
$answer = atp_search_posts_by_term("Arduino");
DebugOut($answer);
Je vais créer une liste avec les fonctions et les points de terminaison implémentés et j'essaierai de le garder à jour.
Implémenté_sorted_by_endpoint.md
Implémenté_sorted_by_funtions.md