ひとむかし前はURL短縮サービスといえばbit.lyだったと思うんだけど、
今はいろいろあるし、以前ほど利用機会はなくなったかな。
けどAmazonのURLをamzn.toにしてくれたりするのはbit.lyが良いですね。
というか何気にびっくりしたんだけど、bit.lyじゃなくて
Bitlyっていうサイト名なのな。
URLもbitly.comだし。最初からそうだったっけか?
さてさて、C#からBitlyのURL短縮APIを使ってみたのでメモ。
別段はまるようなポイントもないと思いますが。
あとから気づいたんだけど、Nugetで検索してみたら、
Bitly API の.NET用ラッパーのライブラリを作って公開してる人もいるようだ。
でもまあ短縮URL作るくらいならラッパーを使うまでもないかな。
以下では自分でWeb APIを直接利用します。
APIトークン取得
もうほとんど↓ここに書いてあったまんまで簡単だった。
bitly APIの使い方
1. bitlyにログインしてhttps://bitly.com/a/settings/advancedにアクセスします。 2. [OAuth Applications]の[here]をクリックします。 3. [Generic Access Token]でパスワードを入力し[Generate Token]をくリックします。 4. 生成されたAPIキーを控えておきます。(忘れてしまったら作り直し)
ただ1点、BitlyへのログインをTwitterアカウント使ってやった場合、
先にE-mailアドレスの認証(送られてきたメールのURLクリック)が必要なのと、
Bitly用のパスワードっていうのが設定されないので、Settingsページから先に設定しておく。
でないと、上記3のところで入力するパスワードがありません。
API呼び出しと応答の解析
URL短縮APIの呼び出しURLは「https://api-ssl.bitly.com/v3/shorten」。
これにGETのパラメータを2つ付ける。
・access_token: Bitlyサイトで取得したAPIトークン
・longUrl: 短縮するURL
C#で書くとこんな感じですね。
//string originalUrl; //string apiToken; var apiUrl = string.Format("https://api-ssl.bitly.com/v3/shorten?access_token={0}&longUrl={1}", apiToken, originalUrl); var req = WebRequest.Create(apiUrl) as HttpWebRequest; string resText; using (var res = req.GetResponse()) using (var resStream = res.GetResponseStream()) using (var reader = new StreamReader(resStream)) { resText = reader.ReadToEnd(); }
resTextには以下のようなJSONが返ってくる(↓は整形済み)
{ "status_code": 200, "status_txt": "OK", "data": { "long_url": "http:\/\/www.yahoo.co.jp\/", "url": "http:\/\/bit.ly\/1Dh94UZ", "hash": "1Dh94UZ", "global_hash": "INPsu", "new_hash": 1 } }
JSONかよーって思ってしまうのはC#erあるあるかもしれないですが
敬遠せずにJson.NETでサクッと処理してしまいましょう。
まずはNugetからJson.NETを検索してインストール。
あとは簡単や。
//using Newtonsoft.Json.Linq; var root = JObject.Parse(resString); var shortUrl = root["data"]["url"].ToString();
あるいは、実はAPIの応答をXMLでもらうことも可能です。
URLのパラメータに「format=xml」を追加するだけ。
その場合は使いなれたLINQ to XMLが使えますね。