前回、wordpressのインストールを終えて、いよいよPHPのコーディングに取り掛かったその続きである。作るのは、RSSクロール用のPHPだ。どのようなものを作るのかを簡単にまとめると次のようになる。cronによるキックで定期実行する。指定したアドレスのRSSを収集しDBへ格納する。RSS取得にはSimplePieを使用する。RSSから取得した情報は、1記事リンクにつき1レコードをWordPressの投稿として格納する。投稿した記事リンクは、重複して投稿しない。作成するPHPはWordpressの変数をインクルードし、共通関数functions.phpを参照する。cronからのキックは前回検討した通り、wp-cronではなく、Webサーバのcronを使う事にした。RSSの取得にはSimplePieを使用する。WordPressには最初からSimplePieが含まれている。Webサーバのドキュメントルートからの相対パスで、”./wp-includes/class-simplepie.php”があれば、それがSimplePieさんである。使いたいところでこいつをインクルードしてやるとSimplePieによるRSS取得機能が使えるようになる。今回はその処理をfunctions.phpに記述する。取得したRSSはMysqlのDataBaseに入れる。することで検索とか、何やらかんやらがしやすく、何かと都合がいい。どのようにDBに入れるかと言えば、やはり折角WordPressを使っているのだから、既存の仕組みを利用させてもらう。今回は、WordpressのBlog記事投稿として、リンクに必要な記事タイトル、記事リンク、サイトタイトル、サイトリンクを格納することにした。本来ならば、美味しい食事の写真や、日々の日記などをつづるべき場所を、単なる情報格納場所として使ってしまうのは心苦しくもあるのだが、Blogをアンテナサイトに改造すると言うミッションの為である。実際どのようなコードに成ったかと言えばこんな感じである。適用したテーマのfunctions.phpにだいたいこんな感じで書く。注意してほしいのは、このままコピペしても動かないだろうと言う事だ。実際動かしている物からは少し変えている。大体こんなことをしているというイメージを掴んでいただければと思う。};}endif;ちょっと簡単に解説する。RSSwoPostという関数を作っている。此の関数は引数に、RSSのURL、取得する記事の件数、取得した記事情報のカテゴリ番号、の3つを取る。取得した記事情報のカテゴリ番号とは、WordPressでは、投稿した記事をカテゴリー分けする事が出来る。管理画面から投稿へと進んで、好きなカテゴリーを作成する。取得した記事をそのカテゴリーと紐づける事で、その記事がなんなのかを整理する事が出来るのだ。時事ネタなのか、芸能ネタなのか、といった具合である。その機能をそっくり利用してやろうと言うわけだ。前述のSimplePieのPHPをインクルードした上で、$feedと言うオブジェクトを作成し、必要なパラメータを渡してやる。そこから、欲しい情報を引っ張り出してやる。ここで、本来本文が入る所に、「記事のURL-::-記事タイトル-::-サイトのURL-::-サイトのタイトル-::-記事の投稿日時」を格納している。この状態で他のテンプレートのPHPをいじらずに自分のサイトにアクセスすると、「記事のURL-::-記事タイトル-::-サイトのURL-::-サイトのタイトル-::-記事の投稿日時」がずらっと並んだ病的なブログが出来上がっている。後にこれを整形して、リンクの形で表示するPHPと、テーマのデフォルトのPHPを置き換える。それはまだ先の話である。引っ張り出した情報を、$postという配列に格納している。$postには、WordPressにpostする際に必要な情報も附け加る。先ほどのカテゴリ番号もここで付加してやると、御望みのカテゴリーに成ると言うわけだ。その後、取ってきた情報がすでにDBにある場合、スキップする。これは、直接WordPressの中身をmysqlコマンドとSQLで覗いている。件名がPRで始まる物は広告なので除外する。wp_insert_post()と言うwordpressの関数を使って取得した情報を投稿している。これで、RSSwoPostと言う関数が、WordPress世界で呼び出せるようになった。これを呼び出すPHPをcronで定期実行すればいい。PHPはこんな感じで。?><h1>クロール用です。</h1>見ての通り、RSSwoPOST関数に引数を渡しているだけだ。注意するべきは一行目、WordPressの環境をインクルードしている。これで自分が勝手に作ったこのPHPもWordPress世界の一員としてfunctions.phpに記述されている関数を堂々と呼び出せるのだ。URLは配列の形で複数指定する事が出来るが、造った関数の仕様上、カテゴリは複数指定できないのでカテゴリごとに関数を呼び出している。この例では、カテゴリ3番と4番へ登録するURLを別けている。htmlの形にしているのは、テストでブラウザからこのPHPにアクセスした時に状況を分かりやすくするためだ。此のPHPをwordpressをインストールしたディレクトリに配置し、Webブラウザからアクセスすれば、DBへ取得情報がたまっているはずだ。false);の”false”を”true”に変えると、PHPデバッグ情報がアクセスしたWebブラウザに出るようになる。バグが出ている場合はこれでデバッグが出来るが、”true”にしたままだと、インストールしているWordPressのプラグインによっては、プラグインが出すワーニングで画面遷移が阻害されてしまい、管理画面からの各ファイル編集やりにくくなる事がある。セキュリティー上、デバッグ情報を不特定多数に公開してしまうのは良くないし、かっこ悪くもある。PHPがCGI版で動いている場合には”.user.ini”ファイルを配置するか、モジュール版で動いている場合には、apacheなら”.htaccess”ファイルを配置するなどして、ログファイルにPHPのエラーを吐かせた方がスマートだろう。この辺の詳細は、他のサイトでも詳しく説明されているので割愛する。cronへは、作ったPHPをwgetするコマンドか、またはそのような記述のshellを登録するといいだろう。頻繁にアクセスするといろんな方面に負担をかけるので、適当な間隔にすると良いだろう。これで、RSSの取得ができた。このままでは、意味不明な文字列が表示されるだけの不気味なサイトとなってしまうので、あとはWrodPress見栄えを整えていくのだが、記事が長くなってしまったので、それはまた次回委しく述べる事にしよう。Institute」をリリースいたしました。Instituteについて」をご参照ください。Instituteをご購入ください。銀仁堂さらに、TwitterBotスクリプトも併せてどうぞ。例のAT-X510-28GTXのスタックで遊ぶYAMAHAルーターNVR700Wと小型ONUがやってきた!翔んで西日本!例のAT-X510-28GTXで10GbEのファイル転送をしてみる。PM初めまして、こんにちは。WordPressでアンテナサイトの作り方を調べていて、いっぱい読ませて頂きました。すみません、もしよろしければRSSwoPost関数が正常に動くコードを記事にして頂けませんでしょうか。DBに突っ込むところまでは出来たのですが、PHPをキックする度、同じRSS記事が溜まっていってしまいます。SELECTしてる部分がなにか違うのかと思っております。