{"id":29770,"date":"2021-06-20T17:59:00","date_gmt":"2021-06-20T14:59:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=29770"},"modified":"2021-10-17T04:13:09","modified_gmt":"2021-10-17T01:13:09","slug":"dela-inlagg-pa-linkedin-med-linkedin-api-och-php","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/sv\/dela-inlagg-pa-linkedin-med-linkedin-api-och-php\/","title":{"rendered":"Dela inl\u00e4gg p\u00e5 LinkedIn med LinkedIn API och PHP"},"content":{"rendered":"<p>Vill du veta hur du delar inl\u00e4gg p\u00e5 LinkedIn med PHP? I den h\u00e4r artikeln visar jag dig hur du skickar ett inl\u00e4gg p\u00e5 LinkedIn med LinkedIn API och PHP.<\/p>\n<p>Att dela inl\u00e4gg p\u00e5 sociala n\u00e4tverk hj\u00e4lper dig att f\u00e5 mer trafik och publik till din webbplats. LinkedIn \u00e4r ett professionellt n\u00e4tverk s\u00e5 det skulle ha en stor chans att f\u00e5 \u00e4kta l\u00e4sare.<\/p>\n<p>Om du driver en webbplats \u00e4r det inte ett klokt val att l\u00e4gga upp en l\u00e4nk manuellt p\u00e5 LinkedIn. Det \u00e4r alltid b\u00e4ttre att ha ett automatiserat system som skickar ett inl\u00e4gg i ditt fl\u00f6de programmatiskt.<\/p>\n<p>LinkedIn tillhandah\u00e5ller ett <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> med vilket du kan l\u00e4gga upp en l\u00e4nk tillsammans med titel, beskrivning och bild p\u00e5 ditt fl\u00f6de.<\/p>\n<p>I denna handledning kommer vi att g\u00e5 igenom alla steg som kr\u00e4vs f\u00f6r att dela ett inl\u00e4gg p\u00e5 LinkedIn. Detta kommer att inkludera saker som att skapa en LinkedIn-applikation, generera en \u00e5tkomsttoken, f\u00e5 ett LinkedIn-profil-ID och slutligen skicka ett inl\u00e4gg p\u00e5 LinkedIn.<\/p>\n<h3>Skapa LinkedIn-applikation<\/h3>\n<p>F\u00f6r att b\u00f6rja med LinkedIn-delnings-API m\u00e5ste du f\u00f6rst skapa applikationen med ditt LinkedIn-konto. Integrering av LinkedIn API: er kr\u00e4ver ett klient-id och en klienthemlighet. Du m\u00e5ste ocks\u00e5 ange en auktoriserad omdirigerings-URL i din applikation.<\/p>\n<p>F\u00f6r test\u00e4ndam\u00e5l ska jag anv\u00e4nda min lokala server-URL. Du b\u00f6r justera den h\u00e4r webbadressen enligt ditt fl\u00f6de.<\/p>\n<ul>\n<li>G\u00e5 till <a href=\"https:\/\/www.linkedin.com\/developers\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">LinkedIn Developer Network<\/a>.<\/li>\n<li>Klicka p\u00e5 knappen &#8217;Skapa app&#8217;.<\/li>\n<li>Slutf\u00f6r installationen enligt LinkedIn-riktlinjerna.<\/li>\n<li>L\u00e4gg till <a href=\"http:\/\/localhost\/linkedin\/callback.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">http: \/\/localhost\/linkedin\/callback.php<\/a> i <a href=\"http:\/\/localhost\/linkedin\/callback.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">f\u00e4ltet<\/a> Auktoriserade omdirigeringsadresser.<\/li>\n<li>Under fliken &quot;Produkter&quot; v\u00e4ljer du produkten &quot;Logga in med LinkedIn&quot;.<\/li>\n<li>Kopiera klient-ID och klienthemliga nycklar.<\/li>\n<\/ul>\n<h3>Skapa ett \u00e5tkomsttoken av LinkedIn-konto<\/h3>\n<p>En \u00e5tkomsttoken \u00e4r en identifierare som kr\u00e4vs f\u00f6r att utf\u00f6ra API-\u00e5tg\u00e4rder p\u00e5 anv\u00e4ndarens konto. F\u00f6r att dela inl\u00e4gg programmatiskt p\u00e5 LinkedIn kr\u00e4vs en \u00e5tkomsttoken.<\/p>\n<p>F\u00f6r att skapa en \u00e5tkomsttoken m\u00e5ste du auktorisera ditt konto. Under den h\u00e4r processen m\u00e5ste vi skicka HTTP-f\u00f6rfr\u00e5gningar till API: s slutpunkt. Vi ska installera Guzzle-biblioteket som g\u00f6r att vi kan skicka HTTP-f\u00f6rfr\u00e5gningar och ta emot svaret.<\/p>\n<p>K\u00f6r kommandot nedan i din projektkatalog f\u00f6r att installera Guzzle-biblioteket.<\/p>\n<pre><code>composer require guzzlehttp\/guzzle<\/code><\/pre>\n<p>Skapa sedan en <code>config.php<\/code>fil och skicka inloggningsuppgifterna i filen enligt nedan.<\/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>Se till att ers\u00e4tta platsh\u00e5llare med faktiska v\u00e4rden. H\u00e4r st\u00e4ller jag in min lokala server-URL som &quot;REDIRECT_URL&quot;. I ditt fall \u00e4r den h\u00e4r webbadressen annorlunda. Till &quot;SCOPES&quot; -konstanten har jag skickat standardbeh\u00f6righeterna som \u00e4r tillr\u00e4ckliga f\u00f6r v\u00e5rt slutm\u00e5l.<\/p>\n<h4>Skapa en auktoriserings-URL<\/h4>\n<p>F\u00f6r att f\u00e5 din \u00e5tkomsttoken m\u00e5ste den bygga en auktoriserings-URL. Denna URL kr\u00e4ver en client_id och redirect_uri som en ytterligare parameter. Auktoriserings-URL tar dig till LinkedIn-webbplatsen d\u00e4r du m\u00e5ste slutf\u00f6ra autentiseringen. N\u00e4r du har slutf\u00f6rt autentiseringen omdirigerar du tillbaka till URL f\u00f6r \u00e5teruppringning.<\/p>\n<p>L\u00e5t oss skapa en <code>index.php<\/code>och l\u00e4gga till koden f\u00f6r auktoriserings-URL enligt f\u00f6ljande.<\/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>Exchange-auktoriseringskod f\u00f6r en \u00e5tkomsttoken<\/h4>\n<p>Som sagt n\u00e4r du har slutf\u00f6rt auktoriseringen omdirigerar du tillbaka till omdirigerings-URL: n tillsammans med auktoriseringskoden. I \u00e5teruppringningsfilen m\u00e5ste vi skriva en kod som skickar en POST-beg\u00e4ran med n\u00f6dv\u00e4ndiga parametrar till LinkedIn API och f\u00e5r en \u00e5tkomsttoken.<\/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>N\u00e4r du f\u00e5r \u00e5tkomsttoken, spara den p\u00e5 en s\u00e4ker plats. Du kan lagra den i databasen. LinkedIn genererar inte l\u00e5ngvariga \u00e5tkomsttoken. Det g\u00e4ller i 60 dagar. Du m\u00e5ste regenerera en \u00e5tkomsttoken f\u00f6re utg\u00e5ngen genom att f\u00f6lja ovanst\u00e5ende process igen. Det \u00e4r en slags ful sak men f\u00f6r n\u00e4rvarande \u00e4r programmatiska uppdateringstoken (som anv\u00e4nds f\u00f6r att regenerera \u00e5tkomsttoken i bakgrunden) endast tillg\u00e4ngliga f\u00f6r en begr\u00e4nsad upps\u00e4ttning partners. Du kan l\u00e4sa mer om detta i <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\">LinkedIn-dokumentationen<\/a>.<\/p>\n<h4>Skaffa ditt LinkedIn-ID med API<\/h4>\n<p>Du har \u00e5tkomsttoken f\u00f6r ditt LinkedIn-konto. N\u00e4sta del \u00e4r att f\u00e5 ditt LinkedIn-ID. Detta ID kr\u00e4vs f\u00f6r att dela ett inl\u00e4gg p\u00e5 LinkedIn. F\u00e5 detta ID genom att skicka en GET-beg\u00e4ran till LinkedIn API-slutpunkten \/ 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>Som en \u00e5tkomsttoken b\u00f6r du lagra detta LinkedIn-ID. Vi kommer att kr\u00e4va b\u00e5de \u00e5tkomsttoken och LinkedIn-ID i n\u00e4sta steg.<\/p>\n<h3>Skicka inl\u00e4gg p\u00e5 LinkedIn med LinkedIn API och PHP<\/h3>\n<p>Nu \u00e4r v\u00e5rt sista steg att skicka ett inl\u00e4gg p\u00e5 LinkedIn. Den <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-dokumentationen<\/a> f\u00f6rklarar beg\u00e4ran format beh\u00f6vs. Med en h\u00e4nvisning fr\u00e5n den skulle v\u00e5r PHP-kod vara som f\u00f6ljer:<\/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>I ovanst\u00e5ende kod m\u00e5ste du ers\u00e4tta platsh\u00e5llarna med de faktiska v\u00e4rdena. Efter att ha anropat API-slutpunkten \/ v2 \/ delarna f\u00e5r du en &#8217;201&#8217; HTTP-kod. Det betyder att inl\u00e4gget skapas (delas) p\u00e5 LinkedIn.<\/p>\n<h4>relaterade artiklar<\/h4>\n<ul>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/hur-man-implementerar-inloggning-med-linkedin-pa-webbplatsen-med-php\/\" title=\"Hur man implementerar inloggning med LinkedIn p\u00e5 webbplatsen med PHP\">Hur man implementerar inloggning med LinkedIn p\u00e5 webbplatsen med PHP<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/logga-in-med-linkedin-i-laravel-med-laravel-socialite\/\" title=\"Logga in med LinkedIn i Laravel med Laravel Socialite\">Logga in med LinkedIn i Laravel med Laravel Socialite<\/a><\/li>\n<li><a href=\"https:\/\/themewp.inform.click\/sv\/hur-man-integrerar-google-sheets-api-med-php\/\" title=\"Hur man integrerar Google Sheets API med PHP\">Hur man integrerar Google Sheets API med PHP<\/a><\/li>\n<\/ul>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vill du dela ett inl\u00e4gg p\u00e5 LinkedIn via API? I den h\u00e4r artikeln kommer vi att skriva ett PHP-skript som skickar ett inl\u00e4gg p\u00e5 LinkedIn tillsammans med<\/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":[279],"tags":[850],"class_list":["post-29770","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-php-10","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/29770","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/comments?post=29770"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/posts\/29770\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media\/20147"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/media?parent=29770"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/categories?post=29770"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/sv\/wp-json\/wp\/v2\/tags?post=29770"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}