Играемся со Skype из Perl (SkypeAPI)

| Нет комментариев | Нет трекбэков

Skype давно уже открыл свой API для сторонних разработчиков. Написано уже масса библиотек для работы с его протоколом для разных языков. Что нам может предложить perl по этому поводу?

Порыскав на cpan, нашел всего лишь 1 модуль - SkypeAPI для поставленной задачи (работа с протоколом Skype). Но это «ВСЕГО ЛИШЬ» преждевременно, как будет рассмотрено ниже - этот модуль покрывает основную часть наших потребностей работы со Skype.

Посмотрев скромную документацию по модулю, а также попытавшись разобраться в иероглифах (сайт с DEMO ROBOTS) - понял что надо идти своим путем, то есть читать документацию по API на сайте skype и проверять все на практике.

Итак, начнем...

Прежде чем что-либо писать дальше, скажу сразу, что данный модуль работает только под Windows (пока... к сожалению). Так что наша тестовая среда (в моем случае) Windows XP SP3, ActivePerl 5.8.9, Skype 3.8.

Наверное, первый вопрос, который мне зададут - как это будет работать и зачем установленный Skype на компьютере? Как всегда в вопросе - половина ответа. Скрипт на perl работает через установленный клиент Skype, использует текущий аккаунт, который использует Skype на этом компьютере, и совершает все действия от имени этого аккаунта.

Получение статуса пользователя.

Начнем с очень простой задачи - получение информации о текущем пользователе, получение его статуса и изменение его статуса:

   1    #!/usr/bin/perl -w
   2    use strict;
   3    use SkypeAPI;
   4    
   5    my $skype = SkypeAPI->new();
   6    if( $skype->attach ) {
   7    my $command = $skype->create_command( { string => "GET USERSTATUS"}  );
   8    print $skype->send_command($command) , "\n";
   9    print "Now go away\n";
  10    # переведем клиента в статус Нет на месте :)
  11    $command = $skype->create_command( { string => "SET USERSTATUS AWAY"}  );
  12    print $skype->send_command($command) , "\n";
  13    }
  14    else {
  15      print "Please, install Skype on PC and login\n";
  16      exit;
  17    }

Поясню что происходит в этом скрипте, чтобы дальше вам было проще понимать суть происходящего.

Создаем объект для работы с модулем через вызов new.

Подключаемся к клиенту Skype через вызов метода attach (при этом ваш Skype должен выдать предупреждение о том, что программа perl.exe пытается получить доступ к Skype, вы должны разрешить ей это сделать).

Вся остальная работа возлагается фактически на два метода модуля SkypeAPI, Это:

create_command - создает команду на основании переданного значения для string

send_command - передает созданную команду клиенту, и возвращает ответы. Вывод можно сразу отправлять на print или сохранять в любых переменных perl.

Фактически на этом работа с perl завершена и дальше уже будет только работа с командами SkypeAPI, поэтому дальнейшие примеры я буду приводить только в части отправки и обработки команд для SkypeAPI.

Отправляем текстовое сообщение.

# отправляем текстовое сообщение 
$command = $skype->create_command( { string => "CHAT CREATE user_vasya"}  ); 
my (@a)=split(/ /,$skype->send_command($command));#$a[1] - CHAT ID 
my $i=0; 
# слегка поспамим :0) 
while($i<2) { 
$command=$skype->create_command( {string=> "CHATMESSAGE $a[1] Вот так вот"}); 
print $skype->send_command($command) , "\n";
$i++; 
} 

 

В строке 3 мы извлекаем результат выполнения команды в массив, для того чтобы извлечь CHAT ID (уникальный идентификатор созданного чата). Вы можете вынести это в какую-либо функцию, я для примера не стал заморачиваться с элегантностью решения.

CHAT CREATE user_vasya - создает новый чат для отправки сообщений пользователю user_vasya

CHATMESSAGE CHAT_ID Сообщение без кавычек будет передано в чат как есть. - эта команда отправляет в указанный по ID чат все слова написанные после CHAT ID

Звоним, записываем...

# делаем звонок 
$command = $skype->create_command( { string => "CALL user_vasya"}  ); 
my (@a)=split(/ /,$skype->send_command($command));# $a[1] <- ID 
# запись сообщений 

my $cmd=qq(ALTER CALL $a[1] SET_OUTPUT file="d:\\123.wav" SOUNDCARD="default");

$command = $skype->create_command( { string =>$cmd} );

print $skype->send_command($command) , "\n";

 

В данном примере мы позвонили контакту user_vasya (кстати на стационарные телефоны также можем звонить при наличии положительного баланса в Skype, только не забывайте о формате номера +74951234545 (пример для Москвы)). После того как контакт ответил - записываем всю его речь в файл 123.wav на диске d:\ :- ). Так же указываем использовать звуковую карту по умолчанию, это важно!

Звоним, вещаем...

 # отправка сообщений 
 my $cmd=qq(ALTER CALL $a[1] SET_INPUT file="d:\\123.wav" SOUNDCARD="default"); 
 print $cmd,"\n"; 
 $command =   $skype->create_command( { string => $cmd}  ); 
 print $skype->send_command($command) , "\n" 

В данном примере все тоже самое, что и в предыдущем, за исключением команды SET_INPUT. Теперь вместо того чтобы записывать речь контакта, мы ему сами воспроизводим файл для прослушивания.

Резюме.

Все довольно просто. Теперь вы можете написать программу для обзвона клиентов с предложением заплатить по долгам, купить ваш продукт по обзвону, и т.п.

Нет трекбэков

URL для трекбэков: http://perlmonks.org.ru/cgi-bin/MT/engine/mt-tb.cgi/32

Комментировать

Об этой записи

Сообщение опубликовано 21.10.2009 16:02. Автор — Monks.

Предыдущая запись — Работаем с CGI::FormBuilder

Следующая запись — Новая книга: Perl, memcached, MySQL, Apache

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.

Страницы


 


 

Page copy protected against web site content infringement by Copyscape