pagetaka

写真、PC、ネット、岡山、旅の話題をお届けします

PHP:DOMしてWPに自動投稿。ひとつのサイトを対象に自サバではできた。

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');

↑最初の頃に使うPHPスクリプトの先頭部分でもこれを置いてやるだけでOKみたいです。

wp_postsテーブルのguidカラムに書き込み・更新追記する

Wordpressの記事として、タイトル、本文、時間などはあまり苦労なく書き込めました。パーマリンクを表す「guid」カラムの設定にちょっと戸惑いました。
一度、たとえば著者(post_authorカラム)などを書き込むと、自動増番し、重複なしのindexとなってくれる「ID」カラムに数字が入ります。この数字が記事固有番号になるので、それを変数(たとえば$num)「http://localhost/wp/?p=」をアタマにつけ、データベース更新(UPDATE)として 「"……WHERE ID=".$num」というような形で、書き直す対象を特定し、「guid」カラムのほか必要なカラムを更新書き込みする、というような流れになるみたいです。これもなんとかできました。

複数サイトだとどうしたものか

サイトのサーバーの新着記事の数、サーバーの混雑具合など、エラー処理を含むなにがしかの作業はこれからです。

現在成功しているのは自サバでのこと。これをレンタルサーバで実現できるかどうか…。まだ、道のりは長そうです…。

DB更新などまだ残りの作業も結構ある

本日できたのは、とりあえず、Wordpressへ自動投稿できるところまでです。
MySQLを使って保存してある記事にした個別ページのURL等を、新しい個別記事のURLを新規に書き込めばよいのか、はたまた、一定の日数が経過したら古い日付のデータは消すとか、考えないといけないことは、ありそうです。
さて-----(溜息)。