Почему Linkedin Ugc Image Post возвращает ошибку 500? - PullRequest
1 голос
/ 15 марта 2019

Я работаю над созданием обмена изображениями с API LinkedIn v2. В соответствии с документами LinkedIn .

существует три шага.
  1. Зарегистрируйте свое изображение для загрузки.
  2. Загрузите ваше изображение в LinkedIn.
  3. Создание общего ресурса изображения.

Я прошел первые два, используя php curl, но я застрял на третьем. Шаг 3, который выполняется с помощью ugcPost.

Вот тело сообщения, которое я отправил конечной точке ugc:

{
    "author": "urn:li:person:{id-redacted}",
    "lifecycleState": "PUBLISHED",
    "specificContent": {
        "com.linkedin.ugc.ShareContent": {
            "shareCommentary": {
                "text": "hello"
            },
            "shareMediaCategory": "IMAGE",
            "media": {
                "stats": "READY",
                "description": {
                    "text": "this is a descriptoin"
                },
                "media": "urn:li:digitalmediaAsset:{id-redacted}",
                "title": {
                    "text": "this is some title text"
                }
            }
        }
    },
    "visibility": {
        "com.linkedin.ugc.MemberNetworkVisibility": "PUBLIC"
    }
}

Вот код, который я использовал для отправки запроса на запись с помощью php:

    curl_setopt($ch, CURLOPT_URL, $ugcPostEndpoint);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

    curl_setopt($ch, CURLOPT_VERBOSE, true);
    curl_setopt($ch, CURLOPT_STDERR, $out);

    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type:application/json","X-Restli-Protocol-Version: 2.0.0"));
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
    $response = curl_exec($ch);
    $response_status = strval(curl_getinfo($ch, CURLINFO_HTTP_CODE));

возвращает это из curl:

 Hostname was found in DNS cache
   Trying 108.174.10.12...
 Connected to api.linkedin.com (108.174.10.12) port 443 (#2)
 successfully set certificate verify locations:
   CAfile: none
  CApath: /etc/ssl/certs
 SSL connection using {redacted}
 Server certificate:
        subject: C=US; ST=California; L=Mountain View; O=LinkedIn Corporation; CN=tablet.linkedin.com
        start date: 2018-03-30 00:00:00 GMT
        expire date: 2020-04-27 12:00:00 GMT
        subjectAltName: api.linkedin.com matched
        issuer: C=US; O=DigiCert Inc; CN=DigiCert SHA2 Secure Server CA
        SSL certificate verify ok.
 POST /v2/ugcPosts?oauth2_access_token={redacted} HTTP/1.1
Host: api.linkedin.com
Accept: */*
Content-Type:application/json
X-Restli-Protocol-Version: 2.0.0
Content-Length: 734

 upload completely sent off: 734 out of 734 bytes
< HTTP/1.1 500 Server Error
< X-LI-ResponseOrigin: RGW
< Content-Type: application/json
< X-RestLi-Error-Response: true
< X-Restli-Gateway-Error: false
< X-RestLi-Protocol-Version: 2.0.0
< X-Li-Fabric: prod-ltx1
< Transfer-Encoding: chunked
< Connection: keep-alive
< X-Li-Pop: prod-edc2
< X-LI-Proto: http/1.1
< X-LI-UUID: {redacted}
< Set-Cookie: {redacted}
< X-LI-Route-Key: {redacted}
<
 Connection #2 to host api.linkedin.com left intact

Почему происходит ошибка 500? Насколько я знаю, я следую всем примерам / документам. (Я знаю, что 500 ошибок могут быть проблемой с их стороны, но по моему опыту при работе с API 500 ошибок часто означают, что запрос curl как-то не так.

1 Ответ

1 голос
/ 20 марта 2019

Я понял, что я делаю неправильно, если у кого-то еще есть подобная проблема.

Медиа-часть тела должна быть 0-м элементом в массиве следующим образом:

 "media": [
            {
                "status": "READY",
                "description": {
                    "text": "this is a description"
                },
                "media": "urn:li:digitalmediaAsset:{id}",
                "title": {
                    "text": "this is some title text"
                }
            }
        ]

Не это:

     "media":
            {
                "status": "READY",
                "description": {
                    "text": "this is a description"
                },
                "media": "urn:li:digitalmediaAsset:{id}",
                "title": {
                    "text": "this is some title text"
                }
            }

Документы LinkedIn не делают это супер очевидным.

...