前回の反省を踏まえて、bit.ly は真面目にテストしつつやる。プログラマ根性というところ。
さて、bit.ly の API を使えることを知っていはいたものの、
APIドキュメントを見るのもしんどいし
http://code.google.com/p/bitly-api/
そんな訳で、検索して探すと、
bit.ly (短縮URL) API呼び出し (その1)
http://d.hatena.ne.jp/m-kawato/20090603/1244041369
があるので参照する。
- bit.ly で api key を取得する。
- .NETのWebClientを使うことに決定。
- クエリ呼び出しが楽なので、OpenReadメソッドを使う。
- テスト用のプロジェクトを作って、長いURLを渡して結果を返すところまで完成。
- デフォルトではJSONで返ってくるので、formatをxmlで指定。
- ストリームを XmlTextReader → XmlDocument に変換。
- 「shortUrl」を探して変換テスト
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | string transBitUrl( string longurl) { string query = "" ; string shorturl = "" ; WebClient web = new WebClient(); query = "http://api.bit.ly/shorten?format=xml&" + "version=2.0.1&longUrl=" + longurl + "&login=" + bitLogin + "&apiKey=" + bitApiKey; Debug.Print(query); Stream st = web.OpenRead(query); XmlTextReader xr = new XmlTextReader(st); XmlDocument doc = new XmlDocument(); doc.Load(xr); var lst = doc.GetElementsByTagName( "shortUrl" ); if (lst != null && lst.Count > 0) { XmlElement el = lst[0] as XmlElement; shorturl = el.InnerText; } st.Close(); return shorturl; } |
これがテストできたので、今度は文章中のURLを変換させる。
- IndexOfメソッドで変換しようと思ったが、面倒そう。
- 正規表現の Regex クラスを使うことに決定。
- 簡単のために”http://[^ ]+ “ のように、後ろに半角スペースで区切る。
実は、文章末の場合のチェックが必要なのだが、ここでは省く。 - 見つかった文字列を MatchCollection で受けて、Replace すれば OK。
- ローカルでチェックしてOKなので、これを先のアプリに組み込む。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | string transShortUrl( string text) { Regex reg = new Regex( "http://[^ ]+ " ); MatchCollection mc = reg.Matches(text); if (mc == null || mc.Count == 0) { return text; } foreach (Match m in mc) { string lurl = m.Value; if (!lurl.StartsWith(http: //bit.ly)) { string surl = transBitUrl(lurl); if (surl != "" ) { text = text.Replace(lurl, surl+ " " ); } } } return text; } |
Bitボタンを付けて、
な状態から、Bitボタンを押せば、
な状態へ。ここまでは1時間半程度、まずまずか。