atig.rbでbit.ly API v3を利用する その2
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
@@ -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'
よしよし、これで満足。
Search





