PHPでIMステータスを取得するための便利なクラス

PHPでインスタントメッセンジャーのステータス受け取るというトピックに触発されて、ステータスを受け取るためのコードを構築することにしました。そのため、私の小さなプロジェクトが生まれました。



私のプロジェクトの基本概念は次のとおりです。

1. OOP

2.基本機能と補助機能のための多目的で快適な自転車クラスの使用

3.テキストまたはその他のメッセージではなく、enumコードで説明されている状態を取得し、ビューをコントローラーから分離します。



これまたはそのステータスを取得するためのメカニズムは、元の記事の著者の研究から正直に盗まれており、一般に違いはありません。 検索メカニズムとして、cUrlとPHPネイティブのPHP file_get_contentsの両方に基づく既製のロードクラスが使用されます。対応するパラメーターを付加することで、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を取得するためのメインクラスは抽象的であり、各ステータス受信者に共通の機能を含みます。ベースページダウンローダーのコピーを作成し、事前キャッシュされたステータスの配列を作成するコンストラクターです。 このような配列は、クラスを取得する関数を数回呼び出すことができるダーティコードに必要です。

ステータスは、関数preloadStatuses($ aStatuses)によって(たとえば、データベースから)プリロードできます。配列$ aStatusesは、メッセンジャーid => status_codeの形式で提示する必要があります。

ステータスは関数getImStatus($ aIdentity)によって取得されます。パラメーターはメッセンジャーのIDです。ICQの場合-これはMail.ruエージェントの場合の番号です-メールボックスのアドレス...

基本クラスには2つの抽象関数があります-ステータスを直接取得し、メッセンジャーのタイプに準拠しているかどうかIDを確認します。 これらの機能は、それぞれの特殊なステータス受信者の基礎を形成します。

abstract protected function doUpdateImStatus($aIdentity);

abstract protected function checkImIdentity($aIdentity);








現在、プロジェクトは次のタイプのメッセンジャーをサポートしています:ICQ、Skype、Jabber、VK、Mail.Ru Agent。 各ステータス受信者は、ベース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; } }
      
      







ダウンロードしたドキュメントのコンテンツを受信した後、それが解析され、指定されたIM idに関連する対応する添付ステータスが表示されます。

コードの高速機能とエラーチェック。 何かが機能しない場合、出力は、指定されたIDを持つユーザーがオンラインではないことを示します。



ステータスを取得する例として、各ステータス受信者の機能を示す次のコードをスケッチしました。

 $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

誰かが役に立つことを願っています。



All Articles