zendframework / zendservice-twitter
Requires
- php: ^7.1
- zendframework/zend-feed: ^2.7
- zendframework/zend-http: ^2.5.4
- zendframework/zend-json: ^2.6.1 || ^3.0
- zendframework/zend-stdlib: ^2.7.7 || ^3.0.1
- zendframework/zend-uri: ^2.5.2
- zendframework/zendoauth: ^2.0.3
Requires (Dev)
- phpunit/phpunit: ^6.0.8
- zendframework/zend-coding-standard: ^1.0
README
仓库废弃于 2019-12-31
此仓库已迁移至 laminas/laminas-twitter。
提供对Twitter API的对象化PHP包装。
安装
运行以下命令安装此库
$ composer require zendframework/zendservice-twitter
使用方法
通过提供Twitter客户端密钥和密钥、访问令牌和密钥来实例化Twitter
类。
use ZendService\Twitter\Twitter; $twitter = new Twitter([ 'access_token' => [ 'token' => '<token value>', 'secret' => '<token secret value>', ], 'oauth_options' => [ 'consumerKey' => '<consumer key value>', 'consumerSecret' => '<consumer secret value>', ], ]);
完成此操作后,您可以开始调用API。这可以通过以下三种方式之一完成
- 使用
Twitter
类的直接方法调用。以下是完整列表。 - 使用“代理”功能。在这些情况下,您将提供API的第一个路径元素,然后调用其上的方法:
$twitter->statuses->update($message)
。 - 使用
get()
或post()
方法。
可用方法
accountVerifyCredentials() : 响应
applicationRateLimitStatus() : 响应
blocksCreate($id) : 响应
blocksDestroy($id) : 响应
blocksIds(int $cursor = -1) : 响应
blocksList(int $cursor = -1) : 响应
directMessagesDestroy($id) : 响应
directMessagesMessages(array $options = []) : 响应
directMessagesNew($user, string $text, array $extraParams = []) : 响应
directMessagesEventsNew($user, string $text, array $extraParams = []) : 响应
directMessagesSent(array $options = []) : 响应
favoritesCreate($id) : 响应
favoritesDestroy($id) : 响应
favoritesList(array $options = []) : 响应
followersIds($id, array $params = []) : 响应
friendsIds($id, array $params = []) : 响应
friendshipsCreate($id, array $params = []) : 响应
friendshipsLookup($id, array $params = []) : 响应
friendshipsDestroy($id) : 响应
listsMembers($listIdOrSlug, array $params = []) : 响应
listsMemberships($id, array $params = []) : 响应
listsSubscribers($id, array $params = []) : 响应
searchTweets(string $query, array $options = []) : 响应
statusesDestroy($id) : 响应
statusesHomeTimeline(array $options = []) : 响应
statusesMentionsTimeline(array $options = []) : 响应
statusesSample() : 响应
statusesShow($id, array $options = []) : 响应
statusesUpdate(string $status, $inReplyToStatusId = null, $extraAttributes = []) : 响应
statusesUserTimeline(array $options = []) : 响应
usersLookup($id, array $params = []) : 响应
usersSearch(string $query, array $options = []) : 响应
usersShow($id) : 响应
代理属性
以下代理属性是被允许的
- account
- application
- blocks
- directmessages
- favorites
- 关注者
- 朋友
- 友谊
- 列表
- 搜索
- 状态
- 用户
在每种情况下,您可以通过将代理名称与上述方法列表进行比较来识别可用的代理方法。以users
代理为例,它允许以下操作
$twitter->users->lookup($id, array $params = []); $twitter->users->search(string $query, array $options = []); $twitter->users->show($id);
直接访问
Twitter API有数十个端点,其中一些比其他端点更受欢迎或有用。因此,我们只提供了一小部分可用的内容。
但是,我们允许您通过get()
或post()
方法访问任何端点,这些方法具有以下签名
public function get(string $path, array $query = []) : Response; public function post(string $path, $data = null) : Response;
在每种情况下,$path
是Twitter API文档中详细说明的API端点,不包含任何.json
后缀,而方法名称对应于请求是否通过HTTP GET或POST进行。
对于HTTP GET请求,$query
参数提供了您希望传递给该端点的任何查询字符串参数。例如,如果您正在请求statuses/home_timeline
,您可能会传递count
或since_id
。
对于HTTP POST请求,$data
参数可以是以下之一
- 数据的数据关联数组。
- 可序列化的数据对象。
- 表示原始有效负载的字符串。
提供的数据将根据端点而异。
媒体上传
从版本3.0开始,我们支持通过ZendService\Twitter\Media
、Image
和Video
类进行媒体上传。在每种情况下,您将使用要上传的图片的本地文件系统路径和媒体类型实例化相应的类,然后使用配置正确的HTTP客户端调用upload()
。响应将包含一个media_id
属性,然后您可以通过在发布状态时提供media_ids
参数来使用该属性。
$image = new Image('data/logo.png', 'image/png'); $response = $image->upload($twitter->getHttpClient()); $twitter->statusUpdate( 'A post with an image', null, ['media_ids' => [$response->media_id]] );
当为直接消息提供媒体时,您必须在媒体类的构造函数中提供额外的标志
- 一个标志,表示它是直接消息
- 一个标志,表示上传的媒体是否可以共享/在其他直接消息中重复使用。
$image = new Image( 'data/logo.png', 'image/png', $forDirectMessage = true, $shared = false ); $upload = $image->upload($twitter->getHttpClient());
与非DM媒体上传不同,标识符将位于返回的上传实例的id_str
参数中;将其用作您的DM中的media_id
。
$twitter->directmessagesEventsNew( $user, $message, ['media_id' => $upload->id_str] );
注意:直接消息仅支持单个附件。
速率限制
从版本3.0开始,我们现在提供Twitter速率限制头的检查,允许您对此采取措施
$response = $twitter->statusUpdate('A post'); $rateLimit = $response->getRateLimit(); if ($rateLimit->remaining === 0) { // Time to back off! sleep($rateLimit->reset); // seconds left until reset }