【问题标题】:How to get reviews from Trustpilot API如何从 Trustpilot API 获取评论
【发布时间】:2021-07-08 15:17:40
【问题描述】:

试图从特定产品中获得 Trustpilot 评论,但无处可去。

可以成功获得token,但随后是评论:

与

获取token的ApiKey是一样的所以不明白为什么在这里不起作用。在绝望的尝试中将令牌添加到 url (?token={token}) 并且也没有成功。

sku 集合包括所有变体。也试过不带 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=password&username=" + Username + "&password=" + Password;

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

                    var accessTokenResponseString = httpResponseMessage.Content.ReadAsStringAsync().Result;

                    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-18&token=" + token;

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

                    var reviewResponseString = httpResponseMessage.Content.ReadAsStringAsync().Result;

                    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).Result;

                    var reviewResponseString = httpResponseMessage.Content.ReadAsStringAsync().Result;

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

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

【问题讨论】:

    标签: c# api httpclient trustpilot


    【解决方案1】:

    /v1/private/product-reviews/business-units/{businessUnitId}/reviews 端点需要令牌。它可以通过标题或查询参数提供。它对你有用,因为你做得对。

    /v1/product-reviews/business-units/{businessUnitId}/reviews 端点只需要 apikey。您可以通过两种方式传递它:

    • 通过标题

      httpClient.DefaultRequestHeaders.Accept.Add("apikey", ApiKey);

    • 通过查询参数

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

    【讨论】:

    • 感谢 Arunas,但为什么需要令牌的端点不返回数据?只需要 apikey 的端点尝试了两种方法都没有成功。
    • 它应该返回产品评论(如果有的话)。尝试在 sku 旁边添加&amp;page=1&amp;perPage=100 作为附加查询参数。
    • 添加页面参数未成功(有sku和无sku)。
    【解决方案2】:

    它应该是 GetAsync 而不是 PostAsync。

    感谢您的关注。

    【讨论】:

      猜你喜欢
      • 2019-03-02
      • 2016-07-29
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      • 2016-03-21
      • 2023-02-14
      • 2013-10-02
      • 2013-05-01
      相关资源
      最近更新 更多