はてなキーワードから新着キーワードを取得する
MeCabは辞書ファイル(品詞などの情報付きの単語リスト)を新たに作成してインストールすることで形態素解析のレベルを変えられることを冒頭で説明しました。サンプルでは、はてなキーワードから新着キーワードを取得してMeCabの辞書ファイルを作成します。
はてなキーワードの新着キーワードは以下のURLに一覧で表示されています。
このページのRSSは以下のURLになります。
クエリに「of=」でオフセットを指定することでページングできます。現在は20件でページングしています。この規則性に従ってはてなキーワードRSSをクロールして、新着キーワードを取得して以下のテーブルへ保存するPHPを作成します。
CREATE TABLE IF NOT EXISTS `hatena_keyword` ( `id` int(11) NOT NULL auto_increment COMMENT 'ID', `title` varchar(128) default NULL COMMENT 'キーワード', `link` varchar(256) default NULL COMMENT 'URL', `description` text COMMENT 'キーワード説明', `created_date` date default NULL COMMENT '作成年月日', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1
DBへ保存する際には前回と同様にPDOを使用し、DBサーバへの接続情報はconfig.phpに記述しています。
$MYSQL_HOST = 'MySQLサーバーのアドレス'; $MYSQL_USER = 'MySQLユーザー名'; $MYSQL_PASSWORD = 'MySQLユーザーのパスワード'; $MYSQL_DATABASE = 'データベース名'; $dbType = "mysql";
RSSの解析はRSSのURLを指定してsimplexml_load_file関数を使用します。
$pdo = new PDO("{$dbType}:host={$MYSQL_HOST}; dbname={$MYSQL_DATABASE}","{$MYSQL_USER}", "{$MYSQL_PASSWORD}");
// 一回の実行で10ページ分の新着キーワードを取得
for($i=0;$i<10;$i++){
// 1ページあたり20件表示なので20件でページング
$j = $i * 20;
$rss_url = "http://d.hatena.ne.jp/keywordlist?s=created&r=1&mode=rss&of={$j}";
$rss = simplexml_load_file($rss_url);
foreach ($rss->item as $item) {
$stmt = $pdo->prepare("INSERT INTO hatena_keyword (title, link, description, created_date) VALUES(:TITLE, :LINK, :DESCRIPTION, :DATE)");
$stmt->bindValue(':TITLE', $item->title);
$stmt->bindValue(':LINK', $item->link);
$stmt->bindValue(':DESCRIPTION', $item->description);
$stmt->bindValue(':DATE', date('Y-m-d H:i:s'));
$stmt->execute();
}
}
実行上の注意点としては、あまり長い間はてなRSSをクロールしていると運営上の障害ともなりかねませんので、適度な回数でインターバルをおいて実行してください。スクリプトを定期的に自動で実行させる方法にはLinuxではcron、Windowsではタスクスケジューラといった方法があります。細かな設定は本記事の趣旨に外れますので割愛します。興味のある方は、以下のリンク先に設定方法の例が掲載されているので試してみてください。
