建立自己的csdn知識管理庫(1)
csdn是這兩年我上來頻率最高的論壇,以前喜歡到大富翁。但是很多時候上來是為了搜索以前的帖子,解決在項目開發中的一些實際問題,搜獲不小。但是也有一個遺憾,就是csdn有時候訪問速度非常的慢,而且也沒有提供官方的離線浏覽器。所以就萌生的寫一個下載csdn帖子的軟件。然後把從csdn接收到的帖子放在自己的知識管理系統裡面,或者做成chm 這樣效率就高多了。
再仔細一看 發覺csdn上面的所有帖子都是保存為XML的。這些就更方便了,下載下來後就可以放在數據庫裡面。或者做成Html文件。
http://community.csdn.Net/Expert/TopicVIEw1.ASP?id=
後面循環加上一個7位數的數字就可以得到一個帖子。
例如:http://community.csdn.Net/Expert/TopicVIEw1.ASP?id=2800001
多線程 循環就搞定. 為了以後訪問的速度, 可以1000條就建立一個目錄 ,也就是一個目錄只保存1000條。
開始用.Net寫的一個winform,軟件 發覺速度下載有點慢。後來改為Delphi.部分代碼如下:
procedure TForm1.SavePage(strId: string; strDir: string);
begin
try
UrlDownloadToFile(nil, Pchar(Edit1.text+ strId), Pchar(strDir), 0, nil); //保存ur連接到一個文本文件
except
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
strDir: string;
intStar:integer;
intEnd:integer;
i:integer;
FileName:string;
begin
try
intStar:=strToInt(edit2.Text);
intEnd:=strToint(edit3.text);
Edit4.Text:=Copy(IntTostr(intStar),0,4);
strDir:='E:\CSDNBBS\'+Edit4.Text ;
createDir(strDir);
dddd:=true;
for i:=intStar to intEnd do
begin
if(i mod 1000)=0 then
begin
Edit4.Text:=Copy(IntTostr(i),0,4);
strDir:='E:\CSDNBBS\'+Edit4.Text ;
createDir(strDir);
end;
self.Refresh;
if dddd =false then
break;
Application.ProcessMessages;
try
FileName := strDir+'\' +IntTostr(i) + '.XML';
SavePage(IntTostr(i), FileName);
Edit2.text:=IntTostr(i);
except
end;
end;
except
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
dddd:=false;
end;