使用 Twitter API 版本 1.1 检索user_timeline的最简单 PHP 示例所以你想使用Twitter v1.1 API吗?

2022-08-30 06:04:39

由于 Twitter API 1.0 已于 2013 年 6 月 11 日停用,因此下面的脚本不再有效。

// 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获取最近用户状态的最简单/最短的方法是什么?


答案 1

重要提示:截至2018年年中,获得twitter API代币的过程变得更加官僚化。我花了一个多工作周的时间才获得一组API令牌,这是一个开源项目,为你们的家伙和女孩提供超过120万次安装,在Github上安装超过1.6k星,理论上应该是更高的优先级。

如果你的任务是使用 twitter API 进行工作,则必须考虑到这个可能非常长的等待时间。还可以考虑其他社交媒体渠道,如Facebook或Instagram,并提供这些选项,因为检索其代币的过程是即时的。


所以你想使用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,然后单击“创建应用程序”按钮。

Enter image description here

在此页面上,填写所需的任何详细信息。对我来说,这并不重要,因为我只是想提出大量的阻止请求来摆脱垃圾邮件关注者。关键是您将为自己获得一组用于应用程序的唯一密钥

因此,创建应用程序的要点是为自己(和Twitter)提供一组密钥。这些是:

  • 消费者密钥
  • 消费者的秘密
  • 访问令牌
  • 访问令牌机密

这里有一些关于这些令牌用途的信息。

3. 创建访问令牌:需要使用这些令牌才能成功发出请求

OAuth 请求一些令牌。因此,您需要为您生成它们。

Enter image description here

单击底部的“创建我的访问令牌”。然后,一旦你再次滚动到底部,你就会有一些新生成的密钥。您需要从此页面中获取四个以前标记的密钥以进行 API 调用,因此请在某个位置记下它们。

4.更改访问级别:您不希望只读,对吗?

如果你想像样地使用这个API,如果你正在使用GET请求执行标准数据检索以外的任何事情,你需要将你的设置更改为“读写”。

Enter image description here

选择页面顶部附近的“设置”选项卡。

Enter image description here

为您的应用程序提供读/写访问权限,然后点击底部的“更新”。

你可以在此处阅读有关 Twitter 使用的应用程序权限模型的详细信息。


5.编写代码以访问API:我已经为您完成了大部分工作

我将上面的代码(经过一些修改和更改)合并到一个PHP类中,因此发出所需的请求非常简单。

这使用OAuthTwitter 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"
);

确保将上面从应用程序获得的密钥放在各自的空间中。

接下来,您需要选择要向其发出请求的URL。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!我希望有人发现它有用;我知道我做到了(我用它来在循环中进行批量阻止)。

另外,对于那些在Windows上遇到SSL证书问题的人,请查看这篇文章。此库在后台使用 cURL,因此您需要确保可能设置了 cURL 证书。谷歌也是你的朋友。


答案 2

转到 dev.twitter.com 并创建应用程序。这将为您提供所需的凭据。这是我最近用PHPcURL编写的一个实现。

<?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

推荐