XMLHTTP - Att läsa av och skriva från annan hemsida
Förord
XMLHTTP används för att läsa av andra hemsidors innehåll, det finns externa komponenter till IIS såsom ASPTear. Men med XMLHTTP och RegExp (Regular Expressions) kan du göra en hel del. Att läsa av andra hemsidors innehåll kan vara praktiskt för flera ändamål, tex. om du har en webbshop och vill veta vad paketet befinner sig på posten, men mitt exempel ska hämta Innebandyns ElitserietabellInnehåll
Relaterade artiklar
Tänk på att när du hämtar en sidas innehåll måste målets laddningstid läggas på den befintliga, vilket då besökarna kan uppleva som på tok för tidskrävande. Dessutom ska inte förglömmas att du snor serverkraft från målets sida, något som förmodligen inte uppskattas. En lösning på bägge dom här problemen när du har information som inte behöver uppdateras varje gång en person besöker sidan är att lagra informationen i en .txt fil och uppdatera emellanåt, antingen att du låter besökaren göra det genom att räkna tiden från senaste hämtningen eller att du ställer in en ”Schemalagd aktivitet” som du hittar i Windows under kontrollpanelen.
Vi börjar med att skapa objektet och döper det till objGetPage, sedan öppnar vi det och anger samtidigt adressen, http://www.innebandy.se/Table.asp?TournamentId=25424, till sidan vi vill läsa av.
Efter det aktiverar vi objektet, för att sedan skriva ut innehållet använder vi ’responseText’. För att göra resten av koden smidig lägger vi den i en sträng som vi kallar strHTML.
Vi avslutar sedan objektet så att det inte hänger kvar och segar ner servern.
Emellan här vill du förmodligen plocka bort målets design och onödig information, du gör det lättast med RegExp. Spana in artiklar vars ämne enbart är RegExp.
Då var det alltså dags att spara informationen (som du förhoppningvis har rensat med RegExp).
Vi använder FSO för att skapa filen ‘Elitserien.txt’ under mappen ’XMLHTTP’. Vi skriver sedan in hela strängen med ’WriteLine’. Sist men ack så viktigt avslutar vi objekten.
Till slut för att skriva ut informationen på din hemsida kan du använda SSI (Server Side Inlcude)
Innan du tar information från andra hemsidor bör du fråga ägaren om det är ok, lagen i frågan är väldigt svårtolkad men att som i tex. mitt exempel ta en tabell från ett förbunds sida borde inte vara några problem.
Set objGetPage = Server.CreateObject("Microsoft.XMLHTTP")
objGetPage.Open "GET","http://www.innebandy.se/Table.asp?TournamentId=25424", False
Vi börjar med att skapa objektet och döper det till objGetPage, sedan öppnar vi det och anger samtidigt adressen, http://www.innebandy.se/Table.asp?TournamentId=25424, till sidan vi vill läsa av.
objGetPage.Send
strHTML=objGetPage.responseText
Efter det aktiverar vi objektet, för att sedan skriva ut innehållet använder vi ’responseText’. För att göra resten av koden smidig lägger vi den i en sträng som vi kallar strHTML.
objGetPage.Close
Set objGetPage = Nothing
Vi avslutar sedan objektet så att det inte hänger kvar och segar ner servern.
Emellan här vill du förmodligen plocka bort målets design och onödig information, du gör det lättast med RegExp. Spana in artiklar vars ämne enbart är RegExp.
Då var det alltså dags att spara informationen (som du förhoppningvis har rensat med RegExp).
Set objFSO= CreateObject("Scripting.FileSystemObject")
Set objTxt = objFSO.CreateTextFile(Server.MapPath("XMLHTTP ") & "/elitserien.txt")
objTxt.WriteLine strHTML
objTxt.Close
Set objTxt = Nothing
objFSO.Close
Set objFSO = Nothing
Vi använder FSO för att skapa filen ‘Elitserien.txt’ under mappen ’XMLHTTP’. Vi skriver sedan in hela strängen med ’WriteLine’. Sist men ack så viktigt avslutar vi objekten.
Till slut för att skriva ut informationen på din hemsida kan du använda SSI (Server Side Inlcude)
Innan du tar information från andra hemsidor bör du fråga ägaren om det är ok, lagen i frågan är väldigt svårtolkad men att som i tex. mitt exempel ta en tabell från ett förbunds sida borde inte vara några problem.
Andreas Jagelund
...skulle vilja se mer av användningen av RegExp som ju är den "svåra" biten i det hela... Fotnot: när det gäller posten så behöver man inte använda XMLHTTP eftersom man kan få en snygg XML-fil utläst genom en webtjänst som posten driftar...
Simon Dahlbacka
Du kan göra så där (speciellt om det inte är en well-formed xml sida du vill ha), men gräva fram relevant information ur ett DOM träd är enklare, och det får du ju gratis genom responseXML (eller vad den nu exakt heter)
Stefan Norinder
Måste man ha tillstånd från den vars sidan man läser för att få göra det?
David Andersson
Perfekt! Precis vad jag letat i timmar efter... Har dock en liten fråga: jag får Microsoft VBScript runtime error '800a01b6': "Object doesn't support this property or method: 'objGetPage.Close'" Är inte det märkligt?