Изпращане и получаване на съобщения по 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 е лесен за употреба и с облекчен интерфейс.

Няма коментари

Обратно към списъка със статиите

Тази страница последно е променяна на 2024-04-25 06:53:19