时间轴与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类中,因此实现所需的请求非常简单。

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

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

    接下来,您需要选择一个您想要提出请求的网址。 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