#!/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を元に日本最大級 楽天市場の商品を紹介するページです。データの取得に楽天ウェブサービスを利用しております。ご安心してサイト閲覧をお楽しみ下さい。


©2007 $sitename All Rights Reserved.

Supported by 楽天ウェブサービス
}; #━━━━━━━━━━━━━━━━━━━━━━━━ 初期設定 [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 .= <

$product

販売・・・$shopnm

$product $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
    その他お勧めキーワード
      $menulist

    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 ; }