Изпращане и получаване на съобщения по ICQ чрез PHP. Използване и приложение на класа WebIcqLite
Тук ще се занимаем с изпращане и получаване на съобщения до/от ICQ абонати. Това е един много полезен начин за комуникация с различни приложения. Много хора просто държат пуснат своя ICQ клиент през целия ден, като не се изисква да се логват всеки път, както е при повечето безплатни услуги за електронна поща. Това дава един лесен и бърз начин за разпространение на бюлетини (newsletter) и други подобни приложения. Разбира се не трябва да се злоупотребява с това като се изпращат спам съобщения.
PHP класът WebIcqLite
Тъй като няма вградени функции за работа с ICQ в PHP, ще използваме класа WebIcqLite. Той може да бъде свален от http://intrigue.ru/workshop/php2icq.html (адресът на сорса е http://intrigue.ru/projects/icq/WebIcqLite.class.phps). Работи с реален ICQ акаунт, така че първото, което трябва да се направи, е да се регистрира един нов. Регистрацията може да стане оттук https://www.icq.com/register/ и е напълно безплатна.
Ето и описание на някои по-важни членове:
$error - променлива, която съдържа грешката от последната операция
connect($uin, $pass)
Опитва се да се регистрира в мрежата. При успех връща true, при неуспех - false и записва грешката $error.
get_message()
Изчаква до получаването на ново съобщение. При неуспех връща false, при успех връща масив с 2 елемента: елементът с индекс 'from' съдържа номера на изпращача, а този с индекс 'message' - самото съобщение.
Пример:
$mess=$icq->get_message();
echo "Received ".$mess['message']." from ".$mess['from'];
send_message($uin, $message)
Изпраща съобщението $message до абоната с номер $uin. Отново при успех връща true, а при неуспех - false и грешката в $error.
disconnect()
Прекратява текущата сесия.
Една важна особеност
Има една особеност. Ако решите да изпращате съобщение на кирилица, то трябва да е кодирано в windows-1251 charset.
Приложение 1: Бюлетин (newsletter)
Ето един оригинален начин за разпращане на бюлетин - не по поща (където все по-често минава в графа "спам"), а по ICQ. Тук трябва да отбележим няколко особености. Първо сървърите имат ограничение на опитите за свързване и изпратените съобщения. Затова е важно при едно стартиране на скрипта да се изпратят съобщенията до всички получатели, както и те да са през известен интервал от време. Ето и целия код:
<?php
require "WebIcqLite.class.php";
$username='1234567890'; // променете данните с тези на вашия акаунт
$password='password';
$newsletter_subscribers=array(
'11111111', '22222222', '333333333' // тук е списъкът на получателите
);
$newsletter_text='Check out the new ICQ article at http://ustrem.org/'; // текстът на съобщението
$icq = new WebIcqLite();
if(!$icq->connect($username, $password))
{
die($icq->error);
}
foreach ($newsletter_subscribers as $subscriber)
{
$result=$icq->send_message($subscriber, $newsletter_text);
if (!$result)
{
echo "\nCannot send to $subscriber, reason: ".$icq->error;
}
else
{
echo "\nSent to $subscriber";
}
sleep(30);
}
$icq->disconnect();
?>
Приложение 2: Възстановяване на загубена парола
Наистина това е досаден и сложен процес както за потребителя, така и за администратора. Отнема много време и е свързано с изпращане на писма и въвеждане на кодове и т.н. Но ако потребителят е регистрирал своят ICQ номер (и разбира се се доверявате на ICQ системата), това може да стане чрез едно съвсем просто съобщение:
<?php
ignore_user_abort(true);
set_time_limit(0);
require "WebIcqLite.class.php";
$username='1234567890'; // променете данните с тези на вашия акаунт
$password='password';
$icq = new WebIcqLite();
if(!$icq->connect($username, $password))
{
die($icq->error);
}
// реализирайте по свой начин тази функция, така че да връща паролата на потребителя по подаден ICQ номер
function get_password_for_icq_number($str)
{
return $str;
}
while ($message=$icq->read_message())
{
$password=get_password_for_icq_number($message['from']);
if ($password)
{
$icq->write_message($message['from'], 'Your password is '.$password);
}
else
{
$icq->write_message($message['from'], 'This ICQ number is not registered');
}
}
?>
Малко пояснения тук. Тъй като този скрипт трябва да е непрекъснато пуснат, за да работи, то не може да бъде използван през уеб сървър. Най-добре е да бъде стартиран директно на машина с инсталирано PHP. Това става лесно под Windows или Linux, като се зададе следната команда:
>php ime_na_faila.php
Функциите ignore_user_abort() и set_time_limit() гарантират, че скрипта няма да бъде прекратен поради timeout.
Приложение 3: Автоматичен отговор (Auto responder)
Ето едно малко по-сложно приложение. Това е един скрипт за автоматичен отговор, който дава различни резултати за различните податели. Естествено могат да се реализират и много по-сложни логики и да се постигне нещо от типа на IRC ботовете. Нека обаче се върнем на нашия пример (той е доста подобен на горния и също е добре да се стартира директно):
<?php
ignore_user_abort(true);
set_time_limit(0);
require "WebIcqLite.class.php";
$username='1234567890'; // променете данните с тези на вашия акаунт
$password='password';
$message1='I am not at home';
$message2='I am at John\'s. Meet you there';
$message2_recipients=array('11111111', '22222222');
$icq = new WebIcqLite();
if(!$icq->connect($username, $password))
{
die($icq->error);
}
while ($message=$icq->read_message())
{
if (in_array($message['from'], $message2_recipients))
{
$icq->write_message($message['from'], $message2);
}
else
{
$icq->write_message($message['from'], $message1);
}
}
?>
Оттук нататък може да създавате собствени приложения с произволно предназначение. Класът WebIcqLite е лесен за употреба и с облекчен интерфейс.
Няма коментари
Обратно към списъка със статиите
Тази страница последно е променяна на 2025-04-30 08:01:37