{"id":29649,"date":"2021-06-20T18:16:00","date_gmt":"2021-06-20T15:16:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29649"},"modified":"2021-10-18T03:30:45","modified_gmt":"2021-10-18T00:30:45","slug":"udostepnij-post-na-linkedin-za-pomoca-interfejsu-api-linkedin-i-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/pl\/udostepnij-post-na-linkedin-za-pomoca-interfejsu-api-linkedin-i-php\/","title":{"rendered":"Udost\u0119pnij post na LinkedIn za pomoc\u0105 interfejsu API LinkedIn i PHP"},"content":{"rendered":"<p>Chcesz wiedzie\u0107, jak udost\u0119pnia\u0107 posty na LinkedIn za pomoc\u0105 PHP? W tym artykule poka\u017c\u0119, jak wys\u0142a\u0107 post na LinkedIn za pomoc\u0105 LinkedIn API i PHP.<\/p>\n<p>Udost\u0119pnianie post\u00f3w w sieciach spo\u0142eczno\u015bciowych pomaga zwi\u0119kszy\u0107 ruch i odbiorc\u00f3w w Twojej witrynie. LinkedIn to profesjonalna sie\u0107, wi\u0119c mia\u0142aby du\u017ce szanse na zdobycie prawdziwych czytelnik\u00f3w.<\/p>\n<p>Je\u015bli prowadzisz witryn\u0119 internetow\u0105, r\u0119czne umieszczanie linku na LinkedIn nie jest m\u0105drym wyborem. Zawsze lepiej jest mie\u0107 zautomatyzowany system, kt\u00f3ry automatycznie wysy\u0142a posty do Twojego pliku danych.<\/p>\n<p>LinkedIn udost\u0119pnia <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\">interfejs API<\/a> udost\u0119pniania, za pomoc\u0105 kt\u00f3rego mo\u017cesz opublikowa\u0107 link wraz z tytu\u0142em, opisem i obrazem w swoim kanale.<\/p>\n<p>W tym samouczku przejdziemy przez wszystkie kroki wymagane do udost\u0119pnienia posta na LinkedIn. Obejmuje to takie rzeczy, jak tworzenie aplikacji LinkedIn, generowanie tokena dost\u0119pu, uzyskiwanie identyfikatora profilu LinkedIn, a na koniec wysy\u0142anie posta na LinkedIn.<\/p>\n<h3>Utw\u00f3rz aplikacj\u0119 LinkedIn<\/h3>\n<p>Aby rozpocz\u0105\u0107 korzystanie z API udost\u0119pniania LinkedIn, musisz najpierw utworzy\u0107 aplikacj\u0119 na swoim koncie LinkedIn. Integracja interfejs\u00f3w API LinkedIn wymaga identyfikatora klienta i klucza tajnego klienta. Musisz tak\u017ce ustawi\u0107 autoryzowany adres URL przekierowania w swojej aplikacji.<\/p>\n<p>Do cel\u00f3w testowych u\u017cyj\u0119 adresu URL mojego lokalnego serwera. Powiniene\u015b dostosowa\u0107 ten adres URL zgodnie ze swoim przep\u0142ywem.<\/p>\n<ul>\n<li>Przejd\u017a do <a href=\"https:\/\/www.linkedin.com\/developers\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sieci programist\u00f3w LinkedIn<\/a>.<\/li>\n<li>Kliknij przycisk \u201eUtw\u00f3rz aplikacj\u0119&quot;.<\/li>\n<li>Doko\u0144cz konfiguracj\u0119 zgodnie z wytycznymi LinkedIn.<\/li>\n<li>Dodaj <a href=\"http:\/\/localhost\/linkedin\/callback.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">http:\/\/localhost\/linkedin\/callback.php<\/a> w polu Autoryzowane adresy URL przekierowania.<\/li>\n<li>W zak\u0142adce \u201eProdukty&#8221; wybierz produkt \u201eZaloguj si\u0119 przez LinkedIn&#8221;.<\/li>\n<li>Skopiuj klucze Client ID i Client Secret.<\/li>\n<\/ul>\n<h3>Wygeneruj token dost\u0119pu do konta LinkedIn<\/h3>\n<p>Token dost\u0119pu to identyfikator, kt\u00f3ry jest wymagany do wykonywania operacji API na koncie u\u017cytkownika. Programowe udost\u0119pnianie post\u00f3w na LinkedIn wymaga tokena dost\u0119pu.<\/p>\n<p>Aby wygenerowa\u0107 token dost\u0119pu, musisz autoryzowa\u0107 swoje konto. Podczas tego procesu musimy wysy\u0142a\u0107 \u017c\u0105dania HTTP do punktu ko\u0144cowego API. Zainstalujemy bibliotek\u0119 Guzzle, kt\u00f3ra umo\u017cliwi nam wysy\u0142anie \u017c\u0105da\u0144 HTTP i odbieranie odpowiedzi.<\/p>\n<p>Uruchom poni\u017csze polecenie w katalogu g\u0142\u00f3wnym projektu, aby zainstalowa\u0107 bibliotek\u0119 Guzzle.<\/p>\n<pre><code>composer require guzzlehttp\/guzzle<\/code><\/pre>\n<p>Nast\u0119pnie utw\u00f3rz <code>config.php<\/code>plik i przeka\u017c po\u015bwiadczenia w pliku, jak pokazano poni\u017cej.<\/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>Pami\u0119taj, aby zast\u0105pi\u0107 symbole zast\u0119pcze rzeczywistymi warto\u015bciami. Tutaj ustawi\u0142em adres URL mojego lokalnego serwera jako \u201eREDIRECT_URL&#8221;. W Twoim przypadku ten adres URL jest inny. Do sta\u0142ej 'SCOPES&#8217; przekaza\u0142em domy\u015blne uprawnienia, kt\u00f3re s\u0105 wystarczaj\u0105ce dla naszego ko\u0144cowego celu.<\/p>\n<h4>Utw\u00f3rz URL autoryzacji<\/h4>\n<p>Aby uzyska\u0107 token dost\u0119pu, musi zbudowa\u0107 URL autoryzacji. Ten adres URL wymaga parametru client_id i redirect_uri jako dodatkowego parametru. Adres URL autoryzacji przeniesie Ci\u0119 do witryny LinkedIn, w kt\u00f3rej musisz uko\u0144czy\u0107 uwierzytelnianie. Po zako\u0144czeniu uwierzytelniania nast\u0105pi przekierowanie z powrotem do adresu URL wywo\u0142ania zwrotnego.<\/p>\n<p>Utw\u00f3rzmy <code>index.php<\/code>i dodajmy kod dla adresu URL autoryzacji w nast\u0119puj\u0105cy spos\u00f3b.<\/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>Wymiana kodu autoryzacyjnego na token dost\u0119pu<\/h4>\n<p>Jak wspomniano po zako\u0144czeniu autoryzacji, przekierujesz z powrotem do przekierowania wraz z kodem autoryzacyjnym. W pliku callback musimy napisa\u0107 kod, kt\u00f3ry wysy\u0142a \u017c\u0105danie POST z wymaganymi parametrami do API LinkedIn i otrzymuje token dost\u0119pu.<\/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>Po otrzymaniu tokena dost\u0119pu zachowaj go w bezpiecznym miejscu. Mo\u017cesz go przechowywa\u0107 w bazie danych. LinkedIn nie generuje d\u0142ugoterminowych token\u00f3w dost\u0119pu. Jest wa\u017cny przez 60 dni. Musisz ponownie wygenerowa\u0107 token dost\u0119pu przed wyga\u015bni\u0119ciem, wykonuj\u0105c ponownie powy\u017cszy proces. Jest to co\u015b w rodzaju brzydkiej rzeczy, ale obecnie programowe tokeny od\u015bwie\u017cania (kt\u00f3re s\u0142u\u017c\u0105 do regeneracji token\u00f3w dost\u0119pu w tle) s\u0105 dost\u0119pne tylko dla ograniczonego zestawu partner\u00f3w. Mo\u017cesz przeczyta\u0107 wi\u0119cej na ten temat w <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\">dokumentacji LinkedIn<\/a>.<\/p>\n<h4>Uzyskaj identyfikator LinkedIn za pomoc\u0105 interfejsu API<\/h4>\n<p>Otrzyma\u0142e\u015b token dost\u0119pu do swojego konta LinkedIn. Nast\u0119pna cz\u0119\u015b\u0107 to uzyskanie identyfikatora LinkedIn. Ten identyfikator jest wymagany do udost\u0119pnienia posta na LinkedIn. Uzyskaj ten identyfikator, wysy\u0142aj\u0105c \u017c\u0105danie GET do punktu ko\u0144cowego interfejsu API 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>Podobnie jak token dost\u0119pu, powiniene\u015b przechowywa\u0107 ten identyfikator LinkedIn. W nast\u0119pnym kroku b\u0119dziemy potrzebowa\u0107 zar\u00f3wno tokena dost\u0119pu, jak i identyfikatora LinkedIn.<\/p>\n<h3>Wysy\u0142aj posty na LinkedIn za pomoc\u0105 LinkedIn API i PHP<\/h3>\n<p>Teraz naszym ostatnim krokiem jest wys\u0142anie posta na LinkedIn. Dokumentacja <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\">Share API<\/a> wyja\u015bnia wymagany format \u017c\u0105dania. Bior\u0105c z niego referencj\u0119, nasz kod PHP wygl\u0105da\u0142by nast\u0119puj\u0105co:<\/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>W powy\u017cszym kodzie musisz zast\u0105pi\u0107 symbole zast\u0119pcze rzeczywistymi warto\u015bciami. Po wywo\u0142aniu punktu ko\u0144cowego API \/v2\/shares otrzymasz kod HTTP '201&#8242;. Oznacza to, \u017ce post jest tworzony (udost\u0119pniany) na LinkedIn.<\/p>\n<h4>Powi\u0105zane artyku\u0142y<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-zaimplementowac-logowanie-za-pomoca-linkedin-w-witrynie-za-pomoca-php\/\" title=\"Jak zaimplementowa\u0107 logowanie za pomoc\u0105 LinkedIn w witrynie za pomoc\u0105 PHP\">Jak zaimplementowa\u0107 logowanie za pomoc\u0105 LinkedIn w witrynie za pomoc\u0105 PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/zaloguj-sie-na-linkedin-w-laravel-za-pomoca-laravel-socialite\/\" title=\"Zaloguj si\u0119 na LinkedIn w Laravel za pomoc\u0105 Laravel Socialite\">Zaloguj si\u0119 na LinkedIn w Laravel za pomoc\u0105 Laravel Socialite<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/pl\/jak-zintegrowac-api-arkuszy-google-z-php\/\" title=\"Jak zintegrowa\u0107 API Arkuszy Google z PHP\">Jak zintegrowa\u0107 API Arkuszy Google z PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Chcesz udost\u0119pni\u0107 wpis na LinkedIn przez API? W tym artykule napiszemy skrypt PHP, kt\u00f3ry wy\u015ble \u200b\u200bpost na LinkedIn wraz z<\/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":[277],"tags":[847],"class_list":["post-29649","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-8","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/29649","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/comments?post=29649"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/posts\/29649\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media\/20147"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/media?parent=29649"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/categories?post=29649"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/pl\/wp-json\/wp\/v2\/tags?post=29649"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}