Bash и оповещения Вконтакте

Доброго времени суток!
Не так давно захотелось реализовать вывод новых сообщений Вконтакте на рабочий стол. Выбор пал на Conky и на всплывающие сообщения. Сегодня остановимся на втором способе. Данная статья будет ориентирована на новичков.
(Что мы получим в конце статьи)


Прежде всего ставим notify-send (при отсутствии библиотек):
sudo apt-get install libnotify-bin

Теперь создаем скрипт такого содержания:
#!/usr/bin/perl

use LWP::UserAgent;
use HTTP::Cookies;
use Text::Iconv;

$mail = ' ';
$pass = ' ';

$browser = LWP::UserAgent->new();
$browser->agent('Mozilla/5.0');
$cookie = HTTP::Cookies->new(); 
$browser->cookie_jar($cookie);

$win2utf = Text::Iconv->new('windows-1251','utf-8');

$auth = $browser->get("http://login.vk.com/?act=login&email=$mail&pass=$pass&from_host=vk.com")->as_string;
die("Ошибка авторизации\n") if $auth =~ /reg/;

sub parse
{
	$dat = $browser->get("http://vk.com/mail")->as_string;
	
	if($dat =~ /mail_body"><a  href="\/mail\?act=show&id=(\d*)" onclick="return nav.go\(this, event\);"  >(.*)<\/a>/)
	{
		$id = $1;
		$msg = $win2utf->convert($2);
	}
	else
	{
		warn("Не удалось получить сообщение\n");
	}

	$author = $win2utf->convert($1) if $dat =~ /wrapped"><a  href=".*" onclick="return nav.go\(this, event\);" onmousedown="event.cancelBubble = true;">(.*)<\/a>/;
	$img = $1 if $dat =~ /<img src="(http:\/\/(.*))"\/>/ || die;
}

sub notify
{
	system("wget -P ~/ $img");

	$img = $1 if $img =~ /\/((\w+)\.jpg)/;
	$notify = qq(notify-send --expire-time=10000 -i ~/$img \'$author\' \'$msg\');
	
	system($notify);
	system("rm -r ~/$img");
}

if($^O =~ /Win/)
{
	exit();
} 
else
{
       system('clear');
       print "Запуск...\n";
}

while()
{
	parse;
	
	if($id != $last_id)
	{
		notify;
	}

	$last_id = $id;
}

Естественно указываем ваши логин и пароль. Сохраняем скрипт, называем, например, vknotify и кидаем куда-нибудь в /usr/local/bin.
Теперь можно смело запускать и ставить в автозагрузку.
Tags:
Вконтакте, linux, bash scripts, notify-send

You can't comment this post because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author's username will be hidden by an alias.