Eine leichte Implementierung des Atproto -Protokolls, um Spaß mit Bluesky zu haben
Nachdem ich mich mit den bereits verfügbaren Bibliotheken befasst hatte, um mit Atproto zu kommunizieren, entschied ich mich, meinen eigenen Weg zu gehen. Ich habe mich irgendwie darauf verzichtet, Bibliotheken zu verwenden, die ein Dutzend anderer Bibliotheken in ihren Composer.json enthalten, während die tatsächliche Kommunikationsfunktion über weniger Komponenten von Drittanbietern behandelt werden kann.
Derzeit (ich würde es Pre-Alpha nennen) habe ich nur eine Bibliothek der Drittanbieter eingeschlossen, nämlich
Vielleicht wird es in Zukunft mehr.
Um alles zu einem Chaos zu machen, habe ich fast alle Funktionen umbenannt ..... Sie können eine Liste der Funktionen finden, die ich hier implementiert habe:
Implementierte Funktionen sortiert nach Endpoint.md
Implementierte Funktionen sortiert nach dem Namen der Funktion.md
Sie können die Bibliothek durch Ausführen mit Komponisten installieren
composer require schnoog/php_atproto
Dadurch wird die Bibliothek im üblichen Lieferantenverzeichnis installiert. Kopieren Sie nun die Datei /vendor/schnoog/php_atproto/src/config.dist.php schl config.php
Oder verwenden Sie den folgenden Befehl in Ihrem Installationsverzeichnis, um die Datei automatisch zu kopieren (wenn im Verzeichnis Installation eine Dateiname config.php vorhanden ist, wird sie nicht überschrieben.
php -r 'if(!file_exists(__DIR__ . "/config.php")) copy (__DIR__ . "/vendor/schnoog/php_atproto/src/config.dist.php", __DIR__ . "/config.php");'
Ändern Sie den Inhalt der config.php und geben Sie Ihre Anmeldeinformationen ein
Dies ist der richtige Weg, wenn Sie den Komponist überhaupt nicht installiert haben.
Ich habe ein zweites Repository erstellt, das alle Dateien enthält, die für das Ausführen dieses Dings erforderlich sind.
Laden Sie die Reißversion von hier herunter: PAKED PHP_ATPROTO -Version
Entpacken Sie es einfach, stellen Sie Ihre Anmeldeinformationen in config.php ein und Sie sind bereit zu gehen. Ja, es ist wirklich so einfach
Dies bedeutet, dass Sie entweder eine Kopie des gesamten Repositorys haben
oder
Nachdem Sie die Dateien in Ihrem gewünschten Verzeichnis haben, kopieren Sie die Datei config.dist.php in Ihr Installationsverzeichnis und benennen Sie sie in config.php um
Vergessen Sie nicht, die Abhängigkeit zu installieren, indem composer install ausgeführt wird
Ändern Sie den Inhalt der config.php und geben Sie Ihre Anmeldeinformationen ein
Ich habe (derzeit) nur ein paar:
Ich bin nicht der größte Fan von OOP. Nicht alles in meiner digitalen Welt muss eine Klasse sein. Deshalb werde ich die Schnittstelle rein funktionieren (Evenso, das insbesondere einen Beitrag erstellen kann, wäre einfacher in einer Klasse zu verkapseln).
Ok, lass uns überprüfen, was verfügbar ist
Dieses kleine Beispiel authentifiziert sich nur gegen den Server und speichert das Token lokal. Wenn ein lokal gespeicherter Token verfügbar ist und die letzte Gültigkeitsprüfung mehr als in $config['atproto']['storedsession_validity'] vorgenommen wurde, wird die Gültigkeit gegen das Backend (in meinem Fall Bluesky) überprüft (in meinem Fall Bluesky).
Und hier erinnert mich an mich: Einfügen if (!atp_session_get())return false; Zu Beginn der Schnittstelle (Post, Timeline ...) Funktionen.
<?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;
}
Ja, dieses Ding kann tatsächlich in die eigene Zeitleiste posten. Alles, was Sie tun müssen (nach Einbeziehung des Includeer.php), ist die Funktion aufzurufen.
Dies kommt jedoch mit Einschränkungen (wie alles auf der Erde):
Hier ist ein wenig über die Parameter für die Hauptfunktion 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'];
Wie bereits erwähnt, können Sie entweder Bilder oder eine Webkarte haben. Wenn Sie beide definiert haben (und die Funktion mit ihnen angeben;)), wird nur die Webkarten angezeigt
$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, schauen wir, wie manche Anrufe erledigt werden
<?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);
Ja, auch die eigene Zeitleiste zu lesen (oder Feed oder wie auch immer sie genannt wird) ist ebenfalls ganz einfach. TBH, das einfachste verfügbar
<?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);
Diese Funktion ist irgendwie begrenzt. Ich kann derzeit kein gültiges Ergebnis von app.bsky.feed.searchPosts erhalten. Also lese ich stattdessen unter https://search.bsky.social/search/posts
Nicht schön, aber es funktioniert jedoch
<?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);
Ich werde eine Liste mit den implementierten Funktionen und Endpunkten erstellen und versuchen, sie auf dem neuesten Stand zu halten.
Implemented_sorted_by_endpoint.md
Implemented_sorted_by_functions.md