■スレッドリストへ戻る■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 最新50
monazilla
- 23 :デフォルトの名無しさん :2001/02/10(土) 23:02
- 板一覧の取得方法って
http://www.2ch.net/bbsmenu.html
を解析すればいいの?
- 24 :デフォルトの名無しさん :2001/02/10(土) 23:15
- ・・・なんか、VC++の奴らが混ざってねえか?(w
VCLでオープンソースな。
Borland以外の奴は他すれでやってくれ。
- 25 :デフォルトの名無しさん :2001/02/10(土) 23:26
- 単に、Delphiの人達やる気ないんじゃない?
- 26 :デフォルトの名無しさん :2001/02/11(日) 00:02
- 言語はなんでもいいと思うんだけどね。。
- 27 :デフォルトの名無しさん :2001/02/11(日) 02:09
- >>20
ギコナビ@ヒロユキです。
ギコナビはHTTPCLIっていうのを使ってます。
なかなか高性能ですよ。
あと、このスレ面白そうだね。
オープンソースプロジェクトだと、様々な人たちの力で成り立つわけですが、
だれか、一人の人がまとめる役をしないといけないのではないでしょうか?
ここの1さんが、まとめる役とかしないのですか?
まずは、言語からはなれて、分析/設計をするのが先のような気がするよ。
言語を決めるのは、それが終わってからでも、遅くは無いと思うよ。
みんなで適当に進めても、アプリケーションは出来ないよ。
それじゃ、みなさん、がんばってください。
僕も仕事が暇になったら、参加させてもらいます。
- 28 :デフォルトの名無しさん :2001/02/11(日) 02:46
- とりあえずこれを実装してまえ
2chログ巡回ツール「ギコナビ」作ってみました。
123 名前:>122投稿日:2001/02/02(金) 01:15
エラー処理がないけど、とりあえずこんなんでいいのかな?
T2chDownloaderさえ誰かがまともに実装してくれれば
その他のコンポ、フロントエンド(UI部分)なんてすぐでっち上げられるよ。
type
// 基本クラス
T2chObject = class(TComponent)
protected
FItems: TList;
// function GetItems(Index: Integer): T2chObject;
protected
property Url: String;
property Caption: String; // 見出し
procedure Realod; // ダウンロード開始
property Count: Integer;
// property Items[Index: Integer]: T2chObject read GetItems;
published
property OnReload: TNotifyEvent; // ダウンロード開始
property OnReloaded: TNotifyEvent; // ダウンロード終了
end;
// 2ch全体
T2chNet = class(T2chObject)
public
property Items[Index: Integer]: T2chBoard read GetItems;
end;
// 板リスト
T2chBoard = class(T2chObject)
public
property Items[Index: Integer]: T2chThread read GetItems;
property Category:
end;
// スレリスト
T2chThread = class(T2chObject)
public
property Items[Index: Integer]: T2chThread read GetItems;
end;
// レスリスト(たぶんflyweight)
T2chResponse = class(T2chObject)
public
property No: Integer; // 番号
property Email: String; // メアド
property DateTime: TDateTime; // 書込日時
property Lines: TStrings; // 本文
end;
// ダウンローダ
T2chDownloader = class(T2chObject)
private
FQueue: TObjectQueue; // スタックのがいいかも??
public
property Online: Boolean;
property CacheDirectory: String; // ローカルキャッシュ
procedure Request(Target: T2chObject);
procedure Cancel(Target: T2chObject);
end;
- 29 :幸運の国 :2001/02/11(日) 03:08
- 開発言語はなんでしょうか。とりあえずCでいいなら>>23さんの
部分ならありますんで汚いソースですが、、
更に言うとめちゃくちゃへぼいです。訂正してくれたら私も嬉しい。。
void MasterMake(void)
{
FILE *fp,*fp2;
HANDLE hFile;
DWORD FileSizeLow,dwAccBytes;
OPENFILENAME ofn;
char *lpBuffer,stp[32][128],categsf[32];
int i,j,k,t,p,st,ls,servsuu,length[SERVERNMAX],categn = 0,flag = 0;
//bbstable.htmlはhttp://salad.2ch.net/bbstable.html
//ファイル開いてメモリに書き出してます。
hFile = CreateFile("offboard\\bbstable.html",0,FILE_SHARE_READ |
FILE_SHARE_WRITE,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
FileSizeLow = GetFileSize(hFile,NULL);
CloseHandle(hFile);
lpBuffer=new char[FileSizeLow+1];
GetOpenFileName(&ofn);
hFile = CreateFile("offboard\\bbstable.html",GENERIC_READ,
0,0,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
SetFilePointer(hFile,0,0,FILE_BEGIN);
ReadFile(hFile,lpBuffer,FileSizeLow,&dwAccBytes,NULL);
lpBuffer[dwAccBytes] = 0;
CloseHandle(hFile);
- 30 :幸運の国 :2001/02/11(日) 03:09
- //ここら辺はオフボード落としてtextの中身確認して下さい
//全サーバの種類を配列に格納してます。後で比較する為
fp2 = fopen("offboard\\server.txt","r");
for(i=0;fscanf(fp2,"%s",stp[i]) != EOF;i++) length[i] = strlen(stp[i]);
servsuu=i;
fclose(fp2);
fp = fopen("offboard\\masterboard.dat","w");
//カテゴリ分けする為にカテゴリの名前を読み出してその位置を見つけます
fp2 = fopen("offboard\\category2.dat","r");
fscanf(fp2,"%s",categsf);
st = strstr(lpBuffer,categsf) - lpBuffer;
- 31 :幸運の国 :2001/02/11(日) 03:10
- for(categn=0;fscanf(fp2,"%s",categsf) != EOF;categn++){
ls = strstr(lpBuffer,categsf) - lpBuffer;
for(i=st;i<ls;i++){
flag = 0;
if(lpBuffer[i] == '='){
for(j=0;j<servsuu;j++){
if(strncmp(stp[j],&lpBuffer[i+8],length[j]) == 0){
fprintf(fp,"%d\t%s\t",categn,stp[j]);
flag=1;
break;
}
}
if(flag == 1){
for(k=i+length[j]+9;lpBuffer[k] != '/';k++) fprintf(fp,"%c",lpBuffer[k]);
fprintf(fp,"\t");
for(t=k;t<k+64;t++){
if(lpBuffer[t] == '>'){
for(p=t+1;lpBuffer[p] != '<' && p <= t+14;p++)
fprintf(fp,"%c",lpBuffer[p]);
fprintf(fp,"\n");
break;
}
}
}
}
}
st = ls;
}
delete []lpBuffer;
fclose(fp2);
fclose(fp);
return;
}
- 32 :幸運の国 :2001/02/11(日) 03:12
- タブが消えてしまいましたが、、わかねーぞボケって部分があったら説明します。
- 33 :デフォルトの名無しさん :2001/02/11(日) 03:19
- CreateFileでネットワーク越しのhtmのソース(やバイナリファイル)開けちゃうの?
- 34 :デフォルトの名無しさん :2001/02/11(日) 04:44
- 開けます。>>33
- 35 :デフォルトの名無しさん :2001/02/11(日) 12:03
- 2chのCGIの詳細な仕様が欲しいんですけど、
どっから手に入ります?
- 36 :デフォルトの名無しさん :2001/02/11(日) 12:49
- >>34
ダウンロードに関してはCreateFile, ReadFileだけで十分ってことかな?
そうするとDelphiのHTTP系コンポを使う意味あるの?
- 37 :デフォルトの名無しさん :2001/02/11(日) 14:04
- >>27ギコナビ@ヒロユキ、こんにちは
http://users.swing.be/francois.piette/indexuk.htm
これですか。がいしゅつか?
ギコナビ自体おおよそ基本部分が出来るまで
どのくらいかかっているんでしょう?
- 38 :turbo type D :2001/02/11(日) 14:46
- >>31-32
わかりにくいぞボケ..
いや、失敬。
エディタの置換使うかこれアプしたから使いナ。
http://zurubon.virtualave.net/source.cgi
program&nbsp;nbsp;
uses
&nbsp;&nbsp;SysUtils,
&nbsp;&nbsp;Clipbrd;
{$R&nbsp;*.RES}
var
&nbsp;&nbsp;S:&nbsp;String;
begin
&nbsp;&nbsp;S&nbsp;:=&nbsp;Clipboard.AsText;
&nbsp;&nbsp;S&nbsp;:=&nbsp;StringReplace(S,&nbsp;'&nbsp;',&nbsp;'&nbsp;',&nbsp;[rfReplaceAll]);
&nbsp;&nbsp;S&nbsp;:=&nbsp;StringReplace(S,&nbsp;#9,&nbsp;'&nbsp;&nbsp;&nbsp;&nbsp;',&nbsp;[rfReplaceAll]);
&nbsp;&nbsp;Clipboard.AsText&nbsp;:=&nbsp;S;
end.
- 39 :幸運の国 :2001/02/11(日) 17:11
- >>38 そこははじかれたんで^^;
ドル猫様の使わせていただきました。
http://green.nttec.com/tech/read.cgi?KEY=981878874
今回のはローカルにファイルが置いてなくてもそのまま作れます。
でも腐ってるので改良お願いします。
ちなみにブラウザ最大化しないとずれるから見にくいっす。
- 40 :幸運の国 :2001/02/11(日) 17:40
- http://green.nttec.com/tech/read.cgi?KEY=981880639
ゴミが混じってたんでデバッグしました。
- 41 :デフォルトの名無しさん :2001/02/11(日) 18:58
- http://salad.2ch.net/bbstable.html得られるでリンク先から.datを得るのは
どうやってやるの?
- 42 :幸運の国 :2001/02/11(日) 20:01
- 例えばこのスレッドならhttp://piza.2ch.net/tech/dat/981726544.dat
ここからDLすればいいです。実は私も以前にオフラインビューワ作ろうとしたんですが、
スキルの無さと、他の皆さんが次々に公開された事で断念しました。
あんまり力になれないかもしれませんが知ってる事があれば出来る限り協力します。
- 43 :デフォルトの名無しさん :2001/02/11(日) 20:15
- >>35 http://tako.2ch.net/test/read.cgi?bbs=perl&key=978059673
- 44 :35 :2001/02/11(日) 20:29
- >>43
う〜ん、直接2chの仕様ってわけではないのか。
でも、だいぶ分かってきたぞ。
ポイントはこれか?
http://piza.2ch.net/tech/index2.html
http://piza.2ch.net/tech/subject.txt
http://piza.2ch.net/tech/dat/981726544.dat
- 45 :デフォルトの名無しさん :2001/02/11(日) 20:55
- なーんだ、ギコBASICで開発じゃないのか・・・。
- 46 :デフォルトの名無しさん :2001/02/12(月) 00:02
- >>1
↑とかをマウスポインタをあてると、その部分がHintで表示されるけど、
それってどうやってやるのか、教えて下さい。キボンヌ。
- 47 :デフォルトの名無しさん :2001/02/12(月) 00:18
- >>129
「どうやって」って具体的に「何が」が分からないのですが、
ギコナビはTHintWindowを使っています。
ポイントされたら、
1、ポイントされたURLをパース。
2、ログを検索。
3、存在したら指定行を取り出す。存在しなかったら終了。
4、取り出したログの行をパース。
5、THintWindowのインスタンスを生成し、表示する文字列やらを設定。
6、表示
これだけ。
- 48 :デフォルトの名無しさん :2001/02/12(月) 00:38
- 一番最初のポイントされたURLをパースってのがわからんです。
それ以外は、分かるんですが…。
- 49 :デフォルトの名無しさん :2001/02/12(月) 00:47
- >>131
Delphiでいいのかな?
TWebBrowserのOnStatusTextChangeでポイントされたURLがとれるでしょ?
・・・read.cgi?bbs=tech&key=nnnn&st=nn&to=nn
こんな感じで取得出来るよね。
んで、文字列がURLだったら、あとは、?と&でバラバラにして
bbsとkeyとstとtoの左側を取ればログの場所は判断できるでしょ。
本当は、ポイントされた場所の文字列(>>nn)を取得して判断したほうが
スマートだと思うけど、これやるには面倒そうな感じ。
フリーのTWebBrowser拡張版みたいなコンポなら簡単に出来るかも。
そっちのほうは、ギコナビでは使ってないので分かりません。
- 50 :デフォルトの名無しさん :2001/02/12(月) 00:49
- ごめん。ギコナビがバグっていて、レス番号がdでもない数字になってた。
- 51 :デフォルトの名無しさん :2001/02/12(月) 00:55
- >TWebBrowserのOnStatusTextChangeでポイントされたURLがとれるでしょ?
これを知らなんだ。これで、全部わかったです。ありがとー。
オレもブラウザ作るかな。
- 52 :デフォルトの名無しさん :2001/02/12(月) 02:24
- どうせならIE使わずにってのは、無理?
.DATを直に拾ってくるなら問題ないよね。
- 53 :デフォルトの名無しさん :2001/02/12(月) 02:26
- >>52
表示が面倒だよ?
- 54 :デフォルトの名無しさん :2001/02/12(月) 07:07
- 俺もそう思う
- 55 :turbo type D :2001/02/12(月) 16:25
- >>52
ハイパーリンクがあるからこそ
使いやすいな。
IE使わないならAirWebの2chプラグインというのもある。
- 56 :デフォルトの名無しさん :2001/02/12(月) 18:21
- アスキーアートが崩れると
誰にも評価されないソフトと化す
- 57 :デフォルトの名無しさん :2001/02/12(月) 18:28
- 今日、帰りにDelphi買ってきた。
プログラミング言語って高いな。
- 58 :デフォルトの名無しさん :2001/02/12(月) 19:32
- いくらで買った?
- 59 :デフォルトの名無しさん :2001/02/12(月) 19:57
- >>58
一番安いヤツ。
一万六千円くらいの。
あーでももう挫折の予感。
- 60 :デフォルトの名無しさん :2001/02/12(月) 20:28
- 本棚にでも飾っとけ>59
- 61 :59 :2001/02/12(月) 20:31
- こういうのに触れると、ソフトウェア作者の凄さが痛いほどわかるな。
HelloWorld!万歳!あああああ!
何か本買ってくれば良かった。
- 62 :59 :2001/02/12(月) 20:37
- こんなでかいの本棚はいんねえよ。>>60
なんだこの説明書の厚さ。バーカ!Delphiのバーカ!
みなさんこんなのどうやって勉強されたんですか
帰り道のあのワクワクが嘘みたいだ
- 63 :turbo type D :2001/02/12(月) 20:44
- 説明書なんて誰もみない。バカかおまえ?
初心者用の書籍探してそれで勉強しろ。
あと、ネットで2chじゃない所を利用しまくって己を磨け。
http://www.valley.ne.jp/~masaiku/index1.htm
- 64 :turbo type D :2001/02/12(月) 20:46
- だいたい、モナジラスレで関係ない話題ふるな。
VB厨房と違ってDelphi使いならエレガントに学習しなさい。
- 65 :デフォルトの名無しさん :2001/02/12(月) 20:49
- >>63
あんがと。とりあえず本買うわ。
- 66 :ヒロユキ@ギコナビ :2001/02/13(火) 00:41
- なんだよー。全然進まないね。キタイシテイルノニ。
turbo type Dタンが進める役したら?
すごくスキルありそうだし。
- 67 :デフォルトの名無しさん :2001/02/13(火) 02:35
- ギコナナビとかと違いを出すために誰かMindでやってみるってのは
- 68 :turbo type D :2001/02/13(火) 12:33
- スキルねーよ。>ヒロユキ(w
とりあえず、TUIWebは導入したばかりで
俺はIndyでやるよ。
D6も見据えながら。
- 69 :デフォルトの名無しさん :2001/02/13(火) 13:58
- ソース表示をすれば、タブ数はわかるるる
- 70 :turbo type D :2001/02/13(火) 17:51
- IndyでHTTPをダウンロードするのはどうするんですか?
- 71 :turbo type D :2001/02/13(火) 18:16
- Demo見たらわかった。。。。。
今後はボロカスに言われたらやだから
質問するときはコテハンヤメテおこ。
- 72 :turbo type D@monazilla :2001/02/13(火) 18:51
- >>23>>41
の質問をまとめます。
まずはじめに
http://salad.2ch.net/bbstable.html
を解析する事で板一覧情報は取得でき
それを解析してプログラム板のリンク先
http://piza.2ch.net/tech/index2.html
を取得して変換して
http://piza.2ch.net/tech/subject.txt
のデータを取得できる。
それにxxxx.datとかかれているので
http://piza.2ch.net/tech/dat/981726544.dat
これをDownLoadすれば発言内容が現れるという事だね。
これをローカルに保存してWebBrowserで開くとよい。
これで合ってますよね。
>>44でガイシュツだ。
- 73 :デフォルトの名無しさん :2001/02/13(火) 18:54
- >>72
dat ファイルは単なる CSV なので、
HTML のタグをつけてやらなきゃいけない。
- 74 :デフォルトの名無しさん :2001/02/13(火) 20:39
- とりあえずジオにディスク12MBとりました。
URL
http://www.geocities.co.jp/SiliconValley-Oakland/9028/
ID : monazilla
PW : mona
- 75 :turbo type D@monazilla :2001/02/13(火) 20:42
- トクトクの方がいいかもよ。
容量無制限だしー。CGI可だし。
とりあえず、IndyとUIWebBrowserはインストしておいてヨシって
ことでいいですか〜?
- 76 :turbo type D@monazilla :2001/02/13(火) 20:49
- で、IndyのIdHTTP使って任意のページをUIWebBrowserに表示させるコード。
//*********************************
object IdHTTP1: TIdHTTP
RecvBufferSize = 1024
HandleRedirects = True
ProtocolVersion = pv1_0
Request.Accept = 'text/html, */*'
Request.ContentLength = 0
Request.ContentRangeEnd = 0
Request.ContentRangeStart = 0
Request.ProxyPort = 0
Request.UserAgent = 'Mozilla/3.0 (compatible; Indy Library)'
Left = 88
Top = 112
end
//*********************************
procedure TForm1.NanashiAction1Execute(Sender: TObject);
var
SL: TStringList;
SaveFileName: String;
Flag: OleVariant;
begin
SaveFileName := ExtractFilePath(Application.ExeName)+'URLData.html';
SL := TStringList.Create;
try
IdHTTP1.Request.Username := '';
IdHTTP1.Request.Password := '';
IdHTTP1.Request.ProxyServer := 'xxx.xx.xx.xxx';
IdHTTP1.Request.ProxyPort := 80;
IdHTTP1.Request.ContentType := '';
IdHTTP1.Intercept := nil;
SL.Text := IdHTTP1.Get(Edit1.Text);
SL.SaveToFile(SaveFileName);
Flag := 0;
UIWebBrowser1.Navigate(SaveFileName, Flag, Flag, Flag, Flag);
finally
SL.Free;
end;
end;
- 77 :turbo type D@monazilla :2001/02/13(火) 20:50
- TUIWebBrowser/TWebBrowserでHTMLファイルを作らなくても
ブラウザ表示させる方法はどうやるんだけ?
>>ご教授きぼーん。
- 78 :デフォルトの名無しさん :2001/02/13(火) 22:01
- >>74
ワラワカシテモラタ
- 79 :デフォルトの名無しさん :2001/02/13(火) 22:28
- Indyのコンポどこー?
- 80 :turbo type D@monazilla :2001/02/13(火) 22:35
- 見てなかったから気が付かなかったけど、
>>74
>turbo type D's page
つのはやめてくれよ。
アヤシイページと俺とは何も関係ないんだから、
あそこ2ch嫌ってるし。
つか、一瞬、個人名バレたのかってヒヤっとしたから
心臓に悪い事はやめてくれ。まじ・(xДx
kylixにもDelphi6にも搭載される予定のネット関係コンポ
Indyのリンクきぼーんよ。
http://www.nevrona.com/Indy/
- 81 :デフォルトの名無しさん :2001/02/13(火) 22:40
- あ、やっぱまずかった?>>80
名前だけ消しときます。
- 82 :81 :2001/02/13(火) 22:41
- 勘違いでちた!>>80
- 83 :ヒロユキ@ギコナビ :2001/02/13(火) 23:18
- >>80
分かっていると思うけど、
・Indy は Server Edition 以上につく
だそうです。Kilixの話ね。
Kilix-MLからの情報です。
- 84 :デフォルトの名無しさん :2001/02/13(火) 23:24
- Server Editionだとホビープログラマはつらいですね。>>83
にしても話が進まないので分析/設計とプロトタイプ開発を
同時に進めるようなやり方で行きましょうか?
- 85 :デフォルトの名無しさん :2001/02/13(火) 23:29
- >>77
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
HtmlView: DispHTMLDocument;
begin
s := '<html><body><font color=red size="+3">て</font>すと</body></html>';
HtmlView := WebBrowser_V11.Document as DispHTMLDocument;
if HtmlView <> nil then HtmlView.body.innerHTML := s
end;
じゃダメ? ただし、いちどNavigateかGoHomeなどしておく必要アリ。理由不明。
- 86 :デフォルトの名無しさん :2001/02/13(火) 23:29
- プロトタイプってのは
技術的なプロトタイプね。
たとえばスレ一覧を取るだけのものとか。
- 87 :ヒロユキ@ギコナビ :2001/02/14(水) 00:23
- >>85
var
v: OleVariant;
begin
v := 0;
WebBrowser1.Navigate('about:blank', v);
end;
これを最初にやるのはダメかな?
>>84 >>86
76でスレ一覧を取れたも同然じゃん。
とりあえず、骨組みとなるクラスを考えましょう。
>>28にあったように、あのクラスを元にして、決まったら一気に実装。
- 88 :turbo type D@monazilla :2001/02/14(水) 09:51
- >>レス、サンクス
今から調べる。
コード規約みたいなのを考えてほしい。
コメントの書き方や関数ヘッダのコメントなど。
自分のやり方だと、個人名が特定されそうでやだし〜。
あと、画面周りは
通常の貧弱なMainMenuとToolbarを使ってActionで実装するつもり。
そうするとオプソならではの
MenuBar/ControlBar/Coolbar/CuteBarに至る改造を
各々が楽しめるようになるだろう。
Formの位置保存コードなども誰でも実装できそうな部分は
含めない方針でとりあえずめざします。
とりあえずはIndyを使いますが
関数化しておくから、NMHTTPやHTMLCLIを使っての置き換えが
容易に可能なようにもしておきます。
かちゅーしゃのデザインが優れていると感じるので
似たようにします。
3ペインの左がTreeViewにして,2ch用お気に入りもこのTreeに入るようにしたい。
上を、ListView,vsReport/StringGrid→迷っている。
下をTWebBrowserのPageControlにします。
(俺はTUIWebBrowserを使うけど多分置き換え可能だろう)
他に代替案があったらご意見よろしく。
- 89 :turbo type D@monazilla :2001/02/14(水) 09:58
- 関係無いけど
コードにはAAを嫌になるほどいれたい。(藁
Delphi自体のフォントをPゴシックに出来ないのは残念。
- 90 :turbo type D@monazilla :2001/02/14(水) 10:02
- 追加。データ保存はIniファイルでやる。
本当はマルチユーザ対応などレジストリでやるのが楽でいいんだが
コアなユーザーはIni好きだから。
- 91 :デフォルトの名無しさん :2001/02/14(水) 10:19
- >>88
そこまで考えてくれるとありがてぇ
- 92 :turbo type D@monazilla :2001/02/14(水) 10:48
- >>83
Indyは付属してなくてもDowlLoadすればいい話じゃないか?
HELPファイルなんかはServer版しか日本語化されないだろうけど。
MLで聞いてみてよ。俺ROMってるから(藁
- 93 :turbo type D@monazilla :2001/02/14(水) 12:07
- Board一覧データの取得方法考えました。
クラスを作る
&nbsp;&nbsp;//インスタンスが一つだけのクラス
&nbsp;&nbsp;T2chBoardList&nbsp;class
&nbsp;&nbsp;&nbsp;&nbsp;BoardCategorys:&nbsp;TList;//カテゴリのリスト
&nbsp;&nbsp;end;
&nbsp;&nbsp;//カテゴリごとのクラス
&nbsp;&nbsp;TBoardCategory&nbsp;=&nbsp;class;
&nbsp;&nbsp;&nbsp;&nbsp;Title:&nbsp;String;//【おすすめ】などのカテゴリ名
&nbsp;&nbsp;&nbsp;&nbsp;BoardItems:&nbsp;TList;//カテゴリに属する板のTBordItemを保持
&nbsp;&nbsp;end;
&nbsp;&nbsp;//各板ごとのクラス
&nbsp;&nbsp;TBoardItem&nbsp;=&nbsp;class
&nbsp;&nbsp;&nbsp;&nbsp;Title:&nbsp;String;//板のタイトル
&nbsp;&nbsp;&nbsp;&nbsp;Name:&nbsp;String;//板の英語名
&nbsp;&nbsp;&nbsp;&nbsp;URL:&nbsp;String;//板のURL
&nbsp;&nbsp;end;
--http://salad.2ch.net/bbstable.htmlのソースから
2chBoardListを生成
S&nbsp;:=&nbsp;bbsSource;
CategoryDataStart&nbsp;:=&nbsp;Sから【&lt;B&gt;を探索
CategoryDataEnd&nbsp;:=&nbsp;Sから次の位置の【&lt;B&gt;を探索/見付からない場合は文末
CategoryData&nbsp;:=&nbsp;SのCategoryDataStartからCategoryDataEndまで
CategoryDataが取得できなかったらエラー
SからCategoryDataは削除
CategoryTitleStart&nbsp;:=&nbsp;CategoryDataから【&lt;B&gt;を探索
CategoryTitleEnd&nbsp;:=&nbsp;CategoryDateから&lt;/B&gt;】
CategoryTitle&nbsp;:=&nbsp;CategoryDataのCategoryTitleStartからCategoryTitleEndまで
CategoryTitleが取得できなかったらエラー
BoardCategoryを生成2chBoradListに登録、タイトルに代入
CategoryDataからCategoryTitleは削除
BoardItemCount&nbsp;:=&nbsp;CategoryDataの中ノ&lt;Aと&lt;/A&gt;の数を数える→一致しなければエラー
for&nbsp;i=0&nbsp;to&nbsp;BoardItemCount-1&nbsp;do
begin
&nbsp;&nbsp;BoardItemDataStart&nbsp;:=&nbsp;CategoryDataから&lt;A&nbsp;HREF=を検索
&nbsp;&nbsp;BoardItemDataEnd&nbsp;:=&nbsp;CategoryDataから&lt;/A&gt;を検索
&nbsp;&nbsp;BoardItemData&nbsp;:=&nbsp;CategoryDataのBoardItemDataStartからBoardItemDataEndまで
&nbsp;&nbsp;CategoryDataからBoarItemDataは削除
&nbsp;&nbsp;BoardItemDataは&lt;A...&gt;...&lt;/A&gt;という文字列になっているので解析して
&nbsp;&nbsp;&nbsp;&nbsp;リンク先とタイトルを取得する。
end;
- 94 :デフォルトの名無しさん :2001/02/14(水) 13:20
- >>85
IEコンポは作成直後はHTMLDocumentがnilになってるからね。
innerHTML、outerHTMLを設定するんじゃなくてHTMLDocumentに
writeすれば問題ない。けど、フォントが変になったような気がする。
かちゅーしゃはHTMLにフォント設定を埋め込むことでこれを回避してるようだ。
>>87
(少なくともVC++/MFCでは)Navigateが非同期動作になるので、一旦Navigate
して、NavigateComplateかDocumentCompleteのイベントをトリガにする
必要がある。
まぁ、about:blankに飛ぶぐらいはすぐだろうから、WebBrowserのステータス
でループさせて終了を待ってもいいけどね。
あと、データアクセス層をきちんとつくっとかないと、マルチスレッドになって
複数のスレッドから同時にアクセスがあったときの処理が複雑になる。
Mutexで排他処理する部分は最小にしたいからね。
このような、ネットワークアプリは非同期処理との戦いになると思う。
- 95 :turbo type D@monazilla :2001/02/14(水) 13:23
- >>85>>87
スマソ、追加で教えてキボーン
DispHTMLDocumentやWebBrowser_V11って何?
- 96 :turbo type D@monazilla :2001/02/14(水) 13:28
- >>94厳しいな(TДT
浮津堕コーディングしよう。
- 97 :turbo type D@monazilla :2001/02/14(水) 13:50
- >>93を考えていて>>28のクラスを再度確認してみた
T2chObjectっておかしくないか?
すべての基底クラスにダウソ開始/終了
なんていらないと思うのだが、
特にT2chResponseがT2chObjectから継承する
必要はないんじゃないか?
俺のクラス設計が甘いのか?わからない。
スレのダウンロードから
レス一つ一つのダウンロードメソッドを呼ぶ方がいいのか?
- 98 :デフォルトの名無しさん :2001/02/14(水) 14:29
- 俺もBCB4で似たようなの作ってるんだけどさ、
(勉強目的だから、VCLはUI以外は極力使わないようにしてるけど)
WebBrowserでNavigate2したときの表示がどうなってるかイマイチわからん。
スレを表示するとき、HTMLファイルを作ってNavigate2したときって
すごく速いんだよね。表示開始が。
これに対して、IHTMLDocument2のinnerHTMLをいじると、
表示開始までが遅い。全部解析してから1行目を表示している感じ。
1000近くあるスレで、insertAdjacentHTMLしながら、
適度にApplication->ProcessMessages()を含めてみると、
開示までの時間は問題無いが、終了までに余計時間がかかる。
それよりも気になるのが、表示されている様子が目に見えること。
Navigate2だと一瞬で表示されるのに、上から一行ずつ表示されているのが
見えるよう。
ProcessMessages()を呼ぶタイミングを動的に変更しても同じ気がする。
パイプでも使ってるのか、それともparent(IHTMLWindow2)に何かあるのか。
つーか、手元に資料が全然無くて、すげー苦労なんだけど。
MSHTML_TLB.hは15MBもあるし・・・
- 99 :turbo type D@monazilla :2001/02/14(水) 14:41
- >>98
俺、まだNavigateとNavigate2の違いもわからん。
教えてくらさい。
98の話からすると、とりあえずファイルに書き出してから
読み込んだ方がいいって事か?
- 100 :turbo type D@monazilla :2001/02/14(水) 14:43
- 違いはURLにPIDLが使えるか否かだね。
で、PIDLって何だ?(w
- 101 :94 :2001/02/14(水) 15:10
- >>96
似たようなアプリを書いた経験からだよ。
>>98
スレ100個分ぐらいのHTMLをつくって一気にinsertAdjacentHTMLすれば
いいんじゃない?それか、HTMLDocumentにwriteするとさらに速かったような
記憶がある(MFCでしかやったことないので適当に置き換えてね。COMの
インターフェイスだからそんなに違わないと思うけど)。
あと、OnNavigateCompleteとOnDocumentCompleteで発生するタイミングが
結構違ったような気がする。どっちが速かったかは覚えてない。
>>99、>>100
PIDLじゃないと「マイコンピュータ」にNavigateすることができないね。
- 102 :98 :2001/02/14(水) 15:29
- >101 遅さについて
いや、いろいろ試したんだ。
parse等の時間を全部無視して
50レスにしたり、100レスにしたり200にしたり、全部一括にしたり。
でも、やっぱりProcessMessages時だけ「表示」が遅いんだ。
(ちなみに、Sleep等も試したけど、表示されなかった・・・)
いや、俺のマシンが遅いのも原因だし、
「気にならない程度の遅さ」と言われれば、その通りなんだけど。
NavigateCompleteとDocumentCompleteは、確かRefreshが絡むと
面倒だったんだよね。って、俺も覚えてない。
そうそう、TWebBrowser_V1&NavigateはIE3、
TWebBrowser&Navigate2はIE4以降。
- 103 :98続き :2001/02/14(水) 15:31
- フォントの問題は、
Create時にabout:blankにNavigate2しておいて、表示する時に
IHTMLDocument2Ptr doc; doc = browser->Document;
doc->charset = L"shift_jis";
doc->set_fgColor(0x000000);
doc->set_bgColor(0xEFEFEF);
doc->set_linkColor(0x0000FF);
doc->set_alinkColor(0xFF0000);
doc->set_vlinkColor(0x660099);
すれば、Win98SE+IE5.01の環境ではクリアできているけど、
IE5.5とかはどうなんでしょ?
Board一覧の取得は、俺もhttp://salad.2ch.net/bbstable.htmlを取ってる。
解析も同じ。('【'の検索)
【】の間をカテゴリ名として、board.txtを作ってる。
(2chブラウザと同じかな)
カテゴリ名の重複はそのまま放置し、読みこみ時に対応してる。
最後がindex2.htmlかを見て、2ch内部かどうか判断。
まちBBSは入らないが、datが取得できないのでそのままにしてる。
スレ一覧は、ListView→遅い、StringGrid→表示を停止させていても
一瞬待つのが嫌、という理由により、ListBoxのOwnerDrawにした。
(板によっては3000スレ近くがローカルにあり、マシンはPenII266)
表示終了までの時間はかかるが、動きが見えているので精神衛生上良い。
色を変えたりの小細工も出来る。
StringGridはスクロールバーが嫌だったのも理由の一つだけど、
まともなアプリを組んだ事のない素人なので、
やり方を知らないだけかもしれない。
- 104 :98 :2001/02/14(水) 15:40
- 連続でごめんなさい。
>>101をよく読んでなかった。
HTMLDocumentにwriteですか。ありがとうございます。
いろいろ試してみます。
・・・調べてみますと言えないのが悲しい。
サーチエンジンを使って、英語とも格闘して、試行錯誤します。
- 105 :デフォルトの名無しさん :2001/02/14(水) 16:04
- >>103
>【】の間をカテゴリ名として、board.txtを作ってる。
>(2chブラウザと同じかな)
うんにゃ。<B></B>だよ。じゃないと、www.2ch.net/bbsmenu.htmlを読めない。
- 106 :turbo type D@monazilla :2001/02/14(水) 16:14
- >>サンクス。
IE4以降限定でいいよね。
C++の人はDonut系ですか、すげ・詳しいな。
>>105
http://salad.2ch.net/bbstable.html
http://www.2ch.net/bbsmenu.html
どっちで取得するのが正しいの?
bbsmenu.htmlはメールリンクとかアってヤナ監事。
- 107 :デフォルトの名無しさん :2001/02/14(水) 16:15
- んじゃコード規約(Delphi)を勝手に決めます。
コメントの書き方だけど
//
// ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
// ( ´∀`)< 文字列からほげほげを抜き出す
// ( ) \________________________
// | | |
// (__)_)
//
function ....
やっぱこんなの?
あ、Delphiのエディタじゃ AA 無理だっけ?
- 108 :デフォルトの名無しさん :2001/02/14(水) 16:27
- end.の下の行は
//============== 終了==============
をつける。意味ないけど。
- 109 :98>105 :2001/02/14(水) 16:52
- その通りっす。すみませんです。
さらに、カテゴリの重複→カテゴリの連続っす。
あれから少し調べると、
SAFEARRAYとか、SafeArrayCreateVector()とか、更に未知の物が。
が、close:
Closes an output stream and forces the sent data to display.
なんて文も見かけたので、併せてもっと調べてみます。
- 110 :turbo type D@monazilla :2001/02/14(水) 16:53
- >>107 実に助かるよ。
仕事中にコーディングしていると、ぶっ殺されそうだ。(ww
モナーのセソフ
機能の説明だけだと、わかりにくいから
更新履歴と引数/戻り値の説明も
入れれるようにしてプリ〜ズ
//============== 終了==============
- 111 :turbo type D@monazilla :2001/02/14(水) 17:13
- 等幅フォントだと、こんなもんかな?
//
// ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
// (´∀`)< ボードの一覧をhttp://salad.2ch.net/bbstable.htmlより得る
// ( ) \________________________
// | | |
// (__)_)
//
しかし、このコメントがついてたら
まじで周りにビクビクしながらコード書かなきゃいけないから
すげー疲れる(w
- 112 :デフォルトの名無しさん :2001/02/14(水) 17:31
- 等幅でもずれとりまんがな。空白が寄せられただけ?
ところで、94さんは2chブラウザーの作者さんのような気がするけど、違うのかな?
- 113 :デフォルトの名無しさん :2001/02/14(水) 17:45
- >>112 違わないよ。
- 114 :98 :2001/02/14(水) 18:08
- かなり戻るけど、>>93のTBoardCategoryは必要ないと思う。
というのは、いずれ、貼りつけられたスレへのリンクからTBoardItemを
検索したくなるだろうから。
鯖移転にも対応するために、板名で検索できること
(さらに、mac板やbike板に対応すること)を考えると、
TBoardItemはどっかでまとめて持ち、
TreeNode->Dataに細工するのがいいと思う。
もしかしたら参考になるかもしれないので、
俺の使っている部分をそのまま載せます。
VCLも知らないので、批判もよろしく。
Board型はstaticメンバーで全体を保持。
Board::BoardCount()で全板数、
Board::At()で順アクセス、Board::Find()で検索、etc
Boardのインスタンスは、Name()がnilならカテゴリ名、
Name()の中身があればそれぞれの板。
stringとSTLを使っているのは、それらの勉強も目的だから。
TTreeNodes *tree = BoardTree->Items;
tree->Clear();
#if 0
TTreeNode *root = tree->Add(NULL, "2ちゃんねる");
//root->Data = NULL;
#else
TTreeNode *root = NULL;
#endif
int n = Board::BoardCount();
string catename;
vector<Board *> boards;
for (int i = 0; i < n; ++i) {
Board *bd = Board::At(i);
if (bd->Name().empty()) {
if (!boards.empty()) { //カテゴリ名の連続に対処するため
TTreeNode *cate = tree->AddChild(root, catename.c_str());
cate->Data = NULL;
vector<Board *>::iterator it;
for (it = boards.begin(); it != boards.end(); ++it) {
TTreeNode *tmp = tree->AddChild(cate, (*it)->Title().c_str());
tmp->Data = *it;
}
}
boards.clear();
catename = bd->Title();
} else {
boards.push_back(bd);
}
}
- 115 :turbo type D@monazilla :2001/02/14(水) 18:57
- >>114
>TBoardCategoryは必要ないと思う。
ほっほー、そうなん。
mac板、bike板ってなんだろけ?
でも、もう殆ど実装してまった(゚Д゚)・・・・・・・
ま、データを保持するクラス階層は変更して
TreeViewの生成だけに利用するよ。
かちゅしゃーでも一応右端の色でわかれてるからなあ。
Boardクラスにカテゴリプロパ付けるだけで十分か?
それともTreeViewのTreeNodesとTreeNodeみたいに
データ構造をツリーと一覧の二通りのアクセスかましておきます。
98さんはVCL知らないか。
今日中に一覧をTreeで表示させたかったが、無理だわ。
また先ですわ。
- 116 :turbo type D@monazilla :2001/02/14(水) 19:04
- かちゅしゃは右端じゃなくて左端でした
あせって左右もわからなくなってる。
98さんはVCLバリバリ使ってる気がするが,,,
- 117 :デフォルトの名無しさん :2001/02/14(水) 20:06
- macとbikeってのはこれっす。
Mac
http://piza.2ch.net/mac/
mac
新Mac
http://teri.2ch.net/mac/
mac
バイク
http://tako.2ch.net/bike/
bike
自転車
http://mentai.2ch.net/bike/
bike
http://teri.2ch.net/test/read.cgi?bbs=mac&key=999999999
なんてのから板を特定するときに、'teri'の文字も必要だってことっす。
- 118 :デフォルトの名無しさん :2001/02/14(水) 22:20
- >>103
ListViewは速くはないけど、Delphi4から導入されたVirtualModeを使えば、そんなに遅くないです。
でもこれだとオーナードローする必要があり面倒です。
ちなみに、どうせオーナードローするならStringGridよりDrawGridの方が多少速いです。
もっとも上にあげたものは全てTListからのオーナードローになると思うので、どれでも十分な
速さですけど。
実は、オレも作成中だったりして。
- 119 :28のクラス書いた人 :2001/02/14(水) 22:34
- しばらくこないうちにだいぶ進んだなぁ。
個人的にはhtml,datダウソ部分の構造が先に知りたいです。
>97 名前:turbo type D@monazilla投稿日:2001/02/14(水) 13:50
>>93を考えていて>>28のクラスを再度確認してみた
>T2chObjectっておかしくないか?
>特にT2chResponseがT2chObjectから継承する
>必要はないんじゃないか?
T2chResponseは(既にある)T2chThreadの各レスにアクセスするため窓口だから
確かにダウソ開始/終了はいらないね。
いらないけどダウンロード可能・不可能をクラスで分類すると
数が増えて嫌だったというだけ。
まあレスをクラス化してT2chThreadのプロパティにすること自体は必要でしょ。
>すべての基底クラスにダウソ開始/終了
>なんていらないと思うのだが、
T2chResponse以外はダウソ開始・終了が必要でしょ。
>// ダウンローダ
>T2chDownloader = class(T2chObject)
>private
> FQueue: TObjectQueue; // スタックのがいいかも??
>public
この部分はdequeにして、ユーザーのクリックを優先的に処理して(stack)、
巡回を後回しに(queue)するのがいいかも。
マルチスレッドによる複数同時処理は
全部このクラスの内部に隠蔽しちゃえばすっきりすると思う。
とりあえずシングルスレッドで実装しといてあとで増やすこともできるし。
あとT2ch(Downloadable)Object自身に
巡回スケジュール&履歴プロパティがあるとよいかも。
turbo type D@monazillaたんがむばってね。
- 120 :デフォルトの名無しさん :2001/02/14(水) 22:45
- >>118
OwnerData使うだけで速いよ、OwnerDrawする必要なんてない。
- 121 :turbo type D :2001/02/14(水) 23:48
- むずかしいなーー、絶対ムズイよ。>>119
ある程度の所まで実装してアプしたら、
みんなさん、頼みまっせ。
htmlダウソならコンポつかっちゃってるけどそれじゃだめ?
ダウソドーロは全部スレッド化しろってぇ。難しいなあ。
- 122 :turbo type D :2001/02/15(木) 00:01
- StringGridのスクロルバーは何とかできるが
マルチセレクトと非選択をやろうとするとだるい。
かちゅしゃと同様なUIだと
スレ表示されていてマルチセレか非選択状態ってのは
必要ないとも思える。
しかし、3000は厳しいな。
317KB
新着レスの表示
スレッドリストへ戻る 全部 前100 次100 最新50
0ch BBS 2004-10-30