时间轴与Twitter API版本1.1
由于截至2013年6月11日Twitter API 1.0退役,下面的脚本不再适用。
// Create curl resource
$ch = curl_init();
// Set url
curl_setopt($ch, CURLOPT_URL, "http://twitter.com/statuses/user_timeline/myscreenname.json?count=10");
// Return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// $output contains the output string
$output = curl_exec($ch);
// Close curl resource to free up system resources
curl_close($ch);
if ($output)
{
$tweets = json_decode($output,true);
foreach ($tweets as $tweet)
{
print_r($tweet);
}
}
我怎样才能得到最少的代码可能的user_timeline(最新状态)?
我发现这个:https://dev.twitter.com/docs/api/1.1/get/statuses/user_timeline,但我得到以下错误:
"{"errors":[{"message":"Could not authenticate you","code":32}]}"
这里有很多类,但是在尝试了几个之后,由于Twitter上的这些更新,似乎没有任何一个可以工作,而且其中一些类是非常高级的类,具有许多我不需要的功能。
用PHP获取最近用户状态的最简单/最简单的方法是什么?
所以你想使用Twitter v1.1 API?
注意:这些文件位于GitHub上。
版本1.0 将很快被弃用 ,未经授权的请求将不被允许。 所以,这里有一篇文章帮助你做到这一点,还有一个PHP类让你的生活更轻松。
1.创建开发者帐户:在Twitter上设置自己的开发者帐户
您需要访问官方Twitter开发者网站并注册开发者帐户。 这是为v1.1 API提出请求的免费步骤。
2.创建一个应用程序:在Twitter开发人员网站上创建一个应用程序
什么? 你以为你可以做出未经验证的请求? 不适用于Twitter的v1.1 API。 您需要访问http://dev.twitter.com/apps并单击“创建应用程序”按钮。
在这个页面上,填写你想要的任何细节。 对我而言,这并不重要,因为我只是想要加载阻止垃圾消息的请求。 关键是你要获得一套独特的密钥来用于你的应用程序。
所以,创建应用程序的重点是给自己(和Twitter)一组密钥。 这些是:
这里有一些关于这些令牌的信息。
3.创建访问令牌 :您需要使用这些令牌来成功请求
OAuth请求一些令牌。 所以你需要让它们为你生成。
点击底部的“创建我的访问令牌”。 然后,一旦你再次滚动到底部,你会有一些新生成的键。 您需要从此页面抓取以前标记的四个键作为API调用,因此请在某处记下它们。
4.更改访问级别 :您不想只读,是吗?
如果您想对此API进行任何正当使用,则需要将您的设置更改为“读写”(Read&Write),如果您使用GET请求进行标准数据检索以外的任何操作。
选择页面顶部附近的“设置”标签。
给你的应用程序读/写访问权限,并点击底部的“更新”。
您可以阅读更多关于Twitter使用的应用程序权限模型。
5.编写代码来访问API :我已经为您完成了大部分工作
我将上面的代码与一些修改和更改结合到了一个PHP类中,因此实现所需的请求非常简单。
这使用OAuth和Twitter v1.1 API ,以及我已创建的类,您可以在下面找到它。
require_once('TwitterAPIExchange.php');
/** Set access tokens here - see: https://dev.twitter.com/apps/ **/
$settings = array(
'oauth_access_token' => "YOUR_OAUTH_ACCESS_TOKEN",
'oauth_access_token_secret' => "YOUR_OAUTH_ACCESS_TOKEN_SECRET",
'consumer_key' => "YOUR_CONSUMER_KEY",
'consumer_secret' => "YOUR_CONSUMER_SECRET"
);
确保你将你从应用程序获得的密钥放在它们各自的空间中。
接下来,您需要选择一个您想要提出请求的网址。 Twitter有他们的API文档来帮助您选择哪个URL以及请求类型(POST或GET)。
/** URL for REST request, see: https://dev.twitter.com/docs/api/1.1/ **/
$url = 'https://api.twitter.com/1.1/blocks/create.json';
$requestMethod = 'POST';
在文档中,每个URL指出您可以传递给它的内容。 如果我们使用上面的“块”URL,则可以传递以下POST参数:
/** POST fields required by the URL above. See relevant docs as above **/
$postfields = array(
'screen_name' => 'usernameToBlock',
'skip_status' => '1'
);
现在您已经设置了您想要对API执行的操作,现在是时候完成实际的请求。
/** Perform the request and echo the response **/
$twitter = new TwitterAPIExchange($settings);
echo $twitter->buildOauth($url, $requestMethod)
->setPostfields($postfields)
->performRequest();
而对于POST请求,就是这样!
对于GET请求,它有点不同。 这是一个例子:
/** Note: Set the GET field BEFORE calling buildOauth(); **/
$url = 'https://api.twitter.com/1.1/followers/ids.json';
$getfield = '?username=J7mbo';
$requestMethod = 'GET';
$twitter = new TwitterAPIExchange($settings);
echo $twitter->setGetfield($getfield)
->buildOauth($url, $requestMethod)
->performRequest();
最终代码示例 :对于我的关注者列表的简单GET请求。
$url = 'https://api.twitter.com/1.1/followers/list.json';
$getfield = '?username=J7mbo&skip_status=1';
$requestMethod = 'GET';
$twitter = new TwitterAPIExchange($settings);
echo $twitter->setGetfield($getfield)
->buildOauth($url, $requestMethod)
->performRequest();
我已将这些文件放在GitHub上 ,信誉归于@ lackovic10和@rivers! 我希望有人认为它有用。 我知道我做过(我用它在循环中批量阻塞)。
另外,对于那些有SSL证书有问题的Windows用户,请看这篇文章。 该库使用cURL,因此您需要确保您的cURL证书可能已设置。 Google也是你的朋友。
转到dev.twitter.com并创建一个应用程序。 这将为您提供您所需的凭据。 这是我最近用PHP和cURL写的一个实现。
<?php
function buildBaseString($baseURI, $method, $params) {
$r = array();
ksort($params);
foreach($params as $key=>$value){
$r[] = "$key=" . rawurlencode($value);
}
return $method."&" . rawurlencode($baseURI) . '&' . rawurlencode(implode('&', $r));
}
function buildAuthorizationHeader($oauth) {
$r = 'Authorization: OAuth ';
$values = array();
foreach($oauth as $key=>$value)
$values[] = "$key="" . rawurlencode($value) . """;
$r .= implode(', ', $values);
return $r;
}
$url = "https://api.twitter.com/1.1/statuses/user_timeline.json";
$oauth_access_token = "YOURVALUE";
$oauth_access_token_secret = "YOURVALUE";
$consumer_key = "YOURVALUE";
$consumer_secret = "YOURVALUE";
$oauth = array( 'oauth_consumer_key' => $consumer_key,
'oauth_nonce' => time(),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_token' => $oauth_access_token,
'oauth_timestamp' => time(),
'oauth_version' => '1.0');
$base_info = buildBaseString($url, 'GET', $oauth);
$composite_key = rawurlencode($consumer_secret) . '&' . rawurlencode($oauth_access_token_secret);
$oauth_signature = base64_encode(hash_hmac('sha1', $base_info, $composite_key, true));
$oauth['oauth_signature'] = $oauth_signature;
// Make requests
$header = array(buildAuthorizationHeader($oauth), 'Expect:');
$options = array( CURLOPT_HTTPHEADER => $header,
//CURLOPT_POSTFIELDS => $postfields,
CURLOPT_HEADER => false,
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSL_VERIFYPEER => false);
$feed = curl_init();
curl_setopt_array($feed, $options);
$json = curl_exec($feed);
curl_close($feed);
$twitter_data = json_decode($json);
//print it out
print_r ($twitter_data);
?>
这可以从命令行运行:
$ php <name of PHP script>.php
河流粘贴的代码非常棒。 非常感谢! 我是新来的,无法评论,我只想回答javiervd的问题(你会如何设置screen_name并用这种方法计数?),因为我已经花了很多时间来计算它出。
您需要将参数添加到URL和签名创建过程中。 创建签名是帮助我的文章。 这是我的代码:
$oauth = array(
'screen_name' => 'DwightHoward',
'count' => 2,
'oauth_consumer_key' => $consumer_key,
'oauth_nonce' => time(),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_token' => $oauth_access_token,
'oauth_timestamp' => time(),
'oauth_version' => '1.0'
);
$options = array(
CURLOPT_HTTPHEADER => $header,
//CURLOPT_POSTFIELDS => $postfields,
CURLOPT_HEADER => false,
CURLOPT_URL => $url . '?screen_name=DwightHoward&count=2',
CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false
);
链接地址: http://www.djcxy.com/p/58817.html
上一篇: timeline with Twitter API version 1.1
下一篇: Getting Location of Tweets found with Twitter Search API