捣腾:通过API调用Tweet 进行展示

希望在自己的博客页面显示 Twitter 信息是之前已有的计划,最早的方式通过 js 获取 Twitter 开放API的方式已经行不通了,据说 Twitter 在2015年中已经不对API公开调用,于是只能先申请开发者帐号。

申请开发者帐号

开发者帐号的申请前往 developer.twitter.com/en/account/get-started 按步骤申请即可。

关于帐号的创建步骤,可以参考: Simplest PHP example for retrieving user_timeline with Twitter API version 1.1

1、创建开发者帐号,进入 https://developer.twitter.com/

2、创建APP应用,进入 https://apps.twitter.com/

应用创建后,可以生成并查看Token值,并设置Callbak URL等信息。

升级PHP环境

因为涉及第三方调用,后来发现自己的VPS服务器还不支持 curl 扩展。于是,按以下方法安装,分别执行:

1、First Install CURL by typing sudo apt-get install curl
2、Then Restart Apache by typing sudo service apache2 restart
3、Then Install PHP5 CURL by typing sudo apt-get install php5-curl
4、Then Restart Apache by typing sudo service apache2 restart

后来通过 phpinfo.php 查看发现依然没有 curl 扩展被启用,继续捣腾发现,默认安装的 curl 扩展被放置在 /usr/lib/php5/20121212 而实际环境调用的扩展是在 /usr/lib/php/20131226 下(因为之前手动升级至php5环境)。

补充, phpinfo.php 文件内容如下:

<?php phpinfo(); ?>

继续研究发现,原来 curl 扩展的安装要精确到具体的版本号,于是通过以下方式:

PHP 7.2: sudo apt-get install php7.2-curl
PHP 7.1: sudo apt-get install php7.1-curl
PHP 7.0: sudo apt-get install php7.0-curl
PHP 5.6: sudo apt-get install php5.6-curl
PHP 5.5: sudo apt-get install php5.5-curl
参考:How to install php-curl in Ubuntu 16.04

因为自己服务器环境使用的是 php 5.6 版本,所以通过以下命令即可完成安装:

sudo apt-get install php5.6-curl

安装后,需要重启服务器:

sudo /etc/init.d/apache2 restart

此时可以验证 curl 扩展已经配置成功。

总结一下:
针对curl扩展的安装需要精确到具体的版本,比如: php5.6-curl ,而不是 php5-curl

调试API调用脚本

关于Twitter API的调用,参考文章: PHP: GETTING LATEST TWEETS AND DISPLAYING THEM IN HTML

<?php
// Require J7mbo's TwitterAPIExchange library (used to retrive the tweets)
require_once('vendor/j7mbo/twitter-api-php/TwitterAPIExchange.php');
// Require our TwitterTextFormatter library
require_once('TwitterTextFormatter.php');
// Use the class TwitterTextFormatter
use Netgloo\TwitterTextFormatter;
// Set here your twitter application tokens
$settings = array(
  'consumer_key' => 'CONSUMER_KEY',
  'consumer_secret' => 'CONSUMER_SECRET',
  // These two can be left empty since we'll only read from the Twitter's 
  // timeline
  'oauth_access_token' => '',
  'oauth_access_token_secret' => '',
);
// Set here the Twitter account from where getting latest tweets
$screen_name = 'SCREEN-NAME';
// Get timeline using TwitterAPIExchange
$url = 'https://api.twitter.com/1.1/statuses/user_timeline.json';
$getfield = "?screen_name={$screen_name}";
$requestMethod = 'GET';
$twitter = new TwitterAPIExchange($settings);
$user_timeline = $twitter
  ->setGetfield($getfield)
  ->buildOauth($url, $requestMethod)
  ->performRequest();
$user_timeline = json_decode($user_timeline);
// Print each tweet using TwitterTextFormatter to get the HTML text
echo "<ul>";
foreach ($user_timeline as $user_tweet) {
  echo "<li>";
  echo TwitterTextFormatter::format_text($user_tweet) . "<br/>";
  // Print also the tweet's image if is set
  if (isset($user_tweet->entities->media)) {
    $media_url = $user_tweet->entities->media[0]->media_url;
    echo "<img src='{$media_url}' width='150px' />";
  }
  echo "</li>";
}
echo "</ul>";
?>

以上,需要依赖两个文件:

  • TwitterAPIExchange.php
  • TwitterTextFormatter.php
// Set here your twitter application tokens
$settings = array(
  'consumer_key' => 'CONSUMER_KEY',
  'consumer_secret' => 'CONSUMER_SECRET'
  // These two can be left empty since we'll only read from the Twitter's 
  // timeline
  'oauth_access_token' => '',
  'oauth_access_token_secret' => '',
);

以上只需要设置开发者帐号中生成的 consumer_keyconsumer_secret 即可, 而 oauth_access_tokenoauth_access_token_secret 不需要配置。

最后浏览 https://sheshui.me/twitter/ 已经成功读取到最新的 Tweet 信息。

资源参考

后记

1、由于Twitter及API URL地址都处于墙外,所以实现的前提是自己的Server部署在海外,否则此法不通。

2、原作者提供的脚本没有打印推文时间,可以通过 foreach 中加上:

  echo '<span>'.date( 'Y-m-d H:i:s', strtotime($user_tweet->created_at)).'</span>'

—— THE END 2018.9.28 GZ

评论已关闭。Comments are turned off for this article.