en de fr es ja it pt

3 декабря 2012 г.

Отслеживание билетов РЖД

Задача: отследить появление в продаже РЖД билетов по заданным параметрам
Решение: скрипт на Perl'e (тут просто выводятся возможные варианты, придется дописать проверку наличия нужного вам). Использую `wget` для получения страницы, почему не Lwp::useragent например - не знаю :)

#!/usr/local/bin/perl
use strict;
 
my $from = "Москва";
my $to = "Волгоград";
my @dates = ("30.12", "29.12");
 
 
# url_encode
$from =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
$to =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
 
sub check {
  my $date = shift;
  my $data = `wget -qO - "http://pass.rzd.ru/pass/public/pass?STRUCTURE_ID=735&date=
$date&schd_id=1&action=submit&src=$from&layer_id=4922&dst=$to"`
; my @result; while($data=~/<tr>\s*<td style="text-align: left" width="80">(.*?)<\/tr>/sg) { my $tdata = $1; $tdata=~/id="sl_train" value="(.*?)"/; my $num = $1; my @types; while($tdata=~/td title='(.*?)'/g) { push @types, $1; } push @result, ($num." ($date)= ".join(",", @types)); } return @result; }   my @all; foreach my $date (@dates) { push @all, check($date); }   print join("\n", @all);

С помощью скрипта в течении суток было найдено 2 неплохих билета, а сегодня утром один полностью меня удовлетворяющий. Я настроил оповещение по SMS (см. предыдущий пост) оставил скрипт запускаться раз в минуту до первого успеха.

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

Отправить комментарий