Twitter API在使用搜索查询时未进行身份验证

时间:2014-08-21 18:45:09

标签: php twitter

我试图在PHP中使用Twitter API列出与主题标签匹配的推文:

$url = 'https://api.twitter.com/1.1/search/tweets.json';
$count = 3;
$hashtag = '#twitter';
$oauth = array(
    'oauth_consumer_key'        => '##########',
    'oauth_nonce'               => hash('SHA1', time()),
    'oauth_signature'           => '',
    'oauth_signature_method'    => 'HMAC-SHA1',
    'oauth_timestamp'           => time(),
    'oauth_token'               => '##########',
    'oauth_version'             => '1.0'
);

$oauth_vals[] = "q={$hashtag}";
foreach ($oauth as $key => $value)
{
    if (empty($value)) continue;
    $oauth_vals[] = "{$key}={$value}";
}
$oauth_vals[] = "count={$count}";

$base = 'GET&' . rawurlencode($url) . '&' . rawurlencode(implode('&', $oauth_vals));
$composite_key      = rawurlencode('##########') . '&' . rawurlencode('##########');
$oauth_signature    = base64_encode(hash_hmac('sha1', $base, $composite_key, true));
$oauth['oauth_signature'] = rawurlencode($oauth_signature);

foreach ($oauth as $key => $value)
{
    $auth_header[] = "{$key}=\"{$value}\"";
}
$auth_header = implode(', ', $auth_header);

$options = array(
    CURLOPT_HTTPHEADER      => array("Authorization: OAuth {$auth_header}"),
    CURLOPT_HEADER          => false,
    CURLOPT_URL             => "https://api.twitter.com/1.1/search/tweets.json?q={$hashtag}&count={$count}",
    CURLOPT_RETURNTRANSFER  => true,
    CURLOPT_SSL_VERIFYPEER  => false,
    CURLOPT_HTTPGET         => true
);

$feed = curl_init();
curl_setopt_array($feed, $options);
$json = curl_exec($feed);
curl_close($feed);
$tweets = json_decode($json, true);

var_dump($tweets); exit;

但是我收到了这个错误:

array(1) { ["errors"]=> array(1) { [0]=> array(2) { ["message"]=> string(26) "Could not authenticate you" ["code"]=> int(32) } } }

我做错了什么?所有令牌和密钥都在Twitter上我的应用程序部分中是正确的...因此无法理解我为什么会收到此错误。

如果我这样做:https://api.twitter.com/1.1/statuses/user_timeline.json?count={$count}&screen_name={$screen_name}那么它可以工作..所以也许我在搜索api中使用了错误的代码?

1 个答案:

答案 0 :(得分:3)

嗯,我不确定我的代码出了什么问题,但使用了这个:

https://github.com/J7mbo/twitter-api-php

效果很好,所以如果有人想使用Twitter API,我建议使用此代码。

显然参数必须是字母顺序,例如count=1&q=#twitter