捣腾:通过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 typingsudo service apache2 restart
3、Then Install PHP5 CURL by typingsudo apt-get install php5-curl
4、Then Restart Apache by typingsudo 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_key
及 consumer_secret
即可, 而 oauth_access_token
、 oauth_access_token_secret
不需要配置。
最后浏览 https://sheshui.me/twitter/ 已经成功读取到最新的 Tweet 信息。
资源参考
- TwitterAPIExchange:一个简单的回调函数库 Simple PHP Wrapper for Twitter API v1.1 calls
- TwitterTextFormatter:将回调的Tweet内容信息HTML格式化的类 Getting latest Tweets and displaying them in HTML with PHP
- Get Tweet timelines: 调用Twiiter时间轴API 官网文档 developer.twitter.com/en/docs/tweets/timelines
后记
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