# @florydev/linkedin-api-voyager 中文文档

规范地址：https://npmcn.com/package/%40florydev/linkedin-api-voyager/

版本：1\.5\.1
npm 元数据更新时间：2026-08-07T16:42:06.000Z
中文译文更新时间：2026-11-15T00:51:09.028Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40florydev/linkedin-api-voyager
原文对照：https://npmcn.com/package/%40florydev/linkedin-api-voyager/?lang=original
项目主页：https://github.com/Floryvibla/linkedin-api-voyager#readme
源码仓库：https://github.com/Floryvibla/linkedin-api-voyager

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：580 kB，180 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：2 个
- 首次发布：2026-02-06T14:15:48.304Z
- 最新版本发布：2026-08-07T16:42:05.824Z
- 近 30 天下载量：2952（2026-10-15 至 2026-11-13，npm 官方下载统计）
- 已发布版本数：13（近 12 个月 13 个）

## 中文简介

Uma bibliotica TypeScript para interagir com a API interna do LinkedIn (Voyager) 互联网档案馆的存檔,存档日期2013-12-02

## 安装

```sh
npm install @florydev/linkedin-api-voyager
```

也可以使用：`pnpm add @florydev/linkedin-api-voyager`、`yarn add @florydev/linkedin-api-voyager`、`bun add @florydev/linkedin-api-voyager`

## README

# API Voyager 已链接

> Bibliotica TypeScript para interagir com enders internos do LinkedIn Web (Voyager API). 互联网档案馆的存檔,存档日期2013-12-21.

> Aviso 重要: esta bibliotica **互联网档案馆的存檔,存档日期2011-10-02**。 。 。 .

