wordpressサイトでTwitterを取得して表示したい場合に使える、簡単な方法をメモ。

前回までのあらすじ

前回の記事で、Twitter API 1.1をwordpressプラグインで済ませようとしたDAICHIFIVE。ところが、ユーザータイムラインしか取得できなかったので、結局、あきらめて自分でやることにしたのだった。

functions.php

// Twitter取得
function getTwitterApi($apipath, $parameters = array()) {
    require_once(dirname(__FILE__)."/twitteroauth/twitteroauth.php");
 
    $consumer_key = "xxxxxxxxxx";
    $consumer_secret = "xxxxxxxxxx";
    $access_token = "xxxxxxxxxx";
    $access_token_secret = "xxxxxxxxxx";
    
    $connection = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret);
    $result = $connection->get($apipath, $parameters);
    return $result;
}
 
// Twitterテキスト置換
function twitterTextReplace($text) {
    $text = preg_replace("/(https?:\/\/)(?!srash.info)([-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/", "<a href=\"\\1\\2\" target=\"_blank\" rel=\"nofollow\">\\1\\2</a>", $text);
    $text = preg_replace("/(https?:\/\/srash.info)([-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/", "<a href=\"\\2\">\\1\\2</a>", $text);
    $text = preg_replace("/(?<![0-9a-zA-Z'\"#@=:;])@([0-9a-zA-Z_]{1,15})/u", "@<a href=\"http://twitter.com/\\1\">\\1</a>", $text);
    $text = preg_replace("/(?<![0-9a-zA-Z'\"#@=:;])#(\w*[a-zA-Z_])/u", "<a href=\"http://search.twitter.com/search?q=%23\\1\">#\\1</a>", $text);
    return $text;
}

お使いのテーマのfunctions.phpに、上記をコピペ。$consumer_keyなどの「xxxxxxxxxx」となっている箇所は、ご自分のtwitterアカウントでアプリケーション登録して取得してください。

あらかじめabraham/twitteroauthをダウンロードして「twitteroauth」フォルダをテーマフォルダに入れておきます。上記コードでは、テーマフォルダ直下にtwitteroauthフォルダを置いています。

ツイートテキストのURLやハッシュタグなどの置換は、こちらのページを参考にさせていただきました。日本語のハッシュタグに対応してないけど許して。

使用例:ハッシュタグで検索

<?php
    $ur = "https://api.twitter.com/1.1/search/tweets.json";
    $pa = array("q" => "#wordpress", "count" => "5", "lang" => "ja");
    $result = getTwitterApi($ur, $pa);
    foreach($result->statuses as $status){
        $text = twitterTextReplace($status->text);
        echo '<li>';
        echo '<p class="twitter_icon"><a href="http://twitter.com/'.$status->user->screen_name.'" target="_blank"><img src="'.$status->user->profile_image_url.'" alt="icon" width="46" height="46" /></a></p>';
        echo '<div class="twitter_tweet"><p><span class="twitter_content">'.$text.'</span><span class="twitter_date">'.$status->created_at.'</span></p></div>';
        echo "</li>\n";
    }
?>

たとえば、上記のコードをテンプレートファイル内にコピペすれば、#wordpressというハッシュタグのついたツイートを5件取得してリストタグで表示します。

$urにAPIのurlを。$paにパラメータを入れます。詳しくはREST API v1.1 Resourcesを見てください。jsonの構造などもそちらに掲載されています。

感想

他のサイトでも、abraham/twitteroauthを使ったコードのサンプルがいくつかありましたが、最新版ではなかったのか、関数名などが変わっていて上手くいかなかったので、結局、公式ドキュメントをエキサイト翻訳することになりました。イエス、アイ、キャン。

英検3級ですけど、何か?