|
|
ただいま料率アップ中のショップをご紹介中。しかも、あなたのページで商品を紹介するときのポイントを店長が直伝!お好きなショップのお気に入りのバナーを貼って、楽天スーパーポイントを貯めよう! |
>> 楽天アフィリエイトってなに? |
|
|
#!/usr/bin/perl
# /*
# * TEMPLATE: #PARA (PARA_MARK) が 何個か埋め込まれている。
# * LIST: 埋める文字列。
# * BEGIN と END の間を表示する。それ以外の行は無視。
# * 1000 item まで。
# *
# * いずれも 16384 バイトまで。
# * -> 32768 に拡大 (1999/11/4)
# */
# /*
# * 1998/11/20
# * BEGIN の後ろに 1 を書くと,それは必ず選ばれる。
# *
# * 1998/12/28
# * -n option 追加。(content-type: を出力しない)
# *
# * 2000/02/01
# * refresh=daily, refresh=hourly 追加
# * daily/hourly の直後に数値を付けると、その数値だけ seed を増やす。
# * 前のパターンとの重複の関係などでどうしてもずらしたいときに使う。
# */
# 2001/08/19
# perl version
# limit direct access to parara.cgi for security reason.
# 社外からのアクセスで、かつ、parara.cgi?... で呼ばれたときは、
# template=, list= が与えられても無視する。
#
# 2001/09/14
# 呼び出し元に ?offset= がついていたら interval をずらす。
# (ここで「呼び出し元」というのは、include が書いてある html に
# アクセスするときの URL のこと。例えば ...../index.html?offset=3)
# 'offset' は、$offset_param_name で変えることができる。
#
# 2001/09/19
# n 個から m 個 (m
;
close(F);
} else {
$template = '';
}
@para_parts = split(/$PARA_MARK/, $template);
my @tmp = ($template =~ /($PARA_MARK)/g);
$npara = @tmp;
}
sub read_list {
if ( open(F, $fn_list) ) {
local $/;
my $list = ;
close(F);
while ( $list =~ /^BEGIN([^\n]*)\n(.*?)^END/msg ) {
my ($post,$item) = ($1,$2);
my $prob = 0;
if ( $post =~ /^\s*(\d+)/ ) {
$prob = $1;
}
push @lp, $item;
push @prob, $prob;
}
$nlist = @lp;
}
}
sub choice_from_prob_1 { # set rnd[].
my @p; # = (int*)malloc(sizeof(int)*nlist);
# find items whose prob == 1. */
@p = grep { $prob[$_] == 1 } 0..($nlist-1);
my $n_choice = (@p < $npara ? @p : $npara); # = min(@p, $npara)
@rnd = & get_rnd_array($n_choice, @p);
return scalar(@rnd);
}
sub choice {
my $prob_1;
my $seed;
return if ( $nlist < $npara );
if ( $refresh_type eq 'REFRESH_HOURLY' ) {
$seed = int(time()/3600) + $seed_offset;
} elsif ( $refresh_type eq 'REFRESH_DAILY' ) {
$seed = int((time()+3600*9)/86400) + $seed_offset; # UTC -> JST
} else {
# REFRESH_RANDOM
$seed = $$;
}
srand($seed);
$prob_1 = & choice_from_prob_1();
push @rnd, & get_rnd_array($npara - $prob_1,
grep { $prob[$_] != 1 } 0..($nlist-1));
@rnd = & get_rnd_array($npara, @rnd) if $prob_1 > 0;
#print STDERR "@rnd\n";
}
sub output {
if ( !$no_header ) {
print STDOUT "Content-type: text/html\n\n";
}
if ( $nlist < $npara ) {
printf STDOUT "%d < %d\n", $nlist, $npara;
} else {
for $i ( 0..($npara-1) ) {
print STDOUT $para_parts[$i];
print STDOUT $lp[$rnd[$i]];
}
print STDOUT $para_parts[$npara];
}
}
sub set_param {
my $query = $ENV{QUERY_STRING};
return if ( $query eq '' );
if ( $ENV{REQUEST_URI} =~ /\/parara.cgi\?/ && # 直接
$ENV{REMOTE_ADDR} !~ /^210\.155\.149\./ ) { # 社外
$ignore_fn_arg = 1;
}
for ( split(/&/, $query) ) {
my ($name, $val) = /(.*?)=(.*)/;
$name =~ s/\+/ /g;
$val =~ s/\+/ /g;
$name =~ s/%([A-Fa-f\d]{2})/pack("c", hex($1))/ge;
$val =~ s/%([A-Fa-f\d]{2})/pack("c", hex($1))/ge;
if ( $name eq 'template' ) {
$fn_template = $val if !$ignore_fn_arg;
} elsif ( $name eq 'list' ) {
$fn_list = $val if !$ignore_fn_arg;
} elsif ( $name eq 'refresh' ) {
if ( $val =~ /^hourly/ ) {
$refresh_type = 'REFRESH_HOURLY';
$seed_offset = substr($val, 6) + 0;
} elsif ( $val =~ /^daily/ ) {
$refresh_type = 'REFRESH_DAILY';
$seed_offset = substr($val, 5) + 0;
} else {
$refresh_type = 'REFRESH_RANDOM'; # default
$seed_offset = 0;
}
}
}
# 2001/09/14
my $arg_offset = 0;
if ( $ENV{REQUEST_URI} =~ /\?(.*)/ ) {
for ( split(/&/, $1) ) {
if ( /^$offset_param_name=(-?\d+)/ ) {
$arg_offset = $1;
}
}
}
$seed_offset += $arg_offset;
#
}
sub parse_arg {
if ( @ARGV >= 1 && $ARGV[0] eq '-v' ) {
printf STDERR "%s, MAX = %d\n", version, MAX_SIZE;
exit(0);
}
if ( @ARGV >= 1 && $ARGV[0] eq '-n' ) {
++$no_header;
}
}
sub get_rnd_array {
my $get_n = shift;
my @p = @_;
my @ret;
for ( ; $get_n > 0 ; --$get_n ) {
my $n = int(rand @p);
push @ret, $p[$n];
$p[$n] = $p[$#p] if ( $n < $#p );
pop @p;
}
return @ret;
}
#
# main
#
& parse_arg;
& set_param();
& read_template();
& read_list();
& choice();
& output();
exit 0;
|
|
|
|
|
|
あなたのホームページやメールに掲載されたリンクを通じて商品が購入された場合、あなたに楽天スーパーポイントが貯まる仕組み、それが「楽天アフィリエイト」。 |
>>もっと詳しく知りたい方はこちら |
|
|
|