ひとむかし前はURL短縮サービスといえばbit.lyだったと思うんだけど、
今はいろいろあるし、以前ほど利用機会はなくなったかな。
けどAmazonのURLをamzn.toにしてくれたりするのはbit.lyが良いですね。

bitly_website

というか何気にびっくりしたんだけど、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が使えますね。