/// <summary> /// Get all farm from travianstats.de /// </summary> /// <returns></returns> public async static Task <List <InactiveFarm> > GetFarms(Account acc, Coordinates Coords, int Distance) { var serverUrl = acc.AccInfo.ServerUrl; // get serverUrl without https:// var url = (new UriBuilder(serverUrl)).Host; if (!(await CheckServerSupport(acc, url))) { return(null); } var Client = acc.Wb.RestClient; var moreFarm = true; var index = 1; var result = new List <InactiveFarm>(); while (moreFarm) { Client.BaseUrl = new Uri($"https://www.inactivesearch.it/inactives/{url}?c={Coords.x}|{Coords.y}&page={index}"); var request = new RestRequest(Method.GET); var response = await Client.ExecuteAsync(request); if (response.StatusCode != HttpStatusCode.OK) { return(null); } var doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(response.Content); // table var table = doc.DocumentNode.SelectNodes("//table[@class='table table-condensed table-inactives table-shadow']//tbody") // they use myTable for naming their table ?_? .Descendants("tr") .Where(tr => tr.Elements("td").Count() > 1) .Select(tr => tr.Elements("td").Select(td => td.InnerText.Trim().Replace("\t", "").Replace("\n", "")).ToList()) .ToList(); if (table.Count < 1) { moreFarm = false; break; } foreach (var row in table) { try { var intDistance = int.Parse(row[0].Split('.').First()); if (intDistance > Distance) { moreFarm = false; break; } result.Add(new InactiveFarm() { distance = intDistance, coord = MapParser.GetCoordinates(row[1]), nameVill = row[2], // row[3] hide village button // row[4] attack button population = int.Parse(row[5].Split('+').First().Split('-').First()), // row[6], [7], [8], [9] population previous day // row[10] icon tribe namePlayer = row[11], nameAlly = row[12], }); } catch (Exception) { } } index++; } return(result); }
/// <summary> /// Get all farm from travianstats.de /// </summary> /// <param name="serverCode"></param> /// <returns></returns> public async static Task <List <InactiveFarm> > GetFarms(Account acc, Coordinates Coords, int Distance) { var ServerCode = await GetServerCode(acc); if (string.IsNullOrEmpty(ServerCode)) { return(null); } var Client = acc.Wb.RestClient; Client.BaseUrl = new Uri("https://travianstats.de"); var request = new RestRequest($"?m=inactive_finder&w={ServerCode}", Method.POST); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.AddHeader("Cookie", $"tcn_world={ServerCode}"); request.AddParameter("m", "inactivefinder"); request.AddParameter("w", ServerCode); request.AddParameter("x", $"{Coords.x}"); request.AddParameter("y", $"{Coords.y}"); request.AddParameter("distance", $"{Distance}"); var response = await Client.ExecuteAsync(request); if (response.StatusCode != HttpStatusCode.OK) { return(null); } if (response.Content.Contains("Nothing found")) { return(null); } var doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(response.Content); // table var table = doc.DocumentNode.SelectNodes("//table[@id='myTable']//tbody") // they use myTable for naming their table ?_? .Descendants("tr") .Where(tr => tr.Elements("td").Count() > 1) .Select(tr => tr.Elements("td").Select(td => td.InnerText.Trim().Replace("\t", "").Replace("\n", "")).ToList()) .ToList(); var result = new List <InactiveFarm>(); foreach (var row in table) { try { result.Add(new InactiveFarm() { //status = row[0] distance = int.Parse(row[1]), coord = MapParser.GetCoordinates(row[2]), namePlayer = row[3], nameAlly = row[4], nameVill = row[5], population = int.Parse(row[6]) //functions = row[7] }); } catch (Exception) { } } return(result); }
private async Task <List <InactiveFarm> > GetFarms() { var serverCode = await GetServerCode(); if (string.IsNullOrEmpty(serverCode)) { string message = "Bot was unable to find the server code! This feature is only available for normal travian servers."; string caption = "Error getting server code"; MessageBox.Show(message, caption, MessageBoxButtons.OK); return(null); } var request = new RestRequest($"?m=inactive_finder&w={serverCode}", Method.POST); request.AddHeader("Content-Type", "application/x-www-form-urlencoded"); request.AddHeader("Cookie", $"tcn_world={serverCode}"); request.AddParameter("m", "inactivefinder"); request.AddParameter("w", serverCode); request.AddParameter("x", ((int)coordinatesUc1.Coords.x).ToString()); request.AddParameter("y", ((int)coordinatesUc1.Coords.y).ToString()); request.AddParameter("distance", ((int)Distance.Value).ToString()); var response = await Client.ExecuteAsync(request); if (response.StatusCode != HttpStatusCode.OK) { throw new Exception("SendGetReq failed!\n" + response.Content); } if (response.Content.Contains("Nothing found")) { return(null); } var doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(response.Content); // table var table = doc.DocumentNode.SelectNodes("//table[@id='myTable']//tbody") // they use myTable for naming their table ?_? .Descendants("tr") .Where(tr => tr.Elements("td").Count() > 1) .Select(tr => tr.Elements("td").Select(td => td.InnerText.Trim().Replace("\t", "").Replace("\n", "")).ToList()) .ToList(); var result = new List <InactiveFarm>(); foreach (var row in table) { try { result.Add(new InactiveFarm() { //status = row[0] distance = Int32.Parse(row[1]), coord = MapParser.GetCoordinates(row[2]), namePlayer = row[3], nameAlly = row[4], nameVill = row[5], population = Int32.Parse(row[6]) //functions = row[7] }); } catch (Exception) { } } return(result); }