WEB

TwitterAPIを使ってMovable Type詳細ページに付加価値を与える方法

TwitterAPIを使ってMovable Type詳細ページに付加価値を与える方法

どうも、エンジニアのしょごです。
世に出ているメイド服は数多とありますが、ウチはロングメイド派(スカートがロングなやつ)です。

さて、ブログ運用をしていくうえで大切なことの1つに「シェアボタンの設置」があります。しかし、ただ単にボタンを設置しただけでは、カウント数が味気なく表示されるだけです。
そこで今回はTwitterAPIを使い、「記事をシェアしてくれたユーザの情報を取得し、表示させる方法」について紹介していきたいと思います。

どういう人がどんなコメントを残してくれてるか、視覚化されるだけでも面白いものですよ。
(※LIGブログでいえば、記事詳細の下のほうにある「コメント一覧」というものになります。)

TwitterAPIって?

簡単に言えば、他のWebサイトやアプリなどでTwitterの機能を使うことができる、というサービスです。
特定のユーザの情報を取得し、それを元に集計ができたり、本来であればTwitterにログインしておこなう操作などが外部サイトやアプリからも可能になったりします。

たとえば「Twitterアカウントをフォローしてくれたらプレゼントするよ!」的なキャンペーンをやろうと思えば、APIを使ってアカウント集計し、ランダムで当選操作をおこない、当選ユーザに対してDMを送る、というアプリをつくることができます。

(※もしそのようなご要望があればこちらからお問い合わせください。)

TwitterAPIを使う準備をする

TwitterAPIを使えるようにするためには、以下の手順を踏む必要があります。

1. アプリケーション登録をおこなう

APIを利用するにはまずTwitterAppsにてアプリケーション登録をする必要があります。(このときTwitterアカウントが必要になるので、あらかじめ取得しておいてください。)

My Applicationsから「Create a new App」ボタンをクリックし、アプリケーション登録画面に遷移します。そして、

  • Name:アプリケーション名
  • Description:アプリケーションの説明を入力
  • Website:設置するサイトのURL
  • Callback URL:Twitter認証成功後ユーザがリダイレクトされるURL(任意でOK)

を入力し、規約が表示されている部分の下の「Yes, I agree」にチェックをいれ「Create your Twitter Application」をクリックします。

2. アクセストークンを作成する

先ほどの操作でアプリケーション登録を完了後、APIを利用する際に必要な4つの情報を確認します。

  • consumerKey
  • consumerSecret
  • accessToken
  • accessTokenSecret

登録したアプリケーション画面で「Keys and Access Tokens」タブをクリックすると「consumerKey」と「consumerSecret」が表示されているので、値を確保します。

AccessTokenは画面中に表示されている「Create my access token」ボタンをクリックすることで作成できます。

3. Oauth認証のライブラリを利用する

APIを利用するにはOauth認証が必要になります。認証する部分をちまちま書いてもいいですが、今回はGitHubに公開されている「Oauthライブラリ」を拝借しましょう。

これで準備完了です。

特定の条件に合ったtweet情報を取得してみる

それでは実際に、記事を検索するAPIを利用し、特定の条件に合ったtweet情報を検索してみましょう。
たとえば特定のハッシュタグ「#ロングメイドは至高」を含んだtweetを探す場合

<?php
require_once("twitteroauth/twitteroauth.php");

define('CONSUMER_KEY', 'xxxxxxxxx'); // consumerKey
define('CONSUMER_SECRET', 'yyyyyyyyyy'); // consumerSecret
define('ACCESS_TOKEN', 'zzzzz-zzzzzzzzzzz'); // AccessToken
define('ACCESS_TOKEN_SECRET', 'wwwwwwwwwwwww'); // AccessTokenSecret

$twObj = new TwitterOAuth(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_TOKEN,ACCESS_TOKEN_SECRET);

/**
* 特定条件に合ったTweetを検索する。
*/
$req = $twObj->OAuthRequest('https://api.twitter.com/1.1/search/tweets.json','GET',
array(
'lang' => 'ja'
'q' => '%23%83%8d%83%93%83O%83%81%83C%83h%82%cd%8e%8a%8d%82',
'count' => '180'
));
$tweets = json_decode($req);

// 取得したデータを一覧表示
if(isset($tweets) && empty($tweets->errors)) {
$tweets = $tweets->statuses;
echo '<dl>';
foreach ($tweets as $val) {
echo '<dt>' .
date('Y-m-d H:i:s', strtotime($val->created_at)) .
' [' . $val->user->name . ']' . ' [' . $val->user->screen_name . ']' .
'</dt>';
echo '<dd>' . $val->text . '</dt>';
}
echo '</dl>';
} else {
echo 'つぶやきはありません。';
}

?>

といった形になります。

APIを取得するとjson形式で取得できるので、それを配列にデコードして各種使用します。

もし記事詳細をtweetした件数を確保したいのであれば、qの部分に記事の<MTEntryPermalink>を与えて検索すればOKです。
countには取得したい件数を付与することで、取得数を調整できます。

Twitter APIの注意点

このように便利なAPIですが、以下のような注意すべき点もあります。

  • 取得できる件数に限界がある(先ほど紹介したロジックでは最大180件)
  • データの遡りは1週間程度まで(それ以上古いデータは取得できない)
  • データ送信(DM送信など)を利用する場合はTwitterAppsのアプリ設定を調整する必要がある(AccessLevelを設定する必要がある)

このため、サイトに直接表示させる形ではなく、バッチ化して定期保存したものを表示させるようにしておく形がといいと思います。
また、DM送信をおこなう場合はAccessLevelの設定を変える必要がありますのでご注意ください。

まとめ

いかがでしたでしょうか。

APIによって利用制限が異なる部分がありますが、仕様に則って用いればいろいろな使い方ができますので、ぜひチャレンジしてみてください。

最後にお知らせ

今月の11月29日に「MTDDC(Movable Type Developers & Designers Conference)」というカンファレンスが開催されます。

こちらは、シックスアパート様をはじめとするMovableType開発に携わる技術者やデザイナーが集まるイベントで、LIGも協賛として、私個人もMTエンジニアとして参加させていただく予定です。

ぜひ他のMTエンジニアの皆様と情報交換などさせていただきたいと思っている次第ですので、MTに興味のある方やMTを扱っている方、私とMTの話などしてみたい方wなどいらっしゃいましたら、ふるってご参加ください。それでは!

この記事を書いた人

しょご
しょご バックエンドエンジニア 2014年入社
エンジニアのしょごです。昼はシステム開発に奮闘し、夜は女冒険者として剣とか魔法とか扱ったり、たまにバンドでライブとか、イベントでコスプレしたりしてます。