[![npm version](https://img.shields.io/npm/v/@florydev/linkedin-api-voyager.svg)](https://www.npmjs.com/package/@florydev/linkedin-api-voyager) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

## 穆丹萨·德·帕科特

欧·帕克特反戈 `linkedin-api-voyager` (原始内容存档于2017-09-21) (英语). foi renmeado para `@florydev/linkedin-api-voyager`。 。 。 .

```bash
yarn add @florydev/linkedin-api-voyager
```

## O que esta bibliotica faz (英语:

Esta bibliotica encapsula chamadas para enders internos usados pelo 前端 do LinkedIn e normaliza 作为resposta para uso em aplica es node.js.

A:

-   乌萨里奥派
-   经验、技能、证书
-   父子关系
-   公共汽车
-   公共汽车
-   科门塔里奥斯
-   收件箱 e 菜单
-   康克萨斯
-   通过 SSE 实现节奏事件

## 请求

-   节点.js
-   无链接的Sessão autenticada
-   饼干 válidos `li_at` 电子 `JSESSIONID`

埃斯塔·比布利奥特卡·德·塞尔·韦达 **没有后端**. Não 不使用浏览器.

## 英斯特拉桑

```bash
yarn add @florydev/linkedin-api-voyager
```

## 引言词

官方网站 `Client()` (原始内容存档于2018-03-26). uma única vez antes de chamar qualquer função.

```ts
import { Client } from "@florydev/linkedin-api-voyager";

Client({
  li_at: process.env.LINKEDIN_LI_AT!,
  JSESSIONID: process.env.LINKEDIN_JSESSIONID!,
});
```

### 科莫语 `li_at` 电子 `JSESSIONID`

1.  Faça 登录没有链接到 navegador .
2.  (原始内容存档于2018-10-21). Abra o DevTools.
3.  临Τ `Application` 尔 `Storage`。 。 。 .
4.  亚伯拉 `Cookies` 页:1 `https://www.linkedin.com`。 。 。 .
5.  库皮:
    -   `li_at`
    -   `JSESSIONID`

## 有重要的意义 `JSESSIONID`

通过 somente 或 valor 碱性饼干 `Client`。 。 。 .

Exemplo seguro: (英语)

```ts
Client({
  li_at: "AQED....",
  JSESSIONID: "1234567890",
});
```

(法语) `"ajax:1234567890"` {\\fn华文楷体\\fs16\\1che0e0e0}做纳维加多 {\\fn华文楷体\\fs16\\1che0e0e0}正常的通过者.

## 实例rápido

```ts
import "dotenv/config";
import {
  Client,
  getUserMiniProfile,
  getCompany,
  searchPeople,
} from "@florydev/linkedin-api-voyager";

Client({
  li_at: process.env.LINKEDIN_LI_AT!,
  JSESSIONID: process.env.LINKEDIN_JSESSIONID!,
});

async function main() {
  const profile = await getUserMiniProfile("florymignon");
  const company = await getCompany("microsoft");
  const people = await searchPeople({
    query: "software engineer",
    regions: ["br:0"],
  });

  console.log({
    profile,
    company,
    totalPeople: people.results.length,
  });
}

main().catch(console.error);
```

## API pública (英语)

### 变态

```ts
import {
  getMe,
  getUserMiniProfile,
  extractProfileIdLinkedin,
  getProfileSectionAbout,
  getProfissionalExperiences,
  getContactInfo,
  getLinkedinSkills,
  getLinkedinEducation,
  getLinkedinCertifications,
} from "@florydev/linkedin-api-voyager";
```

-   `getMe()` - > 环自圆顶
-   `getUserMiniProfile(identifier)` - > 迷你纵览 `publicIdentifier`
-   `extractProfileIdLinkedin(profileUrl)` - > 解决 o ID Interno do perfil
-   `getProfileSectionAbout(identifier)` - > 关于文本
-   `getProfissionalExperiences(identifier)` - > profissionais perperiências 互联网档案馆的存檔,存档日期2013-12-02
-   `getContactInfo(identifier)` - > 信息传输系统
-   `getLinkedinSkills(identifier)` - > 技能
-   `getLinkedinEducation(identifier)` - > 教育
-   `getLinkedinCertifications(identifier)` - > 证书

实例 :

```ts
const profile = await getUserMiniProfile("florymignon");
const experiences = await getProfissionalExperiences("florymignon");
const contact = await getContactInfo("florymignon");
```

### 企业

```ts
import { getCompany } from "@florydev/linkedin-api-voyager";

const company = await getCompany("microsoft");
```

O parâmetro é o slock da URL da empresa: 互联网档案馆的存檔,存档日期2013-12-02

-   `https://www.linkedin.com/company/microsoft/` - > (中文) `"microsoft"`

### 美洲人民行动组织

```ts
import {
  getCompanyEntityId,
  searchCompanyPeople,
} from "@florydev/linkedin-api-voyager";

const companyId = await getCompanyEntityId("microsoft");

const people = await searchCompanyPeople({
  companyId,
  query: "engineer",
  pastCompany: false,
  includePrivateProfiles: true,
  offset: 0,
  limit: 10,
});
```

坎波斯乌特斯:

-   `companySlug`
-   `companyId`
-   `query`
-   `regions`
-   `schools`
-   `keywordTitle`
-   `pastCompany`
-   `includePrivateProfiles`

## 布萨卡

### Busca 遗传

```ts
import { search } from "@florydev/linkedin-api-voyager";

const res = await search({
  query: "react developer",
  offset: 0,
  limit: 25,
});
```

### 比索

```ts
import { searchPeople } from "@florydev/linkedin-api-voyager";

const people = await searchPeople({
  query: "engenheiro de software",
  regions: ["br:0"],
  currentCompany: ["urn:li:fsd_company:1035"],
  networkDepths: ["F", "S"],
  keywordTitle: "CTO",
});
```

观察者:

-   `search()` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}没有马克西莫 `25` 果报.
-   `searchPeople()` aceita 字符串简单 ou objeto com filtros. 中国植物物种信息数据库.
-   `networkDepths` 我们a:
    -   `F` - > 1克劳
    -   `S` - > 2o克劳
    -   `O` - > 论坛da rede

## 员额e

```ts
import {
  getPostLinkedin,
  getCommentsByPostUrl,
  getUserPosts,
} from "@florydev/linkedin-api-voyager";
```

### Post por URL 邮递地址

```ts
const post = await getPostLinkedin(
  "https://www.linkedin.com/posts/florymignon_...-activity-1234567890-abcd",
  10,
  10,
);
```

### 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基语录

```ts
const comments = await getCommentsByPostUrl(
  "https://www.linkedin.com/feed/update/urn:li:activity-1234567890/",
);
```

### 乌斯瓦里奥

```ts
const posts = await getUserPosts({
  identifier: "florymignon",
  start: 0,
  count: 50,
});
```

观察者:

-   `getCommentsByPostUrl()` (原始内容存档于2018-03-26) (英语). pagina recersivamente até acabar.
-   `getPosts()` 已经存在, mas hoje é 占位符 e reronda `[]`。 。 。 .

## Mensagens 电子收件箱

```ts
import {
  getMessagingInboxConversations,
  getMessages,
} from "@florydev/linkedin-api-voyager";
```

### 对话框

```ts
const conversations = await getMessagingInboxConversations({
  identifier: "florymignon",
});
```

### 门萨根斯·德·马·孔萨

```ts
const messages = await getMessages(conversations[0].urn);
```

也希望他们能继续工作

-   `VIDEO`
-   `IMAGE`
-   `FILE`
-   `AUDIO`

## 锥形,锥形和红相

> 托达斯作为乐趣 baixo aceitam **`vanityName`** (o identificador público de.) 互联网档案馆的存檔,存档日期2013-12-22 `/in/fulano` (原始内容存档于2017-09-21) (中文(中国大陆) ). You a URL Confleta) como entrada. `memberId` (单位:千美元) `ACoA...` e e sempre ocional e resolvido autalamente quando não fornecido. 互联网档案馆的存檔,存档日期2013-12-02., p.

