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

18 октября 2011 г.

Не так давно захотелось реализовать вывод новых сообщений Вконтакте на рабочий стол. Выбор пал на 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.
Теперь можно смело запускать и ставить в автозагрузку.

Теги: рубрика Программирование
  • Похожие статьи
  • Предыдущие из рубрики