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. Теперь вместо того чтобы записывать речь контакта, мы ему сами воспроизводим файл для прослушивания.
Резюме.
Все довольно просто. Теперь вы можете написать программу для обзвона клиентов с предложением заплатить по долгам, купить ваш продукт по обзвону, и т.п.



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