Π‘Π»ΠΎΠ²ΠΎ "Π±ΠΎΡ" Π·Π΄Π°ΡΡΡΡΡ Π΄ΠΎΡΡΠ°ΡΠ½ΡΠΎ ΠΏΡΠΎΡΡΠΈΠΌ, ΠΏΠΎΠΊΠΈ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π΅ ΠΏΠΎΡΠΈΠ½Π°Ρ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°ΡΠΈ ΠΉΠΎΠ³ΠΎ Π² ΠΊΡΠ»ΡΠΊΠΎΡ ΡΡΠ·Π½ΠΈΡ ΠΌΡΡΡΡΡ .
ΠΠ°ΠΏΡΠΈΠΊΠ»Π°Π΄, Ρ Π½Π°Ρ ΠΌΠΎΠΆΠ΅ Π±ΡΡΠΈ Π·Π°ΡΠ΅ΡΡΡΡΠΎΠ²Π°Π½ΠΈΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΎΠ±Π»ΡΠΊΠΎΠ²ΠΈΠΉ Π·Π°ΠΏΠΈΡ, ΡΠΊΠΈΠΉ Π²ΠΈΠΊΠΎΠ½ΡΡ Π΄ΠΎΠ·Π²ΠΎΠ»Π΅Π½Ρ Π΄ΡΡ ΡΠ΅ΡΠ΅Π· Π·Π²ΠΈΡΠ°ΠΉΠ½Ρ Π°Π²ΡΠ΅Π½ΡΠΈΡΡΠΊΠ°ΡΡΡ.
Π ΠΎΠΊΡΠ΅ΠΌΠΎ ΠΌΠΎΠΆΠ΅ Π±ΡΡΠΈ Π³ΠΎΡΡΡΠΎΠ²ΠΈΠΉ HTTP-Π·Π°ΠΏΠΈΡ Π²ΡΠ΄ ΠΏΠΎΡΡΠΊΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΠ±ΠΎΡΠ° Π°Π±ΠΎ ΡΠ½ΡΠΎΠ³ΠΎ ΡΠΊΠ°Π½Π΅ΡΠ°.
Π ΠΎΠ±ΠΎΡ Π²ΠΈΠΏΠ°Π΄ΠΊΠ°Ρ ΠΌΠΎΠΆΠ½Π° ΡΠΊΠ°Π·Π°ΡΠΈ "ΡΠ΅ Π±ΠΎΡ". ΠΠ»Π΅ ΡΠ΅Ρ Π½ΡΡΠ½ΠΎ Ρ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ½ΠΎ ΡΠ΅ Π΄Π²Ρ ΡΡΠ·Π½Ρ ΡΠ΅ΡΡ.
ΠΠ΄Π½Π° ΠΎΠΏΠΈΡΡΡ ΡΡΠ±βΡΠΊΡΠ° ΡΠΈΡΡΠ΅ΠΌΠΈ. ΠΠ½ΡΠ° ΠΎΠΏΠΈΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈΠΉ Π·Π°ΠΏΠΈΡ.
Π‘ΠΏΠΎΡΠ°ΡΠΊΡ Ρ ΡΠΎΠ·Π΄ΡΠ»ΡΡ Π΄Π²Π° ΡΡΠ·Π½Ρ ΠΏΠΈΡΠ°Π½Π½Ρ
ΠΠΈΡΠ°Π½Π½Ρ 1 Π©ΠΎ ΡΠ΅ Π·Π° ΠΎΠ±Π»ΡΠΊΠΎΠ²ΠΈΠΉ Π·Π°ΠΏΠΈΡ? - Π·Π²ΠΈΡΠ°ΠΉΠ½ΠΈΠΉ ΠΊΠΎΡΠΈΡΡΡΠ²Π°Ρ- Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΎΠ±Π»ΡΠΊΠΎΠ²ΠΈΠΉ Π·Π°ΠΏΠΈΡ ΠΠΈΡΠ°Π½Π½Ρ 2 Π©ΠΎ ΡΠ΅ Π·Π° HTTP-Π·Π°ΠΏΠΈΡ? - Π·Π²ΠΈΡΠ°ΠΉΠ½ΠΈΠΉ Π±ΡΠ°ΡΠ·Π΅Ρ- ΡΠΊΠ°Π½Π΅Ρ- ΡΠ½ΡΠΈΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΊΠ»ΡΡΠ½ΡΠΠ»Π°ΡΠΈΡΡΠΊΠ°ΡΡΡ ΠΎΠ±Π»ΡΠΊΠΎΠ²ΠΎΠ³ΠΎ Π·Π°ΠΏΠΈΡΡ ΠΆΠΈΠ²Π΅ Π΄ΠΎΠ²ΡΠ΅ Π·Π° ΠΎΠ΄ΠΈΠ½ Π·Π°ΠΏΠΈΡ.
ΠΠΎΠ½Π° ΠΎΠΏΠΈΡΡΡ ΡΠ°ΠΌ Π·Π°ΠΏΠΈΡ ΠΊΠΎΡΠΈΡΡΡΠ²Π°ΡΠ° Ρ ΠΌΠΎΠΆΠ΅ Π±ΡΡΠΈ Π²ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° Π°Π΄ΠΌΡΠ½ΡΡΡΡΠ°ΡΠΎΡΠΎΠΌ Π°Π±ΠΎ ΡΠ½ΡΠΈΠΌ Π½Π°Π΄ΡΠΉΠ½ΠΈΠΌ Π΄ΠΆΠ΅ΡΠ΅Π»ΠΎΠΌ.
ΠΠΈΠ·Π½Π°ΡΠ΅Π½Π½Ρ ΡΠΊΠ°Π½Π΅ΡΠ° ΡΡΠΎΡΡΡΡΡΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ HTTP-Π·Π°ΠΏΠΈΡΡ. ΠΠ°ΡΡΡΠΏΠ½ΠΈΠΉ Π·Π°ΠΏΠΈΡ ΠΌΠΎΠΆΠ΅ ΠΌΠ°ΡΠΈ ΡΠ½ΡΡ ΠΎΠ·Π½Π°ΠΊΠΈ.
Π’ΠΎΠΌΡ Π½Π°Π²ΡΡΡ ΠΆΠΈΡΡΡΠ²ΠΈΠΉ ΡΠΈΠΊΠ» ΡΠΈΡ Π΄Π²ΠΎΡ ΡΠΈΠ³Π½Π°Π»ΡΠ² ΡΡΠ·Π½ΠΈΠΉ.
ΠΠ΄ΠΈΠ½ is_bot ΠΏΡΠΈΡ ΠΎΠ²ΡΡ ΠΏΠΎΡ ΠΎΠ΄ΠΆΠ΅Π½Π½Ρ Π·Π½Π°ΡΠ΅Π½Π½Ρ
if ($user?->is_bot || $requestIsBot) { $isBot = true;}ΠΡΡΠ»Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΎΠ±βΡΠ΄Π½Π°Π½Π½Ρ ΠΊΠΎΠ΄ ΡΠΆΠ΅ Π½Π΅ Π·Π½Π°Ρ, ΡΠΎΠΌΡ ΡΠ°ΠΌΠ΅ ΠΎΡΡΠΈΠΌΠ°Π² true.
Π¦Π΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΎΠ±Π»ΡΠΊΠΎΠ²ΠΈΠΉ Π·Π°ΠΏΠΈΡ?
Π¦Π΅ Π³ΠΎΡΡΡΠΎΠ²ΠΈΠΉ ΡΠΊΠ°Π½Π΅Ρ?
Π¦Π΅ Π°Π²ΡΠ΅Π½ΡΠΈΡΡΠΊΠΎΠ²Π°Π½ΠΈΠΉ ΠΊΠΎΡΠΈΡΡΡΠ²Π°Ρ, ΡΠΊΠΈΠΉ Π·Π°ΡΠ°Π· ΡΠΎΠ±ΠΈΡΡ Π·Π°ΠΏΠΈΡ ΡΠ· Π½Π΅Π·Π²ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ½ΡΠ°?
ΠΠ»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΡΠΎΡΠΊΠΎΠ³ΠΎ if ΡΡΠ·Π½ΠΈΡΡ ΠΌΠΎΠΆΠ΅ Π·Π΄Π°Π²Π°ΡΠΈΡΡ Π½Π΅Π²Π°ΠΆΠ»ΠΈΠ²ΠΎΡ. ΠΠ»Ρ Π°Π½Π°Π»ΡΡΠΈΠΊΠΈ, Π·Π²ΡΡΡΠ² Ρ ΠΏΠΎΠ΄Π°Π»ΡΡΠΈΡ
ΠΏΡΠ°Π²ΠΈΠ» Π²ΠΎΠ½Π° Π΄ΡΠΆΠ΅ ΡΠ²ΠΈΠ΄ΠΊΠΎ ΡΡΠ°Ρ ΠΊΡΠΈΡΠΈΡΠ½ΠΎΡ.
ΠΠ»Π°ΡΠΈΡΡΠΊΠ°ΡΡΡ ΠΎΠ±Π»ΡΠΊΠΎΠ²ΠΎΠ³ΠΎ Π·Π°ΠΏΠΈΡΡ ΠΎΠΏΠΈΡΡΡ ΡΡΠ±βΡΠΊΡΠ°
enum AccountKind: string{ case HUMAN = 'human'; case AUTOMATED = 'automated';}Π¦Π΅ Π»ΠΈΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΈΠΉ ΡΠΏΠΎΡΡΠ± ΠΌΠΎΠ΄Π΅Π»ΡΠ²Π°Π½Π½Ρ.
ΠΠ»Ρ ΠΌΠ΅Π½Π΅ Π²Π°ΠΆΠ»ΠΈΠ²ΡΡΠ΅ ΡΠ΅, ΡΠΎ ΠΊΠ»Π°ΡΠΈΡΡΠΊΠ°ΡΡΡ Π½Π°Π»Π΅ΠΆΠΈΡΡ ΠΎΠ±Π»ΡΠΊΠΎΠ²ΠΎΠΌΡ Π·Π°ΠΏΠΈΡΡ Ρ ΠΌΠ°Ρ Π·ΡΠΎΠ·ΡΠΌΡΠ»Π΅ Π΄ΠΆΠ΅ΡΠ΅Π»ΠΎ.
ΠΠ°ΠΏΡΠΈΠΊΠ»Π°Π΄, ΡΠΈΡΡΠ΅ΠΌΠ° ΠΌΠΎΠΆΠ΅ Π·Π½Π°ΡΠΈ, ΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈΠΉ ΠΎΠ±Π»ΡΠΊΠΎΠ²ΠΈΠΉ Π·Π°ΠΏΠΈΡ ΡΡΠ²ΠΎΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΎΠ²Π°Π½ΠΎΡ ΡΠΎΠ±ΠΎΡΠΈ.
Π¦Π΅ Π½Π΅ ΠΏΠΎΡΡΡΠ±Π½ΠΎ ΡΠΎΡΠ°Π·Ρ Π²Π³Π°Π΄ΡΠ²Π°ΡΠΈ Π·Π° User-Agent.
ΠΠΈΡΠ²Π»Π΅Π½Π½Ρ ΡΠΊΠ°Π½Π΅ΡΠ° ΠΎΠΏΠΈΡΡΡ Π·Π°ΠΏΠΈΡ, Π° Π½Π΅ ΠΊΠΎΡΠΈΡΡΡΠ²Π°ΡΠ°
final readonly class RequestClassification{ public function __construct( public bool $isCrawler, public ?string $crawlerFamily, ) {}}Π’Π°ΠΊΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΡΠΎΡΡΡΡΡΡΡ ΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΠΈΡΡ.
ΠΡΠ½ ΠΌΠΎΠΆΠ΅ Π±ΡΡΠΈ ΠΎΡΡΠΈΠΌΠ°Π½ΠΈΠΉ Π·Π° Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ, User-Agent, Π²ΡΠ΄ΠΎΠΌΠΈΠΌΠΈ ΡΠΊΠ°Π½Π΅Ρ-ΡΡΠΌΠ΅ΠΉΡΡΠ²Π°ΠΌΠΈ Π°Π±ΠΎ ΡΠ½ΡΠΈΠΌΠΈ bounded-ΡΠΈΠ³Π½Π°Π»Π°ΠΌΠΈ.
ΠΠ»Π΅ ΡΠ΅ Π²ΡΠ΅ ΠΎΠ΄Π½ΠΎ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° Π·Π°ΠΏΠΈΡΡ, Π° Π½Π΅ Π΄ΠΎΠ²ΡΡΠ½Π° Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° ΠΎΠ±Π»ΡΠΊΠΎΠ²ΠΎΠ³ΠΎ Π·Π°ΠΏΠΈΡΡ.
ΠΠΎΡΡΡΠΎΠ²ΠΈΠΉ ΡΠΊΠ°Π½Π΅Ρ Π²Π·Π°Π³Π°Π»Ρ ΠΌΠΎΠΆΠ΅ Π½Π΅ ΠΌΠ°ΡΠΈ ΠΎΠ±Π»ΡΠΊΠΎΠ²ΠΎΠ³ΠΎ Π·Π°ΠΏΠΈΡΡ
HTTP request | +--> authenticated user? | +--> NO | v guest request | +--> crawler detectedΠ¦Π΅ ΡΠ΅ ΠΎΠ΄Π½Π° ΠΏΡΠΈΡΠΈΠ½Π° Π½Π΅ Π·ΠΌΡΡΡΠ²Π°ΡΠΈ ΠΏΠΎΠ½ΡΡΡΡ.
ΠΠ»Ρ Π·Π½Π°ΡΠ½ΠΎΡ ΡΠ°ΡΡΠΈΠ½ΠΈ ΡΠΊΠ°Π½Π΅Ρ-ΡΡΠ°ΡΡΠΊΡ ΠΎΠ±βΡΠΊΡΠ° User Π²Π·Π°Π³Π°Π»Ρ Π½Π΅ΠΌΠ°Ρ.
ΠΡΠΆΠ΅ request-level detection ΠΏΠΎΠ²ΠΈΠ½Π΅Π½ ΠΏΡΠ°ΡΡΠ²Π°ΡΠΈ Π½Π΅Π·Π°Π»Π΅ΠΆΠ½ΠΎ Π²ΡΠ΄ ΠΊΠ»Π°ΡΠΈΡΡΠΊΠ°ΡΡΡ ΠΎΠ±Π»ΡΠΊΠΎΠ²ΠΈΡ Π·Π°ΠΏΠΈΡΡΠ².
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΎΠ±Π»ΡΠΊΠΎΠ²ΠΈΠΉ Π·Π°ΠΏΠΈΡ ΠΌΠΎΠΆΠ΅ ΠΏΡΠΎΠΉΡΠΈ Π·Π²ΠΈΡΠ°ΠΉΠ½Ρ Π°Π²ΡΠ΅Π½ΡΠΈΡΡΠΊΠ°ΡΡΡ
Account kind = automatedauthenticated = yes Current request crawler detected = no Π¦Π΅ Π²ΡΠ΅ ΠΎΠ΄Π½ΠΎΠ°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΎΠ²Π°Π½ΠΈΠΉ account,Π½Π°Π²ΡΡΡ ΡΠΊΡΠΎ ΠΏΠΎΡΠΎΡΠ½ΠΈΠΉ requestΠ½Π΅ ΡΡ
ΠΎΠΆΠΈΠΉ Π½Π° ΡΠΊΠ°Π½Π΅Ρ.ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΎΠ±Π»ΡΠΊΠΎΠ²ΠΈΠΉ Π·Π°ΠΏΠΈΡ ΠΌΠΎΠΆΠ΅ Π²ΠΈΠΊΠΎΡΠΈΡΡΠΎΠ²ΡΠ²Π°ΡΠΈ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΈΠΉ API-ΠΊΠ»ΡΡΠ½Ρ Ρ Π½Π΅ ΠΌΠ°ΡΠΈ ΠΎΠ·Π½Π°ΠΊ ΡΠΊΠ°Π½Π΅ΡΠ° Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ .
Π―ΠΊΡΠΎ ΠΏΠΎΠΊΠ»Π°Π΄Π°ΡΠΈΡΡ Π»ΠΈΡΠ΅ Π½Π° request detection, ΡΠΈΡΡΠ΅ΠΌΠ° Π²ΡΡΠ°ΡΠΈΡΡ Π²ΡΠ΄ΠΎΠΌΡ ΡΠ½ΡΠΎΡΠΌΠ°ΡΡΡ ΠΏΡΠΎ ΡΠ°ΠΌ ΠΎΠ±Π»ΡΠΊΠΎΠ²ΠΈΠΉ Π·Π°ΠΏΠΈΡ.
ΠΠ²ΠΎΡΠΎΡΠ½Π΅ ΡΠ΅ΠΆ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½Π΅: Π·Π²ΠΈΡΠ°ΠΉΠ½ΠΈΠΉ ΠΊΠΎΡΠΈΡΡΡΠ²Π°Ρ Π½Π΅ ΠΏΠΎΠ²ΠΈΠ½Π΅Π½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΡΠ°Π²Π°ΡΠΈ "bot account" ΡΠ΅ΡΠ΅Π· ΠΎΠ΄ΠΈΠ½ ΠΏΡΠ΄ΠΎΠ·ΡΡΠ»ΠΈΠΉ Π·Π°ΠΏΠΈΡ.
Π― Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΠ²ΠΎΡΡΡ Π΅Π²ΡΠΈΡΡΠΈΠΊΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π°ΠΏΠΈΡΡ Π½Π° ΠΏΠΎΡΡΡΠΉΠ½ΠΈΠΉ ΡΡΠ°Π½ account
if ($crawlerDetector->matches($request)) { $user?->update([ 'is_bot' => true, ]);}User-Agent ΠΌΠΎΠΆΠ½Π° Π·ΠΌΡΠ½ΠΈΡΠΈ. Π‘ΠΈΠ³Π½Π°Π» ΠΌΠΎΠΆΠ΅ Π±ΡΡΠΈ Π½Π΅ΠΏΠΎΠ²Π½ΠΈΠΌ Π°Π±ΠΎ Ρ
ΠΈΠ±Π½ΠΈΠΌ.
Π’ΠΎΠΌΡ Ρ Π½Π΅ Ρ ΠΎΡΡ, ΡΠΎΠ± ΠΎΠ΄Π½Π° request-level Π΅Π²ΡΠΈΡΡΠΈΠΊΠ° Π½Π΅ΠΎΠ±ΠΎΡΠΎΡΠ½ΠΎ Π·ΠΌΡΠ½ΡΠ²Π°Π»Π° ΠΊΠ»Π°ΡΠΈΡΡΠΊΠ°ΡΡΡ ΠΊΠΎΡΠΈΡΡΡΠ²Π°ΡΠ°.
ΠΠ»Π°ΡΠΈΡΡΠΊΠ°ΡΡΡ account ΠΏΠΎΠ²ΠΈΠ½Π½Π° ΠΌΠ°ΡΠΈ Π²Π»Π°ΡΠ½Π΅ Π½Π°Π΄ΡΠΉΠ½Π΅ Π΄ΠΆΠ΅ΡΠ΅Π»ΠΎ Ρ Π²Π»Π°ΡΠ½Ρ ΠΏΡΠ°Π²ΠΈΠ»Π° Π·ΠΌΡΠ½ΠΈ.
Π Π°Π½Π°Π»ΡΡΠΈΡΡ ΡΡ Π΄Π²Π° ΡΠΈΠ³Π½Π°Π»ΠΈ ΡΠ΅ΠΆ ΠΌΠ°ΡΡΡ ΡΡΠ·Π½ΠΈΠΉ Π·ΠΌΡΡΡ
ΠΠΈΠΌΡΡ 1 account_kind- human- automated- guest ΠΠΈΠΌΡΡ 2 request_kind- browser- crawler- other Π―ΠΊΡΠΎ Π°Π½Π°Π»ΡΡΠΈΠΊΠ° Π·Π±Π΅ΡΡΠ³Π°Ρ Π»ΠΈΡΠ΅ is_bot=true, ΠΏΡΠ·Π½ΡΡΠ΅ Π½Π΅ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎ ΡΠ΅ΡΠ½ΠΎ Π²ΡΠ΄ΠΏΠΎΠ²ΡΡΡΠΈ, ΡΠΎ ΡΠ°ΠΌΠ΅ Π±ΡΠ»ΠΎ Π²ΡΠ΄ΡΡΠ»ΡΡΡΠΎΠ²Π°Π½ΠΎ.
Π¦Π΅ Π±ΡΠ»ΠΈ ΡΠΊΠ°Π½Π΅Ρ-ΠΏΠ΅ΡΠ΅Π³Π»ΡΠ΄ΠΈ?
ΠΡΡ Π²ΡΠ΄ΠΎΠΌΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±Π»ΡΠΊΠΎΠ²ΠΈΡ Π·Π°ΠΏΠΈΡΡΠ²?
ΠΠ±ΠΈΠ΄Π²Π° ΡΠΈΠΏΠΈ ΡΠ°Π·ΠΎΠΌ?
Π ΠΎΠ·Π΄ΡΠ»Π΅Π½Ρ ΡΠΈΠ³Π½Π°Π»ΠΈ Π΄ΠΎΠ·Π²ΠΎΠ»ΡΡΡΡ Π·ΠΌΡΠ½ΡΠ²Π°ΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π²ΡΡΡΠ² Π±Π΅Π· Π²ΡΡΠ°ΡΠΈ ΠΏΠΎΡΠ°ΡΠΊΠΎΠ²ΠΎΡ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ.
ΠΠ»Π°ΡΠΈΡΡΠΊΠ°ΡΡΡ Ρ ΡΡΡΠ΅Π½Π½Ρ ΠΏΡΠΎ ΡΡΠ»ΡΡΡΠ°ΡΡΡ - ΡΠ΅ΠΆ ΡΡΠ·Π½Ρ ΡΠ΅ΡΡ
Π©Π΅ ΠΎΠ΄Π½Π° ΠΌΠ΅ΠΆΠ°, ΡΠΊΡ Ρ Π½Π΅ Ρ ΠΎΡΡ Π·ΠΌΡΡΡΠ²Π°ΡΠΈ: ΡΠ°ΠΊΡ ΠΊΠ»Π°ΡΠΈΡΡΠΊΠ°ΡΡΡ Ρ ΡΡΡΠ΅Π½Π½Ρ, ΡΠΎ ΡΠΎΠ±ΠΈΡΠΈ Π· ΡΠΈΠΌΠΈ Π΄Π°Π½ΠΈΠΌΠΈ.
ΠΠ°ΠΏΡΠΈΠΊΠ»Π°Π΄, ΡΠΊΠ°Π½Π΅Ρ-Π·Π°ΠΏΠΈΡ ΠΌΠΎΠΆΠ½Π° Π½Π΅ Π²ΠΊΠ»ΡΡΠ°ΡΠΈ Π² human views, Π°Π»Π΅ Π²ΡΠ΅ ΠΎΠ΄Π½ΠΎ Π·Π±Π΅ΡΡΠ³Π°ΡΠΈ ΠΎΠΊΡΠ΅ΠΌΡ ΡΠΊΠ°Π½Π΅Ρ-ΡΡΠ°ΡΠΈΡΡΠΈΠΊΡ.
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΎΠ²Π°Π½ΠΈΠΉ Π°ΠΊΠ°ΡΠ½Ρ ΠΌΠΎΠΆΠ½Π° Π½Π΅ ΡΠ°Ρ ΡΠ²Π°ΡΠΈ Π² ΠΎΠ΄Π½ΡΠΉ ΠΌΠ΅ΡΡΠΈΡΡ, Π°Π»Π΅ Π²ΡΠ°Ρ ΠΎΠ²ΡΠ²Π°ΡΠΈ Π² ΡΠ½ΡΠΎΠΌΡ ΠΎΠΏΠ΅ΡΠ°ΡΡΠΉΠ½ΠΎΠΌΡ Π·Π²ΡΡΡ.
Π’ΠΎΠΌΡ "ΠΌΠΈ Π²ΠΈΠ·Π½Π°ΡΠΈΠ»ΠΈ ΡΠΈΠΏ" Π½Π΅ ΠΏΠΎΠ²ΠΈΠ½Π½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΎΠ·Π½Π°ΡΠ°ΡΠΈ "ΠΌΠΈ Π²ΠΈΠ΄Π°Π»ΠΈΠ»ΠΈ Π°Π±ΠΎ ΠΏΡΠΎΡΠ³Π½ΠΎΡΡΠ²Π°Π»ΠΈ Π²ΡΡ Π΄Π°Π½Ρ".
ΠΠΌΡΠ½Π° ΠΊΠ»Π°ΡΠΈΡΡΠΊΠ°ΡΡΡ Π½Π΅ ΠΏΠΎΠ²ΠΈΠ½Π½Π° ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°ΡΠΈ ΡΡΡΠΎΡΠΈΡΠ½Ρ Π΄ΡΡ ΠΊΠΎΡΠΈΡΡΡΠ²Π°ΡΠ°
Π―ΠΊΡΠΎ ΠΎΠ±Π»ΡΠΊΠΎΠ²ΠΈΠΉ Π·Π°ΠΏΠΈΡ ΠΏΡΠ·Π½ΡΡΠ΅ ΠΏΠΎΠ·Π½Π°ΡΠΈΠ»ΠΈ ΡΠΊ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΎΠ²Π°Π½ΠΈΠΉ, Ρ Π½Π΅ Ρ ΠΎΡΡ ΡΡΠ·ΠΈΡΠ½ΠΎ Π²ΠΈΠ΄Π°Π»ΡΡΠΈ ΠΉΠΎΠ³ΠΎ ΠΏΠΎΠΏΠ΅ΡΠ΅Π΄Π½Ρ ΡΠ΅Π°ΠΊΡΡΡ, ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΡ ΡΠΈ ΡΠ½ΡΡ ΡΡΡΠΎΡΡΡ Π»ΠΈΡΠ΅ ΡΠ΅ΡΠ΅Π· Π½ΠΎΠ²Ρ ΠΊΠ»Π°ΡΠΈΡΡΠΊΠ°ΡΡΡ.
ΠΠ»Π°ΡΠΈΡΡΠΊΠ°ΡΡΡ ΠΎΠΏΠΈΡΡΡ, ΡΠΊ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΡΡ ΡΡΠ±βΡΠΊΡΠ°.
Π ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π²ΡΡΠ½ΠΎΡΡΡ Π²ΠΆΠ΅ Π²ΠΈΡΡΡΡΡΡΡ, ΡΠΊΡ Π΄Π°Π½Ρ Π²ΠΊΠ»ΡΡΠ°ΡΠΈ Π΄ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΡ ΠΌΠ΅ΡΡΠΈΠΊΠΈ.
Π’Π°ΠΊ Π·ΠΌΡΠ½Π° ΠΊΠ»Π°ΡΠΈΡΡΠΊΠ°ΡΡΡ Π½Π΅ ΡΡΠ°Ρ ΡΡΠΉΠ½ΡΠ²Π½ΠΎΡ ΠΌΡΠ³ΡΠ°ΡΡΡΡ ΡΡΡΠΎΡΡΡ.
ΠΠ»Ρ Π΄ΠΎΠ²Π³ΠΎΡΡΠΈΠ²Π°Π»ΠΎΡ ΠΊΠ»Π°ΡΠΈΡΡΠΊΠ°ΡΡΡ Π²Π°ΠΆΠ»ΠΈΠ²ΠΎ Π·Π½Π°ΡΠΈ Π΄ΠΆΠ΅ΡΠ΅Π»ΠΎ ΡΡΡΠ΅Π½Π½Ρ
final readonly class AccountClassification{ public function __construct( public AccountKind $kind, public string $source, ) {}}Π―ΠΊΡΠΎ Π·Π½Π°ΡΠ΅Π½Π½Ρ ΠΆΠΈΠ²Π΅ Π΄ΠΎΠ²Π³ΠΎ Ρ Π²ΠΏΠ»ΠΈΠ²Π°Ρ Π½Π° Π·Π²ΡΡΠΈ ΡΠΈ ΠΏΠΎΠ²Π΅Π΄ΡΠ½ΠΊΡ ΡΠΈΡΡΠ΅ΠΌΠΈ, ΠΊΠΎΡΠΈΡΠ½ΠΎ Π·Π½Π°ΡΠΈ, Π·Π²ΡΠ΄ΠΊΠΈ Π²ΠΎΠ½ΠΎ Π²Π·ΡΠ»ΠΎΡΡ.
Π¦Π΅ ΠΌΠΎΠΆΠ΅ Π±ΡΡΠΈ ΡΠ²Π½Π΅ Π°Π΄ΠΌΡΠ½ΡΡΡΡΠ°ΡΠΈΠ²Π½Π΅ ΡΡΡΠ΅Π½Π½Ρ, Π²ΡΠ΄ΠΎΠΌΠΈΠΉ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΠΉ account Π°Π±ΠΎ ΡΠ½ΡΠ΅ Π½Π°Π΄ΡΠΉΠ½Π΅ Π΄ΠΆΠ΅ΡΠ΅Π»ΠΎ.
Π’Π°ΠΊΠΈΠΉ ΠΏΡΠ΄Ρ
ΡΠ΄ Π·Π½Π°ΡΠ½ΠΎ Π·ΡΠΎΠ·ΡΠΌΡΠ»ΡΡΠΈΠΉ Π·Π° Π½Π΅Π²ΡΠ΄ΠΎΠΌΠΈΠΉ is_bot=true, ΡΠΊΠΈΠΉ ΠΊΠΎΠ»ΠΈΡΡ Π²ΠΈΡΡΠ°Π²ΠΈΠ»Π° ΡΠΊΠ°ΡΡ Π΅Π²ΡΠΈΡΡΠΈΠΊΠ°.
Π― ΡΠΎΡΠΌΡΡ ΠΎΠ±ΠΈΠ΄Π²Π° ΡΠΈΠ³Π½Π°Π»ΠΈ Π½Π΅Π·Π°Π»Π΅ΠΆΠ½ΠΎ
Request | +--> Ρ authenticated user? | | | +--> account classification | +--> request classifier | +--> crawler? +--> crawler family? ΠΠ°Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈΠΉ consumerΠ²ΠΈΡΡΡΡΡ, ΡΠΊΡ ΡΠΈΠ³Π½Π°Π»ΠΈΠΉΠΎΠΌΡ ΠΏΠΎΡΡΡΠ±Π½Ρ.Π©ΠΎ Ρ ΠΏΠ΅ΡΠ΅Π²ΡΡΡΡ ΡΠ΅ΡΡΠ°ΠΌΠΈ
1. Guest + crawler request -> account classification Π²ΡΠ΄ΡΡΡΠ½Ρ -> request Π²ΠΈΠ·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΠΊ ΡΠΊΠ°Π½Π΅Ρ 2. ΠΠ²ΠΈΡΠ°ΠΉΠ½ΠΈΠΉ authenticated user + Π·Π²ΠΈΡΠ°ΠΉΠ½ΠΈΠΉ request -> human account -> Π½Π΅ ΡΠΊΠ°Π½Π΅Ρ 3. Automated account + Π·Π²ΠΈΡΠ°ΠΉΠ½ΠΈΠΉ request -> automated account -> Π½Π΅ ΡΠΊΠ°Π½Π΅Ρ Π©ΠΎ Ρ ΠΏΠ΅ΡΠ΅Π²ΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ Π΄ΠΎΠ΄Π°Π²Π°Π½Π½ΡΠΌ is_bot
ΠΠ΅ΡΠ΅Π΄ ΡΠΈΠΌ ΡΠΊ Π΄ΠΎΠ΄Π°ΡΠΈ ΠΎΠ΄Π½Π΅ ΠΏΠΎΠ»Π΅ is_bot, Ρ ΠΏΠΈΡΠ°Ρ:
Π― ΠΊΠ»Π°ΡΠΈΡΡΠΊΡΡ ΠΎΠ±Π»ΡΠΊΠΎΠ²ΠΈΠΉ Π·Π°ΠΏΠΈΡ ΡΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈΠΉ Π·Π°ΠΏΠΈΡ?
Π‘ΠΊΡΠ»ΡΠΊΠΈ ΠΆΠΈΠ²Π΅ ΡΠ΅ΠΉ ΡΠΈΠ³Π½Π°Π»: ΠΎΠ΄ΠΈΠ½ request ΡΠΈ Π²Π΅ΡΡ ΠΆΠΈΡΡΡΠ²ΠΈΠΉ ΡΠΈΠΊΠ» account?
ΠΠ²ΡΠ΄ΠΊΠΈ ΠΏΠΎΡ ΠΎΠ΄ΠΈΡΡ ΠΊΠ»Π°ΡΠΈΡΡΠΊΠ°ΡΡΡ?
Π§ΠΈ ΡΠ΅ Π½Π°Π΄ΡΠΉΠ½ΠΈΠΉ ΡΠ°ΠΊΡ, ΡΠΈ Π»ΠΈΡΠ΅ Π΅Π²ΡΠΈΡΡΠΈΠΊΠ°?
Π§ΠΈ ΠΌΠΎΠΆΠ΅ Π³ΠΎΡΡΡΠΎΠ²ΠΈΠΉ ΡΠΊΠ°Π½Π΅Ρ ΡΡΠ½ΡΠ²Π°ΡΠΈ Π±Π΅Π· User?
Π§ΠΈ ΠΌΠΎΠΆΠ΅ automated account Π·ΡΠΎΠ±ΠΈΡΠΈ request Π±Π΅Π· ΡΠΊΠ°Π½Π΅Ρ-ΠΎΠ·Π½Π°ΠΊ?
Π§ΠΈ ΠΏΠΎΡΡΡΠ±Π½Ρ Π°Π½Π°Π»ΡΡΠΈΡΡ ΠΎΠ±ΠΈΠ΄Π²Π° ΡΠΈΠ³Π½Π°Π»ΠΈ ΠΎΠΊΡΠ΅ΠΌΠΎ?
Π§ΠΈ Π½Π΅ ΠΏΠ΅ΡΠ΅ΡΠ²ΠΎΡΡΡ ΡΡΠ»ΡΡΡΠ°ΡΡΡ ΠΊΠ»Π°ΡΠΈΡΡΠΊΠ°ΡΡΡ Π½Π° Π²ΠΈΠ΄Π°Π»Π΅Π½Π½Ρ ΡΡΡΠΎΡΡΡ?
ΠΠ΄Π½Π° Π½Π°Π·Π²Π° "bot" Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Ρ ΠΎΠ΄Π½Ρ ΠΌΠΎΠ΄Π΅Π»Ρ
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΎΠ±Π»ΡΠΊΠΎΠ²ΠΈΠΉ Π·Π°ΠΏΠΈΡ Ρ ΡΠΊΠ°Π½Π΅Ρ-Π·Π°ΠΏΠΈΡ ΠΌΠΎΠΆΡΡΡ ΠΎΠ±ΠΈΠ΄Π²Π° Π²ΠΈΠ³Π»ΡΠ΄Π°ΡΠΈ ΡΠΊ "Π±ΠΎΡΠΈ", Π°Π»Π΅ Π²ΠΎΠ½ΠΈ ΠΎΠΏΠΈΡΡΡΡΡ ΡΡΠ·Π½Ρ ΡΡΠ²Π½Ρ ΡΠΈΡΡΠ΅ΠΌΠΈ.
Account classification Π²ΡΠ΄ΠΏΠΎΠ²ΡΠ΄Π°Ρ Π½Π° ΠΏΠΈΡΠ°Π½Π½Ρ, Ρ ΡΠΎ Π΄ΡΡ.
Request detection Π²ΡΠ΄ΠΏΠΎΠ²ΡΠ΄Π°Ρ Π½Π° ΠΏΠΈΡΠ°Π½Π½Ρ, ΡΠΎ Π²ΡΠ΄ΠΎΠΌΠΎ ΠΏΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈΠΉ HTTP-Π·Π°ΠΏΠΈΡ.
Π―ΠΊΡΠΎ Π·Π²Π΅ΡΡΠΈ ΡΡ Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ boolean, ΡΠΈΡΡΠ΅ΠΌΠ° Π²ΡΡΠ°ΡΠ°Ρ Π΄ΠΆΠ΅ΡΠ΅Π»ΠΎ ΡΠΈΠ³Π½Π°Π»Ρ Ρ Π΄ΡΠΆΠ΅ ΡΠ²ΠΈΠ΄ΠΊΠΎ ΠΏΠΎΡΠΈΠ½Π°Ρ Π±ΡΠ΄ΡΠ²Π°ΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° Π½Π° Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΠΌΡ Π·Π½Π°ΡΠ΅Π½Π½Ρ.
Π― ΠΊΡΠ°ΡΠ΅ Π·Π±Π΅ΡΠ΅ΠΆΡ Π΄Π²Π° ΠΏΡΠΎΡΡΡ ΡΠΈΠ³Π½Π°Π»ΠΈ Π· ΡΡΡΠΊΠΎΡ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΎΡ, Π½ΡΠΆ ΠΎΠ΄ΠΈΠ½ Π·ΡΡΡΠ½ΠΈΠΉ is_bot, Π·Π½Π°ΡΠ΅Π½Π½Ρ ΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΆΠ΅Π½ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠΎΠ·ΡΠΌΡΡ ΠΏΠΎ-ΡΠ²ΠΎΡΠΌΡ.
ΠΠΎΠ»ΠΈ ΠΎΠ΄Π½Π΅ boolean ΠΌΠΎΠΆΠ΅ ΠΎΠ·Π½Π°ΡΠ°ΡΠΈ Π΄Π²Ρ ΡΡΠ·Π½Ρ ΡΠ΅ΡΡ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°Π·Π²ΠΈΡΠ°ΠΉ Π½Π΅ Π² Π½Π°Π·Π²Ρ ΠΏΠΎΠ»Ρ, Π° Π² ΡΠΎΠΌΡ, ΡΠΎ ΠΌΠΎΠ΄Π΅Π»Ρ Π²ΡΡΠ°ΡΠΈΠ»Π° ΠΌΠ΅ΠΆΡ ΠΌΡΠΆ ΠΏΠΎΠ½ΡΡΡΡΠΌΠΈ.



