当前位置: 首页 > 知识库问答 >
问题:

使用Twitter API 1.1版检索用户时间线的最简单PHP示例

印宏阔
2023-03-14

由于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);
    }
}

如何以最少的代码获取用户时间线(最近状态)?

我发现:https://dev.twitter.com/docs/api/1.1/get/statuses/user_timeline但我得到了以下错误:

"{"errors":[{"message":"Could not authenticate you","code":32}]}"

有很多类,但在尝试了几个之后,由于Twitter上的这些更新,它们似乎都不起作用,另外一些是非常高级的类,具有很多我并不真正需要的功能。

使用PHP获取最近用户状态的最简单/最短方法是什么?

共有3个答案

西门旻
2023-03-14

Rivers粘贴的代码很棒。谢谢!我是新来的,不能发表评论,我只想回答javiervd的问题(你会如何设置屏幕名称和使用这种方法计数?),因为我已经浪费了很多时间去弄清楚。

您需要将参数添加到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
           );
戚奇略
2023-03-14

转到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
洪国兴
2023-03-14

重要提示:截至2018年年中,获取twitter API代币的过程变得更加官僚。我花了一个多工作周的时间才拿到一套API代币,这是一个为大家准备的开源项目,在Packagist上安装了120多万个,在Github上安装了160万个stars,理论上这应该是更高的优先级。

如果你的工作任务是使用twitter API,你必须考虑到这个潜在的极长的等待时间。还可以考虑其他社交媒体渠道,如脸谱网或Instagram,并提供这些选项,因为检索令牌的过程是即时的。

注意:这些文件位于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,您需要将设置更改为

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

给你的应用程序读/写权限,点击底部的“更新”。

您可以在此处阅读更多关于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"
);

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

接下来,您需要选择要向其发出请求的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都说明了可以传递给它的内容。如果我们像上面那样使用“blocks”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证书。谷歌也是你的朋友。

 类似资料:
  • 本文向大家介绍PHP Smarty模版简单使用方法,包括了PHP Smarty模版简单使用方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP Smarty模版简单使用方法。分享给大家供大家参考,具体如下: Index.php: index.tpl: 后记:如何让VS支持tpl扩展名的HTML编辑 在菜单[工具>选项]中设置,如下图: 更多关于PHP相关内容感兴趣的读者可查看本站专题

  • 问题内容: 在普通的PHP安装中进行双向加密的最简单方法是什么? 我需要能够使用字符串密钥加密数据,并在另一端使用相同的密钥进行解密。 安全性不像代码的可移植性那么重要,因此我希望能够使事情尽可能简单。当前,我正在使用RC4实现,但是如果可以找到本机支持的内容,那么我可以节省很多不必要的代码。 问题答案: 编辑: 您确实应该使用openssl_encrypt()和openssl_decrypt()

  • 问题内容: 有没有一种方法可以使会话中断以了解用户是否在线? 即:使用登录名,设置一个$ _SESSION变量,用户超时cookie垃圾收集器更新数据库以将其状态更新为脱机。 我想要一个不涉及时间或日期的解决方案。我希望某些东西可以参加会议或类似的活动。猜测某人是否在线并不能满足我的需求。 问题答案: 不要理会时区之间的差异。没必要 每当用户访问页面时,最后一次更新其在用户表的记录中的字段。然后查

  • 本文向大家介绍利用PHP实现一个简单的用户登记表示例,包括了利用PHP实现一个简单的用户登记表示例的使用技巧和注意事项,需要的朋友参考一下 一、展示单行的用户信息表 首先我们需要创建两个文件,一个为html文件,一个为php文件。 这里博主就创建了form.html和formHandle.php两个文件。 下面展示一下两个文件的内容: form.html的文件内容: 效果展示: 这里要注意的是:类

  • 本文向大家介绍PHP简单计算两个时间差的方法示例,包括了PHP简单计算两个时间差的方法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP简单计算两个时间差的方法。分享给大家供大家参考,具体如下: 运行结果: PS:这里再为大家推荐几款时间及日期相关工具供大家参考使用: 在线日期/天数计算器: http://tools.jb51.net/jisuanqi/date_jisuanqi

  • 问题内容: 我经常需要显示基于用户 实际 本地时间或受其影响的信息,该时间在各个时区不同。是否有获取用户当前时间和/或时区的可靠方法? 关键的问题: 服务器端代码基于网站主机或用户的ISP 客户端代码基于用户的系统时钟,太容易操作 关键问题: 是否需要查明用户的地理位置? ISP时间可以成为准确的指南吗? 用户的操作系统时钟可以改变还是可以被用户修改? 例子: 倒数: 只需1小时3分56秒! 问题