アシアルでtwitter始めます(後編)
こんにちは、岡本です。
この間、休みを取って河口湖に行ってまいりました。
とりあえず河口湖を自転車で一周してみましたが、
素晴らしい景色を眺めながらの運動は気分がいいですね。
本日は製作を先延ばしにしていた、
ブログ記事のtwitter投稿プログラムの続きを作りたいと思います
【前回までの復習】
●ブログ記事の取得
ブログは大抵"RSS"という形で記事の概要を配信しています。
RSSはプログラムにとって利用しやすい書式になっているため、
PHPの関数を使えば簡単に利用することができます。
例えば、simplexml_load_file()という関数にRSSが配信されているURLを渡せば、
僅か一行でRSS情報を利用するためのオブジェクトを生成することができます。
前回はこの機能を使って、ブログ記事の概要を取得しました。
●記事の保存
取得した記事を即twitterに投稿するのが一番簡単ですが、
そうすると、前に投稿した記事もお構いなしに送信してしまいます。
なので、いったん記事を記録して未投稿のものだけ投稿します。
記事の記録を行うために、
今回はSQLiteというデータベースを利用します。
SQLiteはパスワード認証や厳密な型の定義など排した、
超お手軽なデータベースシステムです。
sqlite rss.db
上記のようにコマンドライン上で、
コマンドとファイル名を指定するだけで、
データベースファイルを作成することができます。
※尚、SQLiteにはバージョン2とバージョン3があります。
PHPのSQLite関数が標準で直接利用できるのはバージョン2なので、
エラーが出たらバージョンを確認してください。
テーブルの作り方やPHPのソースは、
前回の記事をご参照ください。
アシアルでtwitter始めます(前編)
【今日の課題】
●twitterに記事を投稿する
twitterは機能の殆どをAPIと言う形で提供しています。
APIはtwitterのサイトで紹介されている、
PHP用のライブラリを使えば簡単に利用できます。
ただ、APIを利用するためには"認証"を行う必要があります。
"認証"の仕組みは結構複雑です。
しかし、自分のアカウントに対しての認証であれば、
管理画面から認証用のキーをコピーするだけで簡単に行えます。
まずは認証キーを取得しましょう。
twitterにログインした状態で
http://dev.twitter.com/
にアクセスし「Register an app」からアプリの登録を行い、
管理画面から認証キーを取得します。
次にライブラリを取得します。
https://github.com/abraham/twitteroauth
上記のサイトからライブラリをダウンロードして、設置します。
今回は"lib"ディレクトリを作成して、
その中に全ての中身を展開してしまいます。
blogbot/
|-- db2tweet.php
|-- get_rss.php
|-- lib
| |-- DOCUMENTATION
| |-- LICENSE
| |-- README
| |-- callback.php
| |-- clearsessions.php
| |-- config.php
| |-- connect.php
| |-- html.inc
| |-- images
| | |-- darker.png
| | `-- lighter.png
| |-- index.php
| |-- redirect.php
| |-- test.php
| `-- twitteroauth
| |-- OAuth.php
| `-- twitteroauth.php
`-- rss.db
※公開領域に設置するプログラムは、
ライブラリやdbファイルが外部から閲覧できないように注意しましょう。
丁度config.phpというファイルがあります。
折角なので、ここに認証キーの情報を記載してしまいましょう。
<?php
$twitter_config = array(
'consumer_key' => '*********************',
'consumer_secret' => '********************************',
'access_token' => '*********************',
'access_token_secret' => '***************************************'
);
定数じゃなくて配列を使うのは私の趣味です、はい。
最後に、投稿用のプログラムを設置します。
<?php
//tweeter用ライブラリも読み込む
include_once('lib/twitteroauth/twitteroauth.php');
//twitterと接続するための設定を読み込む
include_once('lib/config.php');
$twitterOAuth = new TwitterOAuth(
$twitter_config['consumer_key'],
$twitter_config['consumer_secret'],
$twitter_config['access_token'],
$twitter_config['access_token_secret']
);
$link = sqlite_open('rss.db');
// 未投稿の記事を取得する
$query = "SELECT * FROM rss WHERE tweeted_flag = 0 ";
$result = sqlite_unbuffered_query($link, $query);
$rss = sqlite_fetch_all($result);
// 未投稿の記事があれば投稿する
if (count($rss)) {
foreach ($rss as $record)
{
$tweet = $record['title']." ".$record['link'];
$twitterOAuth->OAuthRequest(
"https://twitter.com/statuses/update.json",
"POST",
array(
"status"=> $tweet
)
);
// 投稿済みフラグを立てる
$escaped_link = sqlite_escape_string($record['link']);
$query = "UPDATE rss SET tweeted_flag = 1 WHERE link = '$escaped_link' " ;
$result = sqlite_query($link, $query);
}
}
コマンドライン上から実行し、記事が投稿できることを確認しました。
このプログラムが自動的に実行されるよう、サーバの設定をすれば完成です。
しかし、何処のサーバに設置しようかな、考えていなかった。