很多国外的朋友都喜欢上推特 Twitter. 但是如果你发了很多推(我有600多条, 但很多都是每天机器自动发的), 在Twitter 上查找以前的推就不是很方便了, 因为用了 Ajax 技术, 没办法一页一页翻. 当然, 你可以在 Twitter 的设置里要求一份备份, 那么你将收到下载的邮件.
更好的办法就是, 我们可以通过 Twitter API 将所有你发的推给存储在你的SQL数据库里, 那么还可以在 博客中显示出来, 更加方便检索. 首先, 我们需要在博客所在的服务器数据库里创建这么一个表, 比如 tweets.
有四个字段: tweet ID, text, date/time, retweet count 分别对应了ID, 文本, 发推的时间, 和被转发的次数. 当然你通过 API statuses/user_timeline 获得的数据还有很多, 但是暂时我只关心这几个值.
备份
我们将写一个PHP脚本, 用于把推给下载下来并写到数据库里:
我们可以用 TwitterOAuth 来访问 Twitter API:
// helloacm.com
// How to Show Tweets Archive in WordPress using PHP and MySQL with Crontab Support
require('TwitterOAuth-1/TwitterOAuth/TwitterOAuth.php');
require('TwitterOAuth-1/TwitterOAuth/Exception/TwitterException.php');
require('TwitterOAuth-1/config.php');
use TwitterOAuth\TwitterOAuth;
date_default_timezone_set('UTC');
$config = array(
'consumer_key' => $twitter_apikey, // API key
'consumer_secret' => $twitter_apisecret, // API secret
'oauth_token' => $twitter_accesstoken, // not needed for app only
'oauth_token_secret' => $twitter_accesstokensecret,
'output_format' => 'object'
);
$tw = new TwitterOAuth($config);
保存成 twitter.php 方便以下调用.
// helloacm.com
// How to Show Tweets Archive in WordPress using PHP and MySQL with Crontab Support
require("twitter.php");
$params = array(
'screen_name' => $twitter_screenname,
'user_id' => $twitter_ownerid,
'count' => 300,
'include_rts' => 1,
'exclude_replies' => false
);
$tweets = $tw->get('statuses/user_timeline', $params);
mysql_query("SET NAMES utf8");
if(!empty($tweets)) {
foreach($tweets as $tweet) {
$id = $tweet->id;
$retweet_count = (integer)$tweet->retweet_count;
$created_at = $tweet->created_at;
$text = $tweet->text;
$text = mysql_real_escape_string($text);
$query = "select count(1) from `tweets` where `id` = '$id'";
$result = mysql_query($query);
$cnt = mysql_result($result, 0, 0);
if ($cnt == 0) {
$query = "insert into `tweets` set `id`='$id', `text`='$text', `created_at`='$created_at',`retweet_count`='$retweet_count'";
} else {
$query = "update `tweets` set `id`='$id', `text`='$text', `created_at`='$created_at',`retweet_count`='$retweet_count' where `id`='$id'";
}
mysql_query($query);
}
}
mysql_query(“SET NAMES utf8”) 保证了中文字符不会出现乱码. 如果你使用 mb_detect_encoding 你就会发现, 所有通过API得到的文本都是基于 UTF-8 编码的. 重复执行此脚本并不会重复的插入到数据库中, 因为我们通过了 ID 来判断是否重复, 第一次写入, 第二次就是更新了 (比如你的被转发次数会更新)
每次调用API获得推的最大数目是 300. 如果你有多于 300 的推你就需要重复执行脚本, 但是你需要指定一个 max_id 参数用于限定返回推的ID范围.
// helloacm.com
// How to Show Tweets Archive in WordPress using PHP and MySQL with Crontab Support
$query = "select min(`id`) from `tweets`";
$result = mysql_query($query) or die(mysql_error());
$cnt = mysql_result($result, 0, 0);
$params = array(
'screen_name' => $twitter_screenname,
'user_id' => $twitter_ownerid,
'count' => 1000,
'max_id' => $cnt,
'include_rts' => 1,
'exclude_replies' => false
);
原理就是, 每次我们先检查数据库中最老的推的ID, 然后通过API返回比这条推更老的, 直到所有推都下载下来.
然后我们就可以在 VPS server 上定期执行 这个PHP脚本用于更新到最新的 Tweets (crontab -e)
在博客中分页显示所有推
这个英文页面: helloacm.com/tweets-history/ 就是显示了我所有的推(600多条), 分页显示.
你需要一个插件, 用于在页面中执行PHP脚本, 然后指定PHP代码文件:
[ include ]tweets.php[ / include ]
下面就是tweets.php 的内容, 用于从数据库中取得推, 分页显示.
<php
// helloacm.com
// How to Show Tweets Archive in WordPress using PHP and MySQL with Crontab Support
global $wpdb;
$query = "select count(1) from `tweets`";
$total = $wpdb->get_var($query);
$per = 50;
$page = get_query_var('page');
if (!$page) {
$page = 1;
}
// pagination
$totalpages = ceil($total / $per);
if ($page > $totalpages) {
$page = 1;
}
$lowerbound = ($page - 1) * $per;
$upperbound = $lowerbound + $per;
$lmt=" limit " . $lowerbound . "," . $per;
$query = "select * from `tweets` order by `id` desc $lmt";
$result = $wpdb->get_results($query);
if ($result) {
foreach ($result as $tweet) {
$created_at = $tweet->created_at;
$text = $tweet->text;
$retweet_count = $tweet->retweet_count;
// display tweets
echo "$text - $created_at";
if ($retweet_count > 0) {
echo "($retweet_count Retweeted)";
}
}
}
// show prev/next page links
if ($page > 1) {
echo "<a href='?page=".($page-1)."'>Newer Tweets</a> - ";
}
if ($page < $totalpages) {
echo "<a href='?page=".($page+1)."'>Older Tweets</a>";
}
可以通过函数 get_query_var(‘page’) 来获得现在显示哪一页推.
也算内容原创了,坐等google来收录.
本文一共 596 个汉字, 你数一下对不对.上一篇: 舍得给员工培训的公司是好公司
下一篇: 网站 把 GB2312 转成 UTF-8 全攻略


你说你有强迫症,但我在你的标题里: 怎样在 WordPress 里 创建 所有 推特 ? 一点也没有看出来.留这么空格干什么?
哈哈, 本来想用引号的, 习惯性打空格了….
就不说你在中文中使用英文半角符号的标点了……而且,我相信你现在是无法更改回中文标点符号了——因为你批量一改,所有代码中的点号也会跟着换……让你的强迫症发作吧.
不会的, 我不喜欢中文的符号…. 就喜欢英文的…………………………………….你看, 我一下子用了这么多英文的.
那就好,否则这强迫症一来,无药可治.
有没有更加详细的教程,菜鸟表示看得不太懂,需要大祸详细步骤指导.上面的代码到底需要建立几个文件,具体怎么搞?我也想搞一个,找遍整个网络,就你这个合适一点.求大神指导一二.
分三步:第一步, twitter.php 通过API把推下载下来到数据库中, 第二步, tweets.php 分页显示推.第三步就是 通过WP创建一个页面 用于加载这个 tweets.php