こんにちは、岡本雄樹です。
突然ですが、アシアルでtwitterを始めようという話が持ち上がっております。
今までも、何回かそんな話があったのですが、
今回はホンキのようです。
と、ここまでは他人事だったのですが、
つい一昨日、アシアルのアピール担当に任命されてしまい、
他人事ではなくなってしまいました!
「じゃぁ、試しにやりましょう!」
とは言ったものの、お盆休みも取れない忙しい身で、
本当にやれるのだろうか・・・
「そうだ!ボットを作って更新させよう。」
ボットを作れば、ブログのネタにもできるし一石二鳥。
そんなわけで、ボット作成一人プロジェクトが発足しました。
ちょっとした夏休みの宿題感覚でお付き合いいただければと思います。
「夏休みなんて無いけど!」
■ボットの仕様
・アシアルブログ等の更新情報を元に、ツィートを行う。
更新情報はRSS(RSS2.0)を利用する。
・ネタに使うRSSは複数登録可能とする
・更新の確認頻度は1分で検討(負荷を見て調整)
・管理画面は設けない
■詳細設計
・設置のしやすさをを考慮し、
twitterAPI用のライブラリ以外は極力使わない
・フレームワークも使わない。
・データベースはSQLiteを検討
CREATE TABLE rss
(
title TEXT NOT NULL ,
link TEXT NOT NULL PRIMARY KEY,
tweeted_flag INTEGER NOT NULL DEFAULT 0
);
■プログラムのプロトタイプ
プロトタイプなのでエラー処理等は付属していません。
コピペされる方は自己責任でお願いいたします。
RSSを取得してSQLiteデータベースに格納する
(プログラムA)
<?php
// RSSフィードの一覧 テキストファイルかDBに持たせたい。
$rss_paths[] = "http://blog.asial.co.jp/rss/rss2.0.php";
$rss_paths[] = "http://www.asial.co.jp/oshirase_feed.php";
$rss_paths[] = "http://www.asial.co.jp/pressrelease/feed.php";
$link = sqlite_open('rss.db');
// RSSフィードの本数だけループ回す
foreach ($rss_paths as $rss_path) {
// simplexml_load_file関数は外部サーバのコンテンツも取得できる。
$feed = simplexml_load_file($rss_path);
// 生成したfeedオブジェクトを元にさらにループ処理して記事の概要取得
foreach ($feed->channel->item as $item) {
// とりあえず、タイトルとURLをDBに格納
$escaped_title = sqlite_escape_string($item->title);
$escaped_link = sqlite_escape_string($item->link);
$query = "INSERT INTO rss (title, link, tweeted_flag) VALUES ('$escaped_title', '$escaped_link', 0)" ;
$result = sqlite_query($link, $query);
}
}
データベースから未投稿の情報を取得する
(プログラムB)
<?php
$link = sqlite_open('rss.db');
// twitterに投稿していない記事のみ取得
$query = "SELECT * FROM rss WHERE tweeted_flag = 0 ";
$result = sqlite_unbuffered_query($link, $query);
$rss = sqlite_fetch_all($result);
// とりあえずDBから値を取得できることを確認
var_dump($rss);
とりあえず、RSSを取得して
データベースに格納するところまではできました。
次回はプログラムのりファクタリングと、
twitterへの投稿を行いたいと思います。
また、twitterのアカウントも仮で取得しました。
http://twitter.com/asialnews
「アシアルニュース」
お気軽にフォローくださいませ。
(ただし、フォロー返しやコメント返しは行わない方向で検討中)
尚、弊社のPHPスクールでも、
WebAPI講座でtwitterへの投稿演習を行っております。
ご興味のある方は、是非お申込み下さいませ。
アシアル・アピール担当兼スクール担当兼エンジニアの、
岡本からのお願いでした。