コード例 #1
0
ファイル: Program.cs プロジェクト: nick-searle/play-with-me
        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));
        }
コード例 #2
0
        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));
            }
        }