public async Task <List <Item> > GetItems(int tabIndex, string league, Player player) { if (Settings.Data().Get <bool>("Debug")) { MessageController.Instance().Log($"[Debug][API] Retrieving items of tab #{tabIndex} of {league} league..."); } var uri = new Uri(Url_MainPoEPage); var cookieContainer = new CookieContainer(); using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer }) using (var client = new HttpClient(handler) { BaseAddress = uri }) { cookieContainer.Add(uri, new Cookie(PoESessionIdCookieName, player.SessionId)); UrlQuery query = new UrlQuery(); query.Add("league", league); query.Add("tabs", "0"); query.Add("tabIndex", tabIndex.ToString()); query.Add("accountName", player.AccountName); try { var data = await client.GetStringAsync(BaseUrl_StashItems + query.Build(true)); var parsedData = JsonConvert.DeserializeObject <Dictionary <string, object> >(data); var itemsStr = parsedData["items"].ToString(); var parsedItems = JsonConvert.DeserializeObject <List <Dictionary <string, object> > >(itemsStr); List <Item> items = ParseItems(parsedItems); return(items); } catch (HttpRequestException e) { MessageController.Instance().Log($"[Error][API] Error while retrieving items of tab #{tabIndex} of {league} league: {e.Message}"); return(null); } } }
public async Task <bool> UpdateShopThread(int threadId, Player player, string content) { string editThreadPage = await GetEditThreadPage(threadId, player.SessionId); if (editThreadPage == null) { return(false); } string csrfToken = Utils.GetCsrfToken(editThreadPage, "hash"); if (string.IsNullOrEmpty(csrfToken)) { return(false); } string title = Utils.FindTextBetween(editThreadPage, "<input type=\"text\" name=\"title\" id=\"title\" onkeypress=\"return event.keyCode!=13\" value=\"", "\">"); UrlQuery data = new UrlQuery(); data.Add("hash", csrfToken); data.Add("title", title); data.Add("content", content); data.Add("submit", "Submit"); var uri = new Uri(Url_MainPoEPage); var cookieContainer = new CookieContainer(); using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer }) using (var client = new HttpClient(handler) { BaseAddress = uri }) { cookieContainer.Add(uri, new Cookie(PoESessionIdCookieName, player.SessionId)); var baseUrl = BaseUrlTemplate_EditThread.Replace("$threadId$", threadId.ToString()); try { var response = await client.PostAsync(baseUrl, new StringContent(data.Build(), Encoding.UTF8, "application/x-www-form-urlencoded")); if (response.IsSuccessStatusCode) { if (await NotifyPoETrade(threadId, player.SessionId)) { return(true); } } } catch (HttpRequestException e) { MessageController.Instance().Log($"[Error][API] Error while updating shop thread {threadId}: {e.Message}"); return(false); } } return(false); }
public async Task <List <StashTab> > GetStashTabs(string league, Player player) { if (Settings.Data().Get <bool>("Debug")) { MessageController.Instance().Log($"[Debug][API] Retrieving stash tabs for league {league}..."); } List <StashTab> stashTabs = new List <StashTab>(); var uri = new Uri(Url_MainPoEPage); var cookieContainer = new CookieContainer(); using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer }) using (var client = new HttpClient(handler) { BaseAddress = uri }) { cookieContainer.Add(uri, new Cookie(PoESessionIdCookieName, player.SessionId)); UrlQuery query = new UrlQuery(); query.Add("league", league); query.Add("tabs", "1"); query.Add("tabIndex", "0"); query.Add("accountName", player.AccountName); try { var data = await client.GetStringAsync(BaseUrl_StashItems + query.Build(true)); var parsedData = JsonConvert.DeserializeObject <Dictionary <string, object> >(data); var tabsStr = parsedData["tabs"].ToString(); var parsedTabs = JsonConvert.DeserializeObject <List <Dictionary <string, object> > >(tabsStr); stashTabs = parsedTabs.Select(t => new StashTab(t, league)).ToList(); var itemsStr = parsedData["items"].ToString(); var parsedItems = JsonConvert.DeserializeObject <List <Dictionary <string, object> > >(itemsStr); List <Item> items = ParseItems(parsedItems); stashTabs.Find(t => t.Index == 0).Items = items; } catch (HttpRequestException e) { MessageController.Instance().Log($"[Error][API] Error while retrieving stash tabs for league {league}: {e.Message}"); return(null); } } foreach (var tab in stashTabs) { if (tab.Index > 0) { var items = await GetItems(tab.Index, league, player); if (items != null) { tab.Items = items; } else { MessageController.Instance().Log($"[Warn][API] Getting items for tab #{tab.Index} failed."); } } } return(stashTabs); }
public async Task <int> GenerateShopThread(string league, Player player) { string html = await GetForumPage(); string forumId = GetForumId(html, league); if (!string.IsNullOrEmpty(forumId)) { var newThreadPage = await GetNewThreadPage(forumId, player.SessionId); string csrfToken = Utils.GetCsrfToken(newThreadPage, "hash"); UrlQuery data = new UrlQuery(); data.Add("hash", csrfToken); data.Add("title", $"{player.AccountName}'s {league} Shop"); data.Add("content", "reserved"); data.Add("submit", "Submit"); var uri = new Uri(Url_MainPoEPage); var cookieContainer = new CookieContainer(); using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer }) using (var client = new HttpClient(handler) { BaseAddress = uri }) { cookieContainer.Add(uri, new Cookie(PoESessionIdCookieName, player.SessionId)); var baseUrl = BaseUrlTemplate_NewThread.Replace("$forumId$", forumId); try { var response = await client.PostAsync(baseUrl, new StringContent(data.Build(), Encoding.UTF8, "application/x-www-form-urlencoded")); if (response.IsSuccessStatusCode) { return(Convert.ToInt32(response.RequestMessage.RequestUri.Segments.Last())); } MessageController.Instance().Log($"[Error][API] Error while generating a new forum thread: HTTP{response.StatusCode} {response.ReasonPhrase}"); } catch (HttpRequestException e) { MessageController.Instance().Log($"[Error][API] Error while generating a new forum thread: {e.Message}"); return(-1); } } } return(-1); }