spatie / twitter-labs
Twitter Labs 端点的 PHP 客户端
Requires
- php: ^7.4
- ext-json: *
- clue/buzz-react: ^2.6.1
- league/oauth2-client: ^2.4
- react/promise: ^2.2
- spatie/data-transfer-object: ^2.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.16
- mockery/mockery: ^1.3
- phpunit/phpunit: ^8.2
- symfony/var-dumper: ^4.3
README
Twitter Labs 端点的 PHP 客户端
本包旨在实现 Twitter 新 API 中暴露的一些实时端点,因为旧的实时 Twitter 流已被弃用。
Twitter Developer Labs 是您获得新 API 端点、功能和版本的早期访问的地方。我们将使用 Labs 来测试新想法,并邀请我们的开发社区分享他们的反馈,以帮助我们塑造路线图。
(来自 Twitter Developer Labs 网站)
在底层,我们使用 ReactPHP 来处理所有异步操作。即使您可以在不了解 ReactPHP 的情况下使用此包,但我们建议您熟悉其 事件循环 概念。
如果您目前正在使用我们的旧 twitter-streaming-api 包,切换到本包应该很简单。
支持我们
我们投入了大量资源来创建 一流的开放式软件包。您可以通过 购买我们的付费产品之一 来支持我们。
我们非常感谢您从家乡寄来明信片,说明您正在使用我们的哪些包。您可以在 我们的联系页面 上找到我们的地址。我们将发布所有收到的明信片在 我们的虚拟明信片墙上。
安装
您可以通过 composer 安装此包
composer require spatie/twitter-labs
用法
目前,仅实现了 过滤流端点。我们接受对 Twitter Labs 提供的其他功能的 PR。
⚠ 您需要一个具有 Twitter Dev Labs 访问权限的 Twitter 开发者账户,以及一个注册了过滤流预览的应用程序。请查看 https://developer.twitter.com/en/labs。
过滤流概述
您可以在 这里 找到 Twitter Labs 过滤流 API 文档。
Twitter 的过滤流由一个实时返回推文的流端点和三个控制哪些推文包含在实时端点中的端点组成
GET /labs/1/tweets/stream/filter
(实时)POST /labs/1/tweets/stream/filter/rules
(删除)GET /labs/1/tweets/stream/filter/rules
POST /labs/1/tweets/stream/filter/rules
(创建)
要使用这些过滤流端点之一,您需要一个 FilteredStream
实例。使用 \Spatie\TwitterLabs\FilteredStream\FilteredStreamFactory
为您创建此实例。工厂的 create
方法接受您的 API 凭证和可选的事件循环实例。
基本用法:监听推文
$filteredStream = \Spatie\TwitterLabs\FilteredStream\FilteredStreamFactory::create('twitter api token', 'twitter api secret'); $filteredStream->addRule( new \Spatie\TwitterLabs\FilteredStream\Rule('cat has:media', 'cat photos') ); $filteredStream ->onTweet(fn (Tweet $tweet) => print($tweet->text . PHP_EOL)) ->start();
调用 start
时将启动事件循环。除非发生错误并停止事件循环,否则在此调用之后的代码将不会执行。
管理过滤器/规则
Twitter Labs中的实时流过滤器与旧版Twitter API的工作方式略有不同。主要区别在于过滤器规则实际上是按API密钥存储的,并且在连接到流时始终应用。当添加或删除规则时,这些更改也会实时应用于流终结点,无需重新连接。
以下方法可用于管理过滤器规则
public function asyncAddRule(\Spatie\TwitterLabs\FilteredStream\Rule $rule): PromiseInterface; public function asyncAddRules(\Spatie\TwitterLabs\FilteredStream\Rule ...$rules): PromiseInterface; public function asyncDeleteRules(string ...$ruleIds): PromiseInterface; public function asyncSetRules(\Spatie\TwitterLabs\FilteredStream\Rule ...$rules): PromiseInterface; public function asyncGetRules(): PromiseInterface; public function addRule(\Spatie\TwitterLabs\FilteredStream\Rule $rule): \Spatie\TwitterLabs\FilteredStream\Responses\Rules\AddRulesResponse; public function addRules(\Spatie\TwitterLabs\FilteredStream\Rule ...$rules): \Spatie\TwitterLabs\FilteredStream\Responses\Rules\AddRulesResponse; public function deleteRules(string ...$ruleIds): \Spatie\TwitterLabs\FilteredStream\Responses\Rules\DeleteRulesResponse; public function setRules(\Spatie\TwitterLabs\FilteredStream\Rule ...$rules): \Spatie\TwitterLabs\FilteredStream\Responses\Rules\ListRulesResponse; public function getRules(): \Spatie\TwitterLabs\FilteredStream\Responses\Rules\ListRulesResponse;
您可以使用异步端点异步(不要忘记运行$filteredStream->run()
以启动事件循环)或使用常规端点同步。
添加规则的简单示例
use Spatie\TwitterLabs\FilteredStream\FilteredStreamFactory; use Spatie\TwitterLabs\FilteredStream\Rule; FilteredStreamFactory::create('token', 'secret') ->addRule(new Rule('@spatie_be', 'mentioning_spatie'));
添加规则的异步简单示例(可以与同一事件循环中运行的其他任务结合使用)
use React\EventLoop\Factory; use Spatie\TwitterLabs\FilteredStream\FilteredStreamFactory; use Spatie\TwitterLabs\FilteredStream\Rule; $loop = Factory::create(); FilteredStreamFactory::create('token', 'secret', $loop) ->asyncAddRule(new Rule('@spatie_be', 'mentioning_spatie')); $loop->run();
通过获取所有现有规则,然后删除它们并添加新规则来同步规则的示例。
use React\EventLoop\Factory; use Spatie\TwitterLabs\FilteredStream\FilteredStreamFactory; use Spatie\TwitterLabs\FilteredStream\Rule; $loop = Factory::create(); FilteredStreamFactory::create('token', 'secret', $loop) ->asyncSetRules(new Rule('cat photos')); // or use `setRules()` synchronously $loop->run();
监听推文
您可以为Twitter收到通过您的过滤器规则的推文时执行的回调指定一个回调函数。回调函数将仅带有一个参数:\Spatie\TwitterLabs\FilteredStream\Responses\Tweet\Tweet $tweet
。一切设置完毕后,您可以使用connect()
方法开始监听。
use React\EventLoop\Factory; use Spatie\TwitterLabs\FilteredStream\Responses\Tweet\Tweet; use Spatie\TwitterLabs\FilteredStream\FilteredStreamFactory; $loop = Factory::create(); FilteredStreamFactory::create('token', 'secret', $loop) ->onTweet(fn(Tweet $tweet) => print($tweet->text)) ->connect(); $loop->run();
作为一个简写,$filteredStream->start()
也是可用的。它将连接到实时端点并启动事件循环,即使没有给出事件循环。当您不需要在其他地方使用事件循环时,这特别方便。
use Spatie\TwitterLabs\FilteredStream\Responses\Tweet\Tweet; use Spatie\TwitterLabs\FilteredStream\FilteredStreamFactory; FilteredStreamFactory::create('token', 'secret') ->onTweet(fn(Tweet $tweet) => print($tweet->text)) ->start();
测试
composer test
变更日志
请参阅变更日志以获取有关最近更改的更多信息。
贡献
请参阅贡献指南以获取详细信息。
安全
如果您发现有关安全的错误,请通过security@spatie.be发送电子邮件,而不是使用问题跟踪器。
鸣谢
许可协议
MIT许可协议(MIT)。请参阅许可文件以获取更多信息。