{ (c) crystalbit 2010, http://parsers.info {} program rssparse; uses windows, httpsend, classes, strutils; {$apptype console} var _site, _sites, _rss, _error: TStrings; site, intag, rss: string; p, pclose, pspace, phref: integer; i: integer; // counter // http://parsers.info/2009/05/obxodimsya-bez-sysutils-fileexists/ function FileExists(FileName:string):boolean; var FindData: TWin32FindData; begin Result:=(FindFirstFile(PChar(FileName),FindData) <> INVALID_HANDLE_VALUE); end; begin writeln('feed links parser'); writeln('crystalbit, http://parsers.info', #13#10); _site := TStringList.Create; _sites := TStringList.Create; _rss := TStringList.Create; _error := TStringList.Create; if FileExists('sites.txt')=False then begin writeln('sites.txt doesn''t exist.'); readln; exit; end; _sites.LoadFromFile('sites.txt'); for i:=0 to _sites.Count-1 do begin write('(',i+1,'/',_sites.Count,')'); if not httpsend.HttpGetText(_sites.Strings[i], _site) then begin writeln('> '+_sites.Strings[i]+': connection error'); _error.Add(_sites.Strings[i]); Continue; end; site:=_site.Text; p:=0; rss:=''; repeat p:=PosEx('<', site, p+1); pclose:=PosEx('>', site, p+1); intag:=Copy(site, p+1, pclose-p-1); if (Pos('link', intag)<>0) and (Pos('alternate', intag)<>0) then begin phref:=Pos('href=', intag) + length('href='); pspace:=PosEx(' ', intag, phref+1); if pspace=0 then pspace:=Length(intag); rss:=Copy(intag, phref, pspace-phref); if (Pos('"', rss)=1) or (Pos('''', rss)=1) then // in " or ' rss:=Copy(rss, 2, Length(rss)-2); Break; end; until p=0; if rss='' then begin writeln('> '+_sites.Strings[i]+': no RSS found'); _error.Add(_sites.Strings[i]) end else begin _rss.Add(rss); writeln('> '+_sites.Strings[i]+': success!'); end; end; // for _rss.SaveToFile('rss.txt'); _error.SaveToFile('error.txt'); writeln('ready!'); _site.Free; _sites.Free; _rss.Free; _error.Free; readln; end.