WordPressでアメブロ特定テーマの記事を自動で記事化する機能を作ってみよう③【完結編】

こんにちは、webエンジニアのゾノ( @ozonosho )です。
さて、昨日のブログに続いて今回もWordPressでアメブロ特定テーマの記事を自動で記事化する機能に挑戦していこうと思います。
おさらいしておくと、作りたい機能の仕様は下記のとおりです。
- 仕様
-
- アメブロで特定のテーマ(=ブログカテゴリー)で書いた記事をWordPressで管理している別サイトに転送して記事化する
- 転送は毎日深夜0時に自動でおこなう(前日分の記事を転送)
- 重複ペナルティーを避けるために転送先の記事には「nofollow」「noindex」を加える
昨日はアメブロで書かれた記事のうち指定したテーマの記事だけ取り出してWordPress側に表示することに成功しました。
その後コーディングを進めて、ついに、この機能を完成させることができました^^
完成したコードがこちら!
WordPressでアメブロ特定テーマの記事を自動で記事化する機能
「アメブロID」と「テーマID」の2つの情報を渡したら前日分のアメブロ該当記事をWordPressで記事化してくれる関数を用意しました。
下記のコードをfunctions.phpに追加すればどなたでも利用できます。
//アメブロRSSから自動記事作成
function create_post_by_ameblo_feed($ameblo_id, $theme_id, $count=5) {
//RSS配信URL
$url = 'http://rssblog.ameba.jp/' . $ameblo_id . '/rss20.xml';
//RSSデータを取得
$feed = fetch_feed($url);
//RSSデータ取得時にエラーが出たら処理終了
if(is_wp_error($feed)) exit;
//一応取得件数の最大値を定義しておく
$maxitems = $feed->get_item_quantity($count);
//指定した件数のRSSデータを格納
$rss_items = $feed->get_items(0, $maxitems);
//今回は利用しないが↓でブログのメインタイトルやURLを取得できる
$title = $feed->get_title();
$site_url = $feed->get_permalink();
//標準時間セット
date_default_timezone_set('Asia/Tokyo');
//昨日の日付を変数に格納
$yesterday = date('Y-m-d', strtotime('-1 day'));
//RSSデータの中身を1つずつ取り出す
foreach($rss_items as $item) {
//昨日更新された記事かどうかを判別(違う場合は次のループへ)
if($item->get_date('Y-m-d') != $yesterday) continue;
//記事のURLからエントリーID情報を抜き出す
preg_match('/entry-(\d+).html/', esc_url($item->get_permalink()), $match);
//エントリーID情報が入っていなければ次のループへ
if(count($match) < 2) continue;
//見つかったエントリーID情報を変数に格納
$entry_id = $match[1];
//該当記事のアメブロページのHTMLソースをすべて抜き出す
$html = file_get_contents(esc_url($item->get_permalink()));
//現ループの記事のentryIDとthemeNameの間に入っているHTMLソースを抜き出すための正規表現パターン
$pattern = '/entry_id":' . $entry_id . '(.*?)theme_name/';
//↑の条件でHTMLソースを抜き出す
if(preg_match($pattern, $html, $result)) {
//現ループの記事が指定テーマだった場合
if(strpos($result[0], $theme_id) !== false) {
//投稿データ用の配列を作成
$my_post = array(
'post_type' => 'post', //投稿タイプ
'post_title' => esc_html($item->get_title()), //記事タイトル
'post_content' => $item->get_content(), //記事本文
'post_date' => $yesterday, //投稿日付
'post_status' => 'publish', //公開ステータス
'post_author' => 1, //著者のユーザーID
'post_category' => 1, //関連付けるカテゴリーID
//'tags_input' => array('タグ') //関連付けるタグスラッグ
);
//投稿データを登録
if(wp_insert_post($my_post)) {
//投稿データの登録に成功した場合、カスタムフィールドの値もあれば保存する
//update_post_meta($insert_id, 'key', 'value');
} else {
continue;
}
}
}
}
}
転送した記事をWordPress側でどの「著者」「カテゴリー」に設定するかはそれぞれだと思いますので、ご自身の環境に合わせて書き換えて使ってください。
補足①「nofollow」「noindex」はタグで対応しました
記事データ自体にメタタグの設定を持たせることはできないので、かわりに任意のタグをつけて、そのタグがついている記事には「nofollow」「noindex」が入るようにしました。
補足②毎日深夜0時の自動実行はwp-cronで設定しました
関数さえ作ってしまえば、あとはこっちのもの。最終的にはcronに登録して、毎日決まった時間に処理を実行させるようにしました。
補足③その他
僕の運営するサイト『未来地図』では、8人のスタッフが普段アメブロでブログを書いているので、今回の機能について「複数のブログに対応しないといけない」なんて事情がありました。
そのため、実際の実装は、
- 各スタッフのプロフィールページで「アメブロID」「テーマID」を登録できるようにして、毎日深夜0時になったら全スタッフの登録データを元にアメブロから記事を転送してWordPress側で記事化させる
という仕様にしました。
・・・メチャ便利!
おわりに
以上、全3回にわたってWordPressでアメブロ特定テーマの記事を自動で記事化する機能に挑戦してみました(*´`)
当サイトではWordPressのカスタマイズ依頼を請け負っています。実現したい機能・要望がある方はぜひ下記ページよりご相談ください。









