发布新文章或博客文章后,就需要在社交媒体上进行推广。手动分享帖子可能既耗时又低效。在本文中,我们将探讨如何构建一个无服务器函数,以使用其 JavaScript API 客户端和 Netlify 无服务器函数在 LinkedIn 上共享文章 URL。这是构建社交媒体推广自动化工作流程的一部分。
要学习本教程,您将需要以下内容:
要开始使用 LinkedIn API,我们需要执行以下步骤:
完成后,门户会将您重定向到应用程序仪表板,我们可以在其中开始配置应用程序所需的权限和 API 产品。
在应用仪表板中,单击产品选项卡并请求访问“在 LinkedIn 上共享”和使用 OpenID Connect 产品通过 LinkedIn 登录。
授予这些权限后,我们可以使用 OAuth 2.0 令牌生成器工具为应用程序生成访问令牌。令牌应包含以下范围:w_member_social 用于代表用户发帖,profile 和 openid 用于用户身份验证和个人资料信息。
此访问令牌是一个三足 OAuth 令牌,确保用户已明确授权应用程序代表他们执行操作。生成令牌后,我们可以使用它来进行身份验证并安全地向 LinkedIn API 发出请求。此外,我们可以在应用程序仪表板的 Auth 选项卡中查看授予应用程序的权限和范围。
太棒了!现在我们已经设置了访问令牌和应用程序,我们可以开始构建自动化以代表用户(在本例中为我们)在 LinkedIn 上发布信息。
要开始以编程方式共享帖子,我们可以通过将其安装为项目依赖项来使用官方 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(与用户的 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}。此外,我们指定:
这是更新的实现:
npm install linkedin-api-js-client # or with yarn yarn add linkedin-api-js-client
接下来,我们在实体对象的 SpecificContent 字段中定义共享内容。对于此场景,specifiedContent 字段包含一个 com.linkedin.ugc.ShareContent 对象,该对象具有以下属性:
以下是更新后的代码:
// 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 将此功能公开为无服务器端点,使我们更接近于完全自动化在社交媒体上分享文章的过程。
我们运行 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 调用的异步性质。
接下来,我们更新无服务器函数以执行以下操作:
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,请运行以下命令:
npm install linkedin-api-js-client # or with yarn yarn add linkedin-api-js-client
CLI 将函数部署到您的 Netlify 生产环境。然后,您可以在 Netlify 仪表板中找到该函数端点。
重要: 确保在仪表板中配置 LINKEDIN_ACCESS_TOKEN 环境变量。此步骤对于函数的验证和正确运行至关重要。
我们利用 LinkedIn API JavaScript 客户端和 Netlify 无服务器功能,成功构建了一个无服务器 API,代表用户在 LinkedIn 上共享文章 URL。这标志着博客文章社交媒体共享流程自动化的重要一步。
从这里,我们可以扩展自动化工作流程以包括其他社交媒体平台和计划任务。例如,我们可以集成 X(以前称为 Twitter)、Facebook 或 BlueSky 等平台,并自定义帖子的时间和内容,以最大限度地提高受众参与度和覆盖范围。
就这样,请继续关注本系列的更多更新!
? 通过我的新书《学习 Vue》了解 Vue 3 和 TypeScript!
? 想支持我吗?请我喝杯咖啡。
喜欢这篇文章或觉得它有帮助吗?分享一下?
以上是构建社交媒体自动化:LinkedIn 与无服务器功能共享的详细内容。更多信息请关注PHP中文网其他相关文章!