Uma implementação de peso leve do protocolo Atproto para se divertir com Bluesky
Depois de olhar para as bibliotecas já disponíveis para se comunicar com o Atproto, decidi seguir do meu jeito. De alguma forma, abstendo -me do uso de bibliotecas que incluem uma dúzia de outras bibliotecas em seu compositor.json, enquanto a funcionalidade de comunicação real pode ser coberta por menos componentes de terceiros.
Atualmente (eu chamaria de pré-alfa), incluo apenas uma biblioteca de terceiros, ou seja,
Talvez isso se torne mais no futuro.
Para tornar tudo menos uma bagunça, renomeei quase todas as funções ... você pode encontrar uma lista das funções que implementei aqui:
Funções implementadas classificadas pelo endpoint.md
Funções implementadas classificadas pelo nome da função.md
Você pode instalar a biblioteca com o compositor executando
composer require schnoog/php_atproto
Isso instalará a biblioteca no diretório de fornecedores usuais. Agora copie o arquivo /vendor/schnoog/php_atproto/src/config.dist.php para o seu diretório de instalação e renomeie -o para config.php
ou use o seguinte comando de dentro do seu diretório de instalação para copiar o arquivo automaticamente (se houver um nome de arquivo config.php no diretório de instalação, ele não será substituído.
php -r 'if(!file_exists(__DIR__ . "/config.php")) copy (__DIR__ . "/vendor/schnoog/php_atproto/src/config.dist.php", __DIR__ . "/config.php");'
Altere o conteúdo do config.php e insira suas credenciais
Este é o caminho a percorrer, se você não tiver instalado o compositor.
Criei um segundo repositório que inclui todos os arquivos necessários para executar isso.
Faça o download da versão com zíper daqui: versão php_atproto embalada
Apenas descompacte, defina suas credenciais no config.php e você estará pronto para ir. Sim, é realmente tão fácil
Isso significa que você tem uma cópia de todo o repositório por
ou
Depois de ter os arquivos no diretório desejado, copie o arquivo config.dist.php no diretório de instalação e renomeie -o para config.php
Não se esqueça de instalar a dependência executando composer install
Altere o conteúdo do config.php e insira suas credenciais
Eu tenho (atualmente) apenas alguns:
Eu não sou o maior fã de OOP. Nem tudo no meu mundo digital tem que ser uma aula. Então, vou manter a interface puramente função (Evenso que, especialmente, criar uma postagem seria mais fácil de encapsular em uma classe)
Ok, vamos verificar o que está disponível
Este pequeno exemplo apenas se autentifica contra o servidor e armazena o token localmente. Se um token armazenado local estiver disponível e a última verificação de validade foi realizada mais do que especificada em $config['atproto']['storedsession_validity'] segundos atrás, a validade será verificada no back -end (no meu caso Bluesky)
E aqui A lembra para mim: Cole if (!atp_session_get())return false; No início da interface (Post, obtenha as funções da linha do tempo ...).
<?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;
}
Sim, isso realmente pode postar na própria linha do tempo. Tudo o que você precisa fazer (depois de incluir o incluir.php) está chamando a função.
Mas isso vem com limitações (como tudo na terra):
Aqui está um pouco sobre os parâmetros da função principal 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'];
Como mencionado anteriormente, você pode ter imagens ou um webcard. Se você definiu ambos (e fornecer a função com eles;)), apenas o webcard será exibido
$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, vamos ver como algumas chamadas você é feito
<?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);
Sim, também é fácil ler a própria linha do tempo (ou o feed ou como é chamado) também é bastante fácil. Tbh, a coisa mais fácil disponível
<?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);
Esta função é de alguma forma limitada. Atualmente, não consigo receber nenhum resultado válido do app.bsky.feed.searchPosts . Então, em vez disso, estou lendo https://search.bsky.social/search/posts
Não é legal, mas funciona no entanto
<?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);
Vou criar uma lista com as funções e pontos de extremidade implementados e tentarei mantê -la atualizada.
Implement_sorted_by_endpoint.md
Implement_sorted_by_funtions.md