PHP рдореЗрдВ IM рд╕реНрдЯреЗрдЯрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрдХреНрд╖рд╛рдПрдВ

PHP рдореЗрдВ рддрддреНрдХрд╛рд▓ рджреВрддреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд╖рдп рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд╣реЛрдХрд░, рдореИрдВрдиреЗ рджрд░реНрдЬрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рд╕рдВрд░рдЪрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рдореЗрд░реА рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЬрдиреНрдо рд╣реБрдЖред

рдореЗрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдореВрд▓ рдЕрд╡рдзрд╛рд░рдгрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
1. рдУрдУрдкреА
2. рдмреБрдирд┐рдпрд╛рджреА рдФрд░ рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдореБрдЦреА рдФрд░ рдЖрд░рд╛рдорджрд╛рдпрдХ рдмрд╛рдЗрдХ рд╡рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ
3. рдПрдирдо рдХреЛрдб рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛, рд▓реЗрдХрд┐рди рдкрд╛рда рдпрд╛ рдЕрдиреНрдп рд╕рдВрджреЗрд╢ рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ, рдирд┐рдпрдВрддреНрд░рдХ рд╕реЗ рджреГрд╢реНрдп рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ред

рдЗрд╕ рдпрд╛ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рддрдВрддреНрд░ рдореВрд▓ рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ рдХреЗ рдЕрдзреНрдпрдпрди рд╕реЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдЪреЛрд░реА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рддрдВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рддреИрдпрд╛рд░-рдирд┐рд░реНрдорд┐рдд рд▓реЛрдбрд┐рдВрдЧ рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ cUrl рдФрд░ PHP рджреЛрдиреЛрдВ file_get_contents рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ PHP рдХрд╛ рдореВрд▓ рд╣реИред рдЖрдк рд╕рдВрдмрдВрдзрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЪрд┐рдкрдХрд╛рдХрд░ рдкреГрд╖реНрда рд╕рд╛рдордЧреНрд░реА рдХреЛ HTTP рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдпрд╛ рдЙрд╕рдХреЗ рдмрд┐рдирд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╣реИ, рд╕реНрдерд┐рддрд┐ рдХреЛрдб рдПрдХ рд╡рд┐рд╢реЗрд╖ рдПрдирдо рдореЗрдВ рд╕рдорд╛рд╣рд┐рдд рд╣реИрдВ, рддреНрд░реБрдЯрд┐ рдХреЛрдб рдкрд╛рд╕ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдпрд╣рд╛рдБ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВ:
class enmIMStatus { const imsOffline = 0x00; const imsOnline = 0x01; const imsAway = 0x02; const imsDoNotDisturb = 0x03; const imsNotAvailable = 0x04; const imsFreeForChat = 0x05; } class enmImError { const imeNoError = 0x00; const imeBadIdentity = 0x01; const imeUnknownStatus = 0x02; const imeConnectionErr = 0x03; } 


рд╕реНрдерд┐рддрд┐ tBasicIMGetter рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рд╡рд░реНрдЧ рд╕рд╛рд░ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ - рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдЬреЛ рдмреЗрд╕ рдкреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдбрд░ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдкреВрд░реНрд╡-рд╕рдВрдЪрд┐рдд рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рддрд╛ рд╣реИред рдЧрдВрджреЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд╕рд░рдгреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧреА, рдЬрд╣рд╛рдВ рдХрдИ рдмрд╛рд░ рдХрдХреНрд╖рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реАрд▓реЛрдбрд╕реНрдЯреИрдЯрд╕ ($ aStatuse) рджреНрд╡рд╛рд░рд╛ рд╕реНрдЯреЗрдЯрд╕ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ) рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд░рдгреА $ aStatuse рдХреЛ рдореИрд╕реЗрдВрдЬрд░ id => status_code рдХреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕реНрдерд┐рддрд┐ getImStatus ($ aIdentity) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдкреИрд░рд╛рдореАрдЯрд░ ICQ рдХреЗ рд▓рд┐рдП рдореИрд╕реЗрдВрдЬрд░ рдХреА ID рд╣реИ - рдпрд╣ рдирдВрдмрд░ рд╣реИ, Mail.ru Agent рдХреЗ рд▓рд┐рдП - рдореЗрд▓рдмреЙрдХреНрд╕ рдХрд╛ рдкрддрд╛ ...
рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рджреЛ рдЕрдореВрд░реНрдд рдХрд╛рд░реНрдп рд╣реИрдВ - рд╕реАрдзреЗ рдореИрд╕реЗрдВрдЬрд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рддрд┐ рдФрд░ рдЪреЗрдХрд┐рдВрдЧ рдЖрдИрдбреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред рдпреЗ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЖрдзрд╛рд░ рдмрдирд╛рддреЗ рд╣реИрдВред
abstract protected function doUpdateImStatus($aIdentity);
abstract protected function checkImIdentity($aIdentity);


рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рджреВрддреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЖрдИрд╕реАрдХреНрдпреВ, рд╕реНрдХрд╛рдЗрдк, рдЬреЗрдмрд░, рд╡реАрдХреЗ, рдореЗрд▓.рд░реБ рдПрдЬреЗрдВрдЯред рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЖрдзрд╛рд░ tBasicIMGetter рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рдХрдХреНрд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
ICQ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░, рдРрд╕рд╛ рд╡рд░реНрдЧ рджрд┐рдЦреЗрдЧрд╛:
 class tICQStatusGetter extends tBasicIMGetter { protected function checkImIdentity($aIdentity) { return !empty($aIdentity) && is_numeric($aIdentity) && (intval($aIdentity) > 10000) ? intval($aIdentity) : false; } protected function doUpdateImStatus($aIdentity) { $lContents = $this->fCDownloader->getURLContents('http://status.icq.com/online.gif?icq=' . $aIdentity . '&img=27', true); if(!empty($lContents)) { $lGotStatus = false; if(strstr($lContents, 'online1')) $lGotStatus = enmIMStatus::imsOnline; elseif(strstr($lContents, 'online0')) $lGotStatus = enmIMStatus::imsOffline; elseif(strstr($lContents, 'online2')) $lGotStatus = enmIMStatus::imsAway; if($lGotStatus !== false) { $this->fLastError = enmImError::imeNoError; $this->doUpdateCachedStatus($aIdentity, $lGotStatus); } else $this->fLastError = enmImError::imeUnknownStatus; } else $this->fLastError = enmImError::imeConnectionErr; } } 


рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреА рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдИрдПрдо рдЖрдИрдбреА рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕рдВрдмрдВрдзрд┐рдд рдЪрд┐рдкрдХрд╛ рд╕реНрдерд┐рддрд┐ред
рдХреЛрдб рдлрд╛рд╕реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рддреНрд░реБрдЯрд┐ рдЬрд╛рдБрдЪ рдХрд╛ рдПрдХ рд╕рд╛ред рдпрджрд┐ рдХреБрдЫ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдЙрдЯрдкреБрдЯ рд╕рдВрдХреЗрдд рджреЗрдЧрд╛ рдХрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдИрдбреА рд╡рд╛рд▓рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдирд▓рд╛рдЗрди рдирд╣реАрдВ рд╣реИред

рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдирд┐рдореНрди рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреЗ рд╣реБрдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ рд╕реНрдХреЗрдЪ рдХрд┐рдпрд╛:
 $lIMStatusesInText = array( enmIMStatus::imsOffline => 'Offline', enmIMStatus::imsOnline => 'Online', enmIMStatus::imsAway => 'Away', enmIMStatus::imsDoNotDisturb => 'Do not disturb', enmIMStatus::imsNotAvailable => 'Available', enmIMStatus::imsFreeForChat => 'Free for chat' ); $lImStatusGetters = array(); $lImStatusGetters['icq'] = new tICQStatusGetter(); $lImStatusGetters['jabber'] = new tJabberStatusGetter(); $lImStatusGetters['mail.ru agent'] = new tMRAStatusGetter(); $lImStatusGetters['skype'] = new tSkypeStatusGetter(); $lImStatusGetters['vkontakte'] = new tVKStatusGetter(); $lImIdentificators = array( 'icq' => '_icq', 'jabber' => '__jid', 'mail.ru agent' => '__mail.ru', 'skype' => '_skype', 'vkontakte' => 'id___', ); foreach($lImStatusGetters as $lKey => &$lGetter) echo $lKey, ': ', $lIMStatusesInText[$lGetter->getImStatus($lImIdentificators[$lKey])], '<br>', PHP_EOL; 


рдЕрдЪреНрдЫреЗ рд╢рд┐рд╖реНрдЯрд╛рдЪрд╛рд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб github рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реИ: github.com/Urvin/IM-Statuses-for-PHP
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред

Source: https://habr.com/ru/post/In150724/


All Articles