Google Apps ScriptでBASIC認証をして、はてなブログの記事一覧を取得する

f:id:yoshitaku_jp:20190215120725p:plain

現在、自分自身のはてなブログの記事をランダムでつぶやくボットを作成したら面白そうだなと考えています。本当にランダムで自分の記事へアクセスして呟くだけだけでもいいのですが、同じ記事をつぶやくのを防いだり、PVが低い記事を優先してつぶやかせたりしたいなと思い始め、まずははてなブログの記事一覧を取得しGoogle スプレッドシートに記録しようとなりました。 そこで今回は、Google Apps ScriptでBASIC認証をして、はてなブログの記事一覧を取得するところまでを実施したので記事に残しておきたいと思います。

Hatena Developer CenterはてなブログAtomPubの紹介

今回はてなブログの記事一覧を取得する方法は、Hatena Developer Center にて公開されているはてなブログAtomPubを利用します。

developer.hatena.ne.jp

Hatena Developer Centerでは、これらのAPIを扱うための開発者向け情報を公開しています。APIを使うことで、はてなが持つ情報・機能を利用した様々なアプリケーションやサービスを作ることができるようになります。
開発者の皆様のアプリケーション/サービスにおいて、より豊かなユーザー体験を提供するために、はてなAPIをご活用ください。

developer.hatena.ne.jp

Atom Publishing Protocol(以下 AtomPub) はウェブリソースを公開、編集するためのアプリケーション・プロトコル仕様です。はてなブログのAtomPubと通じて、開発者ははてなブログのエントリを参照、投稿、編集、削除するようなオリジナルのアプリケーションを作成できます。

はてなブログAtomPubを利用する

https://blog.hatena.ne.jp/{はてなID}/{ブログID}/atom/entry にアクセスすることで記事の一覧が取得できます。

各項目は下記に置き換えてください

  • はてなID
    • あなたのはてなid
    • yoshitaku_jpの場合はyoshitaku_jp
  • ブログID
    • ブログのドメイン (例: hoge.hatenablog.com)
    • yoshitaku_jpの場合はyoshitaku-jp.hatenablog.com

しかし残念なことに1度に取得できる件数は7件までと制限があるようで、7件以降は<link rel="next" href="https://blog.hatena.ne.jp/{はてなID}/{ブログID}/atom/entry?page=hogehoge" />に再度アクセスすることで取得できます。

はてなブログAtomPubを利用するためにBasic認証をする

はてなブログAtomPub を利用するために、クライアントは OAuth 認証、WSSE認証、Basic認証のいずれかを行う必要があります。

今回は、Google Apps ScriptでBASIC認証をします。 Google Apps ScriptでBASIC認証はとても簡単です。Utilities.base64Encodeが標準で用意されていてすぐに使うことができるので、簡単にBasic認証を実行することができます。

BASIC認証に利用する情報

  • ユーザID
    • あなたのはてなid
    • yoshitaku_jpの場合はyoshitaku_jp
  • パスワード
    • AtomPubのAPIキー

AtomPubのAPIキー取得方法

AtomPubのAPIキーは自身のブログの詳細設定内にあります。取得しておきましょう。

f:id:yoshitaku_jp:20190215114936p:plain
設定 > 詳細設定

f:id:yoshitaku_jp:20190215115024p:plain
AtomPub > APIキー( 赤の部分)

実際のコードです。 urlは自身のブログのものに変更し、さらにプロジェクトのプロパティにUSER_ID(あなたのはてなid)とPASSWORD (先程取得したAtomPubのAPIキー)を設定しておきましょう!

function doGet() {
  // アクセス先の情報
  const url = "https://blog.hatena.ne.jp/yoshitaku_jp/yoshitaku-jp.hatenablog.com/atom/entry";
  const USER_ID = PropertiesService.getScriptProperties().getProperty("USER_ID");
  const PASSWORD = PropertiesService.getScriptProperties().getProperty("PASSWORD");

  // GETメソッドのオプション
  const options = {
    "method" : "GET",
    "headers" : {"Authorization" : " Basic " + Utilities.base64Encode(USER_ID + ":" + PASSWORD)},
    "muteHttpExceptions" : true
  }

  // GETメソッドのリクエスト
  var response = UrlFetchApp.fetch(url, options);
  var xml = XmlService.parse(response.getContentText());
  var atom = XmlService.getNamespace("http://www.w3.org/2005/Atom");
  var entries = xml.getRootElement().getChildren("entry", atom);    
  Logger.log(entries[0].getChild("title", atom).getText());
}

ログ

[19-02-14 18:43:26:506 PST] Google Apps ScriptでBASIC認証をして、はてなブログの記事一覧を取得する

ログの中でentries[0]としているので最新のものだけが表示されていますが、これをループして7件以降は再アクセスをしていけば良さそうです! これで、Google Apps ScriptでBASIC認証をして、はてなブログの記事一覧を取得することができました!

まとめ

Google Apps Scriptでいろいろやるシリーズ

Google Apps Scriptでいろいろやるシリーズです

yoshitaku-jp.hatenablog.com

yoshitaku-jp.hatenablog.com

yoshitaku-jp.hatenablog.com

yoshitaku-jp.hatenablog.com