#!/usr/bin/perl use strict; use URI::Escape; use LWP::UserAgent; use Jcode; use Boofy::Main; use Boofy::Login; use Boofy::Query; use Boofy::Item; use Boofy::String qw(tune_html tune_form); use Boofy::HTML qw(make_page make_option_sort_arr make_page_number); use Boofy::Config qw(REVIEW_PER_PAGE); use Encode; use Encode::Guess; #------------------------------------------------------------------------------ # FUNCTIONS #------------------------------------------------------------------------------ ##Set User Agent sub set_user_agent { my ($ua) = @_; return {} if !$ua; $ua->timeout(2); return $ua; } sub show_main { my ($qr, $tpl, $href) = @_; my %v = ref($href) ? %{ $href } : (); my @category = grep { $_->{id} != 19 } $qr->make_array_sort("item_category"); $tpl->param("category_option", make_option_sort_arr("指定なし", $v{category_id}, \@category)); } sub show_review { ## Vars my ($tpl, $href, $category_name) = @_; my %v = ref($href) ? %{ $href } : (); ## in form my $encode; if ($v{keyword}) { eval { my $enc = guess_encoding($v{keyword}, qw/euc-jp shiftjis 7bit-jis utf8/); my $decode = decode($enc->name, $v{keyword}); $encode = encode("euc-jp", $decode); }; if (!$@) { $v{keyword} = $encode; } } $tpl->param("keyword", tune_form($v{keyword})); my $safe_keyword = uri_escape($v{keyword}); $tpl->param("keyword_url", $safe_keyword); $tpl->param("sort_name", $v{sort}); my $ua = LWP::UserAgent::->new(); $ua = set_user_agent($ua); my $content = $ua->get("http://mxi000.goo.ne.jp/mixi/search_review.php?keyword=$safe_keyword&category_id=$v{category_id}&sort=$v{sort}&page=$v{page}"); return undef if !$content; if ($content->is_error) { return 1; } my @item_id = split(/\n/, $content->{_content}); my $search_num = shift(@item_id); my @loop; my $j = Jcode::->new(); foreach my $id (@item_id) { if ($id =~ /\D/) { die "warning return item_id from goo"; } my %loop; my $it = Boofy::Item::->new(item_id => $id); $it->prepare_data(); $loop{item_name} = tune_html($it->get_name()); $loop{total_review} = $it->get_review_count(); $loop{link_name} = $it->get_link_name(); my $item_sth = $it->get_last_review(); my $item_row = $item_sth->fetchrow_hashref(); $loop{date} = $item_row->{date}; $loop{time} = $item_row->{time}; my $item_details = $item_row->{details}; $item_details =~ s/[\r\n]//g; $j->set($item_details); my @details = $j->jfold(36); my $details = join("\n", ($details[0], $details[1], $details[2])); $loop{details} = tune_html($details); my $sub_id = $it->get_sub_id(); $loop{item_photo} = $it->multi_get_photo($sub_id); $loop{view_item_link} = "view_item.pl?id=$id"; $loop{details_link} = $it->multi_get_link($sub_id); my $category_id = $it->get_category_id(); $loop{category} = tune_html($category_name->{$category_id}); if ($category_id == 19) { $loop{is_cannot_review} = 1; } push(@loop, \%loop); } $tpl->param("review_loop", \@loop); $tpl->param("sort_review_link", "search_review.pl?keyword=$safe_keyword&category_id=$v{category_id}&sort=review&page=1&submit=result"); $tpl->param("sort_new_link", "search_review.pl?keyword=$safe_keyword&category_id=$v{category_id}&page=1&submit=result"); $tpl->param("sort", $v{sort}); $tpl->param("total", $search_num); ## Page my %param = ( keyword => $v{keyword}, category_id => $v{category_id}, sort => $v{sort}, submit => $v{submit} ); my $page_link = make_page( page => $v{page}, count_row => $search_num, per_page => 30, url => "search_review.pl", param => \%param ); if ($search_num) { $tpl->param("page_link", $page_link); my $page_number = make_page_number(count => $search_num, per_page => 30, link => "search_review.pl", page_now => $v{page}, param => \%param); $tpl->param("page_number", $page_number); } } sub select_category_name { my ($dbh) = @_; my $sth = $dbh->prepare("SELECT id, name FROM item_category"); $sth->execute(); my %name; while (my $row = $sth->fetchrow_arrayref()) { $name{$row->[0]} = $row->[1]; } return \%name; } sub check_vars { my ($href) = @_; my %v = $href ? %{ $href } : (); my @number_var = ( "category_id", "page" ); foreach (@number_var) { if ( $v{$_} && $v{$_} =~ /\D/ ) { return undef(); } } if ($v{sort} && $v{sort} !~ "review") { return undef(); } if ($v{submit} && $v{submit} !~ "result") { return undef(); } return 1; } #------------------------------------------------------------------------------ # MAIN #------------------------------------------------------------------------------ my $mn = Boofy::Main::->new(); my $cgi = $mn->load_cgi(); my $dbh = $mn->load_dbh(); my $dba = $mn->load_dba(); my $lg = Boofy::Login::->new($cgi, $dbh); my $qr = Boofy::Query::->new($dbh); ## Login my $member_status = $lg->get_member_status(); my $member_id = $member_status->{id}; my $member_type = $member_status->{type}; if (!$member_id) { $lg->show_login($mn); exit; } my %v = $cgi->Vars(); $v{page} = $cgi->url_param("page") || 1; my @key = ("sort", "keyword", "category_id", "submit"); foreach (@key) { $v{$_} ||= $cgi->url_param("$_"); } ## Block if (!check_vars(\%v)) { my $tpl = $mn->load_tpl("header.tmpl"); $mn->show_header(); $mn->show_alert(); print $tpl->output(); exit; } my @key = ("sort", "keyword", "category_id"); foreach (@key) { if ($v{$_}) { $v{$_} =~ s/[\n\r]//g; } } ## Display my $category_name = select_category_name($dbh); if ($v{submit}) { my $tpl = $mn->load_tpl("search_review_main.tmpl"); my $is_error = show_review($tpl, \%v, $category_name); if ($is_error) { my $tpl = $mn->load_tpl("header.tmpl"); $mn->show_header(); $mn->show_alert("只今混み合っております。しばらくたってから再度検索してください。"); print $tpl->output(); exit; } $mn->show_header(cache => 1); $mn->show_banner($member_id); $mn->show_premium($member_type); show_main($qr, $tpl, \%v); if ($v{category_id} == 8) { $tpl->param("category_8", 1); } print $tpl->output(); } else { my $tpl = $mn->load_tpl("search_review_main.tmpl"); $mn->show_header(cache => 1); $mn->show_banner($member_id); $mn->show_premium($member_type); show_main($qr, $tpl, \%v); if ($v{keyword}) { my $encode; eval { my $enc = guess_encoding($v{keyword}, qw/euc-jp shiftjis 7bit-jis utf8/); my $decode = decode($enc->name, $v{keyword}); $encode = encode("euc-jp", $decode); }; if (!$@) { $v{keyword} = $encode; } } my $safe_keyword = uri_escape($v{keyword}); $tpl->param("keyword_url", $safe_keyword); $tpl->param("sort_name", $v{sort}); $tpl->param("sort_review_link", "search_review.pl?keyword=$safe_keyword&category_id=$v{category_id}&sort=review&page=1&submit=result"); $tpl->param("sort_new_link", "search_review.pl?keyword=$safe_keyword&category_id=$v{category_id}&page=1&submit=result"); if ($v{category_id} == 8) { $tpl->param("category_8", 1); } print $tpl->output(); }