はてなブックマークREST APIを使ってブックマーク情報を取得したい

投稿者: Anonymous

はてなブックマークのapiを使って自身のブックマークしたURLを使ってbotを作りたい。

Pythonを使って自分のブックマーク情報にアクセスしたいのですが、OAuth認証を使用して行う事は出来ますか?ドキュメントを読んだのですがそのような記載が見当たらないので困っています。
アクセストークンは取得しています。

ここのページに書いてあるような事をOAuthを使ってやりたい。
WSSE認証を用いたブックマークデータの取得

というのを見つけたのですが、こちらの記事のようにOAuth 認証を使用して行う事は可能ですか?
WSSE認証を使ってやれば良いと思うのですが、こちらはサービス終了の予定はないでしょうか? 可能であればせっかく取得したOAuth認証で行いたいです。

以下のURLに書いてあるhttp://api.b.hatena.ne.jp/{version}/my/bookmarkにgetでアクセスすれば自身のブックマークしたデータをが全件Jsonか何かで返って来ると思ったのですが、何故か引数にURLが必要だと言われます。こちらはURLが欲しくてアクセスしているのにURLが必要との事で一体なんのURLが必要なのかわかりません。

そして認証したユーザーのブックマーク情報を取得します。この意味もいまいち簡素でわかりません。私の理解とドキュメントにかなりのズレがあると思います。

一体このドキュメントにはなんのことについて書かれているのでしょうか?
http://developer.hatena.ne.jp/ja/documents/bookmark/apis/rest

ここで指すブックマーク、エントリーについて分からないのだと思います。
どこのブックマークなのか、どこのエントリーのことなのかわかりません。
http://developer.hatena.ne.jp/ja/documents/bookmark/apis/rest/datatypes#url

エンジニアの方々教えてくださると幸いです。
よろしくお願いします。

追記
回答して下さった事を実践しようとアクセストークンを取得したので、ユーザ情報(自分の)を取得するためにgetリクエストを以下のURLに送りました。

前者
http://api.b.hatena.ne.jp/1/myドキュメントに沿って送って見ると以下のエラーが出ました。

コード

from requests_oauthlib import OAuth1Session, OAuth1
import requests

auth = OAuth1(アクセストークン各種)
print(requests.get('http://api.b.hatena.ne.jp/1/my', auth=auth).content)

実行結果
b'403 Insufficient scope'
アクセストークン取得時にスコープの所を入力したのですが、許可が足りないと言われます。
http://developer.hatena.ne.jp/ja/documents/auth/apis/oauth/scopes

SCOPE = {'scope': 'read_public,write_public'}

後者
なぜかこちらに載っているURLでgetリクエストと出したら出来ました。
http://developer.hatena.ne.jp/ja/documents/nano/apis/oauth

どうやら前者はread privateが必要なようです。
http://developer.hatena.ne.jp/ja/documents/bookmark/apis/rest/my#get_my

納得です。

解決

結論から述べると、自分のブックマーク一覧を取得するには、OAuthのAPIではなく以下のAPIを使うとよいようです。これはRSSによるAPIなので、特別な認証なしにURLにアクセスするだけで利用できます。

ただし、これはユーザー名が分かっていないと使用できませんので、先にユーザー情報APIで自分のユーザー情報を取得します。こちらはOAuth認証が必要です。


ドキュメントにある「ブックマーク情報」が何のことか分かりにくい問題については、データの書式ページがヒントになるようです。そのAPIで取得できる「ブックマーク情報」とはこのページに載っているブックマークデータのことで、それによるとあるユーザーが行った「1件のブックマーク」についての情報が取得できるものです。そのAPIはユーザーのブックマークを全件取得するのではなくあくまで1件の情報を取得するもので、URLが必要と言われるのは、そのユーザーが行ったどのブックマークの情報を取得するのかを指示する必要があるためです。

追記に関して

前者と後者では取得できる情報が違います。前者は後者の情報に加えてis_oauth_twitterなどの情報が取得できるようになっています。

実際に試していないのでこれは推測ですが、前者はread_publicではなくread_privateのscopeが必要かもしれません。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *