投稿専用Twitterクライアントを作る(2)

前回の反省を踏まえて、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

があるので参照する。

  1. bit.ly で api key を取得する。
  2. .NETのWebClientを使うことに決定。
  3. クエリ呼び出しが楽なので、OpenReadメソッドを使う。
  4. テスト用のプロジェクトを作って、長いURLを渡して結果を返すところまで完成。
  5. デフォルトではJSONで返ってくるので、formatをxmlで指定。
  6. ストリームを XmlTextReader → XmlDocument に変換。
  7. 「shortUrl」を探して変換テスト
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を変換させる。

  1. IndexOfメソッドで変換しようと思ったが、面倒そう。
  2. 正規表現の Regex クラスを使うことに決定。
  3. 簡単のために”http://[^ ]+ “ のように、後ろに半角スペースで区切る。
    実は、文章末の場合のチェックが必要なのだが、ここでは省く。
  4. 見つかった文字列を MatchCollection で受けて、Replace すれば OK。
  5. ローカルでチェックしてOKなので、これを先のアプリに組み込む。
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ボタンを付けて、

20100504_02

な状態から、Bitボタンを押せば、

20100504_03

な状態へ。ここまでは1時間半程度、まずまずか。

カテゴリー: 開発 パーマリンク