ΠžΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π»ΠΈΠΌΠΈΡ‚ поиска LinkedIn, играя с API

Π›ΠΈΠΌΠΈΡ‚

Π•ΡΡ‚ΡŒ Π½Π° LinkedIn Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ β€” Π›ΠΈΠΌΠΈΡ‚ коммСрчСского использования. ΠšΡ€Π°ΠΉΠ½Π΅ вСроятно, Ρ‡Ρ‚ΠΎ Π²Ρ‹, ΠΊΠ°ΠΊ ΠΈ я Π΄ΠΎ Π½Π΅Π΄Π°Π²Π½Π΅Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ ΠΈ Π½Π΅ ΡΠ»Ρ‹ΡˆΠ°Π»ΠΈ ΠΎ Π½Π΅ΠΌ.

ΠžΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π»ΠΈΠΌΠΈΡ‚ поиска LinkedIn, играя с API

Π‘ΡƒΡ‚ΡŒ Π»ΠΈΠΌΠΈΡ‚Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ поиск людСй Π²Π½Π΅ Π²Π°ΡˆΠΈΡ… ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΎΠ² слишком часто (Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ Π½Π΅Ρ‚, Ρ€Π΅ΡˆΠ°Π΅Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, Π½Π° основС Π²Π°ΡˆΠΈΡ… дСйствий β€” ΠΊΠ°ΠΊ часто ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ искали, добавляли людСй), Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ поиска Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ трСмя профилями, вмСсто 1000 (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 100 страниц, ΠΏΠΎ 10 ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ Π½Π° страницу). Π›ΠΈΠΌΠΈΡ‚ сбрасываСтся Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ мСсяца. ЕстСствСнно, ΠΏΡ€Π΅ΠΌΠΈΡƒΠΌ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Ρ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ограничСния Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚.

Но Π½Π΅ Ρ‚Π°ΠΊ Π΄Π°Π²Π½ΠΎ, для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ‚-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, я Π½Π°Ρ‡Π°Π» ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ³Ρ€Π°Ρ‚ΡŒΡΡ с поиском Π½Π° LinkedIn ΠΈ Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅. ЕстСствСнно, Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ½Π΅ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»ΠΎΡΡŒ, вСдь я Π½Π΅ использовал Π΅Π³ΠΎ Π² ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ коммСрчСских цСлях, поэтому ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΌΡ‹ΡΠ»ΡŒΡŽ Π±Ρ‹Π»ΠΎ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π΅Π³ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ.

[Π’Π°ΠΆΠ½ΠΎΠ΅ ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½ΠΈΠ΅ β€” ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ прСдставлСны ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈ ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ… цСлях. Автор Π½Π΅ поощряСт ΠΈΡ… использованиС Π² коммСрчСских цСлях.]

Π˜Π·ΡƒΡ‡Π°Π΅ΠΌ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ

ИмССм: вмСсто дСсяти ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ с ΠΏΠ°Π³ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ, поиск Π²Ρ‹Π΄Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Ρ€ΠΈ, послС ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… вставляСтся Π±Π»ΠΎΠΊ с β€œΡ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠ΅ΠΉβ€ ΠΏΡ€Π΅ΠΌΠΈΡƒΠΌ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚Π° ΠΈ Π½ΠΈΠΆΠ΅ ΠΈΠ΄ΡƒΡ‚ Ρ€Π°Π·ΠΌΡ‹Ρ‚Ρ‹Π΅ ΠΈ Π½Π΅ ΠΊΠ»ΠΈΠΊΠ°Π±Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ.

Π‘Ρ€Π°Π·Ρƒ ΠΆΠ΅ Ρ€ΡƒΠΊΠ° тянСтся Π² консоль Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ эти скрытыС ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ стили, ставящиС Π±Π»ΡŽΡ€, ΠΈΠ»ΠΈ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· Π±Π»ΠΎΠΊΠ° Π² Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠ΅. Но, Π²ΠΏΠΎΠ»Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎ, эти ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ всСго лишь ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ-Π·Π°Π³Π»ΡƒΡˆΠΊΠΈ ΠΈ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π½Π΅ хранят.

ΠžΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π»ΠΈΠΌΠΈΡ‚ поиска LinkedIn, играя с API

Π₯ΠΎΡ€ΠΎΡˆΠΎ, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ посмотрим Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Network ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ срабатываСт Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Π°Ρ Π²Ρ‹Π΄Π°Ρ‡Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² поиска, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Ρ€ΠΈ профиля. Находим ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠΉ нас запрос ΠΊ β€œ/api/search/blended” ΠΈ смотрим Π½Π° ΠΎΡ‚Π²Π΅Ρ‚.

ΠžΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π»ΠΈΠΌΠΈΡ‚ поиска LinkedIn, играя с API

ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈ приходят Π² массивС `included`, Π½ΠΎ сущностСй Π² Π½Π΅ΠΌ Π°ΠΆ 15. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС, ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Ρ‚Ρ€ΠΈ ΠΈΠ· Π½ΠΈΡ… β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, являСтся Π»ΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ ΠΏΡ€Π΅ΠΌΠΈΡƒΠΌΠΎΠΌ).

ΠžΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π»ΠΈΠΌΠΈΡ‚ поиска LinkedIn, играя с API

ΠŸΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ 12 это Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ β€” Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ поиска, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π°ΠΌ ΠΏΠΎΠΊΠ°ΠΆΡƒΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Ρ€ΠΈ. Как ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅Ρ…, Π½Π° ΠΊΠΎΠ³ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ информация (ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Ρ‚Ρ€ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°). НапримСр, Ссли Π²Π·ΡΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ с профиля Π±Π΅Π· Π»ΠΈΠΌΠΈΡ‚Π°, Ρ‚ΠΎ ΠΏΡ€ΠΈΠ΄Π΅Ρ‚ 28 сущностСй β€” 10 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с Π΄ΠΎΠΏ. ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΈ 18 ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ.

ΠžΡ‚Π²Π΅Ρ‚ для профиля Π±Π΅Π· Π»ΠΈΠΌΠΈΡ‚Π°ΠžΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π»ΠΈΠΌΠΈΡ‚ поиска LinkedIn, играя с API
ΠžΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π»ΠΈΠΌΠΈΡ‚ поиска LinkedIn, играя с API

ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ большС 10, хотя Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ 10, ΠΈ ΠΎΠ½ΠΈ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΡƒΡ‡Π°ΡΡ‚Π²ΡƒΡŽΡ‚ Π² ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, Π΄Π°ΠΆΠ΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ страницС ΠΈΡ… Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ β€” ΠΏΠΎΠΊΠ° Π½Π΅ знаю. Если ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΡ€Π» запроса Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ count=10 (сколько ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π² ΠΎΡ‚Π²Π΅Ρ‚Π΅, максимум 49).

ΠžΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π»ΠΈΠΌΠΈΡ‚ поиска LinkedIn, играя с API

Π‘ΡƒΠ΄Ρƒ Ρ€Π°Π΄ Π»ΡŽΠ±Ρ‹ΠΌ комСнтариям ΠΏΠΎ этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ.

ЭкспСримСнтируСм

Π₯ΠΎΡ€ΠΎΡˆΠΎ, самоС Π³Π»Π°Π²Π½ΠΎΠ΅ ΠΌΡ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π½Π°Π΅ΠΌ β€” ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΎΡ‚Π²Π΅Ρ‚Π΅ большС, Ρ‡Π΅ΠΌ Π½Π°ΠΌ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚. Π—Π½Π°Ρ‡ΠΈΡ‚ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŒ большС Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅ смотря Π½Π° Π»ΠΈΠΌΠΈΡ‚. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΄Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π°ΠΏΠΈ сами, прямо ΠΈΠ· консоли, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ fetch.

ΠžΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π»ΠΈΠΌΠΈΡ‚ поиска LinkedIn, играя с API

ОТидаСмо, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΎΡˆΠΈΠ±ΠΊΡƒ, 403. Π­Ρ‚ΠΎ связано с Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ, здСсь ΠΌΡ‹ Π½Π΅ отсылаСм CSRF Ρ‚ΠΎΠΊΠ΅Π½ (CSRF Π½Π° Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ. Если Π² Π΄Π²ΡƒΡ… словах β€” ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ запросу добавляСтся ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΎΠΊΠ΅Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ провСряСтся Π½Π° сСрвСрС Π½Π° ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΠΎΡΡ‚ΡŒ).

ΠžΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π»ΠΈΠΌΠΈΡ‚ поиска LinkedIn, играя с API

Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ· любого Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ запроса ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΈΠ· cookies, Π³Π΄Π΅ ΠΎΠ½ хранится Π² ΠΏΠΎΠ»Π΅ β€˜JSESSIONID’.

Π“Π΄Π΅ Π½Π°ΠΉΡ‚ΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ запросa:

ΠžΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π»ΠΈΠΌΠΈΡ‚ поиска LinkedIn, играя с API

Или ΠΈΠ· ΠΊΡƒΠΊΠΈ, прямо Ρ‡Π΅Ρ€Π΅Π· консоль:

ΠžΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π»ΠΈΠΌΠΈΡ‚ поиска LinkedIn, играя с API

ΠŸΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΅Ρ‰Π΅ Ρ€Π°Π·, Π² этот Ρ€Π°Π· ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π² fetch настройки, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Π² header наш csrf-token.

ΠžΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π»ΠΈΠΌΠΈΡ‚ поиска LinkedIn, играя с API

УспСх, Π½Π°ΠΌ приходят всС 10 ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ. :tada:

Из-Π·Π° Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² структура ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ отличаСтся ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π² ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ запросe. МоТно ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ ΠΆΠ΅ структуру, Ссли Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ‘Accept: ‘application/vnd.linkedin.normalized+json+2.1’, ΠΊ Π½Π°ΠΌ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, рядом с csrf Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ.
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚Π²Π΅Ρ‚Π° с Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌΠžΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π»ΠΈΠΌΠΈΡ‚ поиска LinkedIn, играя с API

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΎ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Accept

Π§Ρ‚ΠΎ дальшС?

Π”Π°Π»ΡŒΡˆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ (Ρ€ΡƒΠΊΠ°ΠΌΠΈ ΠΈΠ»ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ) ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `start`, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° индСкс, начиная с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π°ΠΌ ΠΎΡ‚Π΄Π°Π΄ΡƒΡ‚ 10 ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ (ΠΏΠΎ-ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ = 0) ΠΈΠ· всСго Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° поиска. Π˜Π½Π°Ρ‡Π΅ говоря, инкрСмСнтируя Π΅Π³ΠΎ Π½Π° 10 послС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ запроса, Ρƒ нас получаСтся обычная постраничная Π²Ρ‹Π΄Π°Ρ‡Π°, ΠΏΠΎ 10 ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ Π·Π° Ρ€Π°Π·.

На этом этапС Ρƒ мСня Π±Ρ‹Π»ΠΎ достаточно Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ свободы, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π°Π΄ ΠΏΠ΅Ρ‚-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ. Но Π³Ρ€Π΅Ρ… Π±Ρ‹Π»ΠΎ Π½Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ эти Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ прямо Π½Π° мСстС, Ρ€Π°Π· ΡƒΠΆ ΠΎΠ½ΠΈ Π½Π° Ρ€ΡƒΠΊΠ°Ρ…. Π’ Ember, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π° Ρ„Ρ€ΠΎΠ½Ρ‚Π΅, Π»Π΅Π·Ρ‚ΡŒ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ. На сайтС Π±Ρ‹Π» ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ jQuery, ΠΈ ΠΎΡ‚ΠΊΠΎΠΏΠ°Π² Π² памяти знания Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ синтаксиса, ΠΌΠΎΠΆΠ½ΠΎ Π·Π° ΠΏΠ°Ρ€Ρƒ ΠΌΠΈΠ½ΡƒΡ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅.

Код на jQuery

/* Ρ€Π΅Π½Π΄Π΅Ρ€ Π±Π»ΠΎΠΊΠ°, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ профиля ΠΈ вставляСм Π±Π»ΠΎΠΊ Π² список ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эти Π΄Π°Π½Π½Ρ‹Π΅ */
const  createProfileBlock = ({ headline, publicIdentifier, subline, title }) => {
    $('.search-results__list').append(
        `<li class="search-result search-result__occluded-item ember-view">
            <div class="search-entity search-result search-result--person search-result--occlusion-enabled ember-view">
                <div class="search-result__wrapper">
                    <div class="search-result__image-wrapper">
                        <a class="search-result__result-link ember-view" href="/in/${publicIdentifier}/">
                            <figure class="search-result__image">
                                <div class="ivm-image-view-model ember-view">
                                    <img class="lazy-image ivm-view-attr__img--centered EntityPhoto-circle-4  presence-entity__image EntityPhoto-circle-4 loaded" src="http://www.userlogos.org/files/logos/give/Habrahabr3.png" />
                                </div>
                            </figure>
                        </a>
                    </div>
                    
                    <div class="search-result__info pt3 pb4 ph0">
                        <a class="search-result__result-link ember-view" href="/in/${publicIdentifier}/">
                            <h3 class="actor-name-with-distance search-result__title single-line-truncate ember-view">
                                ${title.text}
                            </h3>
                        </a>

                        <p class="subline-level-1 t-14 t-black t-normal search-result__truncate">${headline.text}</p>

                        <p class="subline-level-2 t-12 t-black--light t-normal search-result__truncate">${subline.text}</p>
                    </div>
                </div>
            </div>
        <li>`
    );
};

// Π΄Π΅Ρ€Π³Π°Π΅ΠΌ Π°ΠΏΠΈ, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠΌ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ
const fetchProfiles = () => {
    // Ρ‚ΠΎΠΊΠ΅Π½
   const csrf = 'ajax:9082932176494192209';
    
   // ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с настройками запроса, ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Ρ‚ΠΎΠΊΠ΅Π½
   const settings = { headers: { 'csrf-token': csrf } }

    // ΡƒΡ€Π» запроса, с динамичСским индСксом старта Π² ΠΊΠΎΠ½Ρ†Π΅
   const url = `https://www.linkedin.com/voyager/api/search/blended?count=10&filters=List(geoRegion-%3Ejp%3A0,network-%3ES,resultType-%3EPEOPLE)&origin=FACETED_SEARCH&q=all&queryContext=List(spellCorrectionEnabled-%3Etrue,relatedSearchesEnabled-%3Etrue)&start=${nextItemIndex}`; 
    /* Π΄Π΅Π»Π°Π΅ΠΌ запрос, для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ профиля Π² ΠΎΡ‚Π²Π΅Ρ‚Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ€Π΅Π½Π΄Π΅Ρ€ Π±Π»ΠΎΠΊΠ°, ΠΈ послС ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ стартовый индСкс Π½Π° 10 */
    fetch(url, settings).then(response => response.json()).then(data => {
        data.elements[0].elements.forEach(createProfileBlock);
        nextItemIndex += 10;
});
};


// удаляСм всС ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ ΠΈΠ· списка
$('.search-results__list').find('li').remove();
// вставляСм ΠΊΠ½ΠΎΠΏΠΊΡƒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ
$('.search-results__list').after('<button id="load-more">Load More</button>');
// добавляСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ
$('#load-more').addClass('artdeco-button').on('click', fetchProfiles);

// ставим ΠΏΠΎ умолчания индСкс профиля для запроса
window.nextItemIndex = 0;

Если Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ это прямо Π² консоли Π½Π° страницС поиска, Ρ‚ΠΎ это Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ ΠΊΠ½ΠΎΠΏΠΊΡƒ, Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‰ΡƒΡŽ 10 Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ, ΠΈ рСндярСщСС ΠΈΡ… списком. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ‚ΠΎΠΊΠ΅Π½ ΠΈ ΡƒΡ€Π» ΠΏΠ΅Ρ€Π΅Π΄ этим ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ. Π‘Π»ΠΎΠΊ профиля Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ имя, Π΄ΠΎΠ»ΠΆΠ½ΠΎΡΡ‚ΡŒ, Π»ΠΎΠΊΠ°Ρ†ΠΈΡŽ, ссылку Π½Π° ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŒ ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ-Π·Π°Π³Π»ΡƒΡˆΠΊΡƒ.

ΠžΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π»ΠΈΠΌΠΈΡ‚ поиска LinkedIn, играя с API

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΡ€ΠΈ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠ΅ усилий, ΠΌΡ‹ смогли Π½Π°ΠΉΡ‚ΠΈ уязвимоС мСсто ΠΈ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ сСбС поиск Π±Π΅Π· ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ. Достаточно Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΈΡ… ΠΏΡƒΡ‚ΡŒ, Π·Π°Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π² сам запрос.

Π― Π½Π΅ ΠΌΠΎΠ³Ρƒ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ это являСтся ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ для LinkedIn, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΡƒΠ³Ρ€ΠΎΠ·Ρ‹ Π½Π΅ нСсСт. ΠœΠ°ΠΊΡΠΈΠΌΡƒΠΌ, это потСрянная ΠΏΡ€ΠΈΠ±Ρ‹Π»ΡŒ ΠΈΠ·-Π·Π° ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Β«ΠΎΠ±Ρ…ΠΎΠ΄ΠΎΠ²Β», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π½Π΅ ΠΏΠ»Π°Ρ‚ΠΈΡ‚ΡŒ Π·Π° ΠΏΡ€Π΅ΠΌΠΈΡƒΠΌ. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‚Π°ΠΊΠΎΠΉ ΠΎΡ‚Π²Π΅Ρ‚ сСрвСра Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΡ… частСй сайта, ΠΈΠ»ΠΈ ΠΆΠ΅ это просто лСнь Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² нСдостаток рСсурсов, Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ. (ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ появилось с января 2015 Π³ΠΎΠ΄Π°, Π΄ΠΎ этого Π»ΠΈΠΌΠΈΡ‚Π° Π½Π΅ Π±Ρ‹Π»ΠΎ).

P.S.

ЕствСствСнно, ΠΊΠΎΠ΄ Π½Π° jQuery довольно ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ возмоТностСй. Π’ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ я создал extension для Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° ΠΏΠΎΠ΄ свои Π½ΡƒΠΆΠ΄Ρ‹. Он добавляСт ΠΊΠ½ΠΎΠΏΠΊΠΈ контроля ΠΈ Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΡ‚ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ с ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ°ΠΌΠΈ, ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΡ ΠΈ ΠΎΠ±Ρ‰ΠΈΠΌΠΈ ΠΊΠΎΠ½Π½Π΅ΠΊΡ‚Π°ΠΌΠΈ. Плюс динамичСски собираСт Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ Π»ΠΎΠΊΠ°Ρ†ΠΈΠΉ, ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, достаСт Ρ‚ΠΎΠΊΠ΅Π½ ΠΈΠ· ΠΊΡƒΠΊΠΈ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Ρ…Π°Ρ€Π΄ΠΎΠΊΠ΄ΠΈΡ‚ΡŒ ΡƒΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. Ну ΠΈ добавляСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля настроСк, Π°-ля «сколько ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Π·Π° Ρ€Π°Π·, Π΄ΠΎ 49Β».

ΠžΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π»ΠΈΠΌΠΈΡ‚ поиска LinkedIn, играя с API

Над этим Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ я всС Π΅Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ ΠΈ Π² ΠΏΠ»Π°Π½Π°Ρ… Π²Ρ‹Π»ΠΎΠΆΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ доступ. ΠŸΠΈΡˆΠΈΡ‚Π΅ Ссли Π²Π°ΠΌ интСрСсно.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com