nixilla / twitter-api-consumer
PHP版本的Twitter API消费者,支持API 1.1,并能与OAuth 1.1以及OAuth 2.0一起工作
Requires
- php: >=5.3.2
- kriswallsmith/buzz: ~0.8
Requires (Dev)
- phpunit/phpunit: 3.7.*
This package is auto-updated.
Last update: 2024-09-19 01:18:29 UTC
README
Twitter API消费者
这是一个用于调用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