Attention! Translated article might be found on my English blog.

2016年7月25日月曜日

サービスアカウントではGoogle APIを使ってBloggerに投稿できない。

参考: google api - how to insert post to my blog in server by Service Account without any manual login - Stack Overflow
参考 :blogger - Cannot create or update posts using php v3 library ((403) We're sorry, but you don't have permission to access this resource.') - Stack Overflow

Web Application用のアカウントを作ってユーザ(自分自身)に認証させる必要があるようだ。
俺の数時間を返してくれ!

悲しいので試行錯誤した内容を書いときます。

下準備として、google-api-php-clientを入れて自環境で使えるようにしました。
Composerとかいうphp用パッケージ管理ツールを入れて、
自プロジェクトのトップディレクトリで
$ composer require google/apiclient:^2.0
とかやった気がします。

参考: CentOS6.5にcomposerをインストールする | joppot
参考: GitHub - google/google-api-php-client: A PHP client library for accessing Google APIs

でまあその後も色々すったもんだして、アクセス権が無いことを確認できたコード(笑)は以下の通りです。

<?php
require_once './vendor/autoload.php';

session_start();

$client = new Google_Client();
$client->setApplicationName("[YOUR_APP_NAME]");
$key = '[YOUR_KEY_FILE_PATH';
putenv('GOOGLE_APPLICATION_CREDENTIALS=' . $key);
$client->useApplicationDefaultCredentials();
$client->setScopes(array('https://www.googleapis.com/auth/blogger'));

$blogger = new Google_Service_Blogger($client);
$post = new Google_Service_Blogger_Post();
$post->setTitle('自動投稿テスト');
$post->setContent('CentOSからの自動投稿です。');
$data = $blogger->posts->insert('[YOUR_BLOG_ID]', $post);
var_dump($data);
?>

参考: google-api-php-client/UPGRADING.md at master · google/google-api-php-client · GitHub
参考: google api v3 blogger post insert php ajax - Stack Overflow