Kom lige i tanker om, at du kunne lave en HyperText Application (HTA), der kunne køre skidtet for dig om natten, så du ikke belaster din server - og belaster din leverandørs mindst muligt:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"
http://www.w3.org/TR/html4/loose.dtd"><html>
<head>
<HTA:APPLICATION ID="MyApp"
APPLICATIONNAME="MyAppName"
VERSION = "0.1-Alpha"
CAPTION = "yes"
ICON = "ikon.ico"
BORDER = "thick"
SHOWINTASKBAR = "yes"
SINGLEINSTANCE = "yes"
MAXIMIZEBUTTON = "no"
NAVIGABLE = "yes"
WINDOWSTATE = "normal">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>My Application</title>
<style type="text/css">
body, html {
height: 100%;
margin: 0;
background: buttonface;
}
#bar {
width: 90%;
margin: 12px auto;
height: 400px;
font: 12px tahoma, sans-serif;
display: block;
}
#foo {
display: none;
}
</style>
<script type="text/JavaScript">
var urls = ["
http://www.eksperten.dk/spm/660920", "
http://www.eksperten.dk/spm/660907", "
http://www.eksperten.dk/spm/660873"];var inx = 0;
function startLeech() {
var oHttp = new ActiveXObject("Msxml2.XMLHTTP");
oHttp.onreadystatechange = function(){writeToArea(oHttp)};
oHttp.open("get", urls[inx], true);
oHttp.send();
inx++;
}
function writeToArea(o) {
if (o.readyState!=4) return;
var cont = document.getElementById("foo");
// Skriv dokumentets body-indhold ind i et skjult div,
// - så vi kan bruge DOM til at hente elementernes indhold:
cont.innerHTML = o.responseText.match(/<body[^>]*>([\w\W]*)<\/body[^>]*>/i)[1];
// Her læser jeg f.eks. overskriften på spm'et,
// - som ligger i et link i første <h1> tag:
bar.value += cont.getElementsByTagName("h1")[0].getElementsByTagName("a")[0].innerHTML + "\n";
if (inx<urls.length) startLeech();
else bar.value += "\n------------------------------\n\nFærdig";
}
// Hvis siderne, vi henter, indeholder scriptkald,
// - må vi hellere disable fejlmeldinger, der ellers stopper alt:
window.onerror = function(){return true};
</script>
</head>
<body>
<button onclick="startLeech()">START</button>
<textarea id="bar"></textarea>
<div id="foo"></div>
</body>
</html>
Kald filen for et eller andet - med extension '.hta'. Du kan læse mere om HTA her:
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/hta/hta_node_entry.asp- kort fortalt er det en specialinstans af IE med specielle sikkerheds indstillinger, der bl.a. gør´X-domain scripting mulig. Her har jeg dog valgt at bruge XMLHttpRequests.
En anden fordel er, at vinduet ikke kan overtages, hvis du f.eks. klikker på et link i Outlook eller dobbeltklikker på en henvisning. Det er nemlig ikke en squid sjovt, når man har hentet data fra 4.950 dokumenter ;o)
Det ligner og føles som en alm. Win-applikation - selvom den er skrevet i ren HTML/JS.
Idéen er, at du bladrer et array med URL'er igennem og kalder dokumenterne (det kan selvfølgelig også være et array af side-ID'er eller andre query-strenge, der sættes sammen med en fast URL).
Når XML-objektet vender tilbage med sideindholdet, skrives body-delen ind i et skjult div. Så kan vi nemlig søge blandt elementerne og hente det relevante indhold ud ... den del står du selv for, da jeg jo ikke kender de aktuelle dokumenters DOM-opbygning :)
De fundne data banker du så ind i et textarea, hvorfra du kan kopiere dem, når skidtet er færdigt.
Jeg henter - og indskriver - blot spørgsmålets overskrift, men det var tanken, at du kunne skrive dataene ind i en SQL-streng, så du kan paste hele skidtet direkte ind i en SQL-fil og afvikle den som et alm. DB-dump.
Test filen, så kan du se, hvad jeg mener ;o)