joeymckenzie/bluesky-php

A PHP client for the Bluesky API.

0.0.1 2024-11-11 06:46 UTC

This package is auto-updated.

Last update: 2024-11-14 21:16:01 UTC


README

logo packgist downloads tests ci packgist downloads packgist downloads

Bluesky PHP

🚧 This package is still in early development, with no major releases at the moment. Use with precaution!

A Bluesky PHP client compatible with your HTTP client of choice. The goal of this project is to provide a simple, easy-to-use PHP HTTP client to interact with Bluesky's API, providing methods for calling both the authenticated and public endpoints.

ℹ️ Current progress: 16/165 endpoints covered

Bluesky PHP in action

<?php

declare(strict_types=1);

use Bluesky\Bluesky;

require_once __DIR__.'/../vendor/autoload.php';

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__.'/../');
$dotenv->load();

// By default, the client assumes we're going to authenticate as a valid user
$username = $_ENV['BLUESKY_USERNAME'];
$password = $_ENV['BLUESKY_PASSWORD'];

// Construct the client using the default builder with no customizations
$client = Bluesky::client($username);

// It's also possible to use the public API as well
$publicApi = Bluesky::publicClient();

// Option 1, we can manually a session and forward the token
$session = $client->session()->createSession($password);
var_dump($session);

$profile = $client->actor()->getProfile($username);
var_dump($profile);

// OR option 2, create a new session through the client instance
$newSession = $client->newSession($password);
var_dump($newSession);

$profile = $client->actor()->getProfile($username);
var_dump($profile);

// Create a post
$post = $client->feed()->post('This post was brought to you by PHP!');

Getting started

To get started, install Bluesky from Packagist

$ composer install joeymckenzie/bluesky-php

Within you code, instantiate a new instance of the client:

$client = Bluesky::client('username.bsky.social');

// To use the client, you'll need to create a new session that'll grab some JWTs for authentication
$client->newSession('password123');

// Or, build a new client with a session
$clientWithSession = Bluesky::clientWithSession('username.bsky.social', 'password123');

// Or, using the public API client that doesn't require authentication
$publicClient = Bluesky::publicClient(); 

Status

The API surface of Bluesky's API is fairly large encompassing some odd 160ish different endpoints. A complete list can be found within the TODO list, containing simple tracking of endpoints that have been implemented and those yet to be implemented.

Testing

To run tests

$ composer run test

Bluesky PHP uses Pest for testing, where each endpoint contains a test that:

  • Verifies the call as we expect to Bluesky
  • Verifies the properties on the response

You'll find test data within the fixtures folder, container stubs with randomly generated fake data mimicking data received from the API at various endpoints.