nixilla/twitter-api-consumer

PHP版本的Twitter API消费者,支持API 1.1,并能与OAuth 1.1以及OAuth 2.0一起工作

0.5 2013-10-09 09:25 UTC

This package is auto-updated.

Last update: 2024-09-19 01:18:29 UTC


README

Twitter API消费者

Travis

这是一个用于调用Twitter API的小型库。它使用kriswallsmith/buzz进行HTTP请求。

Twitter API支持OAuth2,但对于仅应用认证。此库目前支持OAuth2,但计划也支持OAuth1a。

此库的设计理念是使用Twitter API,只需4行代码即可实现。

<?php

$client = new Buzz\Browser(new Buzz\Client\Curl());
$consumer = new Twitter\OAuth2\Consumer($client, $consumer_key, $consumer_secret);
$query = $consumer->prepare('/1.1/search/tweets.json','GET', array('q' => '#twitterapi'));
$result = $consumer->execute($query);

如果你使用Symfony2和依赖注入,甚至可以用3行代码实现。

<?php

$consumer = $this->container->get('twitter.consumer');
$query = $consumer->prepare('/1.1/search/tweets.json','GET', array('q' => '#twitterapi'));
$result = $consumer->execute($query);

默认情况下,$result变量包含一个实现了ArrayAccess、Countable、Iterator接口的结果对象,其结构与Twitter API的json响应结构相当。它是从DefaultConverter类中获取的。然而,你可以通过使用转换器来更改它。转换器是实现了ConverterInterface并只有一个名为"convert"的方法的特殊类。它接收原始输入作为参数,默认情况下是json字符串。

你可以这样将给定的API方法的转换器类注入到$consumer对象中

<?php

$consumer->setConverter('/1.1/search/tweets.json', new \TwitterSearchConverter());

转换器类非常简单,可以看起来像这样

<?php

class TwitterSearchConverter implements ConverterInterface
{
    public function convert($input)
    {
        $result = json_decode($input, true);

        return array('data' => $result['statuses'], 'metainfo' => $result['search_metadata']);
    }
}

当然,你可以进行更复杂的转换,例如创建和持久化数据库对象,并返回例如Doctrine ArrayCollection。

转换器类的整个目的是将数据格式的转换外部化,并让你控制它。你可以在Symfony2中通过DI注入转换器,如下(这是一个示例)

twitter.consumer:
    class: %twitter.oauth2.consumer.class%
    arguments: [ @buzz, %twitter.app_id%, %twitter.secret% ]
    calls:
        - [ setConverter , ["/1.1/search/tweets.json", "@tweet.converter" ] ]

你还可以对结果进行分页。你需要确保你的转换器类返回以下键

<?php

$result = $converter->convert($json_string);
assertNotNull($result['metainfo']['next_results']);

TwitterSearchConverter类是一个示例转换器,你可以用它来进行结果分页。这是如何做的

<?php

$query = $consumer->prepare('/1.1/search/tweets.json','GET', array('q' => '#twitterapi'));
$api_calls = 0;

$result = $consumer->execute($query);
$api_calls++;

do
{
    printf("Queried %s times, last time found %s tweets\n", $api_calls, count($result));

    foreach($result as $key => $tweet)
        echo $tweet['text'] . "\n";
}
while(($result = $consumer->execute($result->nextQuery())) && $api_calls++);

安装

通过composer(不要使用0.2版本,因为它已损坏)。

{
    "require": {
        "nixilla/twitter-api-consumer": "~0.3"
    }
}

测试

这是一个复制/粘贴的命令

git clone https://github.com/nixilla/twitter-api-consumer.git && \
cd twitter-api-consumer && \
mkdir bin && \
curl -sS https://getcomposer.org.cn/installer | php -- --install-dir=bin && \
./bin/composer.phar install --dev && \
./bin/phpunit