#!/usr/bin/perl
use Unicode::Japanese;
$s = new Unicode::Japanese;
#〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
#〓
#〓 楽天API版 アフィリエイトプログラムPerl Ver1.0.0
#〓
#〓 Copyright (C) 2006-2007 るびねっと All Rights Reserved.
#〓
#〓
#〓 ■必要ファイル
#〓 index.cgi(755)
#〓 |-- data(755)
#〓 |-- 000〜999.dat(644) ENCODE:EUC
#〓 |-- init.dat(666)
#〓
#〓
#〓〓〓〓〓〓〓初期設定01 [START] 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
$engnurl = "http://r4.41item.com" ; # サイトURL -- 最後のスラッシュは含めないで下さい
$sitename = "人気激安商品を検索出来ます。41item!" ; # サイトタイトル
$desc_kk = "$sitename 人気のインターネットでの検索ワードを参考に人気商品を紹介してます。" ; #サイトTOPのdesc
$h1_title = "$desc_kk";
$raku_ad = qq{
}; #ランキングは動画でチェック
$tabele_title01 = qq{ 人気ワード };
$tabele_title02 = qq{ ランキング};
$tabele_title03 = qq{人気ページ};
$sub_desc ="${mykeyword}関連紹介「$sitename」"; #サブページのDescription
$sub_td_atama =qq{$h1_title};
$donna_keyword = "キーワード";
$kensaku_mado =qq{
};
#〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
#━━━━━━━━━━━━━━━━━━━━━━━ 初期設定02 [START] ━━━━━━━━━━━━━━━━━━━━━━━━
# 初期設定は必ずこちらで変更を行って下さい
#
$name1 = "shop" ; # アドレスの第一階層の名前を指定して下さい
$name2 = "num" ; # アドレスの第二階層の名前を指定して下さい
$name3 = "index" ; # アドレスの第三階層の名前を指定して下さい
$hitnum = "10" ; # 1ページあたりの取得件数( 1-30までの整数 )
$maxdat = "100" ; # datファイルの最高 -- ○○○.datの最高数字(頭の0は含まない)
$mykeynum = "2" ; # titleを取得する番号 1なら一番上の検索結果がtitleとなる( 1-$hitnum+1までの整数 )
$encode = "EUC-JP" ; # 標準文字コード -- 必要がなければ変更しないで下さい
$user_id = "06126766.a40a1c1a" ; # ランキング使用時の旧楽天ID
$form_id = "0632b076.efeaffa8" ; # 検索フォーム時のID
$affileID = "05027546.972ca7af.05027547.553fd4f6" ; # ウェブサービス用アフィリエイトID -- このIDにポイントが付加されます
$developID1 = "7301132604a14e366f51422392aefcfd" ; # ウェブサービス用デベロップID1 -- 重複を防ぐためユニークなIDを使用して下さい
$developID2 = "d51cf61a5b401109214c9d7f8f22f36e" ; # ウェブサービス用デベロップID2 -- 重複を防ぐためユニークなIDを使用して下さい
$list_text = "ランキング" ; # TOPページリンク文字
$randflag = "1" ; # SUBページのメニュー表示 0:ランダム表示なし 1:ランダム表示あり
$etcurl = "" ; # imageファイルやCSSなどを別場所に設置している場合にはそのURLを指定して下さい
# ( 同じ場所に設置している場合には空のままにしておいて下さい )
if( $etcurl eq "" ){ $etcurl = $engnurl ; }
$js = $etcurl. "/style/std.js" ; # jsファイルへのパスを指定して下さい
$css = $etcurl. "/style/base.css" ; # cssファイルへのパスを指定して下さい
$no_gif = $etcurl. "/images/no.gif" ; # no_image画像へのパスを指定して下さい
$prev = $etcurl. "/images/prev.gif" ; # prev画像へのパスを指定して下さい
$next = $etcurl. "/images/next.gif" ; # next画像へのパスを指定して下さい
$footnikakuyo = qq{
このサイトにつきまして・・・$sitenameは、$donna_keywordを元に日本最大級 楽天市場の商品を紹介するページです。データの取得に楽天ウェブサービスを利用しております。ご安心してサイト閲覧をお楽しみ下さい。
};
#━━━━━━━━━━━━━━━━━━━━━━━━ 初期設定 [END] ━━━━━━━━━━━━━━━━━━━━━━━━
#〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
#━━━━━━━━━━━━━━━━━━━━━━━━ Main[START] ━━━━━━━━━━━━━━━━━━━━━━━━━
#********************************************************
#問い合わせオブジェク作成
use CGI;
use LWP::Simple;
my $q = new CGI;
#********************************************************
#POSTデータ取得
$catenum = $q->param('catenum');
$cateidx = $q->param('cateidx');
$pagenum = $q->param('pagenum');
#********************************************************
#不正なアドレスはエラー表示
if ($catenum eq ""){ &ERROR ; exit ; }
#********************************************************
#developIDの連続使用を回避
open FH, "+ ;
if( $lastdevID eq $developID1 ){ $developID = $developID2 ; } else { $developID = $developID1 ; }
truncate( FH , 0 ) ;
seek( FH , 0, 0);
print FH "$developID" ;
close FH ;
#********************************************************
#HTML 出力開始
if ($catenum eq "top" ){ &toppage ;
} else { &subpage ; }
exit;
#〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#━━━━━━━━━━━━━━━━━━━━━━━ SKIN ━━━━━━━━━━━━━━━━━━━━━━━━━━━
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
sub PrintSkin{
$item_body .= <
販売・・・$shopnm
$price円
( $tax $post )
$itemdetail
ItemSkin
}
#〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#━━━━━━━━━━━━━━━━━━━━━━━ TOPPAGE ━━━━━━━━━━━━━━━━━━━━━━━━━━━
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
sub toppage{
#********************************************************
# index.ctgファイル読み込み
$rancate = int(rand($maxdat-1)) + 1 ;
if( length($rancate) == 1 ){
$rancate = "00" .$rancate ;
} elsif( length($rancate) == 2 ){
$rancate = "0" .$rancate ;
}
my $index_ctg = "./data/${rancate}.dat" ;
my $index_idx = 0 ;
my $rancount = 0 ;
my @index_data = ();
open( IN, $index_ctg ) or &ERROR ;
while(){
$line = $_;
chop($line);
$index_idx = $index_idx + 1;
$randnum = int(rand(4)) ;
if( $randnum == 0 ){
$cate_menu .= "" .$line. "\n" ;
$rancount += 1 ;
}
}
if( $rancount == 0 ){
$cate_menu = "" .$line. "\n" ;
}
close(IN);
for( $z=1; $z<=$maxdat; $z++ ){
if( length($z) == 1 ){
$datnum = "00" .$z ;
} elsif( length($z) == 2 ){
$datnum = "0" .$z ;
} else {
$datnum = $z ;
}
$list_menu .= "${list_text}${datnum}位" ;
}
#********************************************************
# タイトルタグ セット
$title = $sitename ;
$desc = "$desc_kk" ;
$keyw = "" ;
&PrintRanking ;
#********************************************************
#TOPPAGE HTML出力開始
print "Content-type: text/html\n";
print "Charset: " .$encode. "\n\n";
print <
$title
$sitename
$h1_title
$tabele_title03
$list_menu
$tabele_title01
$cate_menu
$Ranking_TOPpage
TOPHTMLBody
&Footer;
print "\n" ;
print "\n" ;
exit;
}
#〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#━━━━━━━━━━━━━━━━━━━━━━━ SUBPAGE ━━━━━━━━━━━━━━━━━━━━━━━━━━━
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
sub subpage{
$linkpage1 = "${engnurl}/${name1}${catenum}/${name2}" ;
$linkpage2 = "${engnurl}/${name1}${catenum}/${name2}${cateidx}/${name3}" ;
&PrintRanking ;
#********************************************************
# index.ctgファイル読み込み
my $index_ctg = "./data/${catenum}.dat" ;
my $rancount = 0;
my $index_idx = 0;
my @index_data = ();
open( IN, $index_ctg ) or &ERROR ;
while(){
$line = $_;
chop($line);
$index_idx = $index_idx + 1;
if( $index_idx == $cateidx ){ $key = $line; }
if( $randflag eq "1" ){ $randnum = int(rand(2)) ; } else { $randnum = 0 ; }
if( $randnum == 0 ){
$menulist .= "" .$line. "\n" ;
$rancount += 1 ;
}
}
if( $rancount == 0 ){
$menulist .= "" .$line. "\n" ;
}
close(IN);
if( $key eq "" ){ &ERROR; exit; }
#********************************************************
# APIに接続
$kword = $key ;
$kword = Unicode::Japanese->new($kword, 'euc' )->utf8;
$kword =~ s/([^\w ])/"%" . unpack("H2", $1)/eg;
$kword =~ tr/ /+/;
$url = "http://api.rakuten.co.jp/rws/1.7/rest"
."?developerId=".$developID
."&affiliateId=".$affileID
."&operation=ItemSearch"
."&version=2007-04-11"
."&keyword=".$kword
."&sort=-updateTimestamp"
."&hits=".$hitnum
."&page=".$pagenum
."&orFlag=0" ;
$data = get($url) ;
$_ = $data ;
( $count ) = m/(.*?)<\/count>/o ;
( $page ) = m/(.*?)<\/page>/o ;
( $first ) = m/(.*?)<\/first>/o ;
( $last ) = m/(.*?)<\/last>/o ;
( $pagecount ) = m/(.*?)<\/pageCount>/o ;
push(@items , $data =~ m/- (.*?)<\/Item>/smg ) ;
#********************************************************
# PageLink
$mycount = 1 ;
$linknum = 10 ;
$prevpage = $pagenum - 1 ;
$nextpage = $pagenum + 1 ;
if( $prevpage < 1 ){ $prev_text = " " ; } else {
$prev_text = "
前へ";
}
if( $nextpage > $pagecount ){ $next_text = " " ; } else {
$next_text = "次へ
";
}
if( $pagenum-$linknum < 1 ){ $startpage = 1 ; } else { $startpage = $pagenum-$linknum; }
for( $i=$startpage; $i<($pagenum+$linknum) ; $i++ ){
if( $i == $pagenum ){
$pagelink .= " " .$i. " " ;
} else {
$pagelink .= " " .$i. " " ;
}
$mycount += 1 ;
if( $mycount > 15 || $i >= $pagecount ){ last ; }
}
$pagelink = $prev_text. " " .$pagelink. " " .$next_text ;
#検索結果が0件の場合は検索フォームを表示
if( $count < 1 || $page > $pagecount ){
$item_body = "※ 残念ですが、該当商品がございません。
お手数ですが違うカテゴリをお選び頂くか、検索窓から商品を再度ご指定下さい。
" ;
$item_body .= '' ;
} else {
$item_body = "全 " .$count. " 点 " ;
$item_body .= "" .$first. " 〜 " .$last. " 件表示中 " ;
$item_body .= "" .$page. " / " .$pagecount. "
" ;
if( $pagecount > 1 ){ $item_body .= $pagelink. "
" ; }
$itemcount = 0 ;
foreach my $value ( @items ){
%item = $value =~ m/<(.*?)>(.*?)<\/\1>/g ;
$product = $item{'itemName'} ;
$product = Unicode::Japanese->new($product, 'utf8' )->euc;
$price = $item{'itemPrice'} ;
$imagel = $item{'mediumImageUrl'} ;
$imageflag = $item{'imageFlag'} ;
$tax = $item{'taxFlag'} ;
$post = $item{'postageFlag'} ;
$shopnm = $item{'shopName'} ;
$shopnm = Unicode::Japanese->new($shopnm, 'utf8' )->euc;
$shopurl = $item{'shopUrl'} ;
$itemdetail = $item{'itemCaption'} ;
$itemdetail = Unicode::Japanese->new($itemdetail, 'utf8' )->euc;
$itemdetail =~ s/ / /g ;
$itemdetail = substr( $itemdetail , 0 , 500 ). "......." ;
$link = $item{'affiliateUrl'} ;
1 while $price =~ s/(.*\d)(\d\d\d)/$1,$2/;
if( $imagel eq "" || $imageflag == "0" ){ $imagel = $no_gif ; }
if( $tax == "0" ){ $tax = "税込" ; } elsif( $tax == "1" ){ $tax = "税別" ; } else { $tax = "" ; }
if( $post == "0" ){ $post = "送料込" ; } elsif( $post == "1" ){ $post = "送料別" ; } else { $post = "" ; }
if( $itemcount < $mykeynum ){ $mykeyword = $product ; }
&PrintSkin ;
$itemcount = $itemcount + 1;
}
if( $pagecount > 1 ){ $item_body .= "
" .$pagelink. "
" ; }
}
#********************************************************
# タイトルタグ セット
$title = "|" .$key. "|" .$mykeyword. "[ " .$sitename. " ]" ;
$desc = $sub_desc ;
$keyw = $mykeyword ;
#********************************************************
# SUBPAGE HTML出力開始
print "Content-type: text/html\n";
print "Charset: " .$encode. "\n\n";
print <
$title
[ $key ] $mykeyword
$sub_td_atama
$raku_ad
$key関連商品の検索結果
$item_body
$kensaku_mado
お勧め
$Ranking_SUBpage
その他お勧めキーワード
SUBHTML
&Footer ;
print "\n" ;
print "\n" ;
exit;
}
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#━━━━━━━━━━━━━━━━━━━━━━━ FOOTER ━━━━━━━━━━━━━━━━━━━━━━━━━━━
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
sub Footer{
print <' ;
$Ranking_SUBpage = '' ;
}
#━━━━━━━━━━━━━━━━━━━━━━━ エラー表示 ━━━━━━━━━━━━━━━━━━━━━━━━━━
sub ERROR{
print "Content-type: text/html\n";
print "Charset: " .$encode. "\n\n";
print "\n";
print " \n";
print "\n";
print "\n";
print "\n";
print "\n";
print "\n";
print "\n" ;
print "ERROR\n";
print "\n";
print "
無効なアドレスが入力されました。お手数ですが、再度URLをご確認下さい。
\n" ;
print "\n" ;
exit ;
}