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のカスタマイズ依頼を請け負っています。実現したい機能・要望がある方はぜひ下記ページよりご相談ください。