```ts
import {
  receivedInvitation,
  sentInvitation,
  getMyConnections,
  sendConnectionRequest,
  cancelSentInvitation,
  removeConnection,
  followProfile,
  unfollowProfile,
  getProfileConnections,
  getProfileFollowers,
  getProfileFollowing,
} from "@florydev/linkedin-api-voyager";

const received = await receivedInvitation({ start: 0, count: 10 });
const sent = await sentInvitation({ start: 0, count: 10 });

// Minhas conexões (Voyager /relationships/connections)
const myConnections = await getMyConnections({ start: 0, count: 20 });

// Enviar convite de conexão (SDUI flagship) — só precisa do identifier
await sendConnectionRequest({
  vanityName: "ana-silva",                         // OU "https://www.linkedin.com/in/ana-silva/"
  message: "Olá Ana, gostaria de nos conectar!",   // opcional
});
// Campos opcionais que você pode sobrescrever: firstName, lastName, inviteeMemberId (ACoA...),
// legacyNumericMemberId (ID numérico legado, ex: "876631041"), trackingId, profileCanonicalUrl

// Cancelar/retirar convite enviado (invitationId vem de sentInvitation -> invitationUrn)
await cancelSentInvitation({
  invitationId: "7123456789012345678",
  inviteeVanityName: "ana-silva",                   // memberId opcional
});

// Remover conexão existente
await removeConnection({ vanityName: "ana-silva" });

// Seguir / deixar de seguir
await followProfile({ vanityName: "ana-silva" });
await unfollowProfile({ vanityName: "ana-silva" });

// Listar conexões / seguidores / seguindo de um perfil 3º
// Recebe vanity name (identifier) OU memberId (ACoA...) — auto-detectado
const identifier = "williamhgates";                 // ou "ACoAABy..."
const profileConnections = await getProfileConnections(identifier, { start: 0, count: 20 });
const profileFollowers = await getProfileFollowers(identifier, { count: 10 });
const profileFollowing = await getProfileFollowing(identifier, { count: 10 });
```

## Timo real com SSE (英语)

