首页 >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