首頁 web前端 js教程 建立社群媒體自動化:LinkedIn 與無伺服器功能共享

建立社群媒體自動化:LinkedIn 與無伺服器功能共享

Jan 08, 2025 pm 04:33 PM

發布新文章或部落格文章後,就需要在社群媒體上進行推廣。手動分享貼文可能既耗時又低效。在本文中,我們將探討如何建立一個無伺服器函數,以使用其 JavaScript API 用戶端和 Netlify 無伺服器函數在 LinkedIn 上共用文章 URL。這是建立社群媒體推廣自動化工作流程的一部分。

目錄

  • 目錄
  • 先決條件
  • 入門
    • 設定權限
    • 設定 OAuth 2.0 設定
  • 使用 LinkedIn API JS 用戶端透過 URL 共享帖子
    • 取得使用者的唯一id
    • 分享貼文網址
  • 公開為 Netlify 無伺服器函數
  • 測試功能
  • 使用 Netlify 進行部署
  • 總結

先決條件

要學習本教程,您將需要以下內容:

  • LinkedIn 帳號
  • 已安裝 Node.js 和 Netlify CLI。
  • 為部署無伺服器功能而建立的 Netlify 帳戶和網站。
  • JavaScript 和 TypeScript 的基礎。

入門

要開始使用 LinkedIn API,我們需要執行以下步驟:

  1. 使用您的 LinkedIn 帳戶前往 LinkedIn 開發者控制台。
  2. 點擊「建立應用程式」按鈕以建立新應用程式。 Building Social Media Automation: LinkedIn Sharing with Serverless Function
  3. 填寫應用程式名稱(例如社交媒體測試器)和應用程式徽標圖像等詳細資訊。
  4. 您將需要一個 LinkedIn 公司頁面來與您正在建立的應用程式關聯(您擁有管理員存取權限的任何頁面都可以在之後驗證連線)。

Building Social Media Automation: LinkedIn Sharing with Serverless Function

完成後,入口網站會將您重新導向到應用程式儀表板,我們可以在其中開始設定應用程式所需的權限和 API 產品。

Building Social Media Automation: LinkedIn Sharing with Serverless Function

設定權限

在應用程式儀表板中,點擊產品標籤並要求存取「在 LinkedIn 上分享」和使用 OpenID Connect 產品透過 LinkedIn 登入。

Building Social Media Automation: LinkedIn Sharing with Serverless Function

配置 OAuth 2.0 設定

授予這些權限後,我們可以使用 OAuth 2.0 令牌產生器工具為應用程式產生存取權杖。令牌應包含以下範圍:w_member_social 用於代表使用者發帖,profile 和 openid 用於使用者身份驗證和個人資料資訊。

Building Social Media Automation: LinkedIn Sharing with Serverless Function

此存取權杖是一個三足 OAuth 令牌,確保使用者已明確授權應用程式代表他們執行操作。產生令牌後,我們可以使用它來進行身份驗證並安全地向 LinkedIn API 發出請求。此外,我們可以在應用程式儀表板的 Auth 標籤中查看授予應用程式的權限和範圍。

太棒了!現在我們已經設定了存取權杖和應用程序,我們可以開始建立自動化以代表用戶(在本例中為我們)在 LinkedIn 上發布資訊。

使用 LinkedIn API JS 用戶端透過 URL 共享帖子

要開始以程式設計方式共享帖子,我們可以透過將其安裝為專案依賴項來使用官方 LinkedIn API JavaScript Client for Node.js:

npm install linkedin-api-js-client

# or with yarn
yarn add linkedin-api-js-client
登入後複製
登入後複製
登入後複製

該庫提供了一種直接、輕量級的方式與 LinkedIn API 端點交互,在底層利用 Axios 和 TypeScript。

接下來,讓我們建立一個新檔案 linkedin.ts 來封裝在 LinkedIn 上分享貼文的邏輯。我們首先初始化一個客戶端實例來與 API 交互,如下所示:

// linkedin.ts
import { RestliClient } from 'linkedin-api-js-client';

const client = new RestliClient();
登入後複製
登入後複製

獲取用戶的唯一id

要代表用戶發帖,我們首先需要檢索用戶的唯一 ID(與用戶的 LinkedIn 句柄不同)。這可以透過使用 /userinfo 端點和先前產生的存取權杖來完成:

// linkedin.ts
const getUserId = async (accessToken: string) => {
  const userResponse = await client.get({
    resourcePath: "/userinfo",
    accessToken
  });

  return userResponse.data?.sub;
};
登入後複製
登入後複製

唯一 ID 位於回應資料的子欄位中。下一步需要此值:代表用戶分享貼文。

分享貼文網址

在 linkedin.ts 中,我們定義了一個共享貼文 URL 的函數,如下所示:

type SharePostArgs = {
  url: string;
  text: string;
};

export const sharePost = async (token: string, content: SharePostArgs) => {
  //logic
};
登入後複製
登入後複製

sharePost 函數會取得存取權杖和要分享的內容,其中包括 URL 和貼文附帶的文字。然後,我們將使用 /ugcPosts 端點在使用者生成內容資源上建立一個新的貼文實體,如下所示:

export const sharePost = async (token: string, content: SharePostArgs) => {
  const response = await client.create({
    resourcePath: '/ugcPosts',
    accessToken: token,
    entity: {
      //entity payload
    }
  });
};
登入後複製
登入後複製

實體有效負載配置為包含先前檢索到的使用者的唯一 ID(作為作者)。作者欄位遵循格式 urn:li:person:${userId}。此外,我們指定:

  • 生命週期狀態為「已發布」。
  • 可見性為“PUBLIC”,因此該貼文對 LinkedIn 網路可見。

這是更新的實作:

npm install linkedin-api-js-client

# or with yarn
yarn add linkedin-api-js-client
登入後複製
登入後複製
登入後複製

接下來,我們在實體物件的 SpecificContent 欄位中定義共用內容。對於此場景,specifiedContent 欄位包含一個 com.linkedin.ugc.ShareContent 對象,該物件具有以下屬性:

  • shareCommentary:接受content.text作為要顯示的主要文字內容。
  • shareMediaCategory:指定貼文中分享的媒體類型(設定為「ARTICLE」)。
  • 媒體:「文章」類別的媒體資產數組,其中每個項目包括:要共享的 URL 和就緒狀態。

以下是更新後的程式碼:

// linkedin.ts
import { RestliClient } from 'linkedin-api-js-client';

const client = new RestliClient();
登入後複製
登入後複製

成功完成請求後,回應包含一個createdEntityId,代表所建立實體的唯一ID。我們可以將此值傳回給呼叫者以供進一步參考:

// linkedin.ts
const getUserId = async (accessToken: string) => {
  const userResponse = await client.get({
    resourcePath: "/userinfo",
    accessToken
  });

  return userResponse.data?.sub;
};
登入後複製
登入後複製

就是這樣!我們創建了一個函數,利用 LinkedIn API 代表用戶共享貼文 URL。在下一步中,我們將使用 Netlify 將此功能公開為無伺服器端點,使我們更接近完全自動化在社群媒體上分享文章的過程。

公開為 Netlify 無伺服器函數

我們執行 CLI 指令 netlify Functions:create 並依照指示建立一個名為 share-on-linkedin 的新 Netlify 無伺服器函數。 Netlify CLI 將在函數目錄中產生具有以下初始程式碼的函數:

type SharePostArgs = {
  url: string;
  text: string;
};

export const sharePost = async (token: string, content: SharePostArgs) => {
  //logic
};
登入後複製
登入後複製

在上面的程式碼中,我們使用 TypeScript 並將函數定義為 async 來處理 LinkedIn API 呼叫的非同步性質。

接下來,我們更新無伺服器函數以執行以下操作:

  • 解析請求正文以提取要分享的內容,
  • 從環境變數中擷取存取權杖(可以在專案根目錄的 .env 檔案中設定),
  • 使用提取的參數呼叫 sharePost 函數(之前在 linkedin.ts 中定義),並且
  • 傳回已建立的實體 ID 作為回應。
export const sharePost = async (token: string, content: SharePostArgs) => {
  const response = await client.create({
    resourcePath: '/ugcPosts',
    accessToken: token,
    entity: {
      //entity payload
    }
  });
};
登入後複製
登入後複製

至此,Serverless 功能就準備好了。我們可以將其部署到 Netlify 並透過向端點發出 POST 請求來測試其功能。

測試功能

要測試無伺服器功能,請使用 CLI 指令 netlify dev 啟動本機伺服器。然後,使用 Postman 或 Insomnia 等工具使用以下 JSON 負載向伺服器端點發送 POST 請求:

export const sharePost = async (token: string, content: SharePostArgs) => {
  //Get user's unique id
  const userId = await getUserId(token);

  const response = await client.create({
    resourcePath: '/ugcPosts',
    accessToken: token,
    entity: {
      author: `urn:li:person:${userId}`,
      lifecycleState: "PUBLISHED",      
      visibility: {
        "com.linkedin.ugc.MemberNetworkVisibility": "PUBLIC"
      }
    }
  });
};
登入後複製

