Nejnovější články nejen z Intervalu

30. ledna 2002

Dnes vám přinášíme dva články s podobnou tématikou. Oba řeší, jak získat aktuality z informačních webů. Jeden v PHP aktuální kurzy ČNB, druhý (tedy tento) naopak v ASP aktuální články. Jako příklad jsem použil náš Interval.

Na adrese http://www.interval.cz/xchange.txt je k dispozici soubor výměny linků, který obsahuje seznam aktuálních článků. Jsou v něm kompletní hyperlinky na pět nejnovějších článků, které jsou každý na samostatném řádku. Soubor je automaticky v pravidelných časových intervalech aktualizován.

Obsah souboru xchange.txt je tento:

<a href=“http://www.interval.cz/r-article.asp?id=877″>Vložení efektu z Flashe do HTML</a><br>
<a href=“http://www.interval.cz/r-article.asp?id=884″>Chudým vstup zakázán</a><br>
<a href=“http://www.interval.cz/r-article.asp?id=879″>DHTML editor kompatibilní se všemi prohlížeči</a><br>
<a href=“http://www.interval.cz/r-article.asp?id=872″>Jak vědět více o návštěvnících pomocí PHP</a><br>
<a href=“http://www.interval.cz/r-article.asp?id=882″>Jak si naplánovat služební cestu</a><br>

Vše si dobře naplánujte

Doporučuji stahovat soubor mimo webovou aplikaci pomocí naplánované úlohy. Tento způsob zrealizujete nejjednodušeji tak, že napíšete VBS skript, kterému zajistíte pravidelné spouštění pomocí nějakého plánovače úloh. Plánovač úloh je ve Windows 2000 obsažen standardně a v NT 4 se objeví po instalaci MSIE 5.0. Spouštění úloh můžete naplánovat také pomocí standardních AT příkazů. Kdo ale tento způsob již někdy zkoušel, zjistil, že je poněkud „neohrabaný“.

Většina z vás nemá možnost spouštět skripty mimo vlastní IIS, proto předkládám řešení, které je možné integrovat do libovolného ASP skriptu. Aktualizace je pak prováděna v případě uplynutí definovaného časového intervalu. Samozřejmě, že nelze dosáhnout přesného času aktualizace, protože ta je závislá na přístupu na stránku, kde je skript aplikován.

Celá akce je provedena ve dvou krocích – stažení a zpracování souboru. Ten, komu vyhovuje formát souboru tak, jak jej poskytujeme, použije pouze první část aktualizace, která zajistí stažení a uložení souboru.

Stažení a uložení souboru

Ke stažení souboru z Intervalu použijete objekt Microsoft.XMLHTTP, který umí načíst obsah z jakékoli adresy. Nebudu zde nyní podrobně rozebírat, jak tento objekt funguje. Rovnou uvedu funkci, která vrátí obsah požadované URL jako svoji návratovou hodnotu. Kód následující funkce jsem převzal z článku vydaného na serveru ASP Network na této adrese.

<%
Function IncludeHTTP(byVal URL)
   Dim HTTP, HTML, I
   Set HTTP = Server.CreateObject(„Microsoft.XMLHTTP“)
   HTTP.Open „GET“, URL, False, „“, „“
   HTTP.Send()
   For I = 1 To LenB(HTTP.ResponseBody)
      HTML = HTML & Chr(AscB(MidB(HTTP.ResponseBody, I, 1)))
   Next
   IncludeHTTP = HTML
   Set HTTP = Nothing
End Function
%>

Jak udělat plánovanou úlohu, jsem již popisoval v článku Plánované spouštění ASP kódu. Pro ty, co tento článek nečetli, v krátkosti uvedu princip řešení. Do proměnné v objektu application si uložíte čas posledního provedení akce. Pokud od posledního provedení uplynul požadovaný čas nebo čas není dostupný, je provedena akce a uložen čas posledního provedení.

<%
If DateDiff(„h“,Application(„cas“),now)>4 or Application(„cas“)=0 then ‚ soubor budeme stahovat každé 4 hodiny
   Dim ObjFS,ObjStream
   cestatmp=server.MapPath(„.“)&“/interval.tmp“
   Set ObjFS=server.CreateObject(„Scripting.FileSystemObject“)
   Set ObjStream=ObjFS.createTextFile(cestatmp,true)
   obsah=includeHTTP(„http://www.interval.cz/xchange.txt“)
   Objstream.write(obsah)
   ObjStream.Close
   Set ObjStream=Nothing
   Set ObjFS=Nothing
‚ ZDE BUDE VOLÁNÍ PROCEDURY NA ÚPRAVU KÓDU
   Application.lock
   Application(„cas“)=now ‚ uložíme čas posledního provedení
   Application.unlock
End If
%>

Pravděpodobně se ale stane, že vám nebude naše formátování z nějakého důvodu vyhovovat (např. vzhled vašich stránek). Následující funkce vám umožní (nejen) tento soubor upravit podle vašich požadavků:

<% Sub xchange(pocetpolozek,zdroj,cil)
   on error resume next
   dim uvod,blok,konec
   dim pocet
   Dim ObjFS,ObjStream
   Set ObjFS=server.CreateObject(„Scripting.FileSystemObject“)
   Set ObjStream=ObjFS.OpenTextFile(zdroj)
   uvod=“<img src=““/images/invisible.gif““ width=1 height=6 border=““0″“ ALT=““Nic““><br><table cellspacing=““0″“ cellpadding=““0″“ border=““0″“ bgcolor=““black““><tr><td><table cellspacing=““1″“ cellpadding=““2″“ width=““138″“ border=““0″“><tr><td align=““center““ bgcolor=““white““><a href=““http://www.interval.cz““ target=““_blank““>Interval.cz</a></td></tr><tr><td bgcolor=““#EFF1f8″“><table cellspacing=““0″“ cellpadding=““1″“ border=““0″“>“
   konec=“</table></td></tr></table></td></tr></table>“
   nahr1=“<tr><td>“
   nahr2=“<A href=“
   nahr3=“ target=““_blank““>“
   blok=uvod
   pocet=0
   do while err.number=0 and pocet < pocetpolozek
      pocet=pocet+1
      text=““
      text=ObjStream.readline
      if len(text)>10 then
         kdeje=instr(1,ucase(text),ucase(„<a href=“))
         kdeje1=instr(1,text,“>“)
         url=mid(text,kdeje+8,kdeje1-kdeje-8)
         blok=blok+nahr1+nahr2+url+nahr3
         zbytek=mid(text,kdeje1+1,len(text)-kdeje1)
         blok=blok+zbytek+“</TD></TR>“&VBCRLF
      end if
   loop
   blok=blok+konec
   ObjStream.Close
   Set ObjStream=Nothing
   Set ObjStream=ObjFS.createTextFile(cil)
   objstream.write(blok)
   ObjStream.Close
   Set ObjStream=Nothing
   Set ObjFS=Nothing
   on error goto 0
end sub

Nakonec je třeba přidat „volání“ procedury na vyznačené místo v kódu naplánované úlohy. Celé „volání“, včetně nastavení vstupních parametrů vypadá takto:

zdroj=server.MapPath(„.“)&“\interval.tmp“
cil=server.MapPath(„.“)&“\interval.txt“
xchange 5,zdroj,cil

Kód funkcí můžete umístit do souboru global.asa (viz článek Plánované spouštění ASP kódu) nebo do libovolného skritu, o kterém víte, že je na něj často přistupováno.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *