C#でDozensのDNSレコードを操作する

DNSの管理サービス「Dozens」ではAPIでDNSレコードを操作することができます。

今回、C#で操作してみました。

```csharp
using System;
using System.Linq;
using System.Net;
using Codeplex.Data;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            // APIの仕様は下記URL参照
            // https://sites.google.com/a/dozens.jp/docs/

            string authToken;
            // 認証
            using (var wc = new WebClient())
            {
                wc.Headers.Add("X-Auth-User", "{DOZENS ID}");
                wc.Headers.Add("X-Auth-Key", "{プロフィールに表示されるAPI KEY}");

                var json = wc.DownloadString("http://dozens.jp/api/authorize.json");

                authToken = DynamicJson.Parse(json).auth_token;
            }

            using (var wc = new WebClient())
            {
                wc.Headers.Add("X-Auth-Token", authToken);
                // ゾーンの取得
                var json = wc.DownloadString("http://dozens.jp/api/zone.json");
                Console.WriteLine("－－－全Zone－－－\n{0}", json);

                // レコードの取得
                json = wc.DownloadString("http://dozens.jp/api/record/nkd.jp.json");
                Console.WriteLine("－－－全Record－－－\n{0}", json);
            }

            string recordsJson;
            // レコードの登録
            using (var wc = new WebClient())
            {
                wc.Headers.Add("X-Auth-Token", authToken);
                wc.Headers.Add("Content-Type", "application/json");

                recordsJson = wc.UploadString("http://dozens.jp/api/record/create.json", "POST",
                    DynamicJson.Serialize(
                        new
                        {
                            domain = "{自分の持ってるドメイン}",
                            name = "www",
                            type = "A",
                            prio = "10",
                            content = "192.168.1.100",
                            ttl = "7200"
                        }));
                Console.WriteLine("－－－全Record（登録後）－－－\n{0}", recordsJson);
            }

            // 登録したレコードに対して以降の操作を行う
            var records = (dynamic[])DynamicJson.Parse(recordsJson).record;
            dynamic record = records.First(x => x.name == "www.{自分の持ってるドメイン}");

            // レコードの更新
            using (var wc = new WebClient())
            {
                wc.Headers.Add("X-Auth-Token", authToken);
                wc.Headers.Add("Content-Type", "application/json");

                var url = string.Format("http://dozens.jp/api/record/update/{0}.json", record.id);
                var json = wc.UploadString(url, "POST",
                DynamicJson.Serialize(
                    new
                    {
                        prio = "10",
                        content = "192.168.1.200",
                        ttl = "7200"
                    }));
                Console.WriteLine("－－－全Record（更新後）－－－\n{0}", json);
            }

            // レコードの削除
            using (var wc = new WebClient())
            {
                wc.Headers.Add("X-Auth-Token", authToken);
                var url = string.Format("http://dozens.jp/api/record/delete/{0}.json", record.id);
                var json = wc.UploadString(url, "DELETE", "");
                Console.WriteLine("－－－全Record（削除後）－－－\n{0}", json);
            }
        }
    }
}
```