怎样在 WordPress 里 创建 所有 推特 ?


很多国外的朋友都喜欢上推特 Twitter. 但是如果你发了很多推(我有600多条, 但很多都是每天机器自动发的), 在Twitter 上查找以前的推就不是很方便了, 因为用了 Ajax 技术, 没办法一页一页翻. 当然, 你可以在 Twitter 的设置里要求一份备份, 那么你将收到下载的邮件.

request-twitter-archive 怎样在 Wordpress 里 创建 所有 推特 ? wordpress 互联网 技术 折腾 程序设计 网站信息与统计

request-twitter-archive

更好的办法就是, 我们可以通过 Twitter API 将所有你发的推给存储在你的SQL数据库里, 那么还可以在 博客中显示出来, 更加方便检索. 首先, 我们需要在博客所在的服务器数据库里创建这么一个表, 比如 tweets.

tweet-history-table 怎样在 Wordpress 里 创建 所有 推特 ? wordpress 互联网 技术 折腾 程序设计 网站信息与统计

tweet-history-table

有四个字段: tweet ID, text, date/time, retweet count 分别对应了ID, 文本, 发推的时间, 和被转发的次数. 当然你通过 API statuses/user_timeline 获得的数据还有很多, 但是暂时我只关心这几个值.

备份

我们将写一个PHP脚本, 用于把推给下载下来并写到数据库里:

我们可以用 TwitterOAuth 来访问 Twitter API:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 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);
// 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 方便以下调用.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// 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);
      }
  }
// 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范围.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 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
  );
// 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 的内容, 用于从数据库中取得推, 分页显示.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<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>";
  }
<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来收录.

英文同步: https://helloacm.com/how-to-show-tweets-archive-in-wordpress-using-php-and-mysql-with-crontab-support/

GD Star Rating
a WordPress rating system
本文一共 596 个汉字, 你数一下对不对.
怎样在 WordPress 里 创建 所有 推特 ?. (AMP 移动加速版本)
上一篇: 舍得给员工培训的公司是好公司
下一篇: 网站 把 GB2312 转成 UTF-8 全攻略

扫描二维码,分享本文到微信朋友圈
25def2c4bd2287f8997ae77c4a72323f 怎样在 Wordpress 里 创建 所有 推特 ? wordpress 互联网 技术 折腾 程序设计 网站信息与统计

7 条评论

评论