如何从 Trustpilot API 获取评论

问题描述 投票:0回答:2

尝试从特定产品获得 Trustpilot 评论,但一无所获。

可以成功获得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# dotnet-httpclient trustpilot
2个回答
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=” + API 密钥;


0
投票

这非常简单,它应该是 GetAsync 而不是 PostAsync。

无论如何,感谢您看到它。

© www.soinside.com 2019 - 2024. All rights reserved.