#!/usr/bin/perl

# ラノベの杜（http://ranobe-mori.net/db/）からダウンロードしたtsvファイルにメディアワークスから取得したあらすじを追加する。
# ダウンロードしたtsvファイルは文字コードをUTF-8に変換しておくこと。
# perl get_amazon_data.pl input_file > output_file

use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Cookies;
use Encode qw/decode/;
use Encode qw/encode/;
use utf8;

my $ua = LWP::UserAgent->new(agent => "Mozilla/5.0");
my $cookie_jar = HTTP::Cookies->new(file => "cookie.txt", autosave => 1, ignore_discard => 1);
$ua->cookie_jar($cookie_jar);

open IN, "$ARGV[0]" or die;
while (<IN>) {
	my $line = decode('UTF-8', $_);
	chomp $line;
	my @data = split /\t/, $line;
	my $isbn = $data[5];

	# ISBNからメディアワークスの検索結果ページを取得する。
	my $url = 'http://asciimw.jp/search/mode/search/series/0000/freeword/' . $isbn;
	sleep(3);
	my $content = &get_content($url);
	$content =~ s/\n//g;
	if ($content =~ /<A href="(\/search\/mode\/item\/cd\/.*?)">/) {
		$content = $1;
	} else {
		$content = '';
		print encode('UTF-8', "$line$content\n");
		next;
	}

	# 検索結果から書籍別ページを取得する。
	my $url2 = 'http://asciimw.jp/' . $content;
	sleep(3);
	my $content2 = &get_content($url2);
	$content2 =~ s/\n//g;
	$content2 =~ s/.*<div id="library".*?<DIV[^>]+>.*?<div>(.*?)<\/div>.*/$1/;
	if ($content2 =~ /<FONT style="font-size:13px;line-height:140%;">(.*?)<\/FONT>/) {
		$content2 = $1;
	} else {
		$content2 = '';
	}
	$content2 =~ s/<br>//ig;
	$content2 =~ s/？/?/g;
	$content2 =~ s/！/!/g;
	print encode('UTF-8', "$line$content2\n");
}
close IN;

# 指定されたURLのファイルを取得する。
# 取得したファイルの文字コードはShift-JISとする。
# 取得に失敗した場合、10回まで繰り返し、それでも失敗した場合はstatus codeを返す。
sub get_content {
	my $url = $_[0];
	my $req = HTTP::Request->new(GET => $url);
	$req->content_type('text/html');
	my $res = '';

	for ( my $i = 1; $i <= 10; $i++ ) {
		$res = $ua->request($req);
		if ($res->code == 200) {
			my $content = $res->content;
			$content = decode('shiftjis', $content);
			return $content;
		}
		sleep(10);
	}

	my $code = $res->code;
	return "$code";
}

