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