现在为止,我看到ChinaOk和MSVCer开发的与csdn助手有关的工具,ChinaOK好像是用delphi做的(http://www.ChinaOK.net/down/csdn.zip),MSVCer好像用MFC(http://cool102.top263.net/263index.html
)为了让每个人都能够开发属于自己的csdn助手,普及COM知识,提高全民COM素质,我基于COM技术开发一个小咚咚(支持多线程),任何人利用这个咚咚,使用VC/VB/Delphi, 都可以写出自己的助手小程序来解决自己遇到的问题,比如:1. 自己开的帖子需要关注是不是有人回,可以利用本程序的IOCSNDTopic接口每五分钟检测一次是否有人跟贴
2. 关注自己csdn上的好友上线和在线,使用IOCSDNOnlineUsers接口(你要枚举在线专家也是用这个接口)
3. 你要实时查看比如VC技术版面当前的最新帖子,可以用IOCSDNForumHeadPage接口
4. 我有个未完的心愿,就是把csdn上的帖子抓下来,放到自己的数据库里 (因为想等自己写完根据数据库结构自动生成访问数据库的ado代码之后再做这一步,但是...  :(
5. ...csdn上的帖子都是基于xml的格式。访问95%的帖子比较容易,还有1%是下载下来的xml帖子中间含有字符零:) 3%是已经被删除的(或者更多),还有1%是我也对付不了的:xml文档里面有non-ascii字符,比如(所以如果你要按帖子ID来爬帖子的时候,记得,如果发现连续10多个帖子都不能访问,可能到了最新,或者你使用IOCSDNGetMaxTopicId接口(奇慢))让大家腾出手来做实用的界面,功能,让这个开发包来对付底层这些污七八糟的异常,是本人的目的所在我下一步想做的是封装登陆之后的那些功能的接口,比如取得自己的短消息,获得自己参与的帖子... 但是本人最近体力耗尽,所以不知道什么时候会开始,而且,写程序和发布接口不一样,写着自己玩无所谓,发布出去的话,毕竟要更负责,拿这些个接口来说,为了解决各种各样的bug, 奋战了三天才到现在的地步,而把所有的功能建立起来可以用,顶多三天(嘿嘿,这样倒符合软件工程的时间比例),另外,这部分csdn最近改版太严重,所以也不大想做(做了,一改版又要重新发布,多麻烦,所以满足最基本的要求先)----------------
我把这个开发包放在yahoo的briefcase里,可以从下面这个网址下载,后面那串不认识的东西也要加上才行:
http://us.f1.yahoofs.com/users/1105dc58/bc/sharing/CSDNDownloader.0.9.zip.zip?bc2tA88A9dnMZ5CJDoc目录下面有一个“使用手册.htm”,请一定先阅读 (肯定漏写了好多东西,比如现在想起来的,因为这个com组件使用的是wininet的函数来访问csdn服务器,所以,只要你的IE能访问csdn, 这个组件就能访问(IE用代理出去,它就用同样的代理出去),还有关于发布的问题,因为我用的都是w2k, 没有测试过,不过mfc肯定没有用到:)这个可以以后慢慢讨论)对于vc/vb/delphi,开发包里面都已经有现成的sample,可以参考欢迎任意分发上面这个开发包,提供下载;欢迎跟贴,up;欢迎短消息骚扰;欢迎QQ骚扰: 23015401(请注明csdn);欢迎email骚扰: nec211218#yahoo.com,来信请注明转几号嘉宾收,我会为你转达你真诚的...
搞笑了..本人虽然两颗红心,但可用分实在太少,只有180分,有人捐我点吧???

解决方案 »

  1.   

    我倒是愿意捐分,但我分数不多(只有600多),捐你500分如何? 以后我可能会转到Linux写C程序了,提问的机会不多了。但怎么捐呢? 请指教。(不好意思,我至今也没看过这里的帮助和指南,所以根本没搞清专家分什么的。)
      

  2.   

    我不会COM,你的东东再好我也用不上,以后还好请你多多指教.
      

  3.   

    阿飞,我赞赏你的勇气…………但,为了你的身体和精神,我希望你再想想CSDN下次改版的时候,你要重做多少代码?
      

  4.   

    这样做有没有什么实际意义,光针对csdn是不是太什么了一点,我以前曾经想做一个图形的社区,其中就准备在客户端实现这种功能,最后由于太过于庞大不得不放弃,你如果要做我觉得还不如在做一个论坛,这样你就完全知道他的整个架构,不然可能就像111222说的那样白费力气
      

  5.   

    使用COM组件的方法还是不错的。至少结构上看起来清爽的多,以后的维护只需要修改逻辑层(相应的DLL)即可,界面上并不需要太大的感动,以后还可以扩展相应的功能接口。
       我想以后的CSDN客户端会更加丰富多彩,不仅是各种编程语言可以实现,在功能上也将更贴近大家。可能在不远的时候,会有用.net平台开发的类似组件出来,用C#开发COM组件的感觉简直太棒了。(运行时需要.net的FrameWork支持)
      

  6.   

    呵呵,COM真是该好好学学了,整天看到这个字眼,还从没自己动过手呢:)
      

  7.   

    阿飞
    你真厉害!
    Q号记下,有时间能帮帮我吧!关于COM技术
      

  8.   

    我介绍一下我设计的方法,希望对大家有参考作用:CWebPageRaw                 ---> 下载任意的html页面
    +-CCSDNMaxTopicId           ---> IOCSDNMaxTopicId (解析html页面)
    +-CCSDNOnlineUsers          ---> IOCSDNOnlineUsers(解析html页面)
    +-CWebPageXml               ---> 下载并分析任意的xml页面
        +-CCSDNForumHeadPage    ---> IOCSDNForumHeadPage (解析xml数据)
        +-CCSDNTopic            ---> IOCSDNTopic         (解析xml数据)F:\lylong\MyProjects\followmeexample>findstr /R /S class *.h
    Include\ArrayPP.h:class CArrayPP
    Include\BonusBuffer.h:class CBonusBuffer
    Include\CSDNForumHeadPage.h:class CCSDNForumHeadPage : public CWebPageXml
    Include\CSDNMaxTopicId.h:class CCSDNMaxTopicId : public CWebPageRaw
    Include\CSDNOnlineUsers.h:class CCSDNOnlineUsers : public CWebPageRaw
    Include\CSDNReply.h:class CCSDNReply
    Include\CSDNTopic.h:class CCSDNTopic  : public CWebPageXml
    Include\CSDNTopicBrief.h:class CCSDNTopicBrief
    Include\CSDNUser.h:class CCSDNUser
    Include\FileTools.h:class CFileTools
    Include\HttpTools.h:class CHttpTools
    Include\Str.h:class CStr;
    Include\WebPageRaw.h:class CWebPageRaw
    Include\WebPageXml.h:class CWebPageXml : public CWebPageRaw
      

  9.   

    如何获取xml的数据,如果csdn改版,它的代价也不小,而我只需要修改下面的字符串就可以了,比如:
    pEle = pNode->selectSingleNode( L"PostUserNickName" ); // 这里的L"PostUserNickName"
    我想这个字段名字一般不会改的,顶多我这个XPATH前面多加点路径限定
    //////////////////////////////////////////////////////////////////
    // Function name : CCSDNReply::FetchReplyElements
    // Description     : 
    // Creator : Long Lin Yu
    // TimeStamp : 2002-3-24 9:31:04
    //
    // Return type : void 
    // Argument         : msxml::IXMLDOMNodePtr& pNode 给出指向如下数据的DOMNode指针
    //  <Reply>
    //    <PostUserNickName>猫仔</PostUserNickName>
    //    <rank>一级(初级)</rank>
    //    <ranknum>user1</ranknum>
    //    <credit>100</credit>
    //    <ReplyID>3563543</ReplyID>
    //
    //    <TopicID>526898</TopicID>
    //    <PostUserId>12076</PostUserId>
    //    <PostUserName>Garfield</PostUserName>
    //    <Point>0</Point>
    //    <Content>....石沉大海</Content>
    //    <PostDateTime>2002-2-17 15:54:46</PostDateTime>
    //
    //  </Reply>
    //////////////////////////////////////////////////////////////////
    void CCSDNReply::FetchReplyElements( msxml::IXMLDOMNodePtr& pNode )
    {
    msxml::IXMLDOMElementPtr  pEle;
    pEle = pNode->selectSingleNode( L"PostUserNickName" );
    if( pEle != NULL ) PostUserNickName = pEle->text;
    pEle = pNode->selectSingleNode( L"rank" );
    if( pEle != NULL ) rank = pEle->text;
    pEle = pNode->selectSingleNode( L"ranknum" );
    if( pEle != NULL ) ranknum = pEle->text;
    pEle = pNode->selectSingleNode( L"credit" );
    if( pEle != NULL ) credit = pEle->text;
    pEle = pNode->selectSingleNode( L"ReplyID" );
    if( pEle != NULL ) ReplyID = pEle->text;
    pEle = pNode->selectSingleNode( L"TopicId" );
    if( pEle != NULL ) TopicId = pEle->text;
    pEle = pNode->selectSingleNode( L"PostUserId" );
    if( pEle != NULL ) PostUserId = pEle->text;
    pEle = pNode->selectSingleNode( L"PostUserName" );
    if( pEle != NULL ) PostUserName = pEle->text;
    pEle = pNode->selectSingleNode( L"Point" );
    if( pEle != NULL ) Point = pEle->text;
    pEle = pNode->selectSingleNode( L"Content" );
    if( pEle != NULL ) Content = pEle->text;
    pEle = pNode->selectSingleNode( L"PostDateTime" );
    if( pEle != NULL ) PostDateTime = pEle->text;
    }如何获取html里面的数据,如果csdn改版,我只需要修改下面这个字符串
    "([-._A-Za-z0-9]+)\(([-]?[0-9]+)\)"是一个规则表达式,它表示一个有效的字符串,形如:
    "karma(50559)", 大家可以参考:
    http://www.csdn.net/dev/Visual%20C++/source%20code/String/下面的:
    1. Using Regular Expressions for Search/Replace 
    2. An alternative Regular Expression Class 在Doc目录下,我已经下载了两个html页面:
    ---------------------------------------------
    F:\Temp\Doc>match OnlineUsers.html "([-._A-Za-z0-9]+)\(([-]?[0-9]+)\)"
    karma               50559
    masterz             34801
    chechy              33284
    Jneu                27611
    skyyoung            24074
    windindance         21107
    KingSunSha          20379
    nononono            17366
    strip               13609
    y1g1y1              7523
    torble              7114
    alphagx             7042
    qiubolecn           6820
    halfdream           6793
    ...---------------------------------------------
    F:\Temp\Doc>match GetMaxTopicId.txt ">([0-9]+)"
    599583
    597204
    3971107
    3957704found 4(注:上面的match.exe是我写的一个测试程序)
      

  10.   

    希望上面的帖子能够解决111222(www.mozilla.org) ,wjyasd(金子鱼) , no_love(爱情甜蜜吗) , 21bird(世纪菜鸟:bug?我错了么?) 的问题to  stavck(o_O) :
    对于一个容易维护的软件来说,时间空间的效率往往和可维护性是矛盾的(不是绝对),至少我的理念是我需要的可维护,易维护的软件,所以在内存使用效率上没有多大特殊的考虑,但是,我保证我的内存使用都是用完就释放的,只要你不占着我传出来的com对象的句柄。(因为这样它就没有办法release)另外还有一点可能是,我的例子里面都有GetOnlineUsers的演示,大家可以同时访问一下这个页面:
    http://www.csdn.net/expert/Online.asp
    记得在页面上按鼠标右键看属性,看看这个页面有多大,我刚看了一下,当1690个人在线的时候,是320799bytes,也就是300K左右:
    1. 访问上面这个asp有多慢,我的程序就有多慢
    2. 我的程序的内核都是用unicode来处理字符串的,另外COM Library内部也是用unicode,所以把这个页面下载下来会用掉我的程序300K*2的内存
    3. 如果你使用的sample是delphi/vb/mfc的话,这300K的数据需要全部载入一个text/edit控件里面,这也会吞噬很多内存(相信大家都试着用notepad打开一个10M的文件,看看它的内存使用情况:它会占用你20M的内存,因为w2k的notepad是一个unicode的应用程序)另外,大家不要给我卷分了,昨天一天我的可用分快超过我的专家分了 :)
      

  11.   

    的确,我刚才测试了一下,正如strip所讲的。使用程序得到当前在线人数的时间大概为直接访问http://www.csdn.net/expert/Online.asp两倍左右(第一次执行的话在我的本地机上10Mbps大概为40多秒),时间应该是消耗在下载网页和将数据载入到控件中去了。总的来说,速度还可以忍受。不过在下载的过程中CPU的使用率确实达到100%(别的事就干不了了),这个应该可以改进。
      

  12.   

    谢谢kingzai提醒,我测试了一下(单位毫秒)
    54852.636019      <-------- 这是(分析数据)的时间
    113652.295473     <-------- 这是(下载+分析数据)的时间press any key to exit下一版可以改进这个方面
    谢谢
      

  13.   

    谢谢kingzai提醒,我测试了一下(单位毫秒)
    54852.636019      <-------- 这是(分析数据)的时间
    113652.295473     <-------- 这是(下载+分析数据)的时间press any key to exit下一版可以改进这个方面
    谢谢
      

  14.   

    to ghj1976:
    光说个“GOOD”顶什么用?给他点实际的帮助啊!to strip:
    你应该去找找webmaster,让他给你提供interface,就不会“一改版就白做”了。
      

  15.   

    改好了,不好意思,我的字符串处理浪费了挺多时间的 :)
    5663.906167      <-------- 这是(分析数据)的时间
    1577 user(s) online
    42780.960988     <-------- 这是(下载+分析数据)的时间
    press any key to exit
      

  16.   

    把csdndownloader109.dll和vc里带的regsvr32.exe拷贝到一台非开发的98上,注册后立刻能用,不需要安装,也可以做到绿色
      

  17.   

    帖子列表的XML,希望能对你有所帮助(用其在client自动更新帖子列表再好不过了)http://www.csdn.net/expert/Rooms/2/Forum_2_1.xml
    http://www.csdn.net/expert/Rooms/2/Forum_2_2.xml
    http://www.csdn.net/expert/Rooms/2/Forum_2_3.xml
    http://www.csdn.net/expert/Rooms/2/Forum_2_4.xml
    格式http://www.csdn.net/expert/Rooms/(roomid)/Forum_2_(roomtype).xmlroomid是论坛ID,可以从论坛列表的URL里找到roomtype有如下四个值,分别代表:1、非技术区,2技术区,3已解决 4精华区
      

  18.   

    http://www.csdn.net/expert/Rooms/(roomid)/Forum_(roomid)_(roomtype).xml其实,做成IE插件比较好,把自己的界面band到IE里,弄个类似favorites那样的树....
      

  19.   

    MS的XML解析CPU占用率过高,不知道为什么,IE在解析CSDN的XML的时候CPU占用率100%很吓人
      

  20.   

    谢谢111222了,
    http://www.csdn.net/expert/Rooms/2/Forum_2_1.xml
    已经封装在IOCSDNForumHeadPage::get_TopicBriefs和get_TopicBriefCount里了IE解析xml页面慢我倒是没有发现,我的解析是xml dom, 而ie要解析xml dom还要从繁忙的csdn服务器上取xsl(至少要判断是否更新),然后在"解释"输出成html,所以可能比较慢
    做到ie band里面去,没有体力了,不过我以前做过,和以前的同事
    http://it.sohu.com/download/banlu/default.html最近在研究boost,想从里面扣点出来用(巧的是,今天收到csdn寄来的过期《程序员》,里面也再介绍boost,不过介绍得跟好像很...)
      

  21.   

    strip(阿飞)   
    111222[哈尔滨,好城市]
    其实ie解析xml并不慢吧。主要是现在csdn的帖子的页面是用的表格嵌套,
    整个页面几乎全套在了一个大的table中。
    如果帖子回复较多,解析会非常的耗时,在我的论坛助手里,我去掉了外面的table,使每个回复都解析成一个独立的表格。速度就变的快的多了。这个问题我象hcat1999提过,只不过又是因为左边的广告位置,而没有结果。
     
     
      

  22.   

    [email protected]
    [email protected]
      

  23.   

    >   我想以后的CSDN客户端会更加丰富多彩,不仅是各种编程语言可以实现,
    >在功能上也将更贴近大家。可能在不远的时候,会有用.net平台开发的类似
    >组件出来,用C#开发COM组件的感觉简直太棒了。(运行时需要.net的>FrameWork支持)
    .Net FrameWork的安装程序要20多M,我的程序只有几百K……
      

  24.   

    Good================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★  浏览帖子速度极快![建议系统使用ie5.5以上]。 
    ★  多种帖子实现界面。 
    ★  保存帖子到本地[html格式]
    ★  监视您关注帖子的回复更新。
    ★  可以直接发贴、回复帖子
    ★  采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。
        可以浏览历史记录! 
    ★  支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名  ●  
         可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
      

  25.   

    by the way,这东西有什么用吗?
      

  26.   

    請問版主,我剛來CSDN,不過我覺得這裡BBS的界面太差了,讓人感覺好累。希望你們可以參考一下bbs.yesky.com 和 www.cndev.net的界面,很清晰!!!!
      

  27.   

    可以用Java写不?????????????????