dogbear2000
?!高手!请教,怎样在Delphi中使用FlashGet? Thank you.
cokegirl

解决方案 »

  1.   

    我试着按照HTML的原理,用IXMLDocument2接口,但是不知道该怎样使用?
    高手指路呀。
      

  2.   

    用FastNet控件组中的TNMHttp应可以取得XML格式的文件,至于解析可以用微软或IBM的XML解释器解析,不过,具体解析方法没试过
      

  3.   

    Delphi6中多了很多Internet方面的控件,加强了对XML的支持,升级吧。:)
      

  4.   

    Thank you, kylix2001,
    做完这个东东后,我一定升级!::)
    不过,我还是想知道怎样使用XML ver 2.6提供的接口或者其他比较笨/低级的方法来解决。
    What shall I do?
      

  5.   

      
       竹儿:
          FlashGet:是一个,类netants,的下载软件,对你的要作东东没用的。
          
          我用WebBrowser,其实是一个用了ie解析了的,浏览控件。
          
          我想,你作的东西,应该是yong用FastNet控件组中的TNMHttp,取得你要用到的,xml文件,然后,自己解析取到的文件,是这样吗?
      

  6.   

    至尊宝:
        我不太明白的是,在取出.xml文件之后,在webbrowser上点右键 ->查看源文件,就可以看见原版的xml文件格式,在程序中,我应该怎样写,或者使用那种接口才能读出这个原版的xml文件呢?
        另外,你说的用FastNet中的TNMHttp取xml文件,hehe,惭愧,因为刚刚学习用Delphi做和Internet有关的东东,我还不知道TNMHttp怎么用呢。
        
        其实,我要解析的.xml文件就放在 http://go.163.com/cokegirl 下面呢,我的开发机是Windows 2000, 使用代理服务器上网,每次连接到Internet时,都需要输入再我们这个局域网的用户及口令。所以我不太敢用TNMHttp,我担心TNMHttp处理不了这种连接Internet的情况。
      

  7.   

    使用http协议(可以使用控件或者直接用套接字)
    使用其get方法
      

  8.   

    使用控件的话,可以参考delphi下的
    demos\fastnet\http 下的代码
    使用其里面的get example
    填入http://go8.163.com/cokegirl/CCTV-1/cctv1_010611_7/cctv1_010611.xml
    获得以下信息, 看看是不是你需要的:
    //-------------------------------------
    //这里是http传输的信息,可以不管之
    HTTP/1.1 200 OK
    Date: Thu, 21 Jun 2001 02:56:17 GMT
    Server: Apache/1.3.19 (Unix) mod_layout/2.10.1
    Last-Modified: Fri, 15 Jun 2001 06:52:52 GMT
    ETag: "23a9dfe-341-3b29b0c4"
    Accept-Ranges: bytes
    Content-Length: 833
    Connection: close
    Content-Type: text/xml//----------------------------------
    //下面是获得的文档本身,应该就是你需要的了
    <?xml version="1.0" encoding="GB2312"?>
    <ProgramList>
      <Channel>CCTV-1</Channel>
      <PlayDate>2001-06-11</PlayDate>  <PlayTime>06:00</PlayTime>
      <ProgramName>东方时空:东方时空早新闻(一)</ProgramName>  <PlayTime>07:00</PlayTime>
      <ProgramName>东方时空:早新闻(二)</ProgramName>  <PlayTime>08:00</PlayTime>
      <ProgramName>东方时空:早新闻(三)</ProgramName>  <PlayTime>08:35</PlayTime>
      <ProgramName>焦点访谈</ProgramName>  <PlayTime>08:50</PlayTime>
      <ProgramName>夕阳红</ProgramName>  <PlayTime>09:20</PlayTime>
      <ProgramName>专题片10集专题片:瞿秋白(4)</ProgramName>  <PlayTime>09:45</PlayTime>
      <ProgramName>每日一歌:为了谁</ProgramName>  <PlayTime>09:50</PlayTime>
      <ProgramName>科技博览(2001--161)</ProgramName>  <PlayTime>10:00</PlayTime>
      <ProgramName>科技博览(2001--161)</ProgramName></ProgramList>
      

  9.   

    如果你是需要在TWebBrowser控件里直接显示网页源代码,这样做:
    (转)
    unit MA;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      OleCtrls, SHDocVw, StdCtrls, Psock, ComObj;type
      TForm1 = class(TForm)
        WB1: TWebBrowser;
        b1: TButton;
        urltext: TEdit;
        listurl: TEdit;
        Memo1: TMemo;    procedure b1Click(Sender: TObject);
        procedure WB1DocumentComplete(Sender: TObject;
          const pDisp: IDispatch; var URL: OleVariant);  private
        { Private declarations }
      public
        { Public declarations }
    end;{ IPersistStream interface }{$EXTERNALSYM IPersistStream}
    IPersistStream = interface(IPersist)
    ['{00000109-0000-0000-C000-000000000046}']
    function IsDirty: HResult; stdcall;function Load(const stm: IStream): HResult; stdcall;
    // 从流中载入
    function Save(const stm: IStream;
    fClearDirty: BOOL): HResult; stdcall;
    // 保存到流
    function GetSizeMax(out cbSize: Largeint):
    HResult; stdcall; // 取得保存所需空间大小
    end;{ IPersistStreamInit interface }{$EXTERNALSYM IPersistStreamInit}
    IPersistStreamInit = interface(IPersistStream)
    ['{7FD52380-4E07-101B-AE2D-08002B2EC713}']
    function InitNew: HResult; stdcall; // 初始化
    end;
    var
      Form1: TForm1;implementation{$R *.DFM}
    function GetHtml(const WebBrowser:
    TWebBrowser): string;
    const
    BufSize = $10000;
    var
    Size: Int64;
    Stream: IStream;
    hHTMLText: HGLOBAL;
    psi: IPersistStreamInit;
    begin
    if not Assigned(WebBrowser.Document) then Exit;OleCheck(WebBrowser.Document.QueryInterface
    (IPersistStreamInit, psi));
    try
    //OleCheck(psi.GetSizeMax(Size));
    hHTMLText := GlobalAlloc(GPTR, BufSize);
    if 0 = hHTMLText then RaiseLastWin32Error;OleCheck(CreateStreamOnHGlobal(hHTMLText,
    True, Stream));
    try
    OleCheck(psi.Save(Stream, False));Size := StrLen(PChar(hHTMLText));
    SetLength(Result, Size);
    CopyMemory(PChar(Result), Pointer(hHTMLText),
    Size);
    finally
    Stream := nil;
    end;
    finally
    psi := nil;
    end;
    end;procedure TForm1.b1Click(Sender: TObject);
    begin
    WB1.Navigate(urltext.text);
    end;procedure TForm1.WB1DocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    var
    p:Ansistring;beginp:=WB1.LocationURL;
    listurl.text:=p;
    Memo1.text:=GetHtml(Wb1);end;
      

  10.   

    down internet 文件,有一个函数。记得加入 uses URLMon;
    下载文件函数。  function DownloadFile(Source, Dest: string): Boolean;
      begin
        try
          Result :=  UrlDownloadToFile(nil, PChar(source), PChar(Dest), 0, nil) = 0;
        except
          Result := False;
        end;
      end;
    调用例子。  if DownloadFile  ('http://go8.163.com/cokegirl/CCTV-1/cctv1_010611_7/cctv1_010611.xml', 'c:\Temp\cctv1_010611.xml') then
       ShowMessage('Download succesful')
      else
       ShowMessage('Download unsuccesful')
      

  11.   

    Laza, Thank you! 我试过了,真的down下来了!就是有一点,本来每一行都分得很清楚的原码,down下来之后变得都成了一行似的,需要用写字板打开再另存为.txt文件,去掉其中的格式符才行。这是为什么呢?rh, Thank you very much!只是你给的代码挺长的,我正做着实验呢。
      

  12.   

    这样处理一下就没问题了。var
      List: TStringList;
    begin
      List := TStringList.Create;
      List.LoadFromFile('c:\Temp\cctv1_010611.xml');
      List.SaveToFile('c:temp\xxx.xml');//文件名同名也可。
      List.Free;
    end;
      

  13.   

    laza,
    OK, 搞定。Thanx. an other question, 能不能不用存成.xml文件,只是将它读到一个TStringList中,然后我把它处理一番,放到数据库里,可不可以呢?
      

  14.   

    可以呀,都是ASC码,文本文件,处理就是了。
      

  15.   

    但是,用DownloadFile(SourceFile, DestineFile);不是需要存到DestingeFile中吗?把DestineFile直接改成ts: TStringList就成了吗?
      

  16.   

    呵呵     ^_^我的意思还是要DOWN成文件再处理,参数是文件名绶址,你用Tstringlist,语法检查都通不过的。这样改改函数  function DownloadFile(Source, Dest: string): Boolean;
      var
        List: TStringList;
      begin
        try
          Result :=  UrlDownloadToFile(nil, PChar(source), PChar(Dest), 0, nil) = 0;
          List := TStringList.Create;
          List.LoadFromFile('c:\Temp\cctv1_010611.xml');
          {在这里处理}
          //List.SaveToFile('c:temp\xxx.xml');
          List.Free;    except
          Result := False;
        end;
      end;
      

  17.   

    我明白了。hehe,我是担心,处理文件之前要先把download下来的东东存成文件,然后再从文件里读出来处理,效率会不会低呢?Anyway, 这是个又简便又有效的方法。Thanx,我再做做实验.
      

  18.   

    谢谢大家的讨论,now给分咯!
    不过,还是希望大家能够多多讨论。