webForumDet fria alternativet

Ta data från webbplats

2 svar · 502 visningar · startad av David N

David NMedlem sedan nov. 200224 inlägg
#1

Tjena,

Jag behöver lite hjälp. Håller på att försöka fixa ett något muppigt script till ett nätspel.

Jag vill kunna köra ett javascript via adressfältet på exempelvis följande adress:
http://se.twstats.com/sv7/index.php?page=tribe&mode=villages&id=469&confirm=d41d8cd98f00b204e9800998ecf8427e

Jag vill då att detta script ska rendera en lista i följande format:
xxx|xxx xxx|xxx (osv.)
xxx representerar alltså koordinaterna. Detta är inte så jättebökigt, men grejen som strular till det är att jag vill att den bara ska visa koordinaterna för en poäng över exempelvis 3000.

Jag är ganska ny på javascript och har testat mig fram lite. Har skrivit ihop följande, men det funkar inte som jag vill:

javascript: 
var report = document.body.innerHTML; 
var coords = report.match (/\d{3}\|\d{3}/g);
var points = report.match (/\d{1,2}\,\d{3}/g);

document.write("Totalt " + coords.length +" byar<br /><br />");
	
for (i=coords.length-1; i>=0; --i ) {
		if(points[i] >= 3000) {
			document.write("test");
		}		
	document.write(coords[i]+" ");
	document.write(points[i]+"<br />");
}

Kör ni det där från adressfältet på adressen ovan kan ni se att det inte funkar särskilt bra. Bykoordinaterna verkar läsas in korrekt, men poängen fungerar bara för vissa av byarna och den ligger inte bredvid "rätt" by. Ibland blir det dessutom "undefined" och ibland blir det ett felaktigt värde (dvs. en poäng som ingen av byarna har) - förmodligen för att jag gjort något fel i matchandet. Slutligen fungerar inte heller if-satsen där jag vill skriva ut något för varje by över 3000 poäng.

Nu har koden ändrats hundra gånger om och jag är bara yr och less. Jag har även provat att använda replace för att ta bort kommatecken om det skulle vara så att byarna som har en poäng som inte innehåller ett komma (dvs 1->999 poäng) strular till det, men lyckades inte riktigt få till det heller, trots konvertering fram och tillbaka mellan string och nummer etc.

Tacksam för hjälp :)

spangoMedlem sedan juni 20008 205 inlägg
#2

Använder du Firefox? Då kan du använda följande lila tjusiga oneliner:

document.body.innerHTML.match(/((?:\d+,)*\d+)\D+\d+\|\d+/g).filter(function(s){return parseInt(s.replace(/,/g, "")) > 3000; }).map(function(s){return /\d+\|\d+/.exec(s);})

Kör du t.ex. IE kan du behöva göra egna versioner av map och filter, men det är inte speciellt komplicerat.

Edit: Man behöver inte filter, det går att göra kollen i regexpen:

document.body.innerHTML.match(/((?:[3-9],|\d\d+,)+\d+)\D+\d+\|\d+/g).map(function(s){return /\d+\|\d+/.exec(s);})
David NMedlem sedan nov. 200224 inlägg
#3

Vackert, tusen tack :)

132 ms totalt · 3 externa anrop · v20260731065814-full.b943c234
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)