SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

目的に応じて適材適所で使うPHPライブラリ

文章の中のはてなキーワードをハイライトさせる

目的に応じて適材適所で使うPHPライブラリ(5)

はてなキーワードから新着キーワードを取得する

 MeCabは辞書ファイル(品詞などの情報付きの単語リスト)を新たに作成してインストールすることで形態素解析のレベルを変えられることを冒頭で説明しました。サンプルでは、はてなキーワードから新着キーワードを取得してMeCabの辞書ファイルを作成します。

 はてなキーワードの新着キーワードは以下のURLに一覧で表示されています。

 このページのRSSは以下のURLになります。

 クエリに「of=」でオフセットを指定することでページングできます。現在は20件でページングしています。この規則性に従ってはてなキーワードRSSをクロールして、新着キーワードを取得して以下のテーブルへ保存するPHPを作成します。

新着キーワード保存テーブル作成SQL文
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に記述しています。

config.php
$MYSQL_HOST = 'MySQLサーバーのアドレス';
$MYSQL_USER = 'MySQLユーザー名';
$MYSQL_PASSWORD = 'MySQLユーザーのパスワード';
$MYSQL_DATABASE = 'データベース名';
$dbType = "mysql";

 RSSの解析はRSSのURLを指定してsimplexml_load_file関数を使用します。

keyword_get.php(抜粋)
$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ではタスクスケジューラといった方法があります。細かな設定は本記事の趣旨に外れますので割愛します。興味のある方は、以下のリンク先に設定方法の例が掲載されているので試してみてください。

cron

タスクスケジューラ

次のページ
新着キーワードの辞書ファイル作成とMeCab辞書の再インストール

この記事は参考になりましたか?

目的に応じて適材適所で使うPHPライブラリ連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 片渕 彼富(カタフチ カノトミ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4991 2010/03/25 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー