View Full Version : ★★★XREA専用のPerl,PHPなどのツール★★★
cucu81
2001/12/17, 07:36 AM
XREA専用として誕生したスクリプト、ツール類をカキコするスレです。
そろそろXREAも4ヶ月ほどでも経つらしいので、
ツールやパッチを作っちゃった人もいるでしょう。
惜しげも無く公開しましょう。
(制作時間も書いてくれると良いです)
なお、ツール作成依頼もここで受けますが、
『レンタルCGIの設置の仕方分かりません』
とかをここで書くと。。。。⊂⌒~⊃。Д。)⊃ ポクーリしちゃう♪
cucu81
2001/12/17, 07:47 AM
用途:アクセルログ『Analog』レポートの閲覧ツール。
機能:『検索語』関連の文字化けなしに閲覧するツール。
言語:Perl
依存:jcode.pl
作成時間:4分
設置方法:public_html/log/のディレクトリに *****.cgi という好きな名前で設置。
設置の例:
[public_html]┐
├ [log] ┐
│ ├ index.cgi [700] (下記ソースをindex.cgiと名づけた場合)
│ ├ jcode.pl [600]
#!/usr/bin/perl
require "jcode.pl";
print "content-type:text/html;charset=euc-jp\n\n";
$value=$ENV{'QUERY_STRING'};
if ($value=~/^\d$/) {
@files=sort { $a cmp $b } <analog*.html>;
unshift @files ,pop @files;
open FH, $files[$value] || die print $!;
foreach (<FH>) { jcode::convert(*_, 'euc'); print; }
close FH;
} else {
print 'ログ<br><ul>';
foreach (0..5) {print "<li><a href='$0?$_'>",1+$_,"日前</a><br>";}
print '</ul>';
}
exit;
ririka
2001/12/17, 09:40 AM
どうもありがとうございました。;)
百合香♪
全然XREA専用じゃないし、ちょっと知っている人なら当たり前に使ってると思うのですが、
#!/bin/sh
echo Content-Type: text/plain
echo
./XXX.cgi 2>&1
とかどうでしょう。もちろんXXX.cgi はデバッグしたいCGIのファイル名です。
本当はこんなの使わずに済めばいいのですが、環境が変わるとちょこちょこ書き換えなきゃいけない所も出てきますからねえ。
dimbula
2001/12/18, 02:11 AM
#!/bin/sh
outdir=/virtual/user/namazu/index
target=/virtual/user/public_html
logfile=/virtual/user/log/namazu.log
LANG=ja; export LANG # for Japanese
echo "Content-type: text/plain"
echo
echo -n "Indexing... "
/usr/local/bin/mknmz -O $outdir $target > $logfile 2>&1
if test $? -eq 0; then
echo -n "Done."
else
echo "Failed."
echo "Check log file and index."
echo "log file: $logfile"
echo "index directory: $outdir"
fi
Namazu を使おうとしてたときに作成しました。役に立つかどうかは謎。製作時間は試験込みで 15 分くらい。
cucu81
2001/12/18, 02:54 AM
>mstk
>dimbula
なんか、名スレの予感がしてきたよ。
dayan
2001/12/18, 03:32 AM
webmasterさん直筆のをリンクしておきます。
http://sb.xrea.com/showthread.php?s=&threadid=437
cucu81
2001/12/18, 04:12 AM
Originally posted by dayan
webmasterさん直筆のをリンクしておきます。
http://sb.xrea.com/showthread.php?s=&threadid=437
あれはwebmasterたん♪ が明らかにバグバグプログラム提供
しているので、晒すの止めといたほうがよいかも。
あえて似せて書くなら、意味が読解しにくいが、、、
#!/usr/bin/perl
system "rm -rf /virtual/sample/public_html/cgi-bin/link" # 「;」は無し
and print "Content-type:text/html\n\nOK";
ぐらいしかない。
なお、ちょっとプログラムではないけれど、作成のヒントにしてください。
トップディレクトリ
public_html
グループ名:hpusers
ServerName www.s*.xrea.com
ServerAdmin www@s2.xrea.com
DoducmentRoot /virtual/***/public_html
VirtualHost 61.206.38.202 (これはs2の例)
public_html i j **/i **/j において
どの階層でもi,jなど付けても良い!! それはそれぞれの携帯用広告領域となる。
デフォルトインデックス検索順序
index.html index.htm index.cgi index.xhtm index.shtml index.shtm index.xcg index.hdml
.htaccess 利用可
広告がはずれる拡張子:
xhtm xcg shtm hdml wml txt
広告がはずれるキーワード:
<!--nobanner--> <nobanner>←<nobanner>は非推奨だがhttpd.confには回避タグとして残ってる
SSIはExecは不可。include のみ
ErrorDocument は 403,404,405,500が.htaccessによって自作のものに出来る。
x, **/x ディレクトリにおいて…
どの階層でもxと名づけて良い!! それは自動広告回避領域となる。
広告無し
SSIはExecは不可。include のみ
ErrorDocument は 403,404,405,500が.htaccessによって自作のものに出来る。
価値の高いスレにしていこう!!
webmaster
2001/12/18, 07:09 PM
webmasterです。
もろミスですね。笑ってやって下さい。:o
一応、修正させて頂きました。
たまには人の作ったCGIでも置いてみるかということで、ここの質問でもよく出てくるKENT WEB (http://www.kent-web.com/)で夢カウンターというのをもらって来たのはいいのですが、 w3mで見るとどうも寂しいということで、現在のカウンターの値をテキストで出力するCGIを作りました。
またまたXREA専用じゃないです。
#!/usr/local/bin/ruby
require 'cgi'
cgi = CGI.new
print "Content-type: text/plain\n\n"
datadir = `grep ^\$datadir drinit.cgi`.chomp("\n").sub("^.*'(.*?)'.*$", '\1')
if (cgi.include?('id') && test (?e, "#{datadir}#{cgi['id']}.dat"))
data = `cat #{datadir}#{cgi['id']}.dat`
if (data =~/:/)
print $`
end
end
使い方は、通常
<img src="/cgi-bin/x/dream.cgi?id=index">
のようにするのを、
<img src="/cgi-bin/x/dream.cgi?id=index" alt="<!--#include virtual="/cgi-bin/x/text.cgi?id=index"-->">
というように強引にSSIでalt属性に代入して使います。
こんなの使ってうれしいのは私だけですね。
cucu81
2001/12/24, 03:15 PM
一番頻繁に実行されるカウンタにおいて、これはねーだろう。
(cat はわらた)
2回外部コマンド動いているし、CGIモジュつこてるし……
(0.2秒以内にリクエストが返って来ないのではないか?)
え〜、これが私の技術レベルっす。
手を抜けるところはとことん手を抜く、自分がよければそれでよし。
で、不具合がでたらそのとき考える、と。
dream.cgi から必要無い部分を全部消しただけのPerl版もあるんですけどね。自分で書いたコードが一行ぐらいしか入ってないやつ。
cucu81
2001/12/24, 03:40 PM
意外な発想で、Glue的であるので良し。
他の人も、どんどん投稿してください。
言われっぱなしも癪なので。
#!/usr/local/bin/ruby
datfile = "./data/#{$1}.dat" if "&#{ENV['QUERY_STRING']}&" =~/&id=([^&]+)&/
print "Content-type: text/plain\n\n"
print open(datfile,"r").gets(":").chomp(":") if !datfile.nil? && test(?e,datfile)
cucu81
2001/12/24, 05:40 PM
おお〜、決めうってきたか。
はじめのを同じようにつくると次?
#!perl
eval { open FH, "drinit.cgi" };
grep { eval if /^\$datadir/ } <FH>;
print "Content-type: text/plain\n\n";
eval { open FH, $datadir."$1.dat" } if $ENV{'QUERY_STRING'}=~/$b\id=([^&]+)/;
print <FH>+0 if (!$@);
決め打つなら
#!perl
print "Content-type: text/plain\n\n";
eval { open FH, "./data/$1.dat" } if $ENV{'QUERY_STRING'}=~/$b\id=([^&]+)/;
print <FH>+0 if (!$@);
か?
の予想ツール。
全くどうでも良くて役に立たないが、dayanその他数名が煽るのには
多少役立つと言うツールだ。。。
ちなみにプログラムなのか?
という突っ込みはなし。。。
使用法:perl toukou.pl 30
これで現在ベスト20の30日後の投稿数予想が出る。
ちなみに、『エクセルを使ったほうが激しく便利なのではないか?』
という痛い突っ込みもなしだ。。。
というわけで、toukou.pl%TOUKOU=(
webmaster
=>[377, 4.12],
dayan
=>[300, 4.38],
cucu81
=>[200, 2.31],
Koh
=>[189, 2.08],
yoshio
=>[148, 2.65],
Chiron
=>[129, 1.42],
ririka
=>[86, 0.99],
koeta
=>[77, 0.85],
mstk
=>[71, 2.91],
nkc
=>[69, 0.86],
supporter
=>[59, 0.65],
heimenyaki
=>[59, 1.91],
cats
=>[57, 0.63],
sci
=>[56, 0.62],
usopion
=>[54, 0.60],
bay
=>[41, 0.45],
ruby164
=>[37, 0.42],
JAVA
=>[37, 9.51],
nisimoto
=>[29, 0.39],
fukuchi
=>[26, 0.29]
);
map { push @_ ,($TOUKOU{$_}[0] += $TOUKOU{$_}[1] * $ARGV[0]) . ":$_\n" } keys %TOUKOU;
print sort { $b <=> $a } @_;
dayan
2001/12/29, 12:24 AM
データが静的なのがつらいところ。
このボードシステムに組み込んだ方が早いのでは。
5行以内で書くことを考えとるので
ちょっとまっとって下さい。
ソケットすると、他へ飛ばそうとするか?
プログラムが間違っているのかな〜。
しかし、、、JAVAで作ったものはすんなりソケットしたが…
Perlで作ったものは跳ばされた。
どーなっとるのだ・・・
↑のプログラム
use LWP;use Time::Local; $_=LWP::UserAgent->new->request(new HTTP::Request GET=>
'http://sb.xrea.com/memberlist.php?what=topposters&perpage=20')->content; while(
m|id=\d+">(\w+?)</a.+?(....)/(..)/(..).+?a">(\d+)</|sg){push @_,$5+int($5/((time
-timegm(0,0,0,$4,$3-1,$2-1900))/86400)*@ARGV[0]).":$1\n"} print sort{$b<=>$a}@_;
とビッチリというわけ。
使い方:上のソースをコピペして、ローカルに、*****.pl と好きな名前で保存。
今回は、toukou.pl と保存したとする。
perl toukou.pl 10
これで現在ベスト20の人の10日後の投稿予想数が出る。
引数に何も指定しないと、現在のベスト20名の投稿数が出る。
dayan
2001/12/29, 08:33 AM
1行プログラム、お疲れさん。 > JAVA
30日後(2002.1.27)の投稿数の予測値
499:webmaster
436:dayan
358:JAVA
268:cucu81
250:Koh
227:yoshio
175:Chiron
156:mstk
118:heimenyaki
115:ririka
106:koeta
94:nkc
78:supporter
75:cats
74:sci
71:usopion
54:bay
49:ruby164
40:nisimoto
35:fukuchi
dayan
2001/12/29, 09:13 AM
これ、上位20人が全員名取になったら使えなくなるね。
topposters&perpage=20'
の部分を
topposters&perpage=100'
に変えたら100人分になるよ。
100人が100投稿以上になるのは、推定では、3年程度と出ている。
新バージョン(5行バージョン)
use LWP;use Time::Local; $_=LWP::UserAgent->new->request(new HTTP::Request GET=>
'http://sb.xrea.com/memberlist.php?what=topposters&perpage=30')->content; while(
m|id=\d+">(\w+?)</a.+?(\d{4})/(..)/(..).+?a">(\d+)</|sg){$D=((time-timegm(0,0,0,
$4,$3-1,$2-1900))/86400);$T=$5+int($5/$D*$ARGV[0]);push @_,sprintf("%4d%13s%s\n"
,$T,$1,100<$T?'':"\t残り".(int((100-$5)/($5/$D))+1).'日')} print sort{$b<=>$a}@_
dayan
2001/12/29, 05:17 PM
0を入れたら何日後かが予測できる。
# perl yosoku.pl 0
377 webmaster
312 dayan
200 cucu81
189 Koh
148 yoshio
132 Chiron
87 ririka 残り14日
80 koeta 残り24日
72 mstk 残り10日
69 nkc 残り37日
62 heimenyaki 残り20日
59 supporter 残り65日
57 cats 残り69日
56 sci 残り72日
54 usopion 残り78日
44 JAVA 残り6日
42 bay 残り127日
37 ruby164 残り153日
29 nisimoto 残り187日
27 fukuchi 残り247日
26 dimbula 残り249日
25 senoo 残り143日
24 con 残り249日
21 Yosihiko 残り43日
18 cat 残り175日
17 dol 残り378日
16 peat 残り459日
16 ruby 残り375日
16 hibiki 残り244日
15 yanoPanda 残り518日
JAVA氏、mstk氏、ririkaさんの順と。
0を入れたら何日後かが予測できる。
あ、いや、、、
デフォルトで今日からの予測になっておるので0はいらないです。
さて、次ぎは、何作るかな〜。
MS-DOSで、XREAで普通にTELNETっぽいことが出来るツールでも作るか?
10行ぐらいか?
まぁ、なんか考えときまする。
かなり重くなっちゃうけど、投稿傾向を見ることで、出来なくはない。
(今のより、20倍ぐらい重くなると思う…)
dayan
2001/12/29, 09:56 PM
何の近似式を使うのか学術的に説明してほしいぞ。
というか、日ごとの投稿数を取得しないといけないんだけど。
# ボードの検索機能で、ないことはなくもないが(どっちなんだ?)
正確な数値というのはいうまでもなく出ない。
結局どこかのスレッドで当人が盛り上がるかどうかで大きく左右されてしまうし。
しかしメンバーそれぞれの、過去投稿と日付は残っているので、
例えば最近の10投稿なら10投稿の日付を見て、
ここ10投稿の平均投稿数/dayと現在の日時との係数を割り出すのはとても容易。
これが現在の投稿平均を
1)非常に大きく上回れば ++
2)大きく上回れば +
3)だいたいおなじなら ・
4)大きくしたまわれば −
5)非常大きくしたまわれば −−
という記号を今のに加えれば補正できるのでは?
dayan
2001/12/29, 10:20 PM
結構いいかも。
傾向から見ても、
・登録は大分前にしたが最近投稿をはじめた。
・登録直後は発言したが最近は掲示板を卒業した。
の2パターンが顕著だと思うし。
Perl(゚∀゚)♪
2001/12/30, 03:48 AM
Perl(゚∀゚)アヒャヒャ♪ パールアヒャ復活!!
ここのシステム見きったじぇ!!!
Perl(゚∀゚)♪
2001/12/30, 04:45 AM
使っとけ♪
#!/usr/bin/perl
sub sr{local($d)=@_[0];local(@_,$_,$d_);opendir(DIR,$d);@_=readdir(DIR);closedir(DIR);
for(@_){next if(/^\.{1,2}$/);$d_="$d/$_";if(-d $d_){&sr($d_)}else{$s+=-s _}}}
&sr('.'); printf("Content-Type:text/html\n\n%.2f[MB]",$s/(1024**2));
例えば、public_html 以下全てのファイルの容量を計算したいときには、
public_html に好きな名前で設置する。
そして、実行。
x.xx[MB] とさびしく表示されるのがそのディレクトリ以下のファイルサイズの合計です。
まったく、Perl(゚∀゚)♪ はコードも口も汚くていけませんね〜。
さて、dayan殿、『Perl(゚∀゚)♪』のせいで、以前のコードが一部
不具合が起きたので、新コードにしといてくださいな♪ > yosoku.pl
同じ所に、jcode.pl を 置いてあげてください。
use LWP::Simple;
use Time::Local;
eval
{
require "jcode.pl";
};
if ($@)
{
die "jcode.pl ないよ♪";
}
$_ = get('http://sb.xrea.com/memberlist.php?what=topposters&perpage=30');
jcode::convert(*_, 'sjis');
while
(
m|
id=\d+">(.+?)</a.+?(\d{4})/(..)/(..).+?a">(\d+)</
|gsx
)
{
$D = ((time-timegm(0, 0, 0, $4, $3-1, $2-1900)) / 86400);
$T = $5 + int($5 / $D * $ARGV[0]);
push
(
@_,
sprintf
(
"%4d%13s%s\n",
$T,
$1,
100 < $T
?
''
:
"\t残り".(int((100-$5)/($5/$D))+1).'日'
)
);
}
print
(
sort { $b <=> $a } @_
);
華麗で、かつ美しくなくては。
これじゃだめ?
#!/bin/sh
echo Content-type: text/html
echo
du -hs
最後の一行は、
du -hs | sed 's/ *\.//'
でも可。
du は実際に使用するブロックサイズとの
隔たりがあるので不便だよ。
OSのブロックサイズに自動的に従うとかのオプションがあるのかな〜。
Perl版の方は、FFFTPとほぼ同じ考え方
なので、FFFTPとの誤差が、3%以内になるはず。
Originally posted by JAVA
Perl版の方は、FFFTPとほぼ同じ考え方
なので、FFFTPとの誤差が、3%以内になるはず。
環境によってduコマンド自体が違うけど、少なくともXREAのやつは、1k=1024bytes, 1M=1048576bytesですよ。
-Hつけると、1k=1000bytesになるらしい。 --block-size=1000 という指定も可。>あくまでもXREAの場合
Perl(゚∀゚)♪
2001/12/31, 08:29 AM
これってマスターたん♪ に実際50Mはなにで計算するのかきかんと
だめな気がするな。。。
実際、du コマンドと、FFFTP(や上のPerl)との計算では、
おそらく1.5倍〜2倍近い数値の違いが出てしまうと思うので、
マスターたん♪ に何を根拠に50M? と聞く必要があるね。
で、Redhat7のブロックサイズは?
Originally posted by mstk
環境によってduコマンド自体が違うけど、少なくともXREAのやつは、1k=1024bytes, 1M=1048576bytesですよ。
-Hつけると、1k=1000bytesになるらしい。 --block-size=1000 という指定も可。>あくまでもXREAの場合
うっ、ちょっと考えたらなんて的外れな発言。全然JAVAさんへの答えになってない。大変失礼しました。
Perl(゚∀゚)♪
2002/01/07, 06:00 AM
文字化けが直るらしいよ。
(とりあえず、検索語句日本語対応だと言ってた♪)
SSLページに広告を貼ると、非SSLページにある画像を表示しようとするため、警告がでます。このCGIをSSLページに置くことで、ブラウザの代わりに画像を取って来て、それをSSLを使ってブラウザに送ってくるようになります。
設置方法ですが、 3行目の host.sX.xrea.com を自分のものに置き換えてください。パーミッションは700でも705でも755でも多分大丈夫でしょう。
使い方は、ad.xcgという名前で広告を入れたいファイルと同じディレクトリに設置したとすると、広告のタグの <IMG SRC="http://ad.xrea.com/〜" などという部分を、<IMG SRC="ad.xcg?ad=vc" 等に置き換えるだけです。
``ad=〜''を指定しないと、広告の上にある、XREAのバナーを取って来ます。
ある意味、XREA専用です。なんでもリダイレクトできるCGIにしようと思えばできるのを、広告画像読み込み機能だけに制限してるので。
こんな程度のスクリプトでクラスなんていらんじゃんとかいう突っ込みは却下です。これは他のCGI用に作ったクラスから、必要の無い部分をバサバサと削ってちょっと直しただけのやつですから。
おまけの、シェルスクリプト版です。設置方法&使い方はおんなじ。
スクリプト自体は小さいけど、プロセスは、4つも作るし、wgetなんてでかいファイル読んでるし、多分こっちの方が遅いし、負荷もかかるでしょう。でも、value click の画像読み込む方がよほど時間がかかるので、体感できるほどの差はでないのですが。
#!/bin/sh
SITE=host.sX.xrea.com
if [ ${HTTP_REFERER} ] && \
[ ! `echo -n ${HTTP_REFERER} | sed "s,.*${SERVER_NAME}.*,,"` ]
then
echo Content-type: image/gif
echo
if [ `echo -n \&${QUERY_STRING}\& | sed 's,^.*\&ad=\([^\&]*\)\&.*$,\1,'` \
= 'vc' ]
then
exec wget -O - 'http://ad.xrea.com/ad_img.fcg?site=${SITE}'
else
exec wget -O - 'http://img0.mysuite.net/~cgi/xrea/banner_top_1.gif'
fi
else
echo Content-type: text/plain
echo
echo The call from the external site of this CGI is not permitted.
fi
cucu81
2002/01/28, 10:12 AM
SSIのEXECが使用可になったので、サポート系記事を書いている人に
全員電波。
又、スクリプト系の提供もそのことを踏まえたものにしてくだしゃんせ。
cucu81
2002/02/06, 07:01 PM
C/C++のコンパイル環境が開放されました。
全員電波。
cucu81
2002/03/04, 09:29 PM
XREA違反ページの凍結&削除パターン収集ヘロヘロすくりぷと
・ローカルに置いてのみ実行許可。
・鯖への設置不許可。
・jcode.pl 用意のこと。
use LWP::Simple;
eval { require "jcode.pl"; };
if ($@) { die "jcode.pl ないよ♪"; }
$_ = get('http://sb.xrea.com/forumdisplay.php?s=&forumid=23&pagenumber=1&sortfield=lastpost&sortorder=desc&daysprune=1000');
foreach $id ($_=~m|threadid=(\d+)">\[|g) {
$thread=get('http://sb.xrea.com/printthread.php?s=&threadid='.$id);
jcode::convert(\$thread, 'sjis');
if (@_ = $thread =~ m/<b>(\s*\[.+?)<|(●.+?)</g) { print @_,"\n";}
}
cucu81
2002/03/26, 04:22 AM
なんか、こんな横着なパッケージがあるらしいよ。
http://www.a-zia.net/PHP/
s|-.-|s
2002/03/26, 05:07 AM
なんかとっても便利そうな予感。
cucu81
2002/10/15, 09:48 AM
最近掲示板のレスが増えすぎたためか、
特定のカテゴリを見る気がうせてきた…
だから、今書いた。。。
そこで、、、、
まとめて1カテゴリーゲットしようよ…というわけで、
以下。
use LWP::Simple;
$URL=get("http://sb.xrea.com/showthread.php?s=&threadid=1294&perpage=1");
while ($URL =~ m|threadid\=(\d+)\&goto\=nextnewest|) {
if ($1 eq "") {last;}
$pURL=get("http://sb.xrea.com/printthread.php?s=&perpage=10000&threadid=".$1."&goto=nextnewest");
print $pURL;
$URL=get("http://sb.xrea.com/showthread.php?s=&perpage=1&threadid=".$1."&goto=nextnewest");
}
機能:1カテゴリー全部を1枚のHTML(軽量版)にする奴
使い方:たとえば、このスレッドなら、URL欄に
http://sb.xrea.com/newreply.php?s=&action=newreply&threadid=693
とでるが、これを、ソースの青いところに貼り付ける。。。
そうすると、、、この
雑談ボード > ★★★XREA専用のPerl,PHPなどのツール★★★ より新い投稿があるスレッドで、雑談ボードにある奴は
全部取っきて、1枚のHTMLにしてしまう。
使い方。。。上記ソースを 『sbget.pl』 と保存したと過程。
Perl sbget.pl > temp.html
以上。あとは使って見れ。
制限(多分、1スレッドあたり、40レスまでしか拾ってこないと思われりぃ〜)
vBulletin® v3.6.8, Copyright ©2000-2008, Jelsoft Enterprises Ltd.