public static CharacterModel GetCharacter(RegionsLookup region, string server, string name)
        {
            string key = string.Format("character_{0}_{1}_{2}", region, server, name);

            ObjectCache cache = MemoryCache.Default;
            CharacterModel item = cache[key] as CharacterModel;

            if (item == null)
            {
                string requestUrl = string.Format("{0}/character/{1}/{2}", GetBaseRequestURL(region), server, name);

                try
                {
                    WebClient client = new WebClient();
                    string result = client.DownloadString(requestUrl);

                    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(CharacterModel));

                    using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(result)))
                    {
                        item = serializer.ReadObject(ms) as CharacterModel;
                    }

                    DateTimeOffset dto = new DateTimeOffset();

                    dto.AddHours(1);

                    cache.Set(key, item, DateTimeOffset.Now.AddMinutes(30));
                }
                catch (Exception ex)
                {
                }
            }

            return item;
        }
        private static IEnumerable<dynamic> GetGuildMembersDetails(RegionsLookup region, string realm, string guildName)
        {
            List<dynamic> characters = new List<dynamic>();

            dynamic guild = GetGuildInfo(region, realm, guildName);

            foreach (dynamic character in guild["members"])
            {
                try
                {
                    string name = character["character"]["name"];

                    dynamic c = GetCharacterDetail(region, realm, name);
                    if (c != null)
                    {
                        characters.Add(c);
                    }
                }
                catch { }
            }

            return characters;
        }
        private static IEnumerable<CharacterModel> GetGuildMembers(RegionsLookup region, string realm, string guildName)
        {
            List<CharacterModel> characters = new List<CharacterModel>();

            dynamic guild = GetGuildInfo(region, realm, guildName);

            foreach (dynamic character in guild["members"])
            {
                try
                {
                    string name = character["character"]["name"];

                    CharacterModel c = GetCharacter(region, realm, name);
                    if (c != null)
                    {
                        characters.Add(c);
                    }
                }
                finally { }
            }

            return characters;
        }
        private static dynamic GetGuildInfo(RegionsLookup region, string server, string guild)
        {
            string key =string.Format("guild_{0}_{1}_{2}", region, server, guild);

            ObjectCache cache = MemoryCache.Default;

            dynamic item = cache[key];

            if (item == null)
            {
                string requestUrl = string.Format("{0}/guild/{1}/{2}?fields=news,members,achievements,challenge", GetBaseRequestURL(region), server, guild);

                item = MakeRequest(requestUrl);

                cache.Set(key, item, DateTimeOffset.Now.AddHours(1));
            }

            return item;
        }
 /// <summary>
 /// Get's the base url to the Blizzard API for the given region.
 /// </summary>
 /// <param name="region"></param>
 /// <returns></returns>
 private static string GetBaseRequestURL(RegionsLookup region)
 {
     string r=string.Empty;
     switch (region)
     {
         case RegionsLookup.EU:
             r = "eu";
             break;
         case RegionsLookup.US:
             r = "us";
             break;
     }
     return string.Format("http://{0}.battle.net/api/wow", r);
 }
        public static dynamic GetCharacterDetail(RegionsLookup region, string server, string name)
        {
            string requestUrl = string.Format("{0}/character/{1}/{2}?fields=items", GetBaseRequestURL(region), server, name);

            return MakeRequest(requestUrl);
        }