bby -- スレッド情報一元管理システム構築スレ
■ このスレッドは過去ログ倉庫に格納されています
2chにある全スレッドの情報を一元で管理するシステム(通称bby)について議論したり構築したり
雑談したりするスレッドです。
関連スレ
bbs.cgi再開発プロジェクト2
http://qb3.2ch.net/test/read.cgi/operate/1069144193/l50
【広告】新機能 Rock54【自動排除】 2
http://qb3.2ch.net/test/read.cgi/operate/1067770666/l50 新スレが立ったらすかさずdownload.co.jpが2getするスクリプト希望 でけた
%nslookup -type=txt txttest.uma.2ch.net
Server: localhost
Address: 127.0.0.1
Non-authoritative answer:
txttest.uma.2ch.net text = "TXTレコードのテスト"
で、心としては、
bbs.cgiからTXTレコードのデータとして、今A(gethostbynameしているもの)に、
スレタイも加えた上で、bbyに投げる
これができれば、TXTレコードはより自由度大きい(制限が64バイトじゃないし)んで、
より楽なんじゃないかと。
>>92
できるですね。Puttyさんが日本語いまいちかコード間違ってるかに1票。
%nslookup -type=txt txttest.uma.2ch.net
Server: localhost
Address: 127.0.0.1
Non-authoritative answer:
txttest.uma.2ch.net text = "TXTレコードのテスト" >>103
(・∀・)ノ get失敗カコワルイ!! >>102
お。
というわけで、PerlからTXTレコードを投げられればいいわけですが、、、。
Net::DNSとか使えるといいんだけど、HE標準環境では使えないと昔言われた気がする。 壷からのお知らせで来てみますた
記念カキコc⌒っ゚Д゚)φ そうか、
ということは まずbbs.cgi 側の改造が必要ですよね。
どのように改造すればいいのでしょ
現在のコード (Perl)
my $AHOST = "$NEWTHREAD.$FORM{'bbs'}.$ENV{'SERVER_NAME'}.bby.2ch.net";
my $SPAM = gethostbyname($AHOST);
どうせなら、スレタイ・投稿者・メール欄等も全部載せておくとか、
>>109
まずは uma だけでもやってみようと、 >>111
>スレタイ・投稿者・メール欄
まで載せるのなら、内容まで載せれば、
クライアント側(利用者)で該当スレの1を取得する必要がなくなるかも。
ログの規模によりますが。 と思ったけど、TXTでも64文字制限だったりするのかな。< . までの文字数
ちょっと、RFCあたってみないと。 壷記念♪ ホント2ゲトし放題ですね。
つーか、スレッドって祭スレ位の勢いで立ってるんですねぇ・・
たまげたわ ゴミ吸いません tuboから記念パピコ
何を言ってるのか全くワカランけどねヽ(´―`)ノ もし64文字制限だとすると、TXT使う意味ないなぁ。
普通にA(gethostbyname)でいい気がする。
質問1: スレタイって、一般的に何文字(バイト)まででしたっけ。
質問2: 思い切って「最初の63文字まで」にしちゃっても、うれしいのかしら。 いっそHTTP POSTするとか
って意味がなーい >>120
質問1:一般に64バイトですけど、ニュース系はかなり多くなってます。 「スレタイのはじめの63バイトまで」と見切るんだったら、今のに簡単に乗せられます。
そうじゃない場合、ちょっとめんどいかな。 >>122
そうだよね。128に変えたりした記憶あるし。 >>123
実験で、64バイト以上を投げてみて、挙動を見るのは危険ですか? >>120
最初の63バイトでもかまわない気がするです。 >>125
んとね、たぶん利ゾルバライブラリ側でエラーになると思う。つまりDNSパケットが飛ばない。 >>127
なるほど、そうなのですか…
64バイト未満で実装してみて頂くのが良さそうですね。 スレタイ制限(BBS_SUBJECT_COUNT)は48バイトの板が多いですが、
ニュース系は128です。他にはAA系などに64が若干。 最初の63文字と見切るなら、>>111 で飛ぶ結果を、
1075460625.mmosaloon.game3.2ch.net.bby.2ch.net
から、
1075460625.スレタイの最初の63文字.game3.2ch.net.bby.2ch.net
になるようにすればいいだけだと思われ。
こうすれば、umaサーバ以外でも使えるはず。
ただし、「スレタイの最初の63文字」を作るところで、\ 文字に注意する必要ありかな。
このへんは、Perlというか、bbs.cgiのつくりの仕様かと。
で、えりも側では、漢字が半分でちょん切れてる時の対応をまじめにやる必要ありかと。 で、64文字以上の場合は、例えば
1075460625.63文字.63文字.game3.2ch.net.bby.2ch.net
とか、することになるわけですが、これだといろんな意味でちょいと面倒かも。
あと、ピリオドそのもの もスレタイに入るんで(DNS的にはそのまま送ればOKです)、
えりも側ではちょいと注意が必要な気がするな、と。
これから仕事落ち。 >>130
見切りはしない方がいいよ
全角・半角混じりの場合に次の1バイトを巻き込んで・・・
erimoの保存件数を100件にしてほしかったり、、、 >>135
どれくらいの間隔で取得してます? >>106 >>134
よく読めよ
> で、えりも側では、漢字が半分でちょん切れてる時の対応をまじめにやる必要ありかと。
>>136
約1分ですね。@cronでやってるんで 100件にしてみよう。
テストだから最終的に何件にするかとかは先送り。 >>138
なるほど、ありがとです。
100件だとどの位の時間で落ちちゃうのかな… ちなみに、みなさんがアクセスするだけでも更新されますw 最終更新順=最終書き込みが新しい順 で情報取得になれば、subback合成も可能になるだろーなぁ。 しかし、重大な欠陥が、、、
アクセスし続けないとログが記録されない、という。 >>11-12以外でこのシステムを
有効利用できることは無いのかなぁ。
いや、2get支援システムとは言うのは無しとして。 >>157
どんどん具体的な案だすべし、
可能なら私が組むし、むりぽだったら
誰か組んでくれるゾ
結局、bbyは重くなるのならないの。
今後そういう使われ方していって重くなるのならないの。
推測でいいから誰か結論出してよ。
それと、この手の情報はスレを立てようとしてる香具師に
何らかの形で知らせた方が効果ある訳で
そうでなければ管理側のオナヌーだろな。 BBY が重くなればなるほど
その数倍から数十倍の勢いで通常のサーバが軽くなる。
重く多なったらBBYを増やせば よいだけ、 さてさて、スレ鯛とかを持ってきますかねぇ
ここで質問です。
今作っているこのプログラム(以下tsugaru)は
2ちゃんねるの各サーバのbbs.cgiが新スレたった時に呼ばれるわけです
このとき DNS を引く手法で BBY が呼ばれます。
この時に bbs.cgi とは完全にシンメトリーなんでしょうか?
投稿
↓
新スレたった(bbs.cgi) → BBY → tsugaru
↓
いろいろ処理
↓
新スレたった(bbs.cgi) ← BBY ← tsugaru
↓
そのあとの処理
実際に書き込み >>161
これは、BBY側でバッファリングとかされてたりしない? という意味ですね。
つまり、待たせることなくtsugaruが呼ばれているのかどうかと。 どちらかと言えば
trugaru は BBY が呼んだら放置で
さっさとbbs.cgi 側に復帰してくれることを期待しています そういうことですか。
それなら、そもそもそうなってますです。
つまり、tsugaru処理によってBBY(DNS側)がブロックされることはないです。
で、>>161 の絵ですが、今こんなかんじかと。
投稿
↓
新スレたった(bbs.cgi)
gethostbyname() → BBY → tsugaru → いろいろ処理
↓
BBYからの結果は無視して
以降の処理へ ただし、BBY用のDNSサーバがこけると、
gethostbyname()からの結果を待ってしまうので、ブロックします。
春ぐらいに、PIEにもDNSサーバ(こいつはOpteronじゃなくて、手堅いやつ希望)が
必要になりそうな予感。 皆様お疲れ様です。
いまさらかもしれませんが・・・。
>>127
(>>43を書いたとき)実験したら、DNS呼び出しでエラーになってパケット飛ばなかったです。
64byte以上のホスト名や、使用禁止文字があった場合も同様でした。
(perlが死ぬことは無かったと思います。)
>>133
ピリオドの他にも使用禁止文字は無いでしょうか?
スペースなどはどうでしょう?
それと、ピリオドの連続(0文字のホスト名)は禁止らしく、
(確か)呼び出しに失敗した記憶があります。 <要望>
「URL」書かなくていいから、「板名」と「スレタイ」が出るようにしてほしい。 出力形式がsubback.htmlと一緒だと助かります。 >>173
おお〜っ!
って、後ろに付いとる数字はなんじゃ!subback叩くなゴラーw >>173
もしかして30秒ごとにsubject.txtかsubback.htmlをGETしてるんですか? >>173
感想。
「鯖」「板」という内輪の言葉は使わない方がいいんじゃないかなー。 >>173
すげ〜イイ!!
ただ、今回の閉鎖騒動を見てふと思ったんだけど、このbbyを拡張して、2chだけでなく色んな
ニュース系BBSのスレをヘッドライン的に出してくれるサイト作んないかな?
サーバーや開設者や運営陣は別々に分散してて、システムの一部の仕様はヘッドラインに乗せるため
共通で。BBS共同体みたいなの・・・ あ、あと
http://www6.big.or.jp/~beyond/bbsnews/
こんなのも、、 >>180
>>181
なるほど・・・
ただ2chだけだと、今は管理人の方は一人なので、何らかの理由で閉鎖とかなっちゃうともったいない
なーと思ったので。管理者の責任とか負荷とかをもっと分散できてる状態で、かつ、利用者が便利な
状態が望ましいのかなぁ〜と思いました。
ただの世迷言ですw >>184
あれ、おいらはいけるんだけどなぁ、、
>>183
ある程度の責任を負える人ってのが
実はほとんどいないと思うのですね。 >>186
失礼。こっちの回線の問題だったようです。
そうですね。ある程度以上の規模があると責任は重いですからね。
といって、ちいさなBBSでニュースだとそれだけでは何の魅力もないでしょうし・・・
あくまで世迷言ですので・・・w tsugaru は C で書いてるんだけど
DNS的手法を使ったスレタイ等の取得は形勢不利と決め付けて
各サーバにdat取りに行くことにしよっかな、
んで C でhttp使って別のサーバにdatを取りに行くのはどうやって
やるんで? 教えてエロい人。 >>189
普通にsocket/bind/connectすればいいわけですが、
なんだか「負け」な気がするなぁ。 DNS以外を使うなら、新スレ通知の段階からDNS以外で
まとめてやった方が効率良かったりしない?
bbs.cgiが、URL・タイトル・投稿者名等をbbyにhttpでPOSTするとかさ。
DNSを全くつかわないなら bb* ではなくなってしまうわけだが。 誰かサブルーチン書いてちょ
int BBYgetDat(char *dat1line,char *server,char *ita,char *key)
{
/* http://server.2ch.net/ita/dat/key.dat を取ってくる */
/* char *dat1line に一行目の生データを格納 */
/* strcpy(dat1line, xxxxx); ってな感じ dat1line は上で十分な長さが確保されている */
return 0; /* だめだった */
return 1; /* うまく行った */
} >>193
最終目標を失っちゃったら面白くないでしょ。 ちょっと遠出して高級羊羹を買ってくるつもりが、途中で
つい買い食いしてしまった安物羊羹でなんだか満足、
ってな事にならなければいいけどね。 うちのcygwinではこんなソースで動いた。
int BBYgetDat(char *dat1line,char *server,char *ita,char *key)
{
FILE * fp;
int fd;
int ret;
struct hostent * hp;
struct sockaddr_in a;
short port = 80;
char * databuffer = malloc(2048);
char * buffer = malloc(96);
char * server0 = malloc(64);
//declaration
if (-1 == (fd = socket(AF_INET, SOCK_STREAM, 0))) return 0;
/* get server address */
strcpy(server0,server);
if (0 == (hp = gethostbyname(strcat(server0,".2ch.net")))) return 0;
/* connect to server */
a.sin_family = AF_INET;
a.sin_addr.s_addr = *((unsigned long *)hp->h_addr);
a.sin_port = htons(port);
if (-1 == connect(fd, (struct sockaddr *)&a, sizeof(a))) return 0;
if(NULL == (fp = fdopen(fd, "r+"))) return 0;
fprintf(fp, "GET /%s/dat/%s.dat HTTP/1.1\n", ita, key);
fprintf(fp, "Host: %s:%d\n\n", server0, port);
//dat1line = malloc(2048);
while(1) {
if (fgets(buffer, 64, fp) == NULL) break;
else if(strcmp(buffer,"\r\n") == 0){
while(1) {
if (fgets(buffer, 64, fp) == NULL) break;
if(strcmp((buffer+strlen(buffer)-1),"\n") == 0){
strncat(databuffer,buffer,strlen(buffer)-1);
break;
}else{
strcat(databuffer,buffer);
}
}
break;
}
}
strcpy(dat1line, databuffer);
close(fd);
close(fp);
return 1;
}
ただ、もしかしたら改行コードの関係で
else if(strcmp(buffer,"\r\n") == 0){ の行を
else if(strcmp(buffer,"\n") == 0){ にしないとだめかも。 あ、おもいっきしdatファイルがないときの
処理とか書いてないし、、
ま、いっか。 >>189
>DNS的手法を使ったスレタイ等の取得は形勢不利と決め付けて
なぜこのように思われたのでしょうか?
エンコードとか分割などの方法があると思うのですが。 >>199
ほぅほぅ
どうやるんですか?
( ̄ー ̄)ニヤリッ
■ このスレッドは過去ログ倉庫に格納されています