cjrasmussen/bluesky-api
Composer 安装命令:
composer require cjrasmussen/bluesky-api
包简介
Simple helper for interacting with the Bluesky API/AT protocol
关键字:
README 文档
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, or see the session helper below.
$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 a hashtag
The above example has a hashtag in the text, however it will not be rendered as a hashtag. You must explicitly define text as a hashtag when posting via the Bluesky API as the service won't do it for you.
$args = [ 'collection' => 'app.bsky.feed.post', 'repo' => $bluesky->getAccountDid(), 'record' => [ 'text' => 'Testing #TestingInProduction', 'facets' => [ [ 'index' => [ 'byteStart' => 8, 'byteEnd' => 28, ], 'features' => [ [ '$type' => 'app.bsky.richtext.facet#tag', 'tag' => 'TestingInProduction', ], ], ], ], 'langs' => ['en'], 'createdAt' => date('c'), '$type' => 'app.bsky.feed.post', ], ]; $data = $bluesky->request('POST', 'com.atproto.repo.createRecord', $args);
Sending a message with a link
Similarly, you must explicitly define links in text when posting via the Bluesky API.
$args = [ 'collection' => 'app.bsky.feed.post', 'repo' => $bluesky->getAccountDid(), 'record' => [ 'text' => 'Testing https://cjr.dev', 'facets' => [ [ 'index' => [ 'byteStart' => 8, 'byteEnd' => 23, ], 'features' => [ [ '$type' => 'app.bsky.richtext.facet#link', 'uri' => 'https://cjr.dev', ], ], ], ], '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);
Using the session helper to manage refresh token caching
As mentioned above, you can manually cache a session refresh token however you want. The BlueskyApiSessionHelper::auth method is one way of doing that. Provide the path to a file containing a refresh token and the method will refresh your session and update the cache file with the new refresh token. Optionally provide a handle and (app) password to fall back on creating a new session if the refresh token fails.
use cjrasmussen\BlueskyApi\BlueskyApi; use cjrasmussen\BlueskyApi\BlueskyApiSessionHelper; $blueskyApi = new BlueskyApi(); $blueskyApiSessionHelper = new BlueskyApiSessionHelper($blueskyApi); try { $blueskyApiSessionHelper->auth($refresh_token_path, $handle, $password); } catch (Exception $e) { // TODO: Handle the exception however you want }
Getting response header for API requests
Bluesky returns data about rate limits in the header of each API request response. The most recent request response header can be accessed as a string as follows:
$blueskyApi->getLastResponseHeader();
The header can then be parsed as necessary.
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 "Bluesky API Touchers" Discord (which seems to be invite-only) with a PHP-specific channel.
License
BlueskyApi is MIT licensed.
cjrasmussen/bluesky-api 适用场景与选型建议
cjrasmussen/bluesky-api 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 13.53k 次下载、GitHub Stars 达 40, 最近一次更新时间为 2023 年 07 月 03 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「at protocol」 「bluesky」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 cjrasmussen/bluesky-api 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 cjrasmussen/bluesky-api 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 cjrasmussen/bluesky-api 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A small client implementing the Measurement Protocol for Google Analytics 4.
Yii2 Extension for sending push notification with both Firebase Cloud Messaging (FCM) HTTP Server Protocols (APIs).
First-class Notifications for Craft CMS.
This bundle contains functionality concerning privacy and the European Union's "General Data Protection Regulation" (GDPR, in German: "Datenschutz-Grundverordnung", DSGVO).
Source RCON Protocol Service Provider for Laravel
Show bluesky feed in TYPO3
统计信息
- 总下载量: 13.53k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 40
- 点击次数: 17
- 依赖项目数: 4
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2023-07-03