✅ WEB і WordPress новини, теми, плагіни. Тут ми ділимося порадами і кращими рішеннями для сайтів.

Як показати архів твітів у WordPress за допомогою PHP і MySQL із підтримкою Crontab?

14

Твітер погано відображає всі твіти. Наразі я маю понад 600 твітів (більшість із них надіслано скриптом PHP на VPS ). Якщо ви хочете локально зберегти копію всіх своїх історичних твітів у власній базі даних, ви, звичайно, можете надіслати запит на архів у своєму обліковому записі Twitter [Налаштування – Обліковий запис – Запит архіву].

Як показати архів твітів у Wordpress за допомогою PHP і MySQL із підтримкою Crontab?

запит-твіттер-архів

Як щодо того, щоб ви могли зберегти всі твіти та відобразити їх у своєму блозі (на сторінці WordPress)? Ідея чудова, тому що твіти можна розглядати як статті для цілей SEO. Отже, вам потрібно буде створити таблицю в базі даних WordPress, наприклад, давайте назвемо її tweets.

Як показати архів твітів у Wordpress за допомогою PHP і MySQL із підтримкою Crontab?

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’), щоб отримати рядок запиту, щоб знати, яку сторінку ми переглядаємо.

Джерело запису: helloacm.com

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. Прийняти Читати далі