大変そう。
開発環境
- 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利用の障害。