現在、自分自身のはてなブログ の記事をランダムでつぶやくボットを作成したら面白そうだなと考えています。本当にランダムで自分の記事へアクセスして呟くだけだけでもいいのですが、同じ記事をつぶやくのを防いだり、PVが低い記事を優先してつぶやかせたりしたいなと思い始め、まずははてなブログ の記事一覧を取得しGoogle スプレッドシート に記録しようとなりました。
そこで今回は、Google Apps ScriptでBASIC認証 をして、はてなブログ の記事一覧を取得する ところまでを実施したので記事に残しておきたいと思います。
今回はてなブログ の記事一覧を取得する方法は、Hatena Developer Center にて公開されているはてなブログ AtomPub を利用します。
developer.hatena.ne.jp
Hatena Developer Center では、これらのAPI を扱うための開発者向け情報を公開しています。API を使うことで、はてな が持つ情報・機能を利用した様々なアプリケーションやサービスを作ることができるようになります。
開発者の皆様のアプリケーション/サービスにおいて、より豊かなユーザー体験を提供するために、はてな のAPI をご活用ください。
developer.hatena.ne.jp
Atom Publishing Protocol(以下 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 を利用するために、クライアントは 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 キー(
赤の部分)
実際のコードです。
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でいろいろやるシリーズです
yoshitaku-jp.hatenablog.com
yoshitaku-jp.hatenablog.com
yoshitaku-jp.hatenablog.com
yoshitaku-jp.hatenablog.com