ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅
ΠΠΌΠ° ΡΠ°ΠΊΠΎΠ²Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π² LinkedIn -
Π‘ΡΡΠ½ΠΎΡΡΡΠ° Π½Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π΅, ΡΠ΅ Π°ΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΡΡΡΠ΅Π½Π΅ΡΠΎ Π½Π° Ρ
ΠΎΡΠ° ΠΈΠ·Π²ΡΠ½ Π²Π°ΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠ°ΠΊΡΠΈ ΡΠ²ΡΡΠ΄Π΅ ΡΠ΅ΡΡΠΎ (Π½ΡΠΌΠ° ΡΠΎΡΠ½ΠΈ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ, Π°Π»Π³ΠΎΡΠΈΡΡΠΌΡΡ ΡΠ΅ΡΠ°Π²Π° Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° Π²Π°ΡΠΈΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ - ΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅ΡΡΠΎ ΠΈ ΠΊΠΎΠ»ΠΊΠΎ ΡΡΠ΅ ΡΡΡΡΠΈΠ»ΠΈ, Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ Ρ
ΠΎΡΠ°), ΡΠΎΠ³Π°Π²Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΡΡ ΠΎΡ ΡΡΡΡΠ΅Π½Π΅ΡΠΎ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ Π΄ΠΎ ΡΡΠΈ ΠΏΡΠΎΡΠΈΠ»Π°, Π²ΠΌΠ΅ΡΡΠΎ 1000 (ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ 100 ΡΡΡΠ°Π½ΠΈΡΠΈ, 10 ΠΏΡΠΎΡΠΈΠ»Π° Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ°). ΠΠΈΠΌΠΈΡΡΡ ΡΠ΅ Π½ΡΠ»ΠΈΡΠ° Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΌΠ΅ΡΠ΅Ρ. ΠΡΡΠ΅ΡΡΠ²Π΅Π½ΠΎ,
ΠΠΎ Π½Π΅ΠΎΡΠ΄Π°Π²Π½Π°, Π·Π° ΠΏΡΠΎΠ΅ΠΊΡ Π·Π° Π΄ΠΎΠΌΠ°ΡΠ΅Π½ Π»ΡΠ±ΠΈΠΌΠ΅Ρ, Π·Π°ΠΏΠΎΡΠ½Π°Ρ
Π΄Π° ΠΈΠ³ΡΠ°Ρ ΠΌΠ½ΠΎΠ³ΠΎ Ρ ΡΡΡΡΠ΅Π½Π΅ΡΠΎ Π² LinkedIn ΠΈ ΠΈΠ·Π²Π΅Π΄Π½ΡΠΆ ΠΏΠΎΠ»ΡΡΠΈΡ
ΡΠΎΠ²Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅. ΠΡΡΠ΅ΡΡΠ²Π΅Π½ΠΎ, ΡΠΎΠ²Π° Π½Π΅ ΠΌΠΈ Ρ
Π°ΡΠ΅ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎ, Π·Π°ΡΠΎΡΠΎ Π½Π΅ Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ
Π·Π° ΠΊΠΎΠΌΠ΅ΡΡΠΈΠ°Π»Π½ΠΈ ΡΠ΅Π»ΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΡΡΠ²Π°ΡΠ° ΠΌΠΈ ΠΌΠΈΡΡΠ» Π±Π΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΡΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΈ Π΄Π° ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌ Π΄Π° Π³ΠΎ Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»Ρ.
[ΠΠ°ΠΆΠ½ΠΎ ΡΡΠΎΡΠ½Π΅Π½ΠΈΠ΅: ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΈΡΠ΅ Π² ΡΡΠ°ΡΠΈΡΡΠ° ΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ΠΈ ΡΠ°ΠΌΠΎ Π·Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΠΈ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΈ ΡΠ΅Π»ΠΈ. ΠΠ²ΡΠΎΡΡΡ Π½Π΅ Π½Π°ΡΡΡΡΠ°Π²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ ΠΈΠΌ Π·Π° ΡΡΡΠ³ΠΎΠ²ΡΠΊΠΈ ΡΠ΅Π»ΠΈ.]
ΠΡΠΎΡΡΠ²Π°ΠΌΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°
ΠΠΌΠ°ΠΌΠ΅: Π²ΠΌΠ΅ΡΡΠΎ Π΄Π΅ΡΠ΅Ρ ΠΏΡΠΎΡΠΈΠ»Π° Ρ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ, ΡΡΡΡΠ΅Π½Π΅ΡΠΎ Π²ΡΡΡΠ° ΡΠ°ΠΌΠΎ ΡΡΠΈ, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ Π²ΠΌΡΠΊΠ²Π° Π±Π»ΠΎΠΊ Ρ βΠΏΡΠ΅ΠΏΠΎΡΡΠΊΠ°β Π·Π° ΠΏΡΠ΅ΠΌΠΈΡΠΌ Π°ΠΊΠ°ΡΠ½Ρ ΠΈ ΠΎΡΠ΄ΠΎΠ»Ρ ΡΠ° ΡΠ°Π·ΠΌΠ°Π·Π°Π½ΠΈ ΠΈ Π½Π΅ΠΊΠ»ΠΈΠΊΠ½Π°ΡΠΈ ΠΏΡΠΎΡΠΈΠ»ΠΈ.
ΠΠ΅Π·Π°Π±Π°Π²Π½ΠΎ ΡΡΠΊΠ°ΡΠ° ΡΠ΅ ΠΏΡΠΎΡΡΠ³Π° ΠΊΡΠΌ ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ, Π·Π° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π° ΡΠ΅Π·ΠΈ ΡΠΊΡΠΈΡΠΈ ΠΏΡΠΎΡΠΈΠ»ΠΈ - ΠΌΠΎΠΆΠ΅ Π±ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠ΅ΠΌΠ°Ρ
Π½Π΅ΠΌ Π½ΡΠΊΠΎΠΈ ΡΡΠΈΠ»ΠΎΠ²Π΅ Π½Π° Π·Π°ΠΌΡΠ³Π»ΡΠ²Π°Π½Π΅ ΠΈΠ»ΠΈ Π΄Π° ΠΈΠ·Π²Π»Π΅ΡΠ΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡ Π±Π»ΠΎΠΊ Π² ΠΌΠ°ΡΠΊΠΈΡΠ°Π½Π΅ΡΠΎ. ΠΠΎ, ΡΡΠ²ΡΠ΅ΠΌ ΠΎΡΠ°ΠΊΠ²Π°Π½ΠΎ, ΡΠ΅Π·ΠΈ ΠΏΡΠΎΡΠΈΠ»ΠΈ ΡΠ° ΠΏΡΠΎΡΡΠΎ
ΠΠΎΠ±ΡΠ΅, ΡΠ΅Π³Π° Π½Π΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΠ°Π·Π΄Π΅Π»Π° ΠΡΠ΅ΠΆΠ° ΠΈ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ Π΄Π°Π»ΠΈ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΎΡ ΡΡΡΡΠ΅Π½Π΅ΡΠΎ, ΠΊΠΎΠΈΡΠΎ Π²ΡΡΡΠ°Ρ ΡΠ°ΠΌΠΎ ΡΡΠΈ ΠΏΡΠΎΡΠΈΠ»Π°, Π½Π°ΠΈΡΡΠΈΠ½Π° ΡΠ°Π±ΠΎΡΡΡ. ΠΠ°ΠΌΠΈΡΠ°ΠΌΠ΅ Π·Π°ΡΠ²ΠΊΠ°ΡΠ°, ΠΊΠΎΡΡΠΎ Π½ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ²Π° Π·Π° β/api/search/blendedβ ΠΈ Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ°.
ΠΡΠΎΡΠΈΠ»ΠΈΡΠ΅ ΠΈΠ΄Π²Π°Ρ Π²ΡΠ² `Π²ΠΊΠ»ΡΡΠ΅Π½` ΠΌΠ°ΡΠΈΠ², Π½ΠΎ Π² Π½Π΅Π³ΠΎ Π²Π΅ΡΠ΅ ΠΈΠΌΠ° 15 ΠΎΠ±Π΅ΠΊΡΠ°.Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΠΏΡΡΠ²ΠΈΡΠ΅ ΡΡΠΈ ΠΎΡ ΡΡΡ
ΡΠ° ΠΎΠ±Π΅ΠΊΡΠΈ Ρ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π²ΡΠ΅ΠΊΠΈ ΠΎΠ±Π΅ΠΊΡ ΡΡΠ΄ΡΡΠΆΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ ΠΏΡΠΎΡΠΈΠ» (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π°Π»ΠΈ ΠΏΡΠΎΡΠΈΠ»ΡΡ Π΅ ΠΏΡΠ΅ΠΌΠΈΡΠΌ ).
Π‘Π»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ 12 ΡΠ° ΡΠ΅Π°Π»Π½ΠΈ ΠΏΡΠΎΡΠΈΠ»ΠΈ - ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΎΡ ΡΡΡΡΠ΅Π½Π΅, ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π½ΠΈ Π±ΡΠ΄Π°Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈ ΡΠ°ΠΌΠΎ ΡΡΠΈ. ΠΠ°ΠΊΡΠΎ Π²Π΅ΡΠ΅ ΡΠ΅ Π΄ΠΎΡΠ΅ΡΠ°ΡΠ΅, ΠΏΠΎΠΊΠ°Π·Π²Π° ΡΠ°ΠΌΠΎ ΡΠ΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Ρ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ (ΠΏΡΡΠ²ΠΈΡΠ΅ ΡΡΠΈ ΠΎΠ±Π΅ΠΊΡΠ°). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ Π²Π·Π΅ΠΌΠ΅ΡΠ΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ° ΠΎΡ ΠΏΡΠΎΡΠΈΠ» Π±Π΅Π· ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅, ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ 28 ΠΎΠ±Π΅ΠΊΡΠ° - 10 ΠΎΠ±Π΅ΠΊΡΠ° Ρ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ. ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈ 18 ΠΏΡΠΎΡΠΈΠ»Π°.
ΠΡΠ³ΠΎΠ²ΠΎΡ Π·Π° ΠΏΡΠΎΡΠΈΠ» Π±Π΅Π· ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅
ΠΠ°ΡΠΎ ΠΏΡΠΈΡΡΠΈΠ³Π°Ρ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 10 ΠΏΡΠΎΡΠΈΠ»Π°, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ ΡΠΎΡΠ½ΠΎ 10 ΠΈ ΡΠ΅ Π½Π΅ ΡΡΠ°ΡΡΠ²Π°Ρ Π² ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ΡΠΎ ΠΏΠΎ Π½ΠΈΠΊΠ°ΠΊΡΠ² Π½Π°ΡΠΈΠ½, Π΄ΠΎΡΠΈ Π½Π° ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΡΠ°Π½ΠΈΡΠ° Π½ΡΠΌΠ° Π΄Π° Π±ΡΠ΄Π°Ρ - Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ Π·Π½Π°ΠΌ. ΠΠΊΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ URL Π°Π΄ΡΠ΅ΡΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΠ΅ count=10 (ΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΎΡΠΈΠ»Π° Π΄Π° ΡΠ΅ Π²ΡΡΠ½Π°Ρ Π² ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ°, ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ 49).
Π©Π΅ ΡΠ΅ ΡΠ°Π΄Π²Π°ΠΌ Π΄Π° ΠΏΠΎΠ»ΡΡΠ° ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ ΠΏΠΎ ΡΠΎΠ·ΠΈ Π²ΡΠΏΡΠΎΡ.
ΠΠ΅ΠΊΠ° Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠ°ΠΌΠ΅
ΠΠΎΠ±ΡΠ΅, Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡΠΎ Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅Π³Π° Π·Π½Π°Π΅ΠΌ ΡΡΡ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ, Π΅, ΡΠ΅ Π² ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ° ΠΈΠΌΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠΎΡΠΈΠ»ΠΈ, ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π½ΠΈ ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΏΠΎΠ²Π΅ΡΠ΅ Π΄Π°Π½Π½ΠΈ, Π²ΡΠΏΡΠ΅ΠΊΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ. ΠΠ΅ΠΊΠ° ΡΠ΅ ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈΠΌ API ΡΠ°ΠΌΠΈ, Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΡ ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ fetch.
ΠΠ°ΠΊΡΠΎ ΡΠ΅ ΠΎΡΠ°ΠΊΠ²Π°, ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π³ΡΠ΅ΡΠΊΠ° 403. Π’ΠΎΠ²Π° ΡΠ΅ Π΄ΡΠ»ΠΆΠΈ Π½Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ°, ΡΡΠΊ Π½Π΅ ΠΈΠ·ΠΏΡΠ°ΡΠ°ΠΌΠ΅ CSRF ΡΠΎΠΊΠ΅Π½ (
ΠΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΠΏΠΈΡΠ° ΠΎΡ Π²ΡΡΠΊΠ° Π΄ΡΡΠ³Π° ΡΡΠΏΠ΅ΡΠ½Π° Π·Π°ΡΠ²ΠΊΠ° ΠΈΠ»ΠΈ ΠΎΡ Π±ΠΈΡΠΊΠ²ΠΈΡΠΊΠΈ, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ ΡΡΡ
ΡΠ°Π½ΡΠ²Π° Π² ΠΏΠΎΠ»Π΅ΡΠΎ βJSESSIONIDβ.
ΠΡΠ΄Π΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΡ ΡΠΎΠΊΠ΅Π½Π°ΠΠ°Π³Π»Π°Π²ΠΈΠ΅ Π½Π° Π΄ΡΡΠ³Π° Π·Π°ΡΠ²ΠΊΠ°:
ΠΠ»ΠΈ ΠΎΡ Π±ΠΈΡΠΊΠ²ΠΈΡΠΊΠΈ, Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΏΡΠ΅Π· ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ°:
ΠΠ΅ΠΊΠ° ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ ΠΎΡΠ½ΠΎΠ²ΠΎ, ΡΠΎΠ·ΠΈ ΠΏΡΡ ΠΏΡΠ΅Π΄Π°Π²Π°ΠΌΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π·Π° ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅, Π² ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΡΠΎΡΠ²Π°ΠΌΠ΅ Π½Π°ΡΠΈΡ csrf-ΡΠΎΠΊΠ΅Π½ ΠΊΠ°ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² Π·Π°Π³Π»Π°Π²ΠΊΠ°ΡΠ°.
Π£ΡΠΏΠ΅Ρ
, ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ 10 ΠΏΡΠΎΡΠΈΠ»Π°. :ΡΠ°Π΄Π°:
ΠΠΎΡΠ°Π΄ΠΈ ΡΠ°Π·Π»ΠΈΠΊΠ°ΡΠ° Π² Π·Π°Π³Π»Π°Π²ΠΊΠΈΡΠ΅, ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ° Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΡΠ°Π·Π»ΠΈΡΠ½Π° ΠΎΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Π°ΡΠ° Π² ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½Π°ΡΠ° Π·Π°ΡΠ²ΠΊΠ°. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΡΡΡΠ°ΡΠ° ΡΡΡΡΠΊΡΡΡΠ°, Π°ΠΊΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ βAccept: 'application/vnd.linkedin.normalized+json+2.1' ΠΊΡΠΌ Π½Π°ΡΠΈΡ ΠΎΠ±Π΅ΠΊΡ, Π΄ΠΎ csrf ΡΠΎΠΊΠ΅Π½Π°.
ΠΡΠΈΠΌΠ΅ΡΠ΅Π½ ΠΎΡΠ³ΠΎΠ²ΠΎΡ Ρ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π·Π°Π³Π»Π°Π²ΠΊΠ°
ΠΠΎΠ²Π΅ΡΠ΅ Π·Π° Π·Π°Π³Π»Π°Π²ΠΊΠ°ΡΠ° 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="/bg/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="/bg/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 Π½ΠΎΠ²ΠΈ ΠΏΡΠΎΡΠΈΠ»Π° Ρ Π²ΡΡΠΊΠΎ ΡΡΠ°ΠΊΠ²Π°Π½Π΅ ΠΈ Π³ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°Π·ΡΠ²Π° Π² ΡΠΏΠΈΡΡΠΊ. Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΠΏΡΠΎΠΌΠ΅Π½Π΅ΡΠ΅ ΡΠΎΠΊΠ΅Π½Π° ΠΈ URL Π°Π΄ΡΠ΅ΡΠ° Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡ, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΎΠ²Π°. ΠΠ»ΠΎΠΊΡΡ Π½Π° ΠΏΡΠΎΡΠΈΠ»Π° ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ° ΠΈΠΌΠ΅, ΠΏΠΎΠ·ΠΈΡΠΈΡ, ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π²ΡΡΠ·ΠΊΠ° ΠΊΡΠΌ ΠΏΡΠΎΡΠΈΠ»Π° ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π’Π°ΠΊΠ° Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ ΡΡΠΈΠ»ΠΈΡ ΡΡΠΏΡΡ ΠΌΠ΅ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΠΌ ΡΠ»Π°Π±ΠΎΡΠΎ ΠΌΡΡΡΠΎ ΠΈ Π΄Π° Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΡΡΡΡΠ΅Π½Π΅ΡΠΎ Π±Π΅Π· ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ. ΠΠ΅ΡΠ΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π΄Π° ΡΠ΅ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΈ ΠΏΡΡΡ ΠΈΠΌ, Π΄Π° ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π° ΡΠ°ΠΌΠ°ΡΠ° Π·Π°ΡΠ²ΠΊΠ°.
ΠΠ΅ ΠΌΠΎΠ³Π° Π΄Π° ΠΊΠ°ΠΆΠ°, ΡΠ΅ ΡΠΎΠ²Π° Π΅ ΡΠ΅ΡΠΈΠΎΠ·Π΅Π½ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π·Π° LinkedIn, Π·Π°ΡΠΎΡΠΎ Π½Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π° Π½ΠΈΠΊΠ°ΠΊΠ²Π° Π·Π°ΠΏΠ»Π°Ρ Π°. ΠΠ°ΠΊΡΠΈΠΌΡΠΌΡΡ Π΅ ΠΏΡΠΎΠΏΡΡΠ½Π°ΡΠ° ΠΏΠ΅ΡΠ°Π»Π±Π° ΠΏΠΎΡΠ°Π΄ΠΈ ΡΠ°ΠΊΠΈΠ²Π° βΠ·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»Π½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡβ, ΠΊΠΎΠ΅ΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅ΡΠ΅ ΠΏΠ»Π°ΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠ΅ΠΌΠΈΡ. ΠΠΎΠΆΠ΅ Π±ΠΈ ΡΠ°ΠΊΡΠ² ΠΎΡΠ³ΠΎΠ²ΠΎΡ Π½Π° ΡΡΡΠ²ΡΡΠ° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π·Π° ΠΊΠΎΡΠ΅ΠΊΡΠ½Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Π½Π° Π΄ΡΡΠ³ΠΈ ΡΠ°ΡΡΠΈ Π½Π° ΡΠ°ΠΉΡΠ° ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΌΡΡΠ·Π΅Π»ΡΡ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΠΈ Π»ΠΈΠΏΡΠ°ΡΠ° Π½Π° ΡΠ΅ΡΡΡΡΠΈ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ Π΄ΠΎΠ±ΡΠ΅. (ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΠΏΠΎΡΠ²ΠΈ ΠΏΡΠ΅Π· ΡΠ½ΡΠ°ΡΠΈ 2015 Π³.; ΠΏΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π° Π½ΡΠΌΠ°ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅).
PS
ΠΡΡΠ΅ΡΡΠ²Π΅Π½ΠΎ ΠΊΠΎΠ΄ΡΡ Π½Π° jQuery Π΅ Π΄ΠΎΡΡΠ° ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅. Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΡΠΌ ΡΡΠ·Π΄Π°Π» ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ Π·Π° Π±ΡΠ°ΡΠ·ΡΡ, ΠΊΠΎΠ΅ΡΠΎ Π΄Π° ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π½Π° Π½ΡΠΆΠ΄ΠΈΡΠ΅ ΠΌΠΈ. Π’ΠΎΠΉ Π΄ΠΎΠ±Π°Π²Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈ Π±ΡΡΠΎΠ½ΠΈ ΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°Π·ΡΠ²Π° ΠΏΡΠ»Π½ΠΈ ΠΏΡΠΎΡΠΈΠ»ΠΈ ΡΡΡ ΡΠ½ΠΈΠΌΠΊΠΈ, Π±ΡΡΠΎΠ½ Π·Π° ΠΏΠΎΠΊΠ°Π½Π° ΠΈ ΠΎΠ±ΡΠΈ Π²ΡΡΠ·ΠΊΠΈ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΡΠΎΠΉ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΡΡΠ±ΠΈΡΠ° ΡΠΈΠ»ΡΡΠΈ Π·Π° ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΈ Π΄ΡΡΠ³ΠΈ Π½Π΅ΡΠ° ΠΈ ΠΈΠ·Π²Π»ΠΈΡΠ° ΡΠΎΠΊΠ΅Π½ ΠΎΡ Π±ΠΈΡΠΊΠ²ΠΈΡΠΊΠΈ. Π’Π°ΠΊΠ° ΡΠ΅ Π²Π΅ΡΠ΅ Π½ΡΠΌΠ° Π½ΡΠΆΠ΄Π° Π΄Π° ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅ Π½ΠΈΡΠΎ. Π, ΡΠΎΠΉ Π΄ΠΎΠ±Π°Π²Ρ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΠΎΠ»Π΅ΡΠ° Π·Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ, Π° Π»Π° βΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΎΡΠΈΠ»Π° Π΄Π° ΠΏΠΎΠΈΡΠΊΠ°ΡΠ΅ Π½Π°Π²Π΅Π΄Π½ΡΠΆ, Π΄ΠΎ 49β.
ΠΡΠ΅ ΠΎΡΠ΅ ΡΠ°Π±ΠΎΡΡ Π²ΡΡΡ
Ρ ΡΠΎΠ²Π° Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠ»Π°Π½ΠΈΡΠ°ΠΌ Π΄Π° Π³ΠΎ ΠΏΡΡΠ½Π° Π½Π° ΠΎΠ±ΡΠ΅ΡΡΠ²Π΅Π½ΠΎΡΡΡΠ°. ΠΡΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅Ρ ΠΏΠΈΡΠ΅ΡΠ΅.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com