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

    0

    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 zajímat

    Žádný příspěvek v diskuzi

    Odpovědět