大変そう。
開発環境
- Linux Mint 17.3 MATE
- Firefox 42.0
はてなAPI
認証
認証には2種類あるらしい。
- OAuth 1.0a
- WSSE認証
主流のOAuthを使いたい。
はてな認証ドキュメント一覧 - Hatena Developer Center
流れ
- ConsumerKeyを取得する
- Scopeを設定する
- AccessTokenを取得する
- 認証&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 - Hatena Developer Center
これはHTTPリクエストでJSONレスポンスらしい。認証についても書いていないので簡単に使えるのかもしれない。むしろ他のAPIもJSONにしてほしい。使い分けるの面倒。
ブログAPI
はてな OAuth - Hatena Developer Center
上記が仕様。なかなか大変そうである。
できること
- サービス一覧取得
- エントリ一覧取得
- エントリ新規作成,取得,更新,削除
- カテゴリ一覧取得
まずはサービス一覧取得とやらをする必要がある?
構造
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:draftをyesにする必要があるのか?謎。
エントリの編集
編集にもupdatedがあった。ブログ編集を予約できるということか?そういう使い方はしたことがなかった。
予約投稿して、さらに次回の記事が投稿された後で、次回記事へのリンクを追加するということができるだろうか?投稿される前に2つの時点で予約することになる。 おそらく無理なのだろう。1記事あたり1時点の予約しかできないのだろう。できたらいいな。
ちなみにエントリ削除は予約できなさそう。
所感
きっと認証のところで苦労するに違いない。OAuthはAPI利用の障害。