Как показать архив твитов в WordPress, используя PHP и MySQL с поддержкой Crontab?
Твитер плохо отображает все твиты. На данный момент у меня более 600 твитов (большинство из них отправлено PHP-скриптом на VPS ). Если вы хотите локально сохранить копию всех ваших исторических твитов в собственной базе данных, вы, конечно, можете запросить архив в своей учетной записи Twitter [Настройки — Учетная запись — Запросить архив].
запрос-твиттер-архив
Как насчет того, чтобы сохранить все твиты и отобразить их в своем блоге (странице WordPress)? Идея отличная, потому что твиты можно рассматривать как статьи для целей SEO. Итак, вам нужно создать таблицу в базе данных WordPress, например, давайте назовем ее tweets.
твит-история-таблица
У нас есть четыре столбца: идентификатор твита, текст, дата/время, количество ретвитов. Конечно, вы можете получить больше информации из twitter API statuses/user_timeline, но нас интересуют только эти четыре.
Локальное хранение
Всегда существует ограничение скорости использования API Twitter, поэтому вы не можете использовать их слишком часто. Однако идея здесь состоит в том, чтобы иметь PHP-скрипт, который запускается в crontab (каждые несколько часов), извлекает твиты и сохраняет их локально в базе данных.
Мы можем использовать php-библиотеку TwitterOAuth для взаимодействия с API Twitter:
// <a class="vglnk" target="_blank" href="http://helloacm.com" rel="nofollow"><span>helloacm</span><span>.</span><span>com</span></a>
// 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 TwitterOAuthTwitterOAuth;
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, чтобы мы могли включать их каждый раз, если мы хотим получить доступ к API Twitter.
// <a class="vglnk" target="_blank" href="http://helloacm.com" rel="nofollow"><span>helloacm</span><span>.</span><span>com</span></a>
// 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. PHP-скрипт выше проверит наличие дубликатов (на основе Twitter ID), поэтому в первый раз будет вставлен новый твит, а во второй раз он будет просто обновлен.
Существует максимальное количество твитов, которые вы можете получить за один вызов API, например, 300. Если у вас есть больше твитов, вы всегда можете несколько раз вызвать скрипт, чтобы загрузить все твиты. Однако нам нужно указать параметр max_id, который будет возвращать твиты старше этого идентификатора (более мелкие идентификаторы). Так что мы можем:
// <a class="vglnk" target="_blank" href="http://helloacm.com" rel="nofollow"><span>helloacm</span><span>.</span><span>com</span></a>
// 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
);
Идея состоит в том, чтобы проверить самый старый твит (с минимальным идентификатором) и вернуть только более старые твиты, поэтому, если вы запустите скрипты несколько раз, вы импортируете все твиты.
Теперь у нас есть готовые данные, и мы можем запускать этот скрипт на сервере VPS каждые несколько часов (частота на ваше усмотрение) с помощью команды crontab -e.
Отображение твитов на страницах WordPress
Теперь на этой странице helloacm.com/tweets-history/ показаны все древа из базы данных. Вам понадобится плагин для выполнения PHP/HTML внутри страницы WordPress. Вы можете легко найти такие плагины для WordPress.
Создайте страницу WordPress и поместите следующее:
[ include ]tweets.php[ / include ]
Затем нам нужно поместить PHP-скрипт в этот tweets.php, указанный выше.
<php
// <a class="vglnk" target="_blank" href="http://helloacm.com" rel="nofollow"><span>helloacm</span><span>.</span><span>com</span></a>
// 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’) для получения строки запроса, чтобы знать, на какой странице мы просматриваем.

