建立自己的csdn知识管理库(1)

发布时间:2008-6-21 22:35:50文章来源:佚名浏览次数:
选择您适合观看的字体大小:  
建立自己的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; 

  注意: 在uses里面加入:urlmon; 


我已经下载了100多万的帖子了 :) 
  打印新闻关闭窗口