Google URL Shortener API の利用

Google の短縮 URL サービスである Google URL Shortener (goo.gl) には、
Web サービス API として Google URL Shortener API が用意されています。
今回はこの Google URL Shortener API を .NET のコードから利用して URL を短縮・展開してみます。
技術的には、Web クライアントと JSON 形式について取り扱います。
 
URL の短縮
<第 1 段階>
まずは通信を成功させましょう。
Getting Started にある通り、POST メソッドで JSON 形式のデータを送信します。結果も JSON 形式で受信します。
この場合、WebClient.UploadString メソッドを利用すると簡単です。

private const string UrlShortenerAddress = "https://www.googleapis.com/urlshortener/v1/url&quot;;
private const string OriginalUrl = "https://sakapon.wordpress.com/&quot;;

static void Main()
{
   
string jsonRequest = "{\"longUrl\": \"" + OriginalUrl + "\"}";
   
string jsonResponse = ShortenUrl(jsonRequest);
}

// Google URL Shortener API を呼び出して短縮 URL を取得します。
private static string ShortenUrl(string jsonRequest)
{
   
using (var client = new WebClient { Encoding = Encoding.UTF8 })
    {
        client
.Headers["Content-Type"] = "application/json";

        return client.UploadString(UrlShortenerAddress, jsonRequest);
    }
}


 
取得結果は次のようになります。
{
  "kind": "urlshortener#url",
}
注意点
(1) Encoding プロパティに UTF-8 を指定しておかないと、URL に日本語が含まれている場合に失敗します。
(2) この API から返される JSON 形式データの改行コードは LF (\n) です。
 
<第 2 段階>
次に、JSON 形式のデータをオブジェクトに変換して、短縮 URL を取得します。
JSON 形式を扱うライブラリとしては Json.NET もありますが、
ここでは標準ライブラリの DataContractJsonSerializer クラスを利用してみます。
System.Runtime.Serialization.dll への参照が必要になります。

private const string UrlShortenerAddress = "https://www.googleapis.com/urlshortener/v1/url&quot;;
private const string OriginalUrl = "https://sakapon.wordpress.com/&quot;;

static void Main()
{
   
var request = new UrlInfoRequest { LongUrl = OriginalUrl };
   
string jsonRequest = SerializeToJson(request);

    string jsonResponse = ShortenUrl(jsonRequest);

    var response = DeserializeFromJson<UrlInfoResponse>(jsonResponse);
   
string shortUrl = response.ShortUrl; // http://goo.gl/NCa9Y
}

// Google URL Shortener API を呼び出して短縮 URL を取得します。
private static string ShortenUrl(string jsonRequest)
{
   
using (var client = new WebClient { Encoding = Encoding.UTF8 })
    {
        client
.Headers["Content-Type"] = "application/json";

        return client.UploadString(UrlShortenerAddress, jsonRequest);
    }
}

// オブジェクトを JSON 形式にシリアル化します。
private static string SerializeToJson<T>(T obj)
{
   
var serializer = new DataContractJsonSerializer(typeof(T));
   
var stream = new MemoryStream();
    serializer
.WriteObject(stream, obj);
   
return Encoding.UTF8.GetString(stream.ToArray());
}

// JSON 形式のデータをオブジェクトに逆シリアル化します。
private static T DeserializeFromJson<T>(string jsonText)
{
   
var serializer = new DataContractJsonSerializer(typeof(T));
   
var stream = new MemoryStream(Encoding.UTF8.GetBytes(jsonText));
   
return (T)serializer.ReadObject(stream);
}

[DataContract]
public class UrlInfoRequest
{
    [
DataMember(Name = "longUrl")]
   
public string LongUrl { get; set; }
}

[DataContract]
public class UrlInfoResponse
{
    [
DataMember(Name = "kind")]
   
public string Kind { get; set; }
    [
DataMember(Name = "id")]
   
public string ShortUrl { get; set; }
    [
DataMember(Name = "longUrl")]
   
public string LongUrl { get; set; }
}


 
注意点
(1) エンティティを表すクラスには DataContractAttribute 属性が必要です。
(2) JSON 形式へのシリアル化の際、「/」はエスケープされて「\/」になります。ただし、動作に変わりはありません。
 
Json.NET での記述方法を見る限り、Json.NET を利用したほうが簡単のようです。
 
短縮 URL の展開
短縮 URL を展開する場合もほぼ同様に考えます。
この場合は GET メソッドでよいので、WebClient.DownloadString メソッドを利用します。

private const string UrlShortenerAddress = "https://www.googleapis.com/urlshortener/v1/url&quot;;
private const string ShortUrl = "http://goo.gl/NCa9Y&quot;;

static void Main()
{
   
string jsonResponse = ExpandUrl(ShortUrl);

    var response = DeserializeFromJson<UrlInfoResponse>(jsonResponse);
   
string originalUrl = response.LongUrl; // https://sakapon.wordpress.com/
}

// Google URL Shortener API を呼び出して短縮 URL を展開します。
private static string ExpandUrl(string shortUrl)
{
   
using (var client = new WebClient { Encoding = Encoding.UTF8 })
    {
       
return client.DownloadString(string.Format("{0}?shortUrl={1}", UrlShortenerAddress, shortUrl));
    }
}

// その他のコードは省略します。


 
ちなみに、Google URL Shortener API for .NET というものが存在するようです。
 
バージョン情報
.NET Framework 4
 
参照
 
カテゴリー: .NET Framework. タグ: . Leave a Comment »

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。