Как обновить LinkedIn через API: Полное руководство с примерами кода на Python и Node.js

Подробное руководство по использованию LinkedIn API v2 для автоматизации публикации контента и обновления профиля. Статья включает пошаговую инструкцию по настройке приложения, аутентификации OAuth 2.0, а также практические примеры кода на Python и Node.js для публикации постов и работы с профилем.
В современном цифровом мире поддержание актуального профиля в LinkedIn — это не просто рекомендация, а необходимость для IT-специалистов, рекрутеров и компаний. Ручное обновление, особенно при частых изменениях в проектах или навыках, отнимает драгоценное время. К счастью, LinkedIn предоставляет мощный API, позволяющий автоматизировать многие процессы. Эта статья — подробное руководство по использованию LinkedIn API v2 для программного обновления вашего профиля, снабженное практическими примерами кода.

Первым и самым важным шагом является получение доступа к API. Для этого вам потребуется создать приложение на портале разработчиков LinkedIn. Зайдите на `developer.linkedin.com`, авторизуйтесь и создайте новое приложение. Заполните базовую информацию: название, ссылку на страницу компании, URL политики конфиденциальности и логотип. После создания приложения вам будут предоставлены `Client ID` и `Client Secret` — храните их в безопасности, как пароли.

Для большинства операций обновления профиля требуется разрешение `w_member_social` (для публикаций) и, что критически важно, `r_liteprofile` и `r_basicprofile`. Однако для редактирования основных полей профиля, таких как позиция, опыт или образование, LinkedIn API имеет ограничения. Прямое редактирование через API для личных профилей сильно ограничено. Основной сценарий автоматизации — это публикация контента (постов, статей) и получение данных. Для обновления полей профиля часто требуется использование партнерских программ или специальный доступ. Но мы рассмотрим то, что доступно широкому кругу разработчиков.

Давайте начнем с аутентификации. LinkedIn использует OAuth 2.0. Процесс включает получение кода авторизации и его обмен на Access Token. Вот пример на Python с использованием библиотеки `requests`.

import requests
import webbrowser

client_id = 'YOUR_CLIENT_ID'
redirect_uri = 'YOUR_REDIRECT_URI' # Например, http://localhost:8000/callback
scope = 'r_liteprofile w_member_social'
auth_url = f'https://www.linkedin.com/oauth/v2/authorization?response_type=code&client_id={client_id}&redirect_uri={redirect_uri}&scope={scope}'

print("Перейдите по ссылке для авторизации:", auth_url)
# Для автоматизации можно открыть браузер:
# webbrowser.open(auth_url)
# После авторизации LinkedIn перенаправит вас на redirect_uri с параметром `code` в URL.

Получив код, обменяйте его на токен.

code = 'CODE_FROM_REDIRECT'
token_url = 'https://www.linkedin.com/oauth/v2/accessToken'
data = {
 'grant_type': 'authorization_code',
 'code': code,
 'redirect_uri': redirect_uri,
 'client_id': client_id,
 'client_secret': 'YOUR_CLIENT_SECRET'
}
response = requests.post(token_url, data=data)
access_token = response.json().get('access_token')
print("Access Token:", access_token)

Теперь, имея токен, вы можете взаимодействовать с API. Самый распространенный сценарий — публикация поста. Это отличный способ регулярно обновлять ваш профиль новым профессиональным контентом.

headers = {
 'Authorization': f'Bearer {access_token}',
 'Content-Type': 'application/json',
 'X-Restli-Protocol-Version': '2.0.0'
}
post_url = 'https://api.linkedin.com/v2/ugcPosts'

post_data = {
 "author": "urn:li:person:YOUR_PERSON_URN", # URN нужно получить из API профиля
 "lifecycleState": "PUBLISHED",
 "specificContent": {
 "com.linkedin.ugc.ShareContent": {
 "shareCommentary": {
 "text": "Делюсь insights по автоматизации LinkedIn API с примерами кода на Python и Node.js. #API #Automation #Python #LinkedIn"
 },
 "shareMediaCategory": "NONE"
 }
 },
 "visibility": {
 "com.linkedin.ugc.MemberNetworkVisibility": "PUBLIC"
 }
}

response = requests.post(post_url, headers=headers, json=post_data)
if response.status_code == 201:
 print("Пост успешно опубликован!")
else:
 print("Ошибка:", response.status_code, response.text)

Для получения вашего URN (`personUrn`) используйте конечную точку `/me`.

profile_url = 'https://api.linkedin.com/v2/me'
response = requests.get(profile_url, headers=headers)
person_urn = response.json().get('id')
print(f"Person URN: {person_urn}")

Теперь рассмотрим пример на Node.js с использованием `axios`. Установите axios: `npm install axios`.

const axios = require('axios');

const sharePost = async (accessToken, personUrn, text) => {
 const url = 'https://api.linkedin.com/v2/ugcPosts';
 const headers = {
 'Authorization': `Bearer ${accessToken}`,
 'Content-Type': 'application/json',
 'X-Restli-Protocol-Version': '2.0.0'
 };
 const data = {
 author: `urn:li:person:${personUrn}`,
 lifecycleState: "PUBLISHED",
 specificContent: {
 "com.linkedin.ugc.ShareContent": {
 shareCommentary: { text },
 shareMediaCategory: "NONE"
 }
 },
 visibility: { "com.linkedin.ugc.MemberNetworkVisibility": "PUBLIC" }
 };

 try {
 const response = await axios.post(url, data, { headers });
 console.log('Пост опубликован! ID:', response.data.id);
 } catch (error) {
 console.error('Ошибка публикации:', error.response?.data || error.message);
 }
};

Важные моменты и лучшие практики. Всегда используйте последнюю версию API (V2). Тщательно управляйте токенами: Access Tokens имеют ограниченный срок жизни (около 60 дней), реализуйте логику их обновления с помощью Refresh Token (если доступен). Уважайте лимиты запросов API, чтобы избежать блокировки. Публикуйте ценный контент, а не спам — автоматизация должна помогать, а не вредить вашему профессиональному имиджу.

Для более сложных обновлений, таких как добавление новой позиции в опыт работы, на момент написания статьи публичный API не предоставляет открытых endpoints. Это можно обойти с помощью интеграций через LinkedIn Partners или используя инструменты автоматизации браузера, такие как Selenium или Puppeteer, для симуляции действий пользователя. Однако этот подход хрупок, зависит от изменений в интерфейсе LinkedIn и может нарушать условия использования.

Пример на Puppeteer для логина и ручного перехода к редактированию (только для образовательных целей).

const puppeteer = require('puppeteer');

(async () => {
 const browser = await puppeteer.launch({ headless: false });
 const page = await browser.newPage();
 await page.goto('https://www.linkedin.com/login');
 await page.type('#username', 'YOUR_EMAIL');
 await page.type('#password', 'YOUR_PASSWORD');
 await page.click('button[type="submit"]');
 await page.waitForNavigation();
 // Дальнейшая навигация к редактированию профиля...
 // await page.goto('https://www.linkedin.com/in/YOUR_PROFILE/edit/forms/experience/');
 console.log('Авторизация прошла успешно');
 // await browser.close();
})();

В заключение, LinkedIn API — мощный инструмент для автоматизации публикации контента и анализа данных. Хотя прямое редактирование полей профиля через публичный API ограничено, автоматизация постов и сбор аналитики могут значительно повысить вашу продуктивность и видимость в сети. Начинайте с простых публикаций, строго соблюдайте политики API и постепенно выстраивайте свою систему профессионального нетворкинга.
208 3

Комментарии (12)

avatar
nn2ifh5n1 01.04.2026
Жаль, что API LinkedIn такой ограниченный. Нельзя, например, автоматически добавлять рекомендации.
avatar
2hl38f6ahn 02.04.2026
Отличный старт! Планируете ли вы статью про автоматизацию публикаций контента через API?
avatar
xd91cjh 02.04.2026
Не уверен, что стоит связываться с API ради редких обновлений. Проще вручную раз в полгода.
avatar
0bx3yjspnmi 03.04.2026
Автоматизация через API — это сила. Экономит кучу времени, если часто что-то меняется в резюме.
avatar
7dwh5bly1p 03.04.2026
Руководство полное, но для новичков в REST API, возможно, не хватает более базовых объяснений.
avatar
b9guqrqr6 03.04.2026
Отличное руководство! Как раз искал способ автоматизировать обновление позиции в профиле при смене проекта.
avatar
15zp8e10mo 03.04.2026
Статья полезная, но хотелось бы больше примеров обработки ошибок API, особенно с квотами.
avatar
6n7z6vcj 03.04.2026
Попробовал код из статьи — сработало с первого раза. Теперь профиль всегда актуальный.
avatar
xe2su884agts 03.04.2026
Всё понятно расписано, но процесс получения access token для API всё ещё слишком замороченый.
avatar
uxz2j25 04.04.2026
Спасибо за Node.js примеры! Чаще встречаю только Python, а у нас весь стек на JavaScript.
Вы просмотрели все комментарии