Як показати архів твітів у WordPress за допомогою PHP і MySQL із підтримкою Crontab?
Твітер погано відображає всі твіти. Наразі я маю понад 600 твітів (більшість із них надіслано скриптом PHP на VPS ). Якщо ви хочете локально зберегти копію всіх своїх історичних твітів у власній базі даних, ви, звичайно, можете надіслати запит на архів у своєму обліковому записі Twitter [Налаштування – Обліковий запис – Запит архіву].
запит-твіттер-архів
Як щодо того, щоб ви могли зберегти всі твіти та відобразити їх у своєму блозі (на сторінці WordPress)? Ідея чудова, тому що твіти можна розглядати як статті для цілей SEO. Отже, вам потрібно буде створити таблицю в базі даних WordPress, наприклад, давайте назвемо її tweets.
tweet-history-table
У нас є чотири стовпці, а саме: ідентифікатор твіту, текст, дата/час, кількість ретвітів. Звичайно, ви можете отримати більше інформації з twitter API statuss/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, щоб ми могли включати їх щоразу, якщо ми хочемо отримати доступ до Twitter API.
// <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’), щоб отримати рядок запиту, щоб знати, яку сторінку ми переглядаємо.

