PHPでDOMとかWEBスクレイプングとかいう動作をして、RSSを設けてないサイトの更新情報を取得。それを、Wordpressに自動投稿しようという爺であります。
割りと時間がかかるDOM
21:21:48 -> DB接続・サイト基本データ取得開始
21:21:48 -> DB切断・サイト基本データ取得終了
21:21:48 -> サイト代表頁 個別記事リンク用DOM開始
21:21:48 -> サイト代表頁 個別記事リンク用DOM終了
21:21:48 -> 過去、現在の差分チェック 開始
21:21:48 -> 過去、現在の差分チェック 終了
21:21:48 -> 差分URLにアクセスしDOM、記事情報取得 開始
21:22:01 -> 差分URLにアクセスしDOM、記事情報取得 終了
21:22:01 -> Wordpress DB接続・新記事投稿 開始
21:22:03 -> Wordpress DB接続・新記事投稿 終了
※「差分URL」は、代表頁からリンクされた同一サイト内の個別ページ(今回は20個超)
とあるひとつのサイトにアクセスし20個を超える新記事の情報を取得した結果を、Wordpressに自動投稿するのに、15秒かかっています。とりわけ、「差分URLにアクセスしDOM、記事情報取得」の開始から終了まで13秒かかっています。新規記事になるURLにアクセスし、タイトルとか対象タグの部分を抜き出す作業の時間です。
サイト数や記事数が増えると30秒ルールに引っかかりそうです。これを回避するのにどうするか、個別サイト複数頁、ならびに複数サイト一連作業など、時間は記事数・サイト数に比例して増えそうであります。
タイムスタンプ
Wordpressへの投稿は、MySQLのデータベースに直接書き込みしました。タイムスタンプがずれていました。
PHPが動き始める最初に、タイムゾーンを設定してやることが大切かと…。
date_default_timezone_set('Asia/Tokyo');
wp_postsテーブルのguidカラムに書き込み・更新追記する
Wordpressの記事として、タイトル、本文、時間などはあまり苦労なく書き込めました。パーマリンクを表す「guid」カラムの設定にちょっと戸惑いました。
一度、たとえば著者(post_authorカラム)などを書き込むと、自動増番し、重複なしのindexとなってくれる「ID」カラムに数字が入ります。この数字が記事固有番号になるので、それを変数(たとえば$num)「http://localhost/wp/?p=」をアタマにつけ、データベース更新(UPDATE)として 「"……WHERE ID=".$num」というような形で、書き直す対象を特定し、「guid」カラムのほか必要なカラムを更新書き込みする、というような流れになるみたいです。これもなんとかできました。