Ruby
はてなブックマーク
Gem

はてなブックマーク Web APIを手軽に使えるgemを作った

手元のMacがなくなってSwiftが書けなくなったので、新しいMacが届くまでの間、空いた時間にはてなブックマークのWeb APIを気軽に扱えるgemを作ってみました。

Nabeatsu/hatena_bookmark_client_for_ruby: API Client of Hatena bookmark for Ruby

はてなブックマークAtomAPIに対応したgem kkosuge/hatena-bookmarkが既に公開されているのですが、既にサポートが終了されています。

はてなブックマークAtom APIのサポートを終了します - はてなブックマーク開発ブログ

プライベートで開発中のはてなブックマークのサードパーティクライアントではてなブックマークのAPIやフィードの仕様にある程度慣れていたので、今回Rubyで現在ドキュメントに公開されているAPIに対応したライブラリを作りました。


基本的な使い方

APIごとにサンプルを書きます。各インスタンスメソッドの返り値はNet::HTTPResponseのサブクラスで、リクエストに成功した場合bodyプロパティがJSONとして解釈できるようになっています。

require 'json'

JSON.parse(hatebu.get.body)
# {"http://b.hatena.ne.jp/"=>7372, "http://www.hatena.ne.jp/"=>5621}


はてなブックマーク REST API

仕様:はてなブックマーク REST API - Hatena Developer Center


OAuthによるユーザー認証

はてなブックマーク REST APIはOAuthによるユーザー認証が必要になります

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

開発者向け設定ページからアプリケーションを登録したら取得できるconsumer keyとconsumer secretを使ってOAuth認証を行いaccess tokenとaccess token secretを取得しないと一部APIにアクセス出来ないので事前に取得しておきましょう。

今回作ったgemをinstallすると手元で動作確認できるようにaccess tokenとaccess token secretを取得出来るコマンドが使えるので面倒なら使ってみてください。引数にconsumer keyとconsumer secretを必要とします。渡さずに実行すると使い方を説明する文字列が出力されます。

$ get_hatebu_access_token 

Usage: ruby get_access_token.rb <consumer key> <consumer secret>

$ get_hatebu_access_token consumerkey cosumersercret
$ # 以下のURLにアクセスしてトークン取得
$ Visit this website and get the oauth verifier: https://www.hatena.com/oauth/authorize?oauth_token=hogehoge

fe5847b6f7cc58eef002e940c9761800.pngcbf820c4c585c0856fd5266e01809900.png

$ Enter the oauth verifier:<tokenをここに貼り付けてEnter>

# 以下の2つが出力される
Access token:
Access token secret:


ブックマークの作成

require "hatena_bookmark_client_for_ruby"

hatebu = HatenaBookmarkClient::Bookmark.new(
consumer_key: CONSUMER_KEY,
consumer_secret: CONSUMER_SECRET,
request_token: REQUEST_TOKEN,
request_secret: REQUEST_SECRET,
)
body = {
url: "https://www.google.com/",
comment: "test",
}
response = hatebu.create(body)
puts response.body


ブックマークの削除

hatebu.delete("https://www.google.com/")


ブックマーク情報の取得

hatebu.get("https://www.google.com/")


ブックマーク一覧から検索

これははてなブックマーク REST APIではなく、マイブックマーク全文検索APIなのですが、OAuth認証をしていればリクエストを投げれるのでここで紹介します。

response = hatebu.search("id", "hatena")


はてなブックマーク件数取得API

仕様:はてなブックマーク件数取得API - Hatena Developer Center

仕様どおり50個まで配列にブックマーク件数を取得したいURLを追加出来ます。

count = HatenaBookmarkClient::BookmarkCount.new(["http://www.hatena.ne.jp/", "http://b.hatena.ne.jp/"])

count.get
# {"http://www.hatena.ne.jp/":5790,"http://b.hatena.ne.jp/":6793}


はてなブックマークエントリー情報

仕様:はてなブックマークエントリー情報取得API - Hatena Developer Center

エントリー情報を取得したいURLを引数に渡します。

entry = HatenaBookmarkClient::Entry.new("http://www.hatena.ne.jp/")

entry.get.body
# 関連記事を取得しない高速なレスポンスで返却するAPIへのリクエスト
entry.get_withou_relations

他にもブックマークされたエントリーの情報を取得するエントリーAPI、ユーザーのタグ情報を取得するタグAPI、OAuth 認証したユーザーの情報を取得するユーザー情報APIなどへのリクエストができます。


今後の予定

現在

- はてなブックマーク REST API

- はてなブックマーク件数取得API

- はてなブックマークエントリー情報取得API

- マイブックマーク全文検索API

のすべてに対応しているのですが、マイブックマーク全文検索APIで利用できる認証(OAuth認証、WSSE認証、およびCookie認証)のうち、OAuth認証のみに対応しているので他の認証にも対応させる予定です。

対応予定

- はてなスターAPI

- はてなブックマークフィード

はてなブックマークフィードはAPIではないのですが、はてなブックマークのコンテンツを利用するサービスを作る際に利用することが多いと考えられるのと、実際に自分が使いたいので対応させる予定です。


初めてgemを作ってみた感想。

単機能なgemを作るだけなら作成から公開までかなり簡単に行えました。 一度作ると他の人のgemも読みやすくなり、参考に出来るところも増えて良いことしかなかったです。

gemを作る際に参考にした記事

【Ruby】gemの作り方から公開まで - Qiita

Gemの作り方まとめ 普通のgem編 - masarakki's blog

gemを作る時に気をつけていること - くりにっき

橋本商会 » Bundlerとgem.dependencyの順序