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

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

Barbara Streisand
Barbara Streisand原創
2025-01-08 16:33:49939瀏覽

發布新文章或部落格文章後,就需要在社群媒體上進行推廣。手動分享貼文可能既耗時又低效。在本文中,我們將探討如何建立一個無伺服器函數,以使用其 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