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); }