无法使用他们的API在Pinterest上发布

时间:2016-05-07 18:09:37

标签: c# json pinterest

我在Pinterest上发布pin时收到400 Bad Request错误消息。它使用Postman工作,但不能以编程方式工作。使用C#,是否有人能够在不使用pinsharp包装器的情况下在Pinterest上成功发布引脚?

private void postPinterest(string messages, string id, string usertoken, string image, string boardname, string username)
{
    string link = null;
    boardname = boardname.Replace(" ", "-");

    string board = username + "/" + boardname;
    string url = "https://api.pinterest.com/v1/pins?access_token=" + usertoken;

    StringBuilder sb = new StringBuilder();
    if (!string.IsNullOrEmpty(board))
        sb.Append("&board=" + HttpUtility.UrlEncode(board));
    if (!string.IsNullOrEmpty(messages))
        sb.Append("&note=" + HttpUtility.UrlEncode(messages));
    if (!string.IsNullOrEmpty(link))
        sb.Append("&image_url=" + HttpUtility.UrlEncode(link));

    string postdata = sb.ToString().Substring(1);
    PostData(url, postdata);
}

private object PostData(string url, string postdata)
{
    object json=null;
    try
    {
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        req.Method = "POST";
        req.ContentType = "application/x-www-form-urlencoded";
        //  req.Accept = "application/json";
        using (var stream = req.GetRequestStream())
        {
            byte[] bindata = Encoding.ASCII.GetBytes(postdata);
            stream.Write(bindata, 0, bindata.Length);
        }
        HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
        string response = new StreamReader(resp.GetResponseStream()).ReadToEnd();

        json = JsonConvert.DeserializeObject<dynamic>(response);
        return json;
    }
    catch (WebException wex)
    {
        if (wex.Response != null)
        {
            using (var errorResponse = (HttpWebResponse)wex.Response)
            {
                using (var reader = new StreamReader(errorResponse.GetResponseStream()))
                {
                    string error = reader.ReadToEnd();                          
                    return json;

                }
            }
        }
    }
    return json;

}

修改

使用JSON格式或x-www-form-urlencoded格式无效。

我将内容类型更改为application / x-www-form-urlencoded,现在我收到了以下错误消息。我使用JSON格式收到400错误请求错误:

"{\n  \"message\": \"405: Method Not Allowed\",\n  \"type\": \"http\"\n}"

2 个答案:

答案 0 :(得分:3)

问题是您要发布的参数 在Api中,我可以找到Number作为参数,但boardnote都在image参数下,该参数指定返回类型JSON。
根据{{​​3}}上的文档,您可以采用此格式发布

field

所以我尝试了以下内容并获得了响应

https://api.pinterest.com/v1/boards/anapinskywalker/wanderlust/pins/?
    access_token=abcde&
    limit=2&
    fields=id,link,counts,note

建议您先测试Api,然后在https://api.pinterest.com/v1/boards/?access_token="YourTokenWithoutQuotes"&fields=id%2Ccreator 函数中放置一个断点并检查传递的网址格式是否正确,并将其与this page进行比较。
您可能已经收到PostDataauthorization code,因此我假设您的帖子功能应该正常。

答案 1 :(得分:1)

public string postPinterest(string access_token,string boardname,string note,string image_url)
      {

            public string pinSharesEndPoint = "https://api.pinterest.com/v1/pins/?access_token={0}";

            var requestUrl = String.Format(pinSharesEndPoint, accessToken);
            var message = new
            {
                 board = boardname,
                 note = note,
                 image_url = image_url
            };

            var requestJson = new JavaScriptSerializer().Serialize(message);

            var client = new WebClient();
            var requestHeaders = new NameValueCollection
{

    {"Content-Type", "application/json" },
            {"x-li-format", "json" }

};
            client.Headers.Add(requestHeaders);
            var responseJson = client.UploadString(requestUrl, "POST", requestJson);
            var response = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(responseJson);
            return response;
}