#!/usr/bin/perl use Unicode::Japanese; $s = new Unicode::Japanese; #〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 #〓 #〓 YahooShopping-API版 アフィリエイトプログラムPerl Ver1.0.0 #〓 #〓 Copyright (C) 2006-2007 るびねっと All Rights Reserved. #〓 #〓 #〓 ■必要ファイル #〓 index.cgi(755) #〓 |-- data(755) #〓 |-- 000〜999.dat(644) ENCODE:UTF-8 #〓 #〓 #〓〓初期設定01〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 $engnurl = "http://www.townsshop.com" ; # サイトURL -- 最後のスラッシュは含めないで下さい $sitename = "ショッピング検索タウンズショップ" ; # サイトの名前 $desc_kk = "ショッピング検索をするならタウンズショップをどうぞ!" ; $h1_title = "$desc_kk"; $raku_ad = qq{ }; #商品をキーワードで探す済01 $tabele_title01 = qq{ タウンズお勧めキーワード }; $tabele_title02 = qq{人気}; $tabele_title03 = qq{ランキング }; $sub_desc ="${mykeyword}の商品を紹介中";#サブページのDescription $sub_td_atama ="$desc_kk"; $kensaku_mado =qq{ }; #済02検索まど小型 $donna_keyword = "通販キーワード"; $Ranking_TOPpage = qq{ } ; #トピックス済03 $Ranking_SUBpage = qq{ } ; #トピックス済04 $footnonaiyou =qq{
このサイトにつきまして・・・${sitename}は、検索キーワードを元に日本最大級YahooShoppingの商品を紹介するページです。ご安心してサイト閲覧をお楽しみ下さい。


Copyright (c) 2007 ${sitename} All Rights Reserved.
}; #menulink(00-04)未05 $menulink00 =qq{ }; $menulink01 = qq{ }; $menulink02 = qq{ }; $menulink03 = qq{ }; $menulink04 = qq{ }; $menuall =qq{
$menulink00
$menulink01
$menulink02
$menulink03
$menulink04
}; #〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 #━━━━━━━━━━━━━━━━━━━━━━━ 初期設定 [START] ━━━━━━━━━━━━━━━━━━━━━━━━ # 初期設定は必ずこちらで変更を行って下さい # $name1 = "shop" ; # アドレスの第一階層の名前を指定して下さい $name2 = "num" ; # アドレスの第二階層の名前を指定して下さい $name3 = "index" ; # アドレスの第三階層の名前を指定して下さい $hitnum = "10" ; # 1ページあたりの取得件数( 1-30までの整数 ) $maxdat = "100" ; # datファイルの最高 -- ○○○.datの最高数字(頭の0は含まない) $mykeynum = "3" ; # titleを取得する番号 1なら一番上の検索結果がtitleとなる( 1-$hitnum+1までの整数 ) $Token = "173498e364bc595abe18c3a14cba80f19" ; #未 $encode = "EUC-JP" ; # 標準文字コード -- 必要がなければ変更しないで下さい $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/std.css" ; # cssファイルへのパスを指定して下さい $no_gif = $etcurl. "/images/no.gif" ; # no_image画像へのパスを指定して下さい $prev = $etcurl. "/images/prev.gif" ; # prev画像へのパスを指定して下さい $next = $etcurl. "/images/next.gif" ; # next画像へのパスを指定して下さい #━━━━━━━━━━━━━━━━━━━━━━━━ 初期設定 [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 ; } #******************************************************** #HTML 出力開始 if($catenum eq "top" ){ &toppage ; } else { &subpage ; } exit; #〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ #━━━━━━━━━━━━━━━━━━━━━━━ SKIN ━━━━━━━━━━━━━━━━━━━━━━━━━━━ # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ sub PrintSkin{ $item_body .= <

$product

SHOP:$merchant

$product$adurl
$price

$itemdetail

