Google+の自分の投稿内容(JSON)をPHPで取得して別のサーバーに保存する

ブログを更新したのをTwitterやFacebookで宣伝するには、dlvr.itなど、RSSやATOMフィードをTwitterやFacebookに反映させるサービスが便利です。
Google+の投稿もTwitterで宣伝できたらいいなあと思ったのですが、feedの取得にはひと工夫必要でしたのでそれをメモ。

feed取得時にいちいちAPIたたくのも時間がかかるので、APIから取得した情報を一旦自分のサーバーに保存する方法をとります。
とりあえず、Google+の投稿をJSON形式で取得→PHPを使って自分のサーバーに保存、というとこまで。

※用意するもの:PHP5が使えるサーバー

Google+ API keyの取得

Googleの各種サービスは、APIが整備されているので、簡単に取得できます。
たとえばGoogle+の、あるユーザーの投稿を取得したいときは、下記のようなURLにアクセスするとJSON形式で取得できます。
https://www.googleapis.com/plus/v1/people/107280905455242158652/activities/public

取得できましたでしょうか?
‥できませんね。

APIのリクエストを行うには、OAuth認証を通すか、APIキーを取得する必要があります。
今回はサーバーから自動でリクエストさせるので、APIキーを取得します。
API Accessで、使いたいサービス(今回はGoogle+ API)を選択して取得してください。
API Accessのメニューを開くと、API keyという項目がありますので、これをメモっておきます。

Google+の投稿をJSON形式で取得

先ほどのリンクに?key=[API key]を追加して再度アクセスしてみてください。

例:
https://www.googleapis.com/plus/v1/people/107280905455242158652/activities/public?key=abcdefghijklmnopqrstuvwxyz0123456789
※API keyが適当なので上のURLをそのままたどるとエラーになります。ご自分で取得したAPI keyをご利用ください

今度こそ、表示されたかと思います。
パラメータを足すことで、表示する投稿件数(デフォルトは20件)の変更などもできます。
APIの詳細はActivities: list – Google+ Platform — Google Developersをご覧ください。

https://www.googleapis.com/plus/v1/people/107280905455242158652/activities/public?key=abcdefghijklmnopqrstuvwxyz0123456789&maxResults=10

JSON形式で取得したデータを、PHPで自分のサーバーに保存

APIをたたくのはfile_get_contents()関数で行います。
サーバーへの保存は簡単にやりたいので、データベースでなくテキストファイルとして更新します。

APIから出力された情報を変数に格納

<?php
// 投稿を取得したいユーザーの、ユーザーID
$user_id = "123456789123456789123456789";
// API key
$api_key = "abcdefghijklmnopqrstuvwxyz0123456789";
// APIから出力された情報を変数 $gplus_data に格納
$gplus_data = file_get_contents(
	"https://www.googleapis.com/plus/v1/people/".
	$user_id.
	"/activities/public?key=".
	$api_key");
?>

テキストファイルに書き込み

<?php
// ファイル名。あらかじめ空のファイルを作ってパーミッションを変更しておきます
$file_name = "myactivity.txt";
// ファイルを上書きモードで開く
$file = fopen($file_path, "w");
// 他の処理が同時に動いてたときにバグらないよう、結界を張ります
flock($file, LOCK_EX);
// データをファイルに書き込みます
fwrite($file, $gplus_data);
// 結界を解きます
flock($file, LOCK_UN);
// ファイルを閉じます
fclose($file);
?>

まとめるとこう

<?php
// 初期設定
$user_id = "123456789123456789123456789";
$api_key = "abcdefghijklmnopqrstuvwxyz0123456789";
$file_name = "myactivity.txt";

// 書き込むファイルの階層がばらけないよう、ルートパスでファイルの場所を指定しておきます
$directory_path = dirname(__FILE__). "/";
$file_path = $directory_path. $file_name;

// APIをたたく
$gplus_data = file_get_contents(
	"https://www.googleapis.com/plus/v1/people/".
	$user_id.
	"/activities/public?key=".
	$api_key.
	"&maxResults=10"); // 10件までを表示する指定

// テキストファイルに書き込み
if(!$gplus_data) {
	exit("loading error"); // APIの指定が間違ってるか、API自体が止まってるときのエラー
} else {
	$file = fopen($file_path, "w");
	if(!$file) {
		exit("open file error"); // 書き込みのパーミッションがないときのエラー
	} else {
		flock($file, LOCK_EX);
		fwrite($file, $gplus_data);
		flock($file, LOCK_UN);
		fclose($file);
	}
}

// 結果をモニタリング(ファイル書き込みの機能自体には、下記の行は不要です)
print_r( file_get_contents($file_path) );
?>

上記コードのPHPをたたいて、$file_nameで指定されたファイルにgoogle+の情報が書き込まれていれば成功です。