やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

はてなブログAPIの仕様について調べる

大変そう。

開発環境

はてなAPI

まずははてなAPIの仕様を調べる。

TOP - Hatena Developer Center

認証

認証には2種類あるらしい。

  • OAuth 1.0a
  • WSSE認証

主流のOAuthを使いたい。

はてな認証ドキュメント一覧 - Hatena Developer Center

流れ

  1. ConsumerKeyを取得する
  2. Scopeを設定する
  3. AccessTokenを取得する
  4. 認証&APIを発行する

はてな OAuth - Hatena Developer Center

認証

Consumer key を取得して OAuth 開発をはじめよう - Hatena Developer Center

認証までが大変そう。Google APIのときのようにAccessTokenを取得するまでの間にユーザがブラウザを介して許可する承認の工程が必要そう。OAuthの仕様だろう。RefreshTokenのようにユーザが手動で承認するのは1回だけで済んでくれるのだろうか。

無事AccessTokenなど必要なキーが取得できたら、API発行時にそれらを渡す。以下のようなコードになるらしい。

GET /applications/my.json HTTP/1.1
Host: n.hatena.com
Authorization: OAuth realm="",
    oauth_consumer_key="q7JnhZ3Hk8a%2FlQ%3D%3D",
    oauth_nonce="e3fcb9046a7b67a2f135",
    oauth_signature="gUXzVjtGaYBC%2BIguh2cf56Id%2BdY%3D",
    oauth_signature_method="HMAC-SHA1",
    oauth_timestamp="1291692652",
    oauth_token="dRsM%2BQcOhiQcow%3D%3D",
    oauth_version="1.0"

HTTPヘッダで、キーはAuthorization。値の設定が大変そう。意味不明な値がたくさんあってさっぱりわからない。説明も見つからない。OAuth1.0aの仕様だろうか。これは苦労しそう。

API一覧

はてなにはいくつかのサービスがあるらしい。それらに対応したAPIがある。

OAuth 対応 API 一覧 - Hatena Developer Center

今回はブログを使いたい。それ以外のサービスは使わなそう。ブックマークはPocketを使いたい。はてなハイクTwitter的で電話番号不要な別サービスを探して使いたい。

抜けている

上記の一覧にフォトライフがない。これも"OAuth対応API"に見えるのだが。

はてなフォトライフAtomAPI - Hatena Developer Center

毎月300MBまでアップロードできるので使いたい。すでにいつもお世話になっている。

認証API

はてな認証API

スター

こちらの右側でAPI一覧が見れる。たとえば以下のスター数取得。

はてなスターカウントAPI - Hatena Developer Center

これはHTTPリクエストでJSONレスポンスらしい。認証についても書いていないので簡単に使えるのかもしれない。むしろ他のAPIJSONにしてほしい。使い分けるの面倒。

ブログAPI

はてな OAuth - Hatena Developer Center

上記が仕様。なかなか大変そうである。

できること

  • サービス一覧取得
  • エントリ一覧取得
  • エントリ新規作成,取得,更新,削除
  • カテゴリ一覧取得

まずはサービス一覧取得とやらをする必要がある?

構造

  • Atom Publishing Protocolという規格に基づいている
  • パラメータとレスポンスはXML文書である

URI

URIに応じて各種操作ができるらしい。

種類 URI
コレクションURI https://blog.hatena.ne.jp/{はてなID}/{ブログID}/atom/entry
メンバURI https://blog.hatena.ne.jp/{はてなID}/{ブログID}/atom/entry/{entry_id}
サービス文書URI https://blog.hatena.ne.jp/{はてなID}/{ブログID}/atom
カテゴリ文書URI https://blog.hatena.ne.jp/{はてなID}/{ブログID}/atom/category

URI{}付き項目については以下。

項目 説明
はてなID 私の場合はytyaru
ブログID このブログの場合はytyaru.hatenablog.com
entry_id 「epochを表す数値 (例: 1227232862) または、英数字文字列」とある。Linuxのエポック時刻のことか?

リクエストパラメータXML

エントリの新規作成

要素 説明 疑問
title 記事のタイトル
content 記事の内容。ブログに登録された記法として解釈する(見たまま/Markdown/はてな記法) 個別に指定できないのか?
updated 投稿日時
category/term カテゴリ名 複数指定時の区切り文字は?
app:control/app:draft yesなら下書き、noなら下書きでないもの 何が違う?どう使い分ける?

updatedで予約投稿できそう。そのときはapp:draftyesにする必要があるのか?謎。

エントリの編集

編集にもupdatedがあった。ブログ編集を予約できるということか?そういう使い方はしたことがなかった。

予約投稿して、さらに次回の記事が投稿された後で、次回記事へのリンクを追加するということができるだろうか?投稿される前に2つの時点で予約することになる。 おそらく無理なのだろう。1記事あたり1時点の予約しかできないのだろう。できたらいいな。

ちなみにエントリ削除は予約できなさそう。

所感

きっと認証のところで苦労するに違いない。OAuthはAPI利用の障害。