{"id":28804,"date":"2021-06-20T17:58:00","date_gmt":"2021-06-20T14:58:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=28804"},"modified":"2021-10-18T03:58:07","modified_gmt":"2021-10-18T00:58:07","slug":"compartilhar-postagem-no-linkedin-usando-api-e-php-do-linkedin","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pt-pt\/compartilhar-postagem-no-linkedin-usando-api-e-php-do-linkedin\/","title":{"rendered":"Compartilhar postagem no LinkedIn usando API e PHP do LinkedIn"},"content":{"rendered":"<p>Quer saber como compartilhar posts no LinkedIn usando PHP? Neste artigo, mostrarei como enviar uma postagem no LinkedIn usando a API do LinkedIn e PHP.<\/p>\n<p>Compartilhar postagens em redes sociais ajuda voc\u00ea a trazer mais tr\u00e1fego e p\u00fablico para o seu site. O LinkedIn \u00e9 uma rede profissional, portanto, tem uma grande chance de conseguir leitores genu\u00ednos.<\/p>\n<p>Se voc\u00ea estiver administrando um site da Web, postar um link manualmente no LinkedIn n\u00e3o \u00e9 uma escolha s\u00e1bia. \u00c9 sempre melhor ter um sistema automatizado que envie uma postagem no seu feed de maneira program\u00e1tica.<\/p>\n<p>O LinkedIn fornece uma <a href=\"https:\/\/docs.microsoft.com\/en-us\/linkedin\/marketing\/integrations\/community-management\/shares\/share-api#post-shares\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">API de compartilhamento<\/a> com a qual voc\u00ea pode postar um link junto com o t\u00edtulo, a descri\u00e7\u00e3o e a imagem em seu feed.<\/p>\n<p>Neste tutorial, passaremos por todas as etapas necess\u00e1rias para compartilhar uma postagem no LinkedIn. Isso incluir\u00e1 coisas como criar um aplicativo do LinkedIn, gerar um token de acesso, obter um ID de perfil do LinkedIn e, finalmente, enviar uma postagem no LinkedIn.<\/p>\n<h3>Criar aplicativo LinkedIn<\/h3>\n<p>Para come\u00e7ar a usar a API de compartilhamento do LinkedIn, primeiro voc\u00ea precisa criar o aplicativo com sua conta do LinkedIn. A integra\u00e7\u00e3o de APIs do LinkedIn requer um ID de cliente e um segredo de cliente. Voc\u00ea tamb\u00e9m precisa definir um URL de redirecionamento autorizado em seu aplicativo.<\/p>\n<p>Para fins de teste, vou usar o URL do meu servidor local. Voc\u00ea deve ajustar este URL de acordo com seu fluxo.<\/p>\n<ul>\n<li>V\u00e1 para <a href=\"https:\/\/www.linkedin.com\/developers\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">LinkedIn Developer Network<\/a>.<\/li>\n<li>Clique no bot\u00e3o &#8216;Criar aplicativo&#8217;.<\/li>\n<li>Conclua a configura\u00e7\u00e3o de acordo com as diretrizes do LinkedIn.<\/li>\n<li>Adicione <a href=\"http:\/\/localhost\/linkedin\/callback.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">http: \/\/localhost\/linkedin\/callback.php<\/a> no campo URLs de redirecionamento autorizado.<\/li>\n<li>Na guia &#8216;Produtos&#8217;, selecione o produto &#8216;Sign In with LinkedIn&#8217;.<\/li>\n<li>Copie o ID do cliente e as chaves secretas do cliente.<\/li>\n<\/ul>\n<h3>Gerar um token de acesso da conta do LinkedIn<\/h3>\n<p>Um token de acesso \u00e9 um identificador necess\u00e1rio para executar opera\u00e7\u00f5es de API na conta do usu\u00e1rio. Compartilhar postagens programaticamente no LinkedIn requer um token de acesso.<\/p>\n<p>Para gerar um token de acesso, voc\u00ea precisa autorizar sua conta. Durante esse processo, precisamos enviar solicita\u00e7\u00f5es HTTP para o endpoint das APIs. Vamos instalar a biblioteca Guzzle, que nos permite enviar solicita\u00e7\u00f5es HTTP e receber a resposta.<\/p>\n<p>Execute o comando abaixo no diret\u00f3rio raiz do seu projeto para instalar a biblioteca Guzzle.<\/p>\n<pre><code>composer require guzzlehttp\/guzzle<\/code><\/pre>\n<p>Em seguida, crie um <code>config.php<\/code>arquivo e passe as credenciais no arquivo conforme mostrado abaixo.<\/p>\n<pre><code>&lt;?php\ndefine('CLIENT_ID', 'YOUR_CLIENT_ID');\ndefine('CLIENT_SECRET', 'YOUR_CLIENT_SECRET');\ndefine('REDIRECT_URL', 'http:\/\/localhost\/linkedin\/callback.php');\ndefine('SCOPES', 'r_emailaddress,r_liteprofile,w_member_social');<\/code><\/pre>\n<p>Certifique-se de substituir os marcadores de posi\u00e7\u00e3o por valores reais. Aqui, eu defino o URL do meu servidor local como &#8216;REDIRECT_URL&#8217;. No seu caso, esse URL \u00e9 diferente. Para a constante &#8216;SCOPES&#8217;, passei as permiss\u00f5es padr\u00e3o que s\u00e3o suficientes para nosso objetivo final.<\/p>\n<h4>Crie um URL de autoriza\u00e7\u00e3o<\/h4>\n<p>Para obter seu token de acesso, ele precisa construir um URL de autoriza\u00e7\u00e3o. Este URL requer um client_id e redirect_uri como um par\u00e2metro adicional. URL de autoriza\u00e7\u00e3o leva voc\u00ea para o site do LinkedIn, onde voc\u00ea deve concluir a autentica\u00e7\u00e3o. Depois de concluir a autentica\u00e7\u00e3o, voc\u00ea redirecionar\u00e1 de volta para a URL de retorno de chamada.<\/p>\n<p>Vamos criar um <code>index.php<\/code>e adicionar o c\u00f3digo para URL de autoriza\u00e7\u00e3o da seguinte maneira.<\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\n\u00a0\u00a0\n$url = \"https:\/\/www.linkedin.com\/oauth\/v2\/authorization?response_type=code&amp;client_id=\".CLIENT_ID.\"&amp;redirect_uri=\".REDIRECT_URL.\"&amp;scope=\".SCOPES;\n?&gt;\n\u00a0\u00a0\n&lt;a href=\"&lt;?php echo $url; ?&gt;\"&gt;Login with LinkedIn&lt;\/a&gt;<\/code><\/pre>\n<h4>C\u00f3digo de autoriza\u00e7\u00e3o de troca para um token de acesso<\/h4>\n<p>Conforme dito, ap\u00f3s concluir a autoriza\u00e7\u00e3o, voc\u00ea redirecionar\u00e1 de volta para o URL de redirecionamento junto com o C\u00f3digo de Autoriza\u00e7\u00e3o. No arquivo de retorno de chamada, temos que escrever um c\u00f3digo que envia uma solicita\u00e7\u00e3o POST com os par\u00e2metros necess\u00e1rios para a API do LinkedIn e recebe um token de acesso.<\/p>\n<p><strong>callback.php<\/strong><\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\nrequire_once 'vendor\/autoload.php';\nuse GuzzleHttpClient;\n\u00a0\u00a0\ntry {\n\u00a0\u00a0\u00a0\u00a0$client = new Client(['base_uri' =&gt; 'https:\/\/www.linkedin.com']);\n\u00a0\u00a0\u00a0\u00a0$response = $client-&gt;request('POST', '\/oauth\/v2\/accessToken', [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'form_params' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"grant_type\" =&gt; \"authorization_code\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"code\" =&gt; $_GET['code'],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"redirect_uri\" =&gt; REDIRECT_URL,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"client_id\" =&gt; CLIENT_ID,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"client_secret\" =&gt; CLIENT_SECRET,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\u00a0\u00a0$data = json_decode($response-&gt;getBody()-&gt;getContents(), true);\n\u00a0\u00a0\u00a0\u00a0$access_token = $data['access_token']; \/\/ store this token somewhere\n} catch(Exception $e) {\n\u00a0\u00a0\u00a0\u00a0echo $e-&gt;getMessage();\n}<\/code><\/pre>\n<p>Ao receber o token de acesso, salve-o em um local seguro. Voc\u00ea pode armazen\u00e1-lo no banco de dados. O LinkedIn n\u00e3o gera tokens de acesso de longa dura\u00e7\u00e3o. \u00c9 v\u00e1lido por 60 dias. Voc\u00ea precisa regenerar um token de acesso antes de expirar, seguindo o processo acima novamente. \u00c9 uma coisa feia, mas atualmente, tokens de atualiza\u00e7\u00e3o program\u00e1tica (que s\u00e3o usados \u200b\u200bpara regenerar tokens de acesso em segundo plano) est\u00e3o dispon\u00edveis apenas para um conjunto limitado de parceiros. Voc\u00ea pode ler mais sobre isso na <a href=\"https:\/\/docs.microsoft.com\/en-us\/linkedin\/shared\/authentication\/authorization-code-flow?context=linkedin\/context#step-5-refresh-access-token\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documenta\u00e7\u00e3o do LinkedIn<\/a>.<\/p>\n<h4>Obtenha seu ID do LinkedIn usando API<\/h4>\n<p>Voc\u00ea obteve o token de acesso de sua conta do LinkedIn. A pr\u00f3xima parte \u00e9 obter sua ID do LinkedIn. Este ID \u00e9 necess\u00e1rio para compartilhar uma postagem no LinkedIn. Obtenha esse ID enviando uma solicita\u00e7\u00e3o GET ao endpoint da API do LinkedIn \/ v2 \/ me.<\/p>\n<pre><code>&lt;?php\nrequire_once 'config.php';\nrequire_once 'vendor\/autoload.php';\nuse GuzzleHttpClient;\n\u00a0\u00a0\n$access_token = 'YOUR_ACCESS_TOKEN';\ntry {\n\u00a0\u00a0\u00a0\u00a0$client = new Client(['base_uri' =&gt; 'https:\/\/api.linkedin.com']);\n\u00a0\u00a0\u00a0\u00a0$response = $client-&gt;request('GET', '\/v2\/me', [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'headers' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Authorization\" =&gt; \"Bearer \". $access_token,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\u00a0\u00a0$data = json_decode($response-&gt;getBody()-&gt;getContents(), true);\n\u00a0\u00a0\u00a0\u00a0$linkedin_profile_id = $data['id']; \/\/ store this id somewhere\n} catch(Exception $e) {\n\u00a0\u00a0\u00a0\u00a0echo $e-&gt;getMessage();\n}<\/code><\/pre>\n<p>Como um token de acesso, voc\u00ea deve armazenar esse ID do LinkedIn. Exigiremos o token de acesso e a ID do LinkedIn na pr\u00f3xima etapa.<\/p>\n<h3>Enviar postagem no LinkedIn usando API do LinkedIn e PHP<\/h3>\n<p>Agora nosso \u00faltimo passo \u00e9 enviar uma postagem no LinkedIn. A <a href=\"https:\/\/docs.microsoft.com\/en-us\/linkedin\/marketing\/integrations\/community-management\/shares\/share-api#post-shares\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">documenta\u00e7\u00e3o da API de compartilhamento<\/a> explica o formato de solicita\u00e7\u00e3o necess\u00e1rio. Tomando como refer\u00eancia isso, nosso c\u00f3digo PHP seria o seguinte:<\/p>\n<pre><code>&lt;?php\nrequire_once 'vendor\/autoload.php';\nuse GuzzleHttpClient;\n\u00a0\u00a0\n$link = 'YOUR_LINK_TO_SHARE';\n$access_token = 'YOUR_ACCESS_TOKEN';\n$linkedin_id = 'YOUR_LINKEDIN_ID';\n$body = new stdClass();\n$body-&gt;content = new stdClass();\n$body-&gt;content-&gt;contentEntities[0] = new stdClass();\n$body-&gt;text = new stdClass();\n$body-&gt;content-&gt;contentEntities[0]-&gt;thumbnails[0] = new stdClass();\n$body-&gt;content-&gt;contentEntities[0]-&gt;entityLocation = $link;\n$body-&gt;content-&gt;contentEntities[0]-&gt;thumbnails[0]-&gt;resolvedUrl = \"THUMBNAIL_URL_TO_POST\";\n$body-&gt;content-&gt;title = 'YOUR_POST_TITLE';\n$body-&gt;owner = 'urn:li:person:'.$linkedin_id;\n$body-&gt;text-&gt;text = 'YOUR_POST_SHORT_SUMMARY';\n$body_json = json_encode($body, true);\n\u00a0\u00a0\ntry {\n\u00a0\u00a0\u00a0\u00a0$client = new Client(['base_uri' =&gt; 'https:\/\/api.linkedin.com']);\n\u00a0\u00a0\u00a0\u00a0$response = $client-&gt;request('POST', '\/v2\/shares', [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'headers' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Authorization\" =&gt; \"Bearer \". $access_token,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Content-Type\"\u00a0 =&gt; \"application\/json\",\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"x-li-format\"\u00a0\u00a0 =&gt; \"json\"\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0],\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'body' =&gt; $body_json,\n\u00a0\u00a0\u00a0\u00a0]);\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0if ($response-&gt;getStatusCode() !== 201) {\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0echo 'Error: '. $response-&gt;getLastBody()-&gt;errors[0]-&gt;message;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\n\u00a0\u00a0\u00a0\u00a0echo 'Post is shared on LinkedIn successfully.';\n} catch(Exception $e) {\n\u00a0\u00a0\u00a0\u00a0echo $e-&gt;getMessage(). ' for link '. $link;\n}<\/code><\/pre>\n<p>No c\u00f3digo acima, voc\u00ea deve substituir os marcadores de posi\u00e7\u00e3o pelos valores reais. Depois de chamar o endpoint da API \/ v2 \/ shares, voc\u00ea receber\u00e1 um c\u00f3digo HTTP &#8216;201&#8217;. Isso significa que a postagem \u00e9 criada (compartilhada) no LinkedIn.<\/p>\n<h4>Artigos relacionados<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-implementar-login-com-linkedin-em-site-com-php\/\" title=\"Como implementar login com LinkedIn em site com PHP\">Como implementar login com LinkedIn em site com PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/faca-login-com-o-linkedin-no-laravel-usando-o-laravel-socialite\/\" title=\"Fa\u00e7a login com o LinkedIn no Laravel usando o Laravel Socialite\">Fa\u00e7a login com o LinkedIn no Laravel usando o Laravel Socialite<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pt-pt\/como-integrar-a-api-do-planilhas-google-com-php\/\" title=\"Como integrar a API do Planilhas Google com PHP\">Como integrar a API do Planilhas Google com PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quer compartilhar uma postagem no LinkedIn por meio da API? Neste artigo, escreveremos um script PHP que enviar\u00e1 uma postagem no LinkedIn junto com<\/p>\n","protected":false},"author":1,"featured_media":20147,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[278],"tags":[848],"class_list":["post-28804","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-9","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28804","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/comments?post=28804"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/posts\/28804\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media\/20147"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/media?parent=28804"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/categories?post=28804"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pt-pt\/wp-json\/wp\/v2\/tags?post=28804"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}