private static string GetTargetCartPayload(TargetSearchItem item) { var body = @"{{ ""cart_type"": ""REGULAR"", ""channel_id"": ""91"", ""shopping_context"": ""DIGITAL"", ""cart_item"": {{ ""tcin"": ""{0}"", ""quantity"": 1, ""item_channel_id"": ""10"" }}, ""fulfillment"": {{ ""fulfillment_test_mode"": ""grocery_opu_team_member_test"" }} }}"; return(string.Format(body, item.Tcin)); }
public static async Task <IActionResult> Run( [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req, ILogger log, ExecutionContext context) { var lastResponse = string.Empty; try { var mode = ((string)req.Query["mode"]) ?? string.Empty; var rawResponse = httpHelper.GetResponse("https://www.target.com"); lastResponse = rawResponse.Content.ReadAsStringAsync().Result; var responseHeaders = rawResponse.Headers; var key = httpHelper.GetCookie(responseHeaders, "visitorId"); if (key == null) { throw new ArgumentException("No key provided"); } string searchResults; if (!mode.Contains("-l")) { searchResults = File.ReadAllText(Path.Combine(context.FunctionAppDirectory, "requests/target/target-search-response.json")); } else { var searchTerm = "sony playstation consoles"; searchResults = httpHelper.GetStringResponse($"https://redsky.target.com/v2/plp/search/?channel=web&count=96&keyword={searchTerm}&offset=0&pricing_store_id=3991&key={key}"); } lastResponse = searchResults; var items = new List <TargetSearchItem>(); foreach (var item in JsonConvert.DeserializeObject <JObject>(searchResults)["search_response"]["items"]["Item"]) { var searchItem = new TargetSearchItem { Title = item["title"]?.ToString(), Tcin = item["tcin"]?.ToString(), Dpci = item["dpci"]?.ToString(), Upc = item["upc"]?.ToString(), Url = "https://www.target.com" + (item["url"]?.ToString() ?? ""), Status = item["availability_status"]?.ToString() }; if (searchItem.Status != "IN_STOCK") { searchItem.Status = item["loyalty_availability_status"]?.ToString(); } searchItem.Instock = searchItem.Status == "IN_STOCK"; items.Add(searchItem); } items = items.Where(i => i.Title.Contains("playstation", StringComparison.InvariantCultureIgnoreCase) && i.Title.Contains("5") && i.Title.Contains("console", StringComparison.InvariantCultureIgnoreCase)).ToList(); var responseMessage = JsonConvert.SerializeObject(items); return(new OkObjectResult(responseMessage)); } catch (Exception ex) { var detailEx = new Exception($"Target Server Response: {lastResponse}", ex); return(new ExceptionResult(detailEx, true)); } }