Google Spreadsheet(Google Apps Script)からtumblrに投稿する方法


前回のラブライブ!では、Google Spreadsheetからtwitterに投稿する方法について書きました。

tumblrだっておんなじようなもんだろ?( 0w0)ノ ウェーイ とかって思って、スクリプト書いていたら、多少ハマったのでメモ的に書いておきます。

Google Apps Scriptを書いたことがある、ということを前提に書いていきます。

関連ドキュメントは以下です。

tumblrにアプリを登録する

投稿するためにはtumblrで認証しないと話になんねっす。詳しくはtubmlr apiのAuthenticationあたりを読んでください。
OAuthなので、アプリを登録してConsumerKeyとConsumerSecretを取得しましょう。
アプリの登録はここから。英語ページなのに、「アプリを登録する」ボタンだけ日本語なのが趣深いです。
登録したらConsumerKeyとConsumerSecretをメモっておきましょうね。

Google Apps Scriptを書く

OAuthのための設定

前回のラブライブ! 同様に、ConsumerKeyとConsumerSecretはプロジェクトのプロパティに登録しておきます。Google Apps Scriptのスクリプトエディタの画面でファイル→プロジェクトのプロパティ→スクリプトのプロパティって場所に保存します。
ここでは、ConsumerKeyをtumblrConsumerKey、ConsumerSecretをtumblrConsumerSecretとして保存しました。

そしたら、下記のような関数を作りましょう。コピペで使えます。

js
function tumblrInitialize() {
  var oAuthConfig = UrlFetchApp.addOAuthService("tumblr");
  oAuthConfig.setAccessTokenUrl("http://www.tumblr.com/oauth/access_token");
  oAuthConfig.setRequestTokenUrl("http://www.tumblr.com/oauth/request_token");
  oAuthConfig.setAuthorizationUrl("http://www.tumblr.com/oauth/authorize");
  oAuthConfig.setParamLocation('auth-header');
  var scriptProperties = PropertiesService.getScriptProperties();
  oAuthConfig.setConsumerKey(scriptProperties.getProperty("tumblrConsumerKey"));
  oAuthConfig.setConsumerSecret(scriptProperties.getProperty("tumblrConsumerSecret"));  
}

一応解説すると、OAuthに必要な各種URLやkeyの設定を行っています。ここでの味噌はoAuthConfig.setParamLocation('auth-header');この設定です。
この設定、デフォルトでは post-bodyが設定されていますが、tumblrのAPIドキュメントを読んでいると

The API supports the OAuth 1.0a Protocol, accepting parameters via the Authorization header

って書いてあります。ヘッダに書きやがれって言ってますね。なので、この設定が超必要です。

ブログにポストする。

なんか、解説書くのがだるくなってきたのでとりあえずコード載せます。

js
function tumblrPost() {
  var BLOG_POST_URL = "https://api.tumblr.com/v2/blog/{base-hostname}/post";
  var options =
  {
    "oAuthServiceName" : "tumblr",
    "oAuthUseToken" : "always",
    "method" : "POST",
    "payload" : {
      "type": "text",
      "body": "ブログの内容だよ'`,、('∀`) '`,、"
    }
  };
  var result = UrlFetchApp.fetch(BLOG_POST_URL, options);
}

上記のコードは、tumblrにtextで「ブログの内容だよ'`,、('∀`) '`,、」という内容をポストするサンプルです。
「{base-hostname}」には、例えば、わたしの tumblrはhttp://hidesuke.tumblr.com なので、「hidesuke.tumblr.com」を指定します。すると、hidesuke.tumblr.comにGoogle Apps Scriptから投稿できるというわけですね。簡単簡単。

ここでのみそは options の中にpayloadというプロパティです。ここには、POSTメソッドで送信する内容を記述します。何を書くかはtumblrのAPIドキュメンを読んで欲しいのですが、とにかくPOSTの中身はとにかくpayloadに書くんだ。

まとめ

Google Apps APIを使ってtumblrに投稿する方法を雑に解説しました。

ハマった点はauth-headerを指定する点(ドキュメントをちゃんと読みましょうという教訓を得ました)と、{base-hostname}に最初hidesukeと自分のアカウント名だけを入れていた点(URL的なものをいれるのが正解でしたね)。

tumblr使っている人が少ない説もありますが、前回のラブライブ!と組み合わせて、tumblrに定期的にポストするボットとかつくれると思います。

tumblr apiはリブログとかもできるらしいので、大相撲のシーズンに例の投稿を忘れずreblogするbotとかつくれると思いますのでご活用ください。

enjoy!