姫路図書館カテゴリ別新着書籍情報を取得し、Gmail送信するPerlスクリプト

@list 部分の数字がカテゴリを指す。
情報が欲しいカテゴリの数値を@listの配列に指定する。
カテゴリ毎の新着書籍情報がメールで送信される。

0. 日本の文学

  1. その他の日本文学
  2. 外国の文学
  3. 歴史・伝統・地理
  4. 政治・法律・軍事
  5. 経済・統計
  6. 社会・教育・民族
  7. 自然科学・医学
  8. 技術・工学・工業
  9. 家庭・家事・育児
  10. 芸術・スポーツ
  11. その他の一般書
#!/usr/bin/perl 

use strict;
use warnings;
use URI;
use Encode;
use Web::Scraper;
use Email::Send;
use Email::Send::Gmail;
use Email::MIME;
use Email::MIME::Creator;
use Config::Pit;
use Encode;
use Data::Dumper;

my $config = pit_get("gmail.com");
my $scraper = scraper {
		process '//table[6]/tr', 'list[]' => scraper {
			process '//td[1]', 'title' => 'TEXT',
			process '//td[2]', 'author' => 'TEXT',
			process '//td[3]', 'publish' => 'TEXT',
		}
};

my @list = ( 5, 8, 11);
foreach my $list_item (@list) {
	my $url = 'https://www.library.city.himeji.hyogo.jp/cgi-bin/Sopcssin.sh?p_mode=1&g_mode=0&ryno=&c_key=&c_date=&proc=sin&sub=tso&zkr=&nyo=on&tso=on&ksno=&kgrn=&list_cnt=20&mad_list_cnt=&hit_cnt=&idx=1&page_idx=&sort=&dtsl=&sndc='. $list_item . '&session=&sfname=&trkn=AL&mode=S';
	my $uri = URI->new($url);
	my $result = $scraper->scrape($uri);
	my @contents;
	push(@contents, $url);
	foreach my $item (@{ $result->{list} }) {
		push(@contents, '>>'. $item->{title});
		push(@contents,  $item->{author});
		push(@contents,  $item->{publish});
	}
	my $contents = join("\n", @contents);
	&sendmail($config,$contents);
}
	
sub sendmail {
	my ($config, $contents) = @_;
	my $email = Email::MIME->create(
		header => [
			From => $config->{username},
			To => $config->{mobile_mail},
			Subject => encode('MIME-Header-ISO_2022_JP', 'HimejiLibraryNew'),
		],
		attributes => {
			content_type => 'text/plain',
			charset => 'utf-8',
			encoding => 'base64',
		},
		body_str => $contents,
	   );
	
	my $sender = Email::Send->new({
		mailer => 'Gmail',
		mailer_args => [
			username => $config->{username},
			password => $config->{password},
		]
		}
	);
	
	$sender->send($email);	
}