```ts
import {
  Client,
  linkedinSSE,
  LinkedInRealtimeTopic,
} from "@florydev/linkedin-api-voyager";

Client({
  li_at: process.env.LINKEDIN_LI_AT!,
  JSESSIONID: process.env.LINKEDIN_JSESSIONID!,
});

await linkedinSSE({
  topics: ["Messages", "TypingIndicators", "Conversations"],
  onData: (data) => console.log(data),
  onError: (error) => console.error(error),
});
```

阿尔古马斯议题不赞成:

-   `Messages`
-   `TypingIndicators`
-   `Conversations`
-   `Reactions`
-   `Comments`

## 乌蒂利塔里奥斯

```ts
import {
  extractFields,
  resolveReferences,
  extractDataWithReferences,
  getIdFromUrn,
  isLinkedInUrn,
  normalizeRawOrganization,
} from "@florydev/linkedin-api-voyager";
```

{\\fn方正黑体简体\\fs18\\b1\\bord1\\shad1\\3cH2F2F2F}\[阿斯克·克克多克\] {\\fn方正黑体简体\\fs18\\b1\\bord1\\shad1\\3cH2F2F2F}阿斯克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克多克·克多克多克·克多克多克·克多克多克·克多克多克·克多克多克多克·克多克多克多克多克·克多克多克多克·克多克多克·克多克多克多克多克多克\].

实例 :

```ts
const fieldsMap = {
  name: "firstName",
  headline: "headline",
};

const data = extractFields([someObject], fieldsMap);
```

## Funções 跨王朝重要人物

### `Client()`

官方化的,一个全球的我们dadortoda 解放.

### `fetchDataApi()`

Usa o 前缀 `/voyager/api` faz chamadas 获得 para 端点 Internos do LinkedIn.

### `fetchDataClient()`

Usado para inspecionar将 sem seguir 自动调剂重置.

### `postSduiAction()`

帮助他们 `src/core/sdui.ts` ações SDUI旗舰-web 2025/2026(模式:羡慕/祖先相会、seguir、去除者相会)。 法兹 `POST /flagship-web/rsc-action/actions/server-request` com 信封缩写、信头`x-li-page-instance`, (中文(简体) ), `x-li-page-instance-tracking-id`, (中文(简体) ), `x-li-application-instance`, (中文(简体) ), `x-li-anchor-page-key`, (中文(简体) ), `x-li-track mpName=web`, (中文(简体) ), `x-li-rsc-stream: true`页:1 `_v=0.2.6676` {\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}你觉得呢.

实例 :

```ts
import { postSduiAction } from "@florydev/linkedin-api-voyager/src/core/sdui";

await postSduiAction({
  sduiid: "com.linkedin.sdui.requests.mynetwork.addaUpdateFollowState",
  payload: { followStateType: "FollowStateType_FOLLOW_ACTIVE", memberUrn: { memberId: "1361766591" }, ... },
  anchorPageKey: "d_flagship3_profile_view_base",       // ou d_flagship3_people
  screenId: "com.linkedin.sdui.flagshipnav.profile.Profile", // ou ...mynetwork.Grow
  refererUrl: "https://www.linkedin.com/in/fulano/",
});
```

## 埃尔罗斯

O Projeto 导出a:

-   `LinkedInClientNotInitializedError`
-   `LinkedInAuthRedirectError`

纳·普雷蒂卡,阿能达基地 `Error` 简指相通等分. Então trate mistos tanto por slase squento por sensagem squando necessário. 中国植物物种信息数据库.

## 限制

-   Esta bibliotica de endpoints internos do LinkedIn, então pode quebrar sem aviso. 中国植物物种信息数据库.
-   (原始内容存档于2018-10-25). Nacessário manter cookies válidos.
-   挑战塞西昂.
-   (原始内容存档于2018-10-21) (英语). Algumas rotas têm repostas mido aninhadas e mudam com frequência.

## 萨古兰察

-   Nunca 承诺 `li_at` 电子 `JSESSIONID`。 。 。 .
-   Nunca使用 essa lib 没有前端.
-   Nunca 轨迹 `src/teste.ts` (原始内容存档于2018-03-26) (英语). como exemplo de produção.
-   随便 `.env`{\\fn黑体\\fs22\\bord1\\shad0\\3ahbe\\4ah00\\fscx67\\fscy66\\2chffffff\\3ch808080}请说出什么.

## 众议院

### 脚本 da raiz

```bash
yarn
yarn build
yarn dev
```

### Estrutura 校长

多米尼奥(Cada um com seus próprios tipos)的作品:

```
src/
├── index.ts                # barrel principal / exports públicos
├── core/                   # código compartilhado entre todos os módulos
│   ├── config.ts           # cliente HTTP e helpers base (fetchDataApi, etc)
│   ├── errors.ts           # classes de erro
│   ├── utils.ts            # parsing e normalização (URNs, imagens, references)
│   └── types.ts            # tipos compartilhados globais
└── modules/                # camada de domínio, um módulo por assunto
    ├── user/               # perfis, seções, about, contact, recommendations
    │   ├── types.ts
    │   └── (vários arquivos de implementação)
    ├── company/            # empresas + pessoas por empresa
    │   ├── types.ts
    │   ├── company.ts
    │   └── company-people.ts
    ├── posts/              # posts e comentários
    │   ├── types.ts
    │   └── posts.ts
    ├── search/             # busca geral e busca de pessoas
    │   ├── types.ts
    │   └── search.ts
    ├── messages/           # inbox e mensagens
    │   ├── types.ts
    │   └── message.ts
    ├── network/            # convites, follow, conexões, listagens de 3º perfil
    │   ├── index.ts
    │   ├── types.ts
    │   ├── network.ts              # received/sent invitations, getMyConnections
    │   ├── invitation-actions.ts   # sendConnectionRequest, cancelSentInvitation
    │   ├── connection-actions.ts   # removeConnection
    │   ├── follow-actions.ts       # followProfile, unfollowProfile
    │   ├── profile-lists.ts        # getProfileConnections/Followers/Following
    │   └── network-helpers.ts      # resolveMemberIds, resolveMemberId, pickVanity, extractFirstLegacyNumericId
    └── sse/                # eventos em tempo real
        ├── types.ts
        └── linkedin-sse.ts
```

### 辅助工人

(原始内容存档于2018-10-21) (英语). O repo tumbém possui `worker-service/`, um subprojeto 本地参数SSE + BullMQ + Redis + Supabase.

指挥官:

```bash
yarn --cwd worker-service build
yarn --cwd worker-service start
```

## 内务省

爱奇艺 爱奇艺 爱奇艺

-   `skills/references/profiles.md`
-   `skills/references/companies.md`
-   `skills/references/posts.md`
-   `skills/references/search-network.md`
-   `skills/references/realtime.md`
-   `skills/references/internals.md`

## 语法

麻省理工学院

## 常见问题

### @florydev/linkedin-api-voyager 是什么？

Uma bibliotica TypeScript para interagir com a API interna do LinkedIn \(Voyager\) 互联网档案馆的存檔,存档日期2013-12-02

### 如何安装 @florydev/linkedin-api-voyager？

在项目目录运行 npm install @florydev/linkedin-api-voyager，或使用 pnpm add / yarn add / bun add。

### @florydev/linkedin-api-voyager 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @florydev/linkedin-api-voyager 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @florydev/linkedin-api-voyager 可以商用吗？

@florydev/linkedin-api-voyager 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @florydev/linkedin-api-voyager 的下载量有多少？

根据 npm 官方下载统计，@florydev/linkedin-api-voyager 在 2026/10/15 – 2026/11/13 这 30 天内被下载 2,952 次，日均约 98 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @florydev/linkedin-api-voyager 还在维护吗？

最新版本 1\.5\.1 发布于 2026/08/08（3 个月前）；至今共发布 13 个版本，其中过去 12 个月发布了 13 个；首次发布于 2026/02/06。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

