TwitterAPIのRuby用ラッパーのソース(sferik/twitter )を読んでいてSimpleOAuthというライブラリを知ったので、はてなブックマークのAPIを例にしてちょっとした使い方の例を書いてみます。

laserlemon/simple_oauth

はてなのAPIについてはこちらを参考にしています。

はてなブックマークAtomAPI - Hatena Developer Center

はてなの公式ドキュメントではOAuthライブラリを使った実装のサンプルが紹介されています。OAuthライブラリとSimpleOAuthの書き方の違いを見るために、あるURLのサイトをブックマークする場合について2パターン書いてみました。

個人的にはSimpleOAuthが名前通りシンプルで好きです。

OAuthではてなブックマーク

 1  def create_hatena_bookmark(url)
 2    @consumer = OAuth::Consumer.new(
 3      ENV['HATENA_CONSUMER_KEY'],
 4      ENV['HATENA_CONSUMER_SECRET'],
 5      site:'',
 6      request_token_path: 'https://www.hatena.com/oauth/initiate',
 7      access_token_path: 'https://www.hatena.com/oauth/token',
 8      authorize_path: 'https://www.hatena.ne.jp/oauth/authorize'
 9    )
10
11    access_token = OAuth::AccessToken.new(
12      @consumer,
13      user.token,
14      user.secret
15    )
16
17    xml = <<-XML
18      <entry xmlns="http://purl.org/atom/ns#">
19        <title>dummy</title>
20        <link rel="related" type="text/html" href="#{url}" />
21      </entry>
22    XML
23
24    response = access_token.post(
25      "http://b.hatena.ne.jp/atom/post",
26      xml,
27      {'Content-Type' => 'application/xml'}
28    ) 
29
30  end 

SimpleOAuthでブックマーク

 1  def create_hatena_bookmark(url)
 2
 3    credentials = {
 4      consumer_key: ENV['HATENA_CONSUMER_KEY'],
 5      consumer_secret: ENV['HATENA_CONSUMER_SECRET'],
 6      token: user.token,
 7      token_secret: user.secret
 8    }
 9
10    post_url = "http://b.hatena.ne.jp/atom/post"
11    auth_header = SimpleOAuth::Header.new(:post, post_url, {}, credentials)
12
13    xml = <<-XML
14      <entry xmlns="http://purl.org/atom/ns#">
15        <title>dummy</title>
16        <link rel="related" type="text/html" href="#{url}" />
17      </entry>
18    XML
19   
20    conn = Faraday.new
21    response = conn.post(post_url) do |req|
22      req.headers[:authorization] = auth_header.to_s
23      req.headers[:content_type] = 'application/xml'
24      req.body = xml
25    end
26  end