或者,我們可以建立一個簡單的表單 UI 來與無伺服器函數 API 交互,並驗證貼文是否已成功在 LinkedIn 上共享。

一旦該功能按預期工作,我們就可以繼續將其部署到 Netlify 以使其可供使用。

使用 Netlify 進行部署

要將我們的函數部署到 Netlify,請執行以下命令:

npm install linkedin-api-js-client

# or with yarn
yarn add linkedin-api-js-client
登入後複製
登入後複製
登入後複製

CLI 將函數部署到您的 Netlify 生產環境。然後,您可以在 Netlify 儀表板中找到該函數端點。

重要: 確保在儀表板中配置 LINKEDIN_ACCESS_TOKEN 環境變數。此步驟對於函數的驗證和正確運行至關重要。

Building Social Media Automation: LinkedIn Sharing with Serverless Function


概括

我們利用 LinkedIn API JavaScript 用戶端和 Netlify 無伺服器功能,成功建立了一個無伺服器 API,代表使用者在 LinkedIn 上共享文章 URL。這標誌著部落格文章社交媒體共享流程自動化的重要一步。

從這裡,我們可以擴展自動化工作流程以包括其他社群媒體平台和規劃任務。例如,我們可以整合 X(以前稱為 Twitter)、Facebook 或 BlueSky 等平台,並自訂貼文的時間和內容,以最大限度地提高受眾參與度和覆蓋範圍。

就這樣,請繼續關注本系列的更多更新!

透過我的新書《學習 Vue》了解 Vue 3 和 TypeScript!

想支持我嗎?請我喝杯咖啡。

喜歡這篇文章或覺得它有幫助嗎?分享一下?

以上是建立社群媒體自動化:LinkedIn 與無伺服器功能共享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

前端熱敏紙小票打印遇到亂碼問題怎麼辦? 前端熱敏紙小票打印遇到亂碼問題怎麼辦? Apr 04, 2025 pm 02:42 PM

前端熱敏紙小票打印的常見問題與解決方案在前端開發中,小票打印是一個常見的需求。然而,很多開發者在實...

神秘的JavaScript:它的作用以及為什麼重要 神秘的JavaScript:它的作用以及為什麼重要 Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

誰得到更多的Python或JavaScript? 誰得到更多的Python或JavaScript? Apr 04, 2025 am 12:09 AM

Python和JavaScript開發者的薪資沒有絕對的高低,具體取決於技能和行業需求。 1.Python在數據科學和機器學習領域可能薪資更高。 2.JavaScript在前端和全棧開發中需求大,薪資也可觀。 3.影響因素包括經驗、地理位置、公司規模和特定技能。

JavaScript難以學習嗎? JavaScript難以學習嗎? Apr 03, 2025 am 12:20 AM

學習JavaScript不難,但有挑戰。 1)理解基礎概念如變量、數據類型、函數等。 2)掌握異步編程,通過事件循環實現。 3)使用DOM操作和Promise處理異步請求。 4)避免常見錯誤,使用調試技巧。 5)優化性能,遵循最佳實踐。

如何實現視差滾動和元素動畫效果,像資生堂官網那樣?
或者:
怎樣才能像資生堂官網一樣,實現頁面滾動伴隨的動畫效果? 如何實現視差滾動和元素動畫效果,像資生堂官網那樣? 或者: 怎樣才能像資生堂官網一樣,實現頁面滾動伴隨的動畫效果? Apr 04, 2025 pm 05:36 PM

實現視差滾動和元素動畫效果的探討本文將探討如何實現類似資生堂官網(https://www.shiseido.co.jp/sb/wonderland/)中�...

如何使用JavaScript將具有相同ID的數組元素合併到一個對像中? 如何使用JavaScript將具有相同ID的數組元素合併到一個對像中? Apr 04, 2025 pm 05:09 PM

如何在JavaScript中將具有相同ID的數組元素合併到一個對像中?在處理數據時,我們常常會遇到需要將具有相同ID�...

JavaScript的演變:當前的趨勢和未來前景 JavaScript的演變:當前的趨勢和未來前景 Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

console.log輸出結果差異:兩次調用為何不同? console.log輸出結果差異:兩次調用為何不同? Apr 04, 2025 pm 05:12 PM

深入探討console.log輸出差異的根源本文將分析一段代碼中console.log函數輸出結果的差異,並解釋其背後的原因。 �...

See all articles