Регистрация Войти
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Войти через VK Войти через FB Войти через Google Войти через Яндекс
Поиск по сайту
Проверка статуса пользователя в ICQ
Класс позволяет проверить онлайн-статус пользователя в ICQ.
Результат проверки - TRUE, если пользователь в сети, или FALSE - если не в сети.
/**
* According to ICQ website, we can have this kind of picture:
* "http://status.icq.com/online.gif?icq=<account>&img=26"
* As they seems to be some nasty boys and have closed normal approche,
* We have to use sockets (and as it's a bit cold in here, it's
* better with sockets.. well.. ok)
* So, requiered :
* 1- Sockets support for your PHP.
* 2- hmm... that's all :]
*
* @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 checkICQ {
/* Account we want to check.
* @var int */
var $account;
/* Server URL. Should be private.
* @var string */
var $url;
/* Server Port. Should be private.
* @var int */
var $port;
/* User status. Should be private.
* @var bool */
var $status;
/* Time limit for socket connection. Should be private.
* @var int */
var $timelimit;
/**
* Constructor.
*
* @param int $account
* @return checkICQ
*/
function __construct($account) {
$this->account = $account;
$this->url = '205.188.253.25';
$this->port = '80';
$this->timelimit = '5';
}
/* Grab status throug sockets.
* @return bool false if there's an error. */
function setStatus() {
$sock=@fsockopen($this->url, $this->port, $errno, $errstr, $this->timelimit);
if(!$sock) {
echo '<p>Fatal error ! '.$this->url.' returns ('.$errno.') '.$errstr.'</p>';
return false;
}
// our socket is opened, we're warm for the next step!
$request = 'HEAD /online.gif?icq='.$this->account.'&img=5 HTTP/1.0'."\r\n".
'Host: '.$this->url."\r\n".'User-Agent: PHP/ICQ_Status1.5'."\r\nConnection: close\r\n\r\n";
@fputs($sock,$request);
do {
$response = fgets($sock,1024);
} while (!feof($sock) && !stristr($response,"Location"));
$this->status = preg_match("/online1/",$response);
}
/* Return user status
* @return bool true if online */
function isOnline() {
$this->setStatus();
return $this->status;
}
}
Пример использования:
$icq = new checkICQ('123456789'); print($icq->isOnline());
.
Прокомментировать/Отблагодарить