Наш чат в Telegram для обмена идеями, проектами, мыслями, людьми в сфере ИТ г.Ростова-на-Дону: @it_rostov

Проверка статуса пользователя в MSN

Класс позволяет проверить онлайн-статус пользователя в MSN.

Результат проверки - TRUE, если пользователь в сети, или FALSE - если не в сети.


MSN:


/**
* This is an attempt to check online status for users.
* Method:
* first we ping an onlinestatus server. If response time is too long, or if it's down, we change.
* Time response has to be under 1s.
*
* You can find some address here: http://www.onlinestatus.org/usage.php
*
* I've seen that IP addresses are faster than "human" addresses, as we don't have to resolve these adresses.
*
* getStatus() sets status to :
* 0 : offline
* 1 : online
* 2 : unknown
*
* isOnline() returns true only if status is 1
*
* Requiered:
* 1- fsockopen support
*
* @author C. Jeanneret <cjeanneret@internux.ch>
*/

/*
Copyright (C) 2007 Jeanneret Internux

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/


class checkMSN {

 /* Server we're going to use later (after "ping" prob). Should be private
  * @var string  */
 var $server;
 /* Port on remote server. Should be private
  * @var int  */
 var $port;
 /* Account we're going to check.
  * @var string  */
 var $account;
 /* Status. Should be private
  * @var bool  */
 var $status;

 /* Constructor
  * @param string $account
  * @return checkMSN  */
 function __construct($account) {
    $this->account = $account;
 }

 /* Probe if a server is up and if it's responding within 1s.
  * @return bool true if we find one server. Else false, with error message. */
 function ping() {

  $a_servs = array (
  '83.142.226.228',
  '217.8.135.183',
  '210.169.107.134',
  '69.72.168.157',
  '66.177.205.6');

  $a_port = array ('81',
  '54345',
  '8000',
  '80',
  '8000');

  $nb = count($a_servs);

  // let's check
  for($i=0;$i<$nb;$i++) {

   // "ping"
   $sock = @fsockopen($a_servs[$i],$a_port[$i],$errno,$errstr,1);
   if($sock) {
    $this->server = $a_servs[$i];
    $this->port = $a_port[$i];
    return true;
   } //end sock test
   @fclose($sock);
  }
  // if all servers are down
  echo '<p>Sorry, all servers are currently down !</p>';
  return false;
 }

 /* Get user status. It first uses $this->ping() to find a good server, then grab status
  * @return bool true if we have a status.  */
 function getStatus() {
  if($this->ping()) {
   $url = $this->server.':'.$this->port.'/msn/'.$this->account;
   $curl = curl_init($url);
   curl_setopt($curl, CURLOPT_URL, $url);
   curl_setopt($curl, CURLOPT_HEADER, 1);

   ob_start();
   curl_exec($curl);
   $sta = ob_get_contents();
   curl_close($curl);
   ob_get_clean();

   if (preg_match('/online.gif/i',$sta)) {
    $this->status = 1;
   }
   elseif(preg_match('/unknown.gif/i',$sta)) {
    $this->status = 2;
   } else{
    $this->status = 0;
   }
   return true;
  } else {
   return false;
  }
 }

 /* Just give us the status.
  * @return bool true if online  */
 function isOnline() {
  if($this->getStatus())
  return ($this->status == 1);
 }

}

Пример использования:

 $msn = new checkMSN('ddddd@hotmail.com');
 print($msn->isOnline());

.