Zum Hauptinhalt springen

Authentifizierung

Für die Bluesky-Authentifizierung gibt es zwei Wege: App Password und OAuth. Ziehen Sie bei Neuimplementierungen auch OAuth in Betracht.

App Password

use Revolution\Bluesky\Facades\Bluesky;

$profile = Bluesky::login(
    identifier: config('bluesky.identifier'),
    password: config('bluesky.password'),
)->getProfile();
Wenn Sie die Session wiederverwenden möchten, verwenden Sie LegacySession.
use Revolution\Bluesky\Facades\Bluesky;
use Revolution\Bluesky\Session\LegacySession;

Bluesky::login(identifier: config('bluesky.identifier'), password: config('bluesky.password'));

cache()->put('bluesky_legacy_session', Bluesky::agent()->session()->toArray(), now()->addDay());

Bluesky::withToken(LegacySession::create(cache('bluesky_legacy_session', [])));

if (! Bluesky::check()) {
    Bluesky::refreshSession();
}

OAuth

Wandeln Sie das per Socialite erhaltene Token in eine OAuthSession um und verwenden Sie es.
use Revolution\Bluesky\Facades\Bluesky;
use Revolution\Bluesky\Session\OAuthSession;

$session = OAuthSession::create(session('bluesky_session'));

$timeline = Bluesky::withToken($session)->getTimeline();
Den gesamten OAuth-Ablauf finden Sie unter Socialite.

Post erstellen

Einfacher Text-Post

use Revolution\Bluesky\Facades\Bluesky;

$response = Bluesky::withToken()->post('test');

Post mit TextBuilder zusammenstellen

Um Links, Tags und Mentions korrekt zu behandeln, verwenden Sie TextBuilder.
use Revolution\Bluesky\Facades\Bluesky;
use Revolution\Bluesky\RichText\TextBuilder;

$post = TextBuilder::make(text: 'test')
    ->newLine()
    ->mention('@example.bsky.social')
    ->newLine()
    ->link('https://bsky.app/')
    ->newLine()
    ->tag('#Laravel')
    ->toPost();

$response = Bluesky::withToken()->post($post);

Medien anhängen

Bilder anhängen

use Illuminate\Support\Facades\Storage;
use Revolution\Bluesky\Embed\Images;
use Revolution\Bluesky\Facades\Bluesky;
use Revolution\Bluesky\Record\Post;

Bluesky::withToken();

$images = Images::create()->add(
    alt: 'App screenshot',
    blob: fn (): array => Bluesky::uploadBlob(
        Storage::get('test.png'),
        Storage::mimeType('test.png')
    )->json('blob')
);

$post = Post::create(text: 'image post')->embed($images);

$response = Bluesky::post($post);
use Revolution\Bluesky\Embed\External;
use Revolution\Bluesky\Facades\Bluesky;
use Revolution\Bluesky\Record\Post;

$external = External::create(
    title: 'Title',
    description: 'Description',
    uri: 'https://example.com'
);

$post = Post::create(text: 'external card')->embed($external);

$response = Bluesky::withToken()->post($post);

Antworten und Zitate

Antwort

use Revolution\Bluesky\Facades\Bluesky;
use Revolution\Bluesky\Record\Post;
use Revolution\Bluesky\Types\ReplyRef;
use Revolution\Bluesky\Types\StrongRef;

$reply = ReplyRef::to(
    root: StrongRef::to(uri: 'at://', cid: 'cid'),
    parent: StrongRef::to(uri: 'at://', cid: 'cid')
);

$post = Post::create(text: 'reply')->reply($reply);

$response = Bluesky::withToken()->post($post);

Zitat-Post

use Revolution\Bluesky\Embed\QuoteRecord;
use Revolution\Bluesky\Facades\Bluesky;
use Revolution\Bluesky\Record\Post;
use Revolution\Bluesky\Types\StrongRef;

$quote = QuoteRecord::create(StrongRef::to(uri: 'at://', cid: 'cid'));

$post = Post::create(text: 'quote')->embed($quote);

$response = Bluesky::withToken()->post($post);

Feed abrufen

use Revolution\Bluesky\Facades\Bluesky;

$response = Bluesky::withToken()->getTimeline();

$items = $response->collect('feed');
Wenn Sie lediglich öffentliche Posts abrufen möchten, können Sie auch Methoden ohne Authentifizierung verwenden.
use Revolution\Bluesky\Facades\Bluesky;

$feed = Bluesky::getAuthorFeed(actor: 'alice.bsky.social')->json('feed');

Suche

use Revolution\Bluesky\Facades\Bluesky;

$response = Bluesky::withToken()->searchPosts(q: '#bluesky', limit: 10);
searchPosts() ist aufgrund einer vorübergehenden Einschränkung auf API-Seite derzeit ohne Authentifizierung nicht verfügbar.
Zuletzt geändert am 13. Juli 2026