Advertisement
Guest User

Untitled

a guest
Jul 17th, 2016
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 1.90 KB | None | 0 0
  1. program test7;
  2.  
  3. uses
  4.   Classes, XMLReader, XMLTextReader, XMLUtils, LibCurl, UnixType, Pipes;
  5.  
  6. var
  7.   URL : Pchar = 'http://fullcirclemagazine.org/author/ronnie-2/feed/';
  8.   hCurl : pCurl;
  9.    
  10.     inPipe : TInputPipeStream;
  11.     outPipe : TOutputPipeStream;
  12.    
  13.   reader : TXMLReader;
  14.   settings : TXMLReaderSettings;
  15.   input : TXMLInputSource;
  16.  
  17.   title, link : string;
  18.   nextTextIsTitle, nextTextIsLink : boolean;
  19.  
  20.  
  21. Function DoWrite(Ptr : Pointer; Size : size_t; nmemb: size_t; Data : Pointer) : size_t; cdecl;
  22.  
  23. begin
  24.   DoWrite := TStream(Data).Write(Ptr^,Size*nmemb);
  25. end;
  26.  
  27.  
  28. begin
  29.   settings := TXMLReaderSettings.Create;
  30.   settings.PreserveWhiteSpace := false;
  31.   settings.Namespaces := true;
  32.  
  33.   CreatePipeStreams (inPipe, outPipe);
  34.  
  35.   hCurl:= curl_easy_init;
  36.   if Assigned(hCurl) then
  37.   begin
  38.     curl_easy_setopt(hCurl,CURLOPT_VERBOSE, [True]);
  39.     curl_easy_setopt(hCurl,CURLOPT_URL,[URL]);
  40.  
  41.     curl_easy_setopt(hCurl,CURLOPT_WRITEFUNCTION,[@DoWrite]);
  42.   curl_easy_setopt(hCurl,CURLOPT_WRITEDATA,[Pointer(outPipe)]);
  43.  
  44.     curl_easy_perform(hCurl);
  45.     curl_easy_cleanup(hCurl);
  46.   end;
  47.  
  48.   input := TXMLInputSource.Create(inPipe);
  49.   reader := TXMLTextReader.Create(input, settings);
  50.   while reader.Read do
  51.   begin
  52.         if reader.NodeType = ntElement then
  53.             if reader.name = 'title' then begin
  54.                 nextTextIsTitle := true;
  55.                 nextTextIsLink := false;
  56.             end else if reader.name = 'link' then begin
  57.               nextTextIsTitle := false;
  58.               nextTextIsLink := true;
  59.             end else begin
  60.                 nextTextIsTitle := false;
  61.                 nextTextIsLink := false;
  62.             end;
  63.         if reader.NodeType = ntText then
  64.             if nextTextIsTitle then begin
  65.                 title := reader.value;
  66.                 nextTextIsTitle := false;
  67.             end else if nextTextIsLink then begin
  68.                 link := reader.value;
  69.                 nextTextIsLink := false;
  70.                 Writeln (title, ' -> ', link);
  71.             end;
  72.   end;
  73.  
  74.   reader.Free;
  75.     input.Free;
  76.     settings.Free;
  77. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement