php wordpress

WordPressでスクレイピングして外部サイトのコンテンツを取得する方法

WordPressサイトを使用していて、外部のサイトのデータを抽出して、配信したい時があります。RSSが配信されているようなサイトだとsimplexml_load_fileで簡単に取得し整形することができますが、ここでが、RSSが配信されていないサイトのデータを取得する方法を紹介します。

外部サイトからRSSを使用せず、スクレイピングでデータを抜き取る

Simple HTML DOM Parserライブラリを採用しよう

RSSが配信されていれば、コンテンツの抽出は簡単ですが、そうではない時は大変です。方法の一つに、file_get_contens関数を使用して、サイトのHTMLを全部取得した後に、正規表現を駆使して抜き出す方法もありますが、それほど自由度が高くないです。

しかし、Simple HTML DOM Parserというライブラリを使うことで、ものすごく簡単に好きなページの好きな部分を取得することができます。

例:ライブドアのブログランキング一覧ページの記事を取得

たとえば、ライブドアのブログランキング一覧ページの記事部分のみを取得した場合、以下のようになります。

デモはこちら
<?php
find('#rankingBlog ul li div.txt,#rankingBlog ul li div.head') as $elem){ echo $elem; } ?>

JQueryを使用する感覚で、全ての特定のタグないのHTMLを全て出力して、それをechoで出力しているだけです。この場合では、パーツを丸ごと取り出しましたが、特定のタグの文字列だけ取り出すなんてことも可能です。

wp_insert_post関数を使用して、データベースに保管する。

データの取得が完了したら、次はwp_insert_post関数を使用して、管理画面を通さずに直せずデーターベスに記事を登録させれば外部サイトの記事を自分のサイトに組み込むことができます。そして、WP_CRONを使えば、それを定期的に行うことも可能になり、キュレーションレベルなら自動化サイトを作れますね。

WordPressで、「wp_insert_post関数」を使用して記事を作成する方法