Linkedin — это влиятельная социальная сетевая платформа, связанная с бизнесом, которая позволяет людям из разных мест, культур и отраслей создавать и расширять свои сети, поэтому LinkedIn является одним из важных инструментов в любом мешке успеха.
Профессиональные организации и сотрудники также сегодня рассматривают Linkedin как основную социальную платформу для своего бизнеса, организации используют LinkedIn для поиска талантливых людей, а талантливые люди заботятся о своих профилях и деятельности, чтобы быть найденными лучшей организацией.
Чтобы сделать все это легко и быстро для организаций и сотрудников, существует множество инструментов, которые взаимодействуют с API Linkedin и возвращают вам результат за несколько секунд. Одним из таких инструментов является Linkedin Python API
Давайте погрузимся в него!
Оглавление 📒
- Что такое LinkedIn Python API? ❓
- Начало работы ▶️
- Получение информации о профиле ℹ️
- Управление связями 🌐
- Получение и ответ на сообщения 💬.
- Что дальше? ⏭
Что такое Linkedin Python API? ❓
Python обертка для Linkedin API, которая поможет вам взаимодействовать с LinkedIn API из ваших собственных скриптов, чтобы делать различные вещи, такие как отправка сообщений, поиск профилей, получение работы и т.д. Самое интересное, что все, что вам нужно, это обычный аккаунт LinkedIn, без создания официального приложения LinkedIn.
Перед использованием этого проекта, пожалуйста, ознакомьтесь с Условиями и положениями и Юридическим уведомлением.
Начало работы ▶️
⚠️ Требуется Python >= 3.6.
Проверьте установку python.
Для установки пакета выполните следующую команду:
pip3 install linkedin-api
Пример использования
from linkedin_api import Linkedin
# Authenticate using any Linkedin account email and password
try:
api = Linkedin('me@mail.com', 'password')
profile = api.get_profile('muhammedmoussa')
print(profile)
except:
print("An exception occurred")
Пример ответа на выборку профиля.
{
"summary": "...",
"industryName": "Financial Services",
"lastName": "Moussa ✪",
"address": "Hurghada, Egypt",
"locationName": "Egypt",
"student": false,
"geoCountryName": "Egypt",
"geoCountryUrn": "urn:li:******",
"geoLocationBackfilled": false,
"elt": false,
"birthDate": {},
"industryUrn": "urn:li:fs_industry:43",
"firstName": "Muhammed ",
"entityUrn": "urn:li:fs_profile:ACoAABT1wOkBUgS77T0NG2puPbStCWKVLIJHUaE",
"geoLocation": {},
"geoLocationName": "Hurghada, Al Bahr al Ahmar",
"location": {},
"headline": "JavaScript Developer at Paymob",
"displayPictureUrl": "https://media-exp2.licdn.com/dms/image/C5603AQHwEFZkUOXalw/profile-displayphoto-shrink_",
"img_100_100": "100_100/0/1647527431537?e=1663804800&v=beta&t=ILGlsVPFkYE6ScB9IXx8JX1o5j4SqVCFGVRlKgPPpmg",
"img_200_200": "200_200/0/1647527431537?e=1663804800&v=beta&t=VfEVqlmBJPPgan1tBguYDmRHPTTHSgcY83fSp7GNd-E",
"img_400_400": "400_400/0/1647527431537?e=1663804800&v=beta&t=zN_GOz0Y4PG3ZZMa2xqpNAyg704CE5qkP-_m-wyBl3w",
"img_800_800": "800_800/0/1647527431537?e=1663804800&v=beta&t=k7971X7dfIT-iY-Ng0QNuInX74BhahiRviMyZESBW8w",
"profile_id": "ACoAABT1wOkBUgS77T0NG2puPbStCWKVLIJHUaE",
"profile_urn": "urn:li:fs_miniProfile:ACoAABT1wOkBUgS77T0NG2puPbStCWKVLIJHUaE",
"member_urn": "urn:li:member:351650025",
"experience": [],
"education": [],
"languages": [],
"publications": [],
"certifications": [],
"volunteer": [],
"honors": [],
"projects": []
}
Получение сведений о профиле ℹ️
Пакет имеет набор магических методов для взаимодействия с данными профиля LinkedIn, в дополнение к методу get_profile()
, упомянутому выше, ниже приведен список некоторых из этих методов.
from linkedin_api import Linkedin
try:
api = Linkedin('me@mail.com', 'password')
# Getting profile skills using Linkedin public profile id
skills = api.get_profile_skills('muhammedmoussa')
print(skills)
# Getting profile contact info using Linkedin public profile id
contact_info = api.get_profile_contact_info('muhammedmoussa')
print(contact_info)
# Getting profile badges using Linkedin public profile id
badges = api.get_profile_member_badges('muhammedmoussa')
print(badges)
except:
print("An exception occurred")
Для лучшего представления о плагине ниже приведен пример ответа на эти методы.
// skills
[
{"name": "JavaScript"},
{
"name": "TypeScript",
"standardizedSkillUrn": "urn:li:fs_miniSkill:50517",
"standardizedSkill": {
"name": "TypeScript",
"entityUrn": "urn:li:fs_miniSkill:50517"
}
},
{"name": "Node.js"},
{"name": "MongoDB"},
{"name": "Python"},
...
]
// contact_info
{
"email_address":"muhammedmoussa@hotmail.com",
"websites":[
{
"url":"https://muhammedmoussa.github.io/",
"label":"PERSONAL"
}
],
"twitter":[
{
"name":"muhammedMoussa",
"credentialId":"urn:li:member:351650025;345345825"
}
],
...
}
// badges
{
"premium":false,
"influencer":false,
"entityUrn":"urn:li:fs_memberBadges:******",
"openLink":false,
"jobSeeker":false,
"$type":"com.linkedin.voyager.identity.profile.MemberBadges"
}
Управление соединениями 🌐
Пакет также имеет набор магических методов для управления и контроля различных сетевых соединений, таких как добавление, удаление существующих соединений, получение и принятие приглашений, а также список некоторых из этих методов.
from linkedin_api import Linkedin
try:
api = Linkedin('me@mail.com', 'password')
# Send connection request to a given profile id, will return a boolean.
api.add_connection('muhammedmoussa')
# Remove a connection with a given profile id, will return a boolean.
api.remove_connection('muhammedmoussa')
# Fetch connection invitations for the currently logged in user with start and limit params.
invitations = api.get_invitations(start=0, limit=3)
print(invitations)
# Unfollow a given profile id, will return a boolean.
api.unfollow_entity('muhammedmoussa')
except:
print("An exception occurred")
Образец ответа при получении приглашений.
[
{
"mailboxItemId": "*******",
"toMemberId": "*******",
"fromMember": {
"memorialized": false,
"firstName": "Muhammed ",
"lastName": "Moussa",
"entityUrn": "urn:li:fs_miniProfile:******",
"publicIdentifier": "muhammedmoussa",
"trackingId": "P8mZOe9HRLO5L84xOoN16g=="
},
"invitee": {},
"invitationType": "PENDING",
"entityUrn": "urn:li:fs_relInvitation:6954589454917320704",
"toMember": {},
"inviterActors": [],
"sentTime": 1658103366339,
"customMessage": false,
"sharedSecret": "******",
"unseen": true
}
]
Получение и ответ на сообщения 💬.
Наконец, пакет также имеет набор магических методов для работы с разговорами, такими как получение и отправка сообщений, вот список некоторых из этих методов ниже.
from linkedin_api import Linkedin
try:
api = Linkedin('me@mail.com', 'password')
# Fetch list of conversations logged in user. return list.
conversations = api.get_conversations()
print(conversations)
# Fetch conversation (message thread) details for a given LinkedIn profile. return dictionary.
api.get_conversation_details('urn:li:fs_miniProfile:********')
# Send a message to a given conversation. return boolean
api.send_message('Hello There!', 'urn:li:fsd_conversation:********')
# Send `seen` to a given conversation. return boolean.
mark_conversation_as_seen('urn:li:fsd_conversation:********')
except:
print("An exception occurred")
Образец ответа при получении сообщений.
{
"metadata": {
"unreadCount": 0
},
"elements": [
{
"dashEntityUrn": "urn:li:fsd_conversation:*****",
"notificationStatus": "ACTIVE",
"read": true,
"groupChat": false,
"totalEventCount": 2,
"unreadCount": 0,
"lastActivityAt": 1658148419804,
"firstMessageUrn": "urn:li:fs_event:(*****,2-MTY1ODEwNDYyNzczOGI4ODE2Mi0wMDQmY2I0M2UwZDctZmM5ZS00NmY0LTg3OWQtNGVhMGIyYzgxZmM1XzAxMw==)",
"backendUrn": "urn:li:messagingThread:*****",
"receipts": [
{
"fromEntity": "urn:li:fs_miniProfile:******",
"seenReceipt": {
"seenAt": 1658148419629,
"eventUrn": "urn:li:fs_event:(*****,******)"
},
"fromParticipant": {
"string": "urn:li:member:351650025"
}
}
],
"lastReadAt": 1658148672641,
"archived": false,
"blocked": false,
"entityUrn": "urn:li:fs_conversation:*****",
"sdkEntityUrn": "urn:li:msg_conversation:(urn:li:fsd_profile:******,*****)",
"viewerCurrentParticipant": true,
"featureTypes": [],
"withNonConnection": false,
"muted": false,
"events": [
{
"createdAt": 1658148419796,
"reactionSummaries": [],
"dashEntityUrn": "urn:li:fsd_message:******",
"quickReplyRecommendations": [],
"entityUrn": "urn:li:fs_event:(*****,******)",
"eventContent": {
"com.linkedin.voyager.messaging.event.MessageEvent": {
"messageBodyRenderFormat": "DEFAULT",
"body": "",
"attributedBody": {
"text": "How are you?"
}
}
},
"subtype": "MEMBER_TO_MEMBER",
"from": {
"com.linkedin.voyager.messaging.MessagingMember": {
"miniProfile": {
"memorialized": false,
"firstName": "Muhammed ",
"lastName": "Moussa ✪",
"dashEntityUrn": "urn:li:fsd_profile:******",
"entityUrn": "urn:li:fs_miniProfile:******",
"backgroundImage": {},
"publicIdentifier": "muhammedmoussa",
"picture": {},
"trackingId": "gHcY3a/hRK6s0z/HDf7cTg=="
},
"entityUrn": "urn:li:fs_messagingMember:(*****,******)",
"nameInitials": "MM"
}
},
"previousEventInConversation": "urn:li:fs_event:(*****,2-MTY1ODEwNDczMDM3OWIyMzUzMi0wMDQmY2I0M2UwZDctZmM5ZS00NmY0LTg3OWQtNGVhMGIyYzgxZmM1XzAxMw==)",
"backendUrn": "urn:li:messagingMessage:******"
}
],
"participants": []
}
],
"paging": {
"count": 20,
"start": 0,
"links": []
}
}
Вы можете заметить некоторые отличия в параметрах, здесь вместо URL мы передаем urn
, это приводит к одному из самых важных ключевых понятий здесь URN IDs и public IDs.
-
URN ID
: Унифицированное имя ресурса (URN) — это унифицированный идентификатор ресурса (URI), использующий схему urn. URN являются глобально уникальными. пример URN профиля LinkedIn:urn:li:fs_miniProfile:ACoAABQ11fIBQLGQbB1V1XPBZJsRwfK5r1U2Rzt
. -
URL
: Единый локатор ресурсов (URL), в просторечии называемый веб-адресом, — это ссылка на веб-ресурс, определяющая его местоположение в компьютерной сети. пример URL профиля LinkedIn:https://www.linkedin.com/in/muhammedmoussa/
.
Для получения дополнительной информации об этом и о том, как пакет работает с API LinkedIn, ознакомьтесь с документацией API LinkedIn.
Что дальше? ⏭
Мы рассмотрели пакет LinkedIn Python API и некоторые его возможности. Как мы уже упоминали выше, LinkedIn является важным инструментом для каждого профессионала, особенно для организаций, когда они хотят усовершенствовать традиционное размещение вакансий, поиск талантов или процесс найма в целом. Поэтому сегодня у нас есть множество инструментов, которые работают поверх LinkedIn или данных о людях и предлагают отличные инструменты, которые могут изменить игру:
- Proxycurl от Nubela
- LinkDB
- LinkedIn API