読者です 読者をやめる 読者になる 読者になる

技術のメモ帳

気が向いたときに書いてます

[GAS]はてなブログAtomPubを扱うライブラリ

Google Apps Script

前回に引き続き、はてなウェブサービスを扱うライブラリをGoogle Apps Scriptで実装しました。今回は、はてなブログです。

このライブラリを利用すると、Google Apps Scriptから、ブログエントリ一覧の取得、ブログエントリの取得・作成・編集・削除、カテゴリ一覧の取得などが操作できます。

はてなブログAtomPub - Hatena Developer Center

アプリケーションの認証〜OAuthの認可までは前回のエントリを参考にしてください。

利用方法

consumer keyとconsumer secretの取得、およびOAuth認可のライブラリ登録と認可を済ませていることを前提にしています。

最初に、はてなブログの詳細設定から、AtomPub→ルートエンドポイントを確認し、https://blog.hatena.ne.jp/{はてなID}/{ブログID}/atomというURL表記になっているので、それぞれのIDを控えておきます。

スクリプトエディタからライブラリを選択し、My7DzK_6fJTPmyz1FbJKEpMLo7O4tWOsVを登録。

あとは、次の実装例のようなコードを記述するだけです(CONSUMER_KEY, CONSUMER_SECRET等は適宜置き換えてください)。

'use strict';

/**
 * OAuth認証用インスタンス
 * @params {string} consumer_key
 * @params {string} consumer_secret
 * @params {string} scope
**/
var service = HatenaWebService.getInstance(
  '***CONSUMER_KEY***',
  '***CONSUMER_SECRET***',
  'read_public,read_private,write_public,write_private'
);

// 認証を行う
function authorize() {
  service.authorize();
}

// 認証をリセット
function reset() {
  service.reset();
}

// 認証後のコールバック
function authCallback(request) {
  return service.authCallback(request);
}

var blog = getInstance(service, '***HATENA_ID***', '***BLOG_ID***');

// サービス文書を取得
function getSelf() {
  Logger.log(blog.get('self'));
}

// ブログエントリ一覧の取得
function getEntries() {
  Logger.log(blog.get('entries'));
  // blog.get('entries', { page: '***PAGE_ID***' })
}

// カテゴリ一覧の取得
function getCategories() {
  Logger.log(blog.get('categories'));
}

// ブログエントリの取得
function getEntry() {
  /**
   * @params {string}  entryId : required
  **/
  Logger.log(blog.get('entry', { entryId: "***ENTRY_ID***" }));
}

// ブログエントリの取得
function postEntries() {
  /**
   * @params {string}  title      : required
   * @params {string}  content    : required
   * @params {string}  author     : option
   * @params {array}   categories : option
   * @params {date}    updateAt   : option
   * @params {boolean} draft      : option
  **/
  Logger.log(blog.post('entries', {
    title:      'Hello, New Post!',
    content:    '## New Post\n\nMessage on New Post!!',
    author:     'Taro-Yamada',
    categories: ['Category1', 'Category2'],
    updateAt:   new Date(2015,10,10,10,10,0),
    draft:      true
  }));
}

// ブログエントリの更新
function putEntry() {
  /**
   * @params {string}  entryId    : required
   * @params {string}  title      : required
   * @params {string}  content    : required
   * @params {string}  author     : option
   * @params {array}   categories : option
   * @params {date}    updateAt   : option
   * @params {boolean} draft      : option
  **/
  Logger.log(blog.put('entry', {
    entryId:    '***ENTRY_ID***',
    title:      'Hello, Updated Post!',
    content:    '## Updated Post\n\nMessage on Updated Post!!',
    author:     'Taro-Yamada',
    categories: ['Google Apps Script', 'Ruby'],
    updateAt:   new Date(2015,10,10,10,10,0),
    draft:      true
  }));
}

// ブログエントリの削除
function destroyEntry() {
  /**
   * @params {string}  entryId : required
  **/
  Logger.log(blog.destroy('entry', { entryId: '***ENTRY_ID***' }));
}

ブログエントリの本文は、ブログ設定がWISIWIGかMarkdownかで変わる(?)ようです。

ライブラリのコード

ライブラリのコードは次の通りです。前回作成したはてなブックマークとさほど変わりませんが、今回はPOST/PUTする際に、XMLでリクエストを投げる必要があったので、HTMLテンプレートを利用して、XMLを組み立てました。

XMLJSONに変換する方法

おまけです。返り値がXMLだと扱いにくい場合は、次のエントリを参考に、JSONに変換すると幸せかもしれません。

Convert XML to JSON with Apps Script

なお、はてなブログAtomPubについては、OAuth認可をせずとも、Basic認証でいけますが、前回ライブラリを作ったのもあり、OAuthを前提としております。