Как получить отзывы от Trustpilot API

#c# #api #httpclient #trustpilot

Вопрос:

Попытка получить отзывы Trustpilot от конкретного продукта, но ничего не получается.

Может получить токен с успехом, но тогда отзывы:

и

ApiKey-это то же самое, чтобы получить токен, поэтому не понимаю, почему здесь не работает. В отчаянной попытке добавил токен в URL (?токен={токен}) и также не увенчался успехом.

Коллекция артикулов включает в себя все варианты. Также пробовал без параметра sku, и ничего не извлекается.

Вот код:

             var ApiKey = "ApiKey";
            var SecretKey = "SecretKey";
            var Username = "Username";
            var Password = "Password";

            var serverUrl = "xxx.xxx.xxx.xxx";

            var BusinnessUnit = "BusinnessUnit";

            var AuthUrl2 = "https://api.trustpilot.com/v1/oauth/oauth-business-users-for-applications/accesstoken";
            var ReviewUrl = "https://api.trustpilot.com/v1/private/product-reviews/business-units/"  bkBusinnessUnit   "/reviews";
            var ProductReviewUrl = "https://api.trustpilot.com/v1/product-reviews/business-units/"   bkBusinnessUnit   "/reviews";

            var token = "";

            // get token
            using (var httpClient = new HttpClient())
            {
                try
                {
                    httpClient.BaseAddress = new Uri(AuthUrl2);

                    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));

                    var authString = ApiKey   ":"   SecretKey;
                    string encodedStr = Convert.ToBase64String(Encoding.UTF8.GetBytes(authString));
                    httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", encodedStr);

                    var stringPayload = "grant_type=passwordamp;username="   Username   "amp;password="   Password;

                    var httpContent = new StringContent(stringPayload, Encoding.UTF8, "application/x-www-form-urlencoded");
                    HttpResponseMessage httpResponseMessage = httpClient.PostAsync(AuthUrl2, httpContent).Resu<

                    var accessTokenResponseString = httpResponseMessage.Content.ReadAsStringAsync().Resu<

                    var accessTokenResponseObject = JsonConvert.DeserializeObject<AccessTokenResponse>(accessTokenResponseString);

                    token = accessTokenResponseObject.AccessToken;
                    Console.WriteLine("Token retrieved. "   token);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Failed!"   ex.ToString());
                }
            }

            // get product reviews
            using (var httpClient = new HttpClient())
            {
                try
                {
                    httpClient.BaseAddress = new Uri(ProductReviewUrl);

                    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));

                    var authString = ApiKey   ":"   SecretKey;
                    string encodedStr = Convert.ToBase64String(Encoding.UTF8.GetBytes(authString));
                    httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", encodedStr);

                    var stringPayload = "sku=SK40132-BLK-6,SK40132-BLK-8,SK40132-BLK-10,SK40132-BLK-12,SK40132-BLK-14,SK40132-BLK-16,SK40132-BLK-18amp;token="   token;

                    var httpContent = new StringContent(stringPayload, Encoding.UTF8, "application/x-www-form-urlencoded");
                    HttpResponseMessage httpResponseMessage = httpClient.PostAsync(ProductReviewUrl, httpContent).Resu<

                    var reviewResponseString = httpResponseMessage.Content.ReadAsStringAsync().Resu<

                    var reviewResponseObject = JsonConvert.DeserializeObject<AccessTokenResponse>(reviewResponseString);

                    Console.WriteLine(reviewResponseObject   "Product review retrieved."   reviewResponseString);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Failed!"   ex.ToString());
                }
            }

            // get reviews
            using (var httpClient = new HttpClient())
            {
                try
                {
                    httpClient.BaseAddress = new Uri(ReviewUrl);

                    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));

                    httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);

                    var stringPayload = "sku=SK40132-BLK-6,SK40132-BLK-8,SK40132-BLK-10,SK40132-BLK-12,SK40132-BLK-14,SK40132-BLK-16,SK40132-BLK-18";

                    var httpContent = new StringContent(stringPayload, Encoding.UTF8, "application/x-www-form-urlencoded");
                    HttpResponseMessage httpResponseMessage = httpClient.PostAsync(ReviewUrl, httpContent).Resu<

                    var reviewResponseString = httpResponseMessage.Content.ReadAsStringAsync().Resu<

                    var reviewResponseObject = JsonConvert.DeserializeObject<AccessTokenResponse>(reviewResponseString);

                    Console.WriteLine(reviewResponseObject   "Review retrieved."   reviewResponseString);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Failed!"   ex.ToString());
                }
            } 

Ответ №1:

/v1/частные/обзоры продуктов/бизнес-подразделения/{businessUnitId}/отзывы для конечной точки требуется токен. Это может быть предоставлено либо через заголовок, либо через параметры запроса. Это работает на вас, так как вы сделали это правильно.

/v1/обзоры продуктов/бизнес-подразделения/{businessUnitId}/отзывы для конечной точки требуется только apikey. Вы могли бы пройти его двумя способами:

  • через заголовок

    HttpClient.По умолчанию требуются исполнители.Принять.Добавить(«апикей», АпиКей);

  • с помощью параметров запроса

    var stringPayload = «sku=SK40132-BLK-6,SK40132-BLK-8,SK40132-BLK-10,SK40132-BLK-12,SK40132-BLK-14,SK40132-BLK-16,SK40132-BLK-18amp;apikey=» АпиКей;

Комментарии:

1. Спасибо Арунас, но почему конечная точка, для которой требуется токен, не возвращает данные? Конечная точка, для которой требуется только apikey, попробовала оба способа, и ни один не сработал.

2. Он должен возвращать отзывы о продукте, если они у него есть. Попробуйте добавить amp;page=1amp;perPage=100 в качестве дополнительных параметров запроса рядом с артикулом.

3. Безрезультатно добавлены параметры страницы (с артикулом и без артикула).

Ответ №2:

Это было невероятно просто, это должна быть GetAsync, а не PostAsync.

В любом случае спасибо, что посмотрели на это.