>>商品の詳細はこちら$adurl


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

    $tabele_title03

    $list_menu

     

     

    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; #******************************************************** # 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 .= "$menuall" ; } else { $item_body = "全 " .$count. " 点  " ; $item_body .= "" .$pagenum. " / " .$pagecount. "

    " ; if( $pagecount > 1 ){ $item_body .= $pagelink. "

    " ; } #@itemsの解析開始 $itemcount = 0 ; foreach my $value ( @items ){ # 各変数初期化 %item = () ; $_ = $value ; ( $imagel , $imageheight , $imagewidth ) = m//o ; %item = $_ =~ m/<([^ ]+).*?>(.*?)<\/\1>/g ; $product = $item{'title'} ; $product = Unicode::Japanese->new($product, 'utf8' )->euc; $link = $item{'link'} ; $itemdetail = $item{'description'} ; $itemdetail = Unicode::Japanese->new($itemdetail, 'utf8' )->euc; ; $itemdetail = substr( $itemdetail , 0 , 400 ). '.......' ; $merchant = $item{'vc:subStoreName'} ; $merchant = Unicode::Japanese->new($merchant, 'utf8' )->euc; ; $price = $item{'vc:price'} ; 1 while $price =~ s/(.*\d)(\d\d\d)/$1,$2/; $_ = $link ; ( $vs ) = m/vs=([0-9]+?)&/o ; ( $vp ) = m/vp=([0-9]+?)&/o ; $adurl = '' ; if( $imagel eq "" ){ $imagel = $no_gif ; $imagewidth = "100" ; $imageheight = "100" ; } if( $itemcount < $mykeynum ){ $mykeyword = $product ; } &PrintSkin ; $itemcount = $itemcount + 1; } if( $pagecount > 1 ){ $item_body .= "
    " .$pagelink. "

    " ; } } #******************************************************** # タイトルタグ セット $title = "|" .$key. "|" .$mykeyword. "[ " .$sitename. " ]" ; $desc = "$mykeyword・・・他の商品紹介" ; $keyw = $mykeyword ; #******************************************************** #sub HTML出力開始 print "Content-type: text/html\n"; print "Charset: " .$encode. "\n\n"; print < $title

    $key関連商品の検索結果

    $item_body
     

    SUBHTML &Footer ; print "\n" ; print "\n" ; exit; } # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ #━━━━━━━━━━━━━━━━━━━━━━━ API接続 ━━━━━━━━━━━━━━━━━━━━━━━━━━━ # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ sub API{ #******************************************************** # APIに接続 $kword = $key ; $kword = Unicode::Japanese->new($kword, 'euc' )->utf8; $kword =~ s/([^\w ])/"%" . unpack("H2", $1)/eg; $kword =~ tr/ /+/; $url = "http://webservice.valuecommerce.ne.jp/productdb/search" ."?token=" .$Token ."&results_per_page=" .$hitnum ."&keyword=" .$kword ."&page=" .$pagenum ; # select undef, undef, undef, 0.6; eval { local $SIG{ALRM} = sub { die "timeout" }; alarm 10; $data = get($url) ; alarm 0; }; alarm 0; if($@) { if($@ =~ /timeout/) { &ERROR2; exit ; } else { &ERROR2; exit ; } } $_ = $data ; ( $pagecount ) = m/([0-9]+)<\/vc:pagecount>/o ; ( $count ) = m/([0-9]+)<\/vc:resultcount>/o ; if( $pagecount > 100 ){ $pagecount = 100 ; } push(@items , $data =~ m/(.*?)<\/item>/smg ) ; } # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ #━━━━━━━━━━━━━━━━━━━━━━━ FOOTER ━━━━━━━━━━━━━━━━━━━━━━━━━━━ # ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ sub Footer{ print <\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 ; } #━━━━━━━━━━━━━━━━━━━━━━━ エラー表示 ━━━━━━━━━━━━━━━━━━━━━━━━━━ sub ERROR2{ 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 "\n" ; print "ERROR\n"; print "\n"; print "
    只今 リクエストが混み合っています。 お手数ですが、少しお待ちになってから、ブラウザの『更新』ボタンで、再読み込みを行ってみてください。
    \n" ; print "\n" ; exit ; }