Delphi IdNNTP: загрузить файл из Usenet в соответствии с NZB-файлом

У меня есть файл NZB, что-то вроде этого:

<?xml version="1.0" encoding="utf-8" ?>
<nzb xmlns="http://www.newzbin.com/DTD/2003/nzb">
 <head>
   <meta type="title">Your File!</meta>
   <meta type="tag">Example</meta>
 </head>
 <file poster="Joe Bloggs &lt;[email protected]&gt;" 
       date="1071674882" 
       subject="Here's your file! abc-mr2a.r01 (1/2)">
   <groups>
     <group>alt.binaries.newzbin</group>
     <group>alt.binaries.mojo</group>
   </groups>
   <segments>
     <segment bytes="102394" number="1">[email protected]</segment>
     <segment bytes="4501" number="2">[email protected]</segment>
   </segments>
 </file>
</nzb>

Есть ли способ загрузить и собрать этот файл с помощью Indy IdNNTP? Буду признателен за любой пример кода. Заранее спасибо.


person Red October    schedule 22.04.2013    source источник
comment
Вы пробовали какой-нибудь пример? Как, например, this one?   -  person TLama    schedule 22.04.2013
comment
@TLama: Да, я видел этот пример. Но это не совсем то, что мне нужно: подключиться к NNTP-серверу, выбрать группу — это не проблема. Но как качать файлы по NZB-файлу?   -  person Red October    schedule 22.04.2013


Ответы (1)


На самом деле, это было довольно просто:

  Xml := TXmlVerySimple.Create;
  Xml.Text:=recieved_nzb;

  //Each <file> section
  ChildNodes := Xml.Root.ChildNodes;
  for q := 0 to ChildNodes.Count - 1 do
    begin    
      IdNNTP1.SelectGroup(ChildNodes.Items[q].Find('groups').Find('group').Text);
      SegmentNodes:=ChildNodes.Items[q].Find('segments').ChildNodes;

      //Each <segment> (message)
      for w := 0 to SegmentNodes.Count - 1 do
      begin
          idNNTP1.GetArticle(SegmentNodes.Items[w].Text,IdMessage1);
          IdMessage1.SaveToFile('c:\!!!!\'+SegmentNodes.Items[w].Text, false);
          Application.ProcessMessages;
      end;
    end;
person Red October    schedule 22.04.2013