読者です 読者をやめる 読者になる 読者になる

We All Get Old - Naskin Diary

Yet Another My Life On The Web

bit.ly の REST API(shorten)でハマった件

八苦(Hack)

bit.ly の REST API(shorten) に「#」付きの URL を投げると#以降の文字がコメント扱い(?)されるみたいで上手く出きませんでした。


解決方法は urllib の quote() で%エスケープさせてから API をコールすればOKでした(Goolge App Engine/Pythonだったので)。


こんな呼出方をすると

http://api.bit.ly/shorten?version=2.0.1&longUrl=http://d.hatena.ne.jp/hosumi/20100316#1268737680&login={YourAccount}&apiKey={YourApiKey}


こんなのが帰ってくる。「You must be authenticated to access shorten」なので「login」と「apiKey」が無視されているっぽいです。

{ "errorCode": 203, "errorMessage": "You must be authenticated to access shorten", "statusCode": "ERROR" }


「longUrl」を一番最後にして API を呼び出してみると

http://api.bit.ly/shorten?version=2.0.1&login={YourAccount}&apiKey={YourApiKey}&longUrl=http://d.hatena.ne.jp/hosumi/20100316#1268737680


エラーはでませんが元のURLが「http://d.hatena.ne.jp/hosumi/20100316」と#の後ろが切れています。

{ "errorCode": 0, "errorMessage": "", "results": { "http://d.hatena.ne.jp/hosumi/20100316": { "hash": "czuksF", "shortCNAMEUrl": "http://bit.ly/cBFuXT", "shortKeywordUrl": "", "shortUrl": "http://bit.ly/cBFuXT", "userHash": "cBFuXT" } }, "statusCode": "OK" }


これを %エスケープした文字にして API を呼び出すと

http://api.bit.ly/shorten?version=2.0.1&longUrl=http://d.hatena.ne.jp/hosumi/20100316%231268737680&login={YourAccount}&apiKey={YourApiKey}


変換前のURLが「http://d.hatena.ne.jp/hosumi/20100316#1268737680」なのでOKです。

{ "errorCode": 0, "errorMessage": "", "results": { "http://d.hatena.ne.jp/hosumi/20100316#1268737680": { "hash": "9H1kBY", "shortCNAMEUrl": "http://bit.ly/cYhsqI", "shortKeywordUrl": "", "shortUrl": "http://bit.ly/cYhsqI", "userHash": "cYhsqI" } }, "statusCode": "OK" }


ブラウザから実行すると問題なく短縮化してくれるので、プログラムで実行するまで気づきませんでした。


広告

建設業の社長さん、今すぐ工期短縮を始めなさい!―時間の中に眠る利益をこの手に

建設業の社長さん、今すぐ工期短縮を始めなさい!―時間の中に眠る利益をこの手に