姫路図書館カテゴリ別新着書籍情報を取得し、Gmail送信するPerlスクリプト
@list 部分の数字がカテゴリを指す。
情報が欲しいカテゴリの数値を@listの配列に指定する。
カテゴリ毎の新着書籍情報がメールで送信される。
0. 日本の文学
- その他の日本文学
- 外国の文学
- 歴史・伝統・地理
- 政治・法律・軍事
- 経済・統計
- 社会・教育・民族
- 自然科学・医学
- 技術・工学・工業
- 家庭・家事・育児
- 芸術・スポーツ
- その他の一般書
#!/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); }