public static (SouqProductBucket bucket, IDictionary <string, SouqToken> tokens) GetProductResultsHtml(string productFullId) { retry: SyncSouqCookies(); var url = $"https://egypt.souq.com/eg-en/{productFullId}/i/"; HtmlDocument document; try { document = WebScrapper.GetDownloadHtml(url); } catch (HtmlScapperException ex) { goto retry; } #region Bucket var globalBucketNode = document.DocumentNode.Descendants().First(l => l.Name == "script" && l.InnerHtml.Contains("globalBucket")); var globalBucketData = globalBucketNode.InnerText.Replace("var globalBucket =", "").TrimStart().TrimEnd(); var bucketObj = JsonConvert.DeserializeObject <SouqProductBucket>(globalBucketData); #endregion #region Token Dictionary <string, SouqToken> tmpResult = new Dictionary <string, SouqToken>(); var formIds = new[] { "searchForm", "addItemToCart", "reviews-list-id" }; int index = 0; var formResults = new SouqToken[3]; foreach (var formId in formIds) { var filter_hitNodeExist = document.DocumentNode.Descendants() .AnyByNameNAttribute("form", "id", formId); if (filter_hitNodeExist) { var filter_hitsNode = document.DocumentNode.Descendants() .SingleByNameNAttribute("form", "id", formId); var filter_hitsCfs = filter_hitsNode.Descendants() .SingleByNameNAttribute("input", "name", "hitsCfs"); var filter_hitsCfsMeta = filter_hitsNode.Descendants() .SingleByNameNAttribute("input", "name", "hitsCfsMeta"); formResults[index] = new SouqToken() { hitsCfs = filter_hitsCfs.Attributes["value"].Value, hitsCfsMeta = filter_hitsCfsMeta.Attributes["value"].Value }; } else { formResults[index] = null; } index++; } for (int i = 0; i < formIds.Length; i++) { tmpResult.Add(formIds[i], formResults[i]); } #endregion return(bucketObj, tmpResult); }
public static IDictionary <string, SouqToken> GetProductAccessTokens(string productFullId) { retry: SyncSouqCookies(); var url = $"https://egypt.souq.com/eg-en/{productFullId}/i/"; try { Dictionary <string, SouqToken> tmpResult = new Dictionary <string, SouqToken>(); var document = WebScrapper.GetDownloadHtml(url, cookies: Cookies); var formIds = new[] { "searchForm", "addItemToCart", "reviews-list-id" }; int index = 0; var formResults = new SouqToken[3]; foreach (var formId in formIds) { var filter_hitNodeExist = document.DocumentNode.Descendants() .AnyByNameNAttribute("form", "id", formId); if (filter_hitNodeExist) { var filter_hitsNode = document.DocumentNode.Descendants() .SingleByNameNAttribute("form", "id", formId); var filter_hitsCfs = filter_hitsNode.Descendants() .SingleByNameNAttribute("input", "name", "hitsCfs"); var filter_hitsCfsMeta = filter_hitsNode.Descendants() .SingleByNameNAttribute("input", "name", "hitsCfsMeta"); formResults[index] = new SouqToken() { hitsCfs = filter_hitsCfs.Attributes["value"].Value, hitsCfsMeta = filter_hitsCfsMeta.Attributes["value"].Value }; } else { formResults[index] = null; } index++; } for (int i = 0; i < formIds.Length; i++) { tmpResult.Add(formIds[i], formResults[i]); } return(tmpResult); } catch (HtmlScapperException ex) { goto retry; } }