自分宛のツイートのJSONデータをRSSフィードに変換する(GAEを使う)
Thunderbirdでツイートを見るようにしてから、自分宛のツイート(mentions)はツイッター公式のメール通知を利用していた。しかし、そのメール通知は機能しないことがあるようである。私宛の返信に気付かないまま放置してしまった(古いツイートなので私から返信しませんがご容赦くださいm(_ _)m)。ツイッター公式のメール通知が信用できないのなら、自分で作るしかない。しかし、私にメール通知を作る能力は無い。そこで、【Twitterで取得したユーザーのJSONデータをRSSフィードに変換する(GAEを使う)】と同様に、RSSフィードを作ることにした。
自分宛のツイートを取得するためにURLなどの情報は【GET statuses/mentions_timeline | Twitter Developers】に載っている。JSONデータを確認したら、【Twitterで取得したユーザーのJSONデータをRSSフィードに変換する(GAEを使う)】で使ったユーザータイムラインの情報(参照)と同じだった。それならば、【Twitterで取得したユーザーのJSONデータをRSSフィードに変換する(GAEを使う)】のスクリプトをほとんどそのまま使える。あっさりと作れた。
phpファイルの記載は次のとおり。
<?php
header("Cache-Control: max-age=0");
$listcount = "20";
$name = "自分のアカウント(例:self7777)";
require_once("twitteroauth-master/twitteroauth/twitteroauth.php");
date_default_timezone_set('Asia/Tokyo');
$consumerKey = "xxxxxxxxxxxxxxxxxxxxxx";
$consumerSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$accessToken = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$accessTokenSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$connection = new TwitterOAuth($consumerKey,$consumerSecret,$accessToken,$accessTokenSecret);
$request = $connection->OAuthRequest('https://api.twitter.com/1.1/statuses/mentions_timeline.json', "GET", array("include_entities"=>"true", "count"=>$listcount));
$results = json_decode($request);
//var_dump($results);
echo '<?xml version="1.0" encoding="utf-8"?>' . "\n";
echo '<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">' . "\n";
echo '<channel>'. "\n";
echo '<atom:link href="http://アプリケーション名.appspot.com/' . '" rel="' . $name . '" type="application/rss+xml" />' . "\n";
echo '<title>RSS (to @' . $name . ")</title>\n";
echo '<link>' . 'https://twitter.com/' . $name . '</link>' . "\n";
echo '<description>ツイッター公式のメール通知がちゃんと機能しないので作成。</description>' . "\n";
echo '<lastBuildDate>';
foreach ($results as $key => $val) {
echo date('D, d M Y H:i:s +0900', strtotime($results[$key]->created_at));
break;
}
echo '</lastBuildDate>' . "\n";
echo '<language>ja</language>' . "\n\n";
foreach ($results as $key => $val) {
echo '<item>' . "\n";
echo '<link>' . 'https://twitter.com/' . $name . '/status/' . $results[$key]->id_str . '</link>' . "\n";
echo '<guid isPermaLink="true">' . 'https://twitter.com/' . $name . '/status/' . $results[$key]->id_str . '</guid>' . "\n";
echo '<pubDate>' . date('D, d M Y H:i:s +0900', strtotime($results[$key]->created_at)) . '</pubDate>' . "\n";
echo '<title>' . "\n" . htmlspecialchars($results[$key]->text) . "\n" . '</title>' . "\n";
echo '<description><![CDATA[' . "\n";
echo $results[$key]->text;
echo "\n" . ']]></description>' . "\n" . '</item>' . "\n";
}
echo '</channel>' . "\n" . '</rss>' . "\n";
?>
「$listcount = "20";」の所に取得したいツイートの数を指定する。「$name = "自分のアカウント(例:self7777)";」の所は自分のアカウントを記入する。私の場合はself7777。consumerKey、consumerSecret、accessToken、accessTokenSecret は全て記入する。
app.yaml は次のように書いておいた。
application: アプリケーション名
version: 1
runtime: php55
api_version: 1
threadsafe: yes
handlers:
- url: /favicon\.ico
static_files: favicon.ico
upload: favicon\.ico
- url: .*
script: アプリケーション名.php
私はメールを受信しているThunderbirdをRSSリーダーとして利用しているので、メールが届いてもRSSフィードで届いても確認するタイミングは同じで、テキスト形式で利用しているメールが届くよりも返信ツイートのウェブページを表示してくれるRSSフィードの方が都合が良い。携帯電話でメール通知を受け取りたくなったらメール通知のアプリを作るかもしれないが、今はこれで十分である。同じような考え方の方は、この記事を参考にしてほしい。
コメント 0