Bloggerに投稿された記事をAPIを使って取得してWordPressに登録する

Google社が提供している無料のブログページ作成サービス「Blogger」に投稿した記事を、APIを使ってWordPress側で取得してみようと思う。もちろん、すでに「Blogger」で自分のブログを開設しているのが大前提だ。その上で、まずBlogger用のAPIを利用するためのAPI KEYを入手する。

Google API KEY の取得方法

  1. Google Developers Consoleに、Bloggerでブログを開設したGoogleアカウントでログインする。
  2. Google Developers Consoleのサイドバーメニューから「APIs」を選択して、「Blogger API v3」を有効化する(図1 参照)。
    利用するAPIを有効化する
    <図1: 利用するAPIを有効化する>
  3. サイドバーメニューの「Credentials」を選択して、“Public API access”欄の「Create new Key」を押す(図2 参照)。
    Google API Keyを新規作成する
    <図2: Google API Keyを新規作成する>
  4. APIをどこから利用するかを選択する。もしJavaScriptからAPIリクエストを投げるのであれば「Browser Key」を選択する(図3 参照)。今回はJavaScriptとPHPの両方のケースでBlogger連携をしてみようと思う。
    Google APIをJavaScript(AJAX等)から利用する場合
    <図3: Google APIをJavaScript(AJAX等)から利用する場合>
  5. APIの呼び出しを許可するリクエスト元のサイトのドメイン(FQDN)を指定する(図4 参照)。ワイルドカードが使えるので、サブドメインやドキュメントルート下のパスは「*」にしておくとサイト全体を呼び出し元として許可できる。
    Google APIの利用を許可するリクエスト元サイト(FQDN)の設定
    <図4: _Google APIの利用を許可するリクエスト元サイト(FQDN)の設定_>
  6. まずJavaScript連携用のAPI Keyが出力される(図5 参照)。
    API Keyの確認
    <図5: API Keyの確認>
  7. 次にCGI連携用のAPI Keyを作成するので、3.の手順と同じく、再び「Create new Key」を押す。
  8. サーバーサイドCGIからAPIリクエストを投げる用のAPI Keyを作成するので、「Server key」を選択する(図6 参照)。
    Google APIをサーバーサイドCGIから利用する場合
    <図6: Google APIをサーバーサイドCGIから利用する場合>
  9. APIの呼び出しを許可するリクエスト元のIPアドレス(もしくはサブネットアドレス)を指定する(図7 参照)。
    Google APIの利用を許可するリクエスト元ホスト(IPアドレス/サブネットアドレス)の設定
    <図7: Google APIの利用を許可するリクエスト元ホスト(IPアドレス/サブネットアドレス)の設定>
  10. 最後にAPI Keyを確認したら完了(図8 参照)。図8の赤い枠線で囲った欄のAPIKEYを控えておきます。
    Google Developers ConsoleでAPI KEYを確認する
    <図8: Google Developers ConsoleでAPI KEYを確認する>

Google Developers ConsoleにはAPI Explorerというツールがあって、実際のAPIの動きをシミュレートできる。例えば「APIs」のAPI一覧から「Blogger API v3」を選ぶと、利用できるAPIのメソッドが一覧表示される。使ってみたいメソッドを選ぶと、API Explorerページが表示されるので、WEB上から必要なパラメータを入力してやることで、実際のAPIリクエストのサンプルと実行結果がその場で確認できる。ここで動きを確認してから、必要なAPIコマンドだけを呼び出し元サイトに設定するというお手軽なAPI連携開発ができるのだ(さすが、Google!)。

BloggerのブログIDを取得する

BloggerのブログIDは何気にダッシュボードや設定画面などに明示的に書いてなかったので、URLから拾うのが手っ取り早い。各投稿のページか、ダッシュボードの概要ページのURLなどのGETパラメータblogIDの値を取得しよう。

記事投稿ページ(新規投稿)

ダッシュボード・概要ページ

WordPress側でのAPI呼び出し

今回はBloggerの記事リストを最大10件取得して、WordPress側に未登録のブログIDがあればWordPressの投稿として登録するような処理を作ってみようかと思う。この処理に必要なAPIメソッドは、Bloggerの記事リストを取得できる「blogger.posts.list」だ。ただ、blogger.posts.listメソッドを素で呼ぶと、投稿についたコメントや投稿者情報など、WordPress側で利用したい記事データ以外の情報も含まれて、通信量が膨らんでしまってパフォーマンスが悪くなるので、fieldsパラメータで取得するデータを絞り込むことにする。その辺の取得データの絞り込みを行うのにはGoogle Developers ConsoleのAPI Explorerが便利だ。これでパラメータを色々試してみて、最終的なAPIリクエストはこうしてみた。

ではさっそく、WordPressサイト側でBloggerの記事を取得してみよう。まずはAPI経由で記事を取得する部分のみのコードをPHPとJavaScriptでそれぞれ書いてみる。

PHP版

JavaScript版

素でAjax処理書くのが面倒だったので、jQuery使ってます。

さて、これでBloggerの最新記事が最大10件、API経由で取得できたので、あとはWordPressに同じ投稿がなければ、新規投稿として登録するという処理を作ってみる。こちらはPHP建てになるので、API呼び出し部のソースもPHP版を使う。

WordPressにBloggerの記事を登録する

最終的な処理仕様は、API経由で取得したBloggerの最新10件の記事にて、同じ記事タイトルの投稿がWordPress側になかった場合、WordPressの新規投稿として記事を登録するというもの。今のところ記事の同一性はタイトル名でしか判断していない。また、WordPress側への登録時の投稿ステータスは「下書き」(draft)にしてある。もし、取得した記事をそのまま公開してしまいたい場合は、投稿ステータスをpublishにすること。
あと、WordPressへの記事登録が成功した場合は、スクリプトを実行したディレクトリと同一のところに登録投稿IDのログを出力している。

regist_post_to_blogger.php

スクリプトの最初でrequire_once './wp-load.php';をしているので、WordPressがインストールされているディレクトリ下であれば、どこに配置しても動作するようにしてある。なので、cronジョブなどに組み込んで、1日1回とか自動実行することも可能だ。テーマやプラグインなどに組み込む場合は、require_once './wp-load.php';を外して、別途起動するディスパッチャを作ってあげるといいかも。

これで、BloggerとWordPressにて記事の連携(Bloggerに記事を書く→WordPressにインポートして記事を公開するという流れ)が可能になる。

Leave a Reply

Your email address will not be published.