✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Как показать архив твитов в WordPress, используя PHP и MySQL с поддержкой Crontab?

26

Твитер плохо отображает все твиты. На данный момент у меня более 600 твитов (большинство из них отправлено PHP-скриптом на VPS ). Если вы хотите локально сохранить копию всех ваших исторических твитов в собственной базе данных, вы, конечно, можете запросить архив в своей учетной записи Twitter [Настройки — Учетная запись — Запросить архив].

Как показать архив твитов в Wordpress, используя PHP и MySQL с поддержкой Crontab?

запрос-твиттер-архив

Как насчет того, чтобы сохранить все твиты и отобразить их в своем блоге (странице WordPress)? Идея отличная, потому что твиты можно рассматривать как статьи для целей SEO. Итак, вам нужно создать таблицу в базе данных WordPress, например, давайте назовем ее tweets.

Как показать архив твитов в Wordpress, используя PHP и MySQL с поддержкой Crontab?

твит-история-таблица

У нас есть четыре столбца: идентификатор твита, текст, дата/время, количество ретвитов. Конечно, вы можете получить больше информации из 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’) для получения строки запроса, чтобы знать, на какой странице мы просматриваем.

Источник записи: helloacm.com

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее