zendframework/zendservice-twitter

此包已被废弃,不再维护。作者建议使用 laminas/laminas-twitter 包。

Twitter网络服务的面向对象包装器

3.0.4 2019-02-07 17:16 UTC

README

仓库废弃于 2019-12-31

此仓库已迁移至 laminas/laminas-twitter

Build Status Coverage Status

提供对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,您可能会传递countsince_id

对于HTTP POST请求,$data参数可以是以下之一

  • 数据的数据关联数组。
  • 可序列化的数据对象。
  • 表示原始有效负载的字符串。

提供的数据将根据端点而异。

媒体上传

从版本3.0开始,我们支持通过ZendService\Twitter\MediaImageVideo类进行媒体上传。在每种情况下,您将使用要上传的图片的本地文件系统路径和媒体类型实例化相应的类,然后使用配置正确的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
}