cjrasmussen / bluesky-api
Simple helper for interacting with the Bluesky API/AT protocol
Requires
- php: >=7.4
- ext-curl: *
- ext-json: *
README
Simple class for making requests to the Bluesky API/AT protocol. Not affiliated with Bluesky.
Usage
Starting a session
Starting a session requires a handle and password.
use cjrasmussen\BlueskyApi\BlueskyApi; $bluesky = new BlueskyApi(); try { $bluesky->auth($handle, $app_password); } catch (Exception $e) { // TODO: Handle the exception however you want }
Getting a refresh token
If you're running up against rate limits by repeatedly creating a session, you may want to cache a refresh token and use that to refresh your session instead of starting a new one. Cache it however you want for later usage.
$refresh_token = $bluesky->getRefreshToken();
Refreshing a session
You can use that cached refresh token later to refresh your session instead of starting a new session.
try { $bluesky->auth($refresh_token); } catch (Exception $e) { // TODO: Handle the exception however you want }
Sending a message
$args = [ 'collection' => 'app.bsky.feed.post', 'repo' => $bluesky->getAccountDid(), 'record' => [ 'text' => 'Testing #TestingInProduction', 'langs' => ['en'], 'createdAt' => date('c'), '$type' => 'app.bsky.feed.post', ], ]; $data = $bluesky->request('POST', 'com.atproto.repo.createRecord', $args);
Sending a message with an attached image
This assumes that your image file is a PNG
$body = file_get_contents($file); $response = $bluesky->request('POST', 'com.atproto.repo.uploadBlob', [], $body, 'image/png'); $image = $response->blob; $args = [ 'collection' => 'app.bsky.feed.post', 'repo' => $bluesky->getAccountDid(), 'record' => [ 'text' => 'Testing with an image #TestingInProduction', 'langs' => ['en'], 'createdAt' => date('c'), '$type' => 'app.bsky.feed.post', 'embed' => [ '$type' => 'app.bsky.embed.images', 'images' => [ [ 'alt' => 'A test image', 'image' => $image, ], ], ], ], ]; $response = $bluesky->request('POST', 'com.atproto.repo.createRecord', $args);
Installation
Simply add a dependency on cjrasmussen/bluesky-api to your composer.json file if you use Composer to manage the dependencies of your project:
composer require cjrasmussen/bluesky-api
Although it's recommended to use Composer, you can actually include the file(s) any way you want.
Further Reference
It's not much, but I do have some Bluesky API-related stuff on my blog. Additionally, there's an unofficial Discord for Bluesky API users with a PHP-focused channel.
License
BlueskyApi is MIT licensed.