atig.rbでbit.ly API v3を利用するは取り込んでもらったんだけど、「j.mp使いてーなぁ」と思って弄っていたら、
実はbit.ly API v2 で動いていることが発覚して、「またいつか使えなくなるじゃん、ダメじゃん!」ということで、
今度こそキチンとbit.ly API v3に対応しました。

手を付ける前(v0.3.2):
  http://api.bit.ly/shorten

前回弄った後:
  http://api.bit.ly/v3/shorten
        ↓
  bitly.path = '/shorten' (atig/bitly.rb:30)
        ↓
  http://api.bit.ly/shorten

正しいv3の使い方:
  http://api.bitly.com/v3/shorten

で、前回弄った時は何で動いたんだろうと疑問に持ったんだけれど、loginとapiKeyを追加している。
v3になったタイミングでAPI keyが必須になったっぽいので、そのせいで使えなくなったのかと。
(APIドキュメントではoptionalになってるけど、OAuthのaccess_token使うと要らないのかな?よく分からん)

まぁ何はともあれ、今度こそちゃんとv3 APIで動いてます。

atig/bitly.rb

+++ bitly.rb    2011-03-26 00:18:02.000000000 +0900
@@ -14,6 +14,10 @@
       def login(logger, login, key)
         self.new logger, login, key
       end
+
+      def domain=(v)
+        @@domain = v
+      end
     end

     def initialize(logger, login, key)
@@ -25,12 +29,21 @@

     def shorten(url)
       return url if url =~ /bit.ly/
-      bitly = URI("http://api.bit.ly/v3/shorten")
+      return url if url =~ /j.mp/
+      bitly = URI("http://api.bitly.com/v3/shorten")
       if @login and @key
-        bitly.path  = "/shorten"
-        bitly.query = {
+        query = {
           :format => "json", :longUrl => url, :login => @login, :apiKey => @key,
-        }.to_query_str(";")
+        }
+
+        if @@domain
+          query[:domain] = @@domain
+        end
+
+        bitly.query = query.to_query_str("&")
+
+        @log.debug bitly
+
         req = @http.req(:get, bitly, {})
         res = @http.http(bitly, 5, 10).request(req)

@@ -40,7 +53,7 @@
           @log.error res['errorMessage']
           url
         else
-          res["results"][url]['shortUrl']
+          res['data']['url']
         end
       else
         url

v3 APIを利用できている証拠として、~/.atig/configに下記のように書くと、
http://bit.ly/<hash>ではなく、http://j.mp/<hash>が返ってくるようになります。

Atig::Bitly.domain = 'j.mp'

よしよし、これで満足。

参考: bit.ly API Documentation

 

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Set your Twitter account name in your settings to use the TwitterBar Section.