设置 Twitter API,获取最后几条推文

Posted

技术标签:

【中文标题】设置 Twitter API,获取最后几条推文【英文标题】:Setting up Twitter API, getting the last few Tweets 【发布时间】:2013-06-07 15:21:35 【问题描述】:

我对使用 Twitter 完全陌生,并且从未在任何项目中嵌入“最新推文”。我只是想在网站页脚中嵌入 3-4 条最新推文,而没有其他功能特性。我一直在研究如何做到这一点已经有一段时间了,但遇到了一些麻烦。

我将以下代码 sn-p 添加到项目中,效果很好,但是,我不确定如何更新 sn-p,因此它使用我的 Twitter 帐户而不是它设置的帐户。

    <div id="twitter_update_list">
    </div>
    <script type="text/javascript" src="http://api.twitter.com/1/statuses/user_timeline.json?screen_name=***&include_rts=true&count=4&callback=twitterCallback2">
    </script>

此外,我一直在读到,最常用的 Twitter API 将很快停止工作,因为 Twitter 希望人们使用自己的 API,而不是第三方。

我不知道如何从这里开始。我将不胜感激在这方面的任何建议。回顾一下,我要做的就是从我的帐户中获取 3-4 条最新推文。

非常感谢!

【问题讨论】:

如果你需要一个纯 JavaScript 的解决方案,你可以使用 Jason Mayes 的 Twitter-Post-Fetcher jasonmayes.com/projects/twitterApi 过几天我会尝试一个新的工作,今天它似乎对于不能在服务器端工作的人来说是一个好方法。 【参考方案1】:

所以你真的不想再做这个客户端了。 (刚刚浏览了许多文档,开发人员建议做所有的 oAuth 服务器端)

你需要做什么:

首先:注册https://dev.twitter.com,然后进行新的申请。

第二:注意:您的消费者密钥/秘密以及访问令牌/秘密

第三:下载 Twitter OAuth 库(在本例中,我使用了 php 库 https://github.com/abraham/twitteroauth,其他库位于此处:https://dev.twitter.com/docs/twitter-libraries)

第四:(如果使用 PHP)如果您在 LAMP 上运行,请确保启用 cURL,这是您需要的命令:

sudo apt-get install php5-curl

第五个:创建一个新的 PHP 文件并插入以下内容:感谢 Tom Elliot http://www.webdevdoor.com/php/authenticating-twitter-feed-timeline-oauth/

<?php
session_start();
require_once("twitteroauth/twitteroauth/twitteroauth.php"); //Path to twitteroauth library you downloaded in step 3

$twitteruser = "twitterusername"; //user name you want to reference
$notweets = 30; //how many tweets you want to retrieve
$consumerkey = "12345"; //Noted keys from step 2
$consumersecret = "123456789"; //Noted keys from step 2
$accesstoken = "123456789"; //Noted keys from step 2
$accesstokensecret = "12345"; //Noted keys from step 2

function getConnectionWithAccessToken($cons_key, $cons_secret, $oauth_token, $oauth_token_secret) 
  $connection = new TwitterOAuth($cons_key, $cons_secret, $oauth_token, $oauth_token_secret);
  return $connection;


$connection = getConnectionWithAccessToken($consumerkey, $consumersecret, $accesstoken, $accesstokensecret);

$tweets = $connection->get("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=".$twitteruser."&count=".$notweets);

echo json_encode($tweets);
echo $tweets; //testing remove for production   
?>

然后繁荣,你完成了。 我知道这不是一个纯粹的 js 解决方案,但再次阅读新的 Twitter API 1.1 文档,他们真的不希望你做这个客户端。希望这有帮助!

【讨论】:

感谢您的回复!获得 3 条推文的工作量比预期的要多得多,但我必须做我该做的 ;) 我会试一试并回来查看。 当您说“在 dev.twitter.com 上注册”时 - 您需要将其作为您想要从中获取推文的帐户(我的客户的账户)还是任何帐户(即我的自己的帐户)? @NickG 不,它必须是一个 Twitter 帐户。上面第五步的链接里有说明 想知道为什么开发人员建议这应该在服务器端完成? @Seano,因为令牌和密钥是敏感信息,如果被盗,可以未经授权访问 Twitter,如果在客户端完成,它们将在 Javascript 代码中完全可见。【参考方案2】:

如何仅使用核心 PHP 功能获取用户的最后几条推文(不需要 CURL 或 Twitter oAuth 库):

    注册您的应用/网页https://apps.twitter.com(您可能还需要验证您的个人帐号手机号)

    注意消费者密钥和消费者秘密

    PHP 代码:

    // auth parameters
    $api_key = urlencode('REPLACEWITHAPPAPIKEY'); // Consumer Key (API Key)
    $api_secret = urlencode('REPLACEWITHAPPAPISECRET'); // Consumer Secret (API Secret)
    $auth_url = 'https://api.twitter.com/oauth2/token'; 
    
    // what we want?
    $data_username = 'Independent'; // username
    $data_count = 10; // number of tweets
    $data_url = 'https://api.twitter.com/1.1/statuses/user_timeline.json?tweet_mode=extended';
    
    // get api access token
    $api_credentials = base64_encode($api_key.':'.$api_secret);
    
    $auth_headers = 'Authorization: Basic '.$api_credentials."\r\n".
                    'Content-Type: application/x-www-form-urlencoded;charset=UTF-8'."\r\n";
    
    $auth_context = stream_context_create(
        array(
            'http' => array(
                'header' => $auth_headers,
                'method' => 'POST',
                'content'=> http_build_query(array('grant_type' => 'client_credentials', )),
            )
        )
    );
    
    $auth_response = json_decode(file_get_contents($auth_url, 0, $auth_context), true);
    $auth_token = $auth_response['access_token'];
    
    // get tweets
    $data_context = stream_context_create( array( 'http' => array( 'header' => 'Authorization: Bearer '.$auth_token."\r\n", ) ) );
    
    $data = json_decode(file_get_contents($data_url.'&count='.$data_count.'&screen_name='.urlencode($data_username), 0, $data_context), true);
    
    // result - do what you want
    print('<pre>');
    print_r($data);
    

使用 XAMPP for Windows 和 Centos6 默认安装 (PHP 5.3) 测试

最可能的问题可能是 php.ini 中未启用 openssl

修复检查 extension=php_openssl.dll 或 extension=php_openssl.so 行是否存在且未在 php.ini 中注释

【讨论】:

谢谢@Rauli!如果可以的话,我会投票更多:) 其他人注意:目前,Twitter 访问令牌不会过期:***.com/questions/8357568/…, dev.twitter.com/oauth/overview/faq 感谢您的回答,无需下载任何库就可以很好地工作...您知道我在哪里可以找到更多有关从 twitter 获取数据以检索来自主题标签的结果的文档吗?谢谢 @FernandoUrban 有 Twitter 搜索 API developer.twitter.com/en/docs/tweets/search/api-reference/… 它与我的示例具有不同的数据 url 和不同的参数,但除此之外应该类似。 这仍然很好用。所有可用的参数都可以在这里找到:developer.twitter.com/en/docs/tweets/timelines/api-reference/…【参考方案3】:

实际上 twitter 有很多限制,因为有很多来自耐克和其他公司的竞争。推文的阅读是有限的,如果你通过最新的 API 阅读它实际上有点落后。

他们还控制了 DM 延迟,这意味着即使你这样做也不能立即 DM,对方只会在 X 时间后收到。如果您通过脚本进行操作,即使您尝试从一个 ip twitter 进行很多 DM,也只会阻止您。

【讨论】:

以上是关于设置 Twitter API,获取最后几条推文的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 node.js 在 express.js 上使用 twitter api 显示最后 20 条推文?

Twitter API 如何获取最新推文 | Python

如何使用Twitter搜索API获取具有给定主题标签的所有推文?

HTML Twitter上一条推文

twitter4j.Status 是不是在每条推文上返回地理位置

如何将每条推文分成不同的引导卡