API Voyager 已链接
Bibliotica TypeScript para interagir com enders internos do LinkedIn Web (Voyager API). 互联网档案馆的存檔,存档日期2013-12-21.
Aviso 重要: esta bibliotica 互联网档案馆的存檔,存档日期2011-10-02。 。 。 .
穆丹萨·德·帕科特
欧·帕克特反戈 linkedin-api-voyager (原始内容存档于2017-09-21) (英语). foi renmeado para @florydev/linkedin-api-voyager。 。 。 .
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 不使用浏览器.
英斯特拉桑
yarn add @florydev/linkedin-api-voyager
引言词
官方网站 Client() (原始内容存档于2018-03-26). uma única vez antes de chamar qualquer função.
import { Client } from "@florydev/linkedin-api-voyager";
Client({
li_at: process.env.LINKEDIN_LI_AT!,
JSESSIONID: process.env.LINKEDIN_JSESSIONID!,
});
科莫语 li_at 电子 JSESSIONID
- Faça 登录没有链接到 navegador .
- (原始内容存档于2018-10-21). Abra o DevTools.
- 临Τ
Application尔Storage。 。 。 . - 亚伯拉
Cookies页:1https://www.linkedin.com。 。 。 . - 库皮:
li_atJSESSIONID
有重要的意义 JSESSIONID
通过 somente 或 valor 碱性饼干 Client。 。 。 .
Exemplo seguro: (英语)
Client({
li_at: "AQED....",
JSESSIONID: "1234567890",
});
(法语) "ajax:1234567890" {\fn华文楷体\fs16\1che0e0e0}做纳维加多 {\fn华文楷体\fs16\1che0e0e0}正常的通过者.
实例rápido
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 (英语)
变态
import {
getMe,
getUserMiniProfile,
extractProfileIdLinkedin,
getProfileSectionAbout,
getProfissionalExperiences,
getContactInfo,
getLinkedinSkills,
getLinkedinEducation,
getLinkedinCertifications,
} from "@florydev/linkedin-api-voyager";
getMe()- > 环自圆顶getUserMiniProfile(identifier)- > 迷你纵览publicIdentifierextractProfileIdLinkedin(profileUrl)- > 解决 o ID Interno do perfilgetProfileSectionAbout(identifier)- > 关于文本getProfissionalExperiences(identifier)- > profissionais perperiências 互联网档案馆的存檔,存档日期2013-12-02getContactInfo(identifier)- > 信息传输系统getLinkedinSkills(identifier)- > 技能getLinkedinEducation(identifier)- > 教育getLinkedinCertifications(identifier)- > 证书
实例 :
const profile = await getUserMiniProfile("florymignon");
const experiences = await getProfissionalExperiences("florymignon");
const contact = await getContactInfo("florymignon");
企业
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"
美洲人民行动组织
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,
});
坎波斯乌特斯:
companySlugcompanyIdqueryregionsschoolskeywordTitlepastCompanyincludePrivateProfiles
布萨卡
Busca 遗传
import { search } from "@florydev/linkedin-api-voyager";
const res = await search({
query: "react developer",
offset: 0,
limit: 25,
});
比索
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
import {
getPostLinkedin,
getCommentsByPostUrl,
getUserPosts,
} from "@florydev/linkedin-api-voyager";
Post por URL 邮递地址
const post = await getPostLinkedin(
"https://www.linkedin.com/posts/florymignon_...-activity-1234567890-abcd",
10,
10,
);
维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基文库中相关的原始文献: 维基语录
const comments = await getCommentsByPostUrl(
"https://www.linkedin.com/feed/update/urn:li:activity-1234567890/",
);
乌斯瓦里奥
const posts = await getUserPosts({
identifier: "florymignon",
start: 0,
count: 50,
});
观察者:
getCommentsByPostUrl()(原始内容存档于2018-03-26) (英语). pagina recersivamente até acabar.getPosts()已经存在, mas hoje é 占位符 e reronda[]。 。 。 .
Mensagens 电子收件箱
import {
getMessagingInboxConversations,
getMessages,
} from "@florydev/linkedin-api-voyager";
对话框
const conversations = await getMessagingInboxConversations({
identifier: "florymignon",
});
门萨根斯·德·马·孔萨
const messages = await getMessages(conversations[0].urn);
也希望他们能继续工作
VIDEOIMAGEFILEAUDIO
锥形,锥形和红相
托达斯作为乐趣 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.
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 (英语)
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),
});
阿尔古马斯议题不赞成:
MessagesTypingIndicatorsConversationsReactionsComments
乌蒂利塔里奥斯
import {
extractFields,
resolveReferences,
extractDataWithReferences,
getIdFromUrn,
isLinkedInUrn,
normalizeRawOrganization,
} from "@florydev/linkedin-api-voyager";
{\fn方正黑体简体\fs18\b1\bord1\shad1\3cH2F2F2F}[阿斯克·克克多克] {\fn方正黑体简体\fs18\b1\bord1\shad1\3cH2F2F2F}阿斯克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克·克多克多克·克多克多克·克多克多克·克多克多克·克多克多克·克多克多克多克·克多克多克多克多克·克多克多克多克·克多克多克·克多克多克多克多克多克].
实例 :
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}你觉得呢.
实例 :
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:
LinkedInClientNotInitializedErrorLinkedInAuthRedirectError
纳·普雷蒂卡,阿能达基地 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
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.
指挥官:
yarn --cwd worker-service build
yarn --cwd worker-service start
内务省
爱奇艺 爱奇艺 爱奇艺
skills/references/profiles.mdskills/references/companies.mdskills/references/posts.mdskills/references/search-network.mdskills/references/realtime.mdskills/references/internals.md
语法
麻省理工学院