Avatar billede Peter Praktikant
11. september 2002 - 22:11 Der er 15 kommentarer og
1 løsning

Trække nogle tal ud af et html dokument.

Jeg roder lidt med samurize i øjeblikket, her kan man få forskellige oplysninger på skrivebordet. Disse oplysninger kommer fra vb-scripts eller javascript filer. Nu er det sådan, at jeg kunne godt tænke mig at trække nogle tal ud fra en hjemmeside som altid har den samme information pånær disse tal.
Jeg ville meget gerne høre om dette kan lade sig gøre, koden til siden er indsat nedenfor. Det skal så være sådan, at jeg har et script der læser fra siden og har funktioner der returnerer de forskellige tal.


<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML><HEAD><TITLE>XXXXXXXXXX - Data Meter (version 0.7b)</TITLE>
</HEAD><BODY><body background="" bgcolor="#ffffff" text="#000000"
link="#0000A0" vlink="#000000" alink="#000000"><center><b>Your
Upload/Download stats</b><br><br><table><tr><td>IP
Address:<br>Upload:<br>Download:<br>Total:<br>Limit:<br>Used:</td><td>172.16.1.38<br>2
[MB]<br>66 [MB]<br>68 [MB]<br>1000 [MB]<br>7%</td></tr>
</table><br><br>Web (http) &amp; XXXXXXX E-mail (pop3) trafic not
counted in.<br><br><br><a href="XXXXXXXX">XXXXXXXXX</a> - Data Meter
(version 0.7b)</center></BODY></HTML>

Fra dette vil jeg gerne have fat i de 2 mb, de 66 mb, de 68 mb og de
7%. Eventuelt også de 1000 mb. Dette er jo en side som tager info fra
et eller andet sted løbende, så jeg er ikke helt klar over om det
overhovedet kan lade sig gøre. Men hvis det kan, ja så håber jeg på,
at der er nogle der kan hjælpe mig der også. Sidens adresse er
http://XXXXX.XXXX.dk:8080/cgi-bin/datameter.pl

Håber der er nogen med nogle ideer.
Avatar billede medions Nybegynder
11. september 2002 - 22:40 #1
? Prøv at begrund lidt mere...

//>Rune
Avatar billede Peter Praktikant
11. september 2002 - 22:44 #2
jeg vil gerne lave et script i vb som har en funktion der returnerer 66, men altså ikke altid 66. I koden jeg har indsat er der forskellige tal, disse vil jeg gerne trække ud af koden med et script, kan det lade sig gøre. Jeg forestiller mig noget med, at scriptet læser siden ind en gang imellem og finder de tal jeg skal bruge, jeg er bare ikke klar over hvordan det skal kodes.

Blev det mere klart?
Avatar billede Peter Praktikant
11. september 2002 - 22:45 #3
Koden er altid som den der er indsat, blot varierer tallenes værdi.
Avatar billede medions Nybegynder
11. september 2002 - 22:48 #4
Ok,jeg kigger lige på det i morgen... natnat

//>Rune
Avatar billede Peter Praktikant
11. september 2002 - 22:54 #5
det lyder super.
Avatar billede medions Nybegynder
12. september 2002 - 08:12 #6
Hm. Vent lige lidt... Du kan jo ikke hive noget ind fra et andet site end dit eget! -Det er umuligt...! -hvis dette var muligt, prøv så at forestille dig alle de nyheder der ville blive stjålet fra nyhedssider osv. Det ville jo blive helt ekstremt.!

//>Rune
Avatar billede Peter Praktikant
12. september 2002 - 08:46 #7
det kan man sagtens, du kan se dette script:
' Latest news from Politiken (http://politiken.dk/VisArtikel.iasp?PageID=1)
' Written by Michael Borup (borup@email.dk)
' 2002-09-02

function news1
  news1 = getNews(1)
end function

function news2
  news2 = getNews(2)
end function

function news3
  news3 = getNews(3)
end function

function news4
  news4 = getNews(4)
end function

function news5
  news5 = getNews(5)
end function

function news6
  news6 = getNews(6)
end function

function news7
  news7 = getNews(7)
end function

function news8
  news8 = getNews(8)
end function

function news9
  news9 = getNews(9)
end function

function news10
  news10 = getNews(10)
end function

function getNews(value)
  On Error Resume Next

  ' Get page
  page = binToText(getHTMLBin("http://politiken.dk/VisArtikel.iasp?PageID=1"), 100000)
 
  ' Parse news from page
  endPos = InStr(1, page, "(PID, rubrik, tid)", 1)           
  startPos = InStrRev(page, " ", endPos, 1) + 1       
  id = Mid(page, startPos, endPos - startPos) 
  newsArray = split(page, id, -1, 1)

  ' Get news index
  if (value + 2) <= UBound(newsArray) then
    newsStr = newsArray(value + 2)   
  end if

  ' Format news string
  startPos = InStr(1, newsStr, "'", 1) + 1           
  endPos = InStr(startPos, newsStr, "'", 1)
  newsText = Mid(newsStr, startPos, endPos - startPos)
 
  endPos = InStrRev(newsStr, "'", Len(newsStr), 1)
  startPos = InStrRev(newsStr, "'", (endPos - 1), 1) + 1
  newsTime = Mid(newsStr, startPos, endPos - startPos)

  newsStr = newsText + " (" + NewsTime + ")"

  newsStr = htmlToAcsii(newsStr)   
 
  getNews = newsStr

end function

function htmlToAcsii(value)
  value = replace(value, "<br>", " ")   
  value = replace(value, vbLf, "")
  value = replace(value, vbCr, "")
  value = replace(value, "&aring;", "å")
  value = replace(value, "&aelig;", "æ")
  value = replace(value, "&oslash;", "ø")
  value = replace(value, "&Aring;", "Å")
  value = replace(value, "&Aelig;", "Æ")
  value = replace(value, "&Oslash;", "Ø")
  value = replace(value, "&aacute;", "á")
  value = replace(value, "&quot;", """")
 
  htmlToAcsii = value
end function

function getHTMLBin(strURL)
  On Error Resume Next

  Dim objXMLHTTP, strReturn
  Set objXMLHTTP = CreateObject("Microsoft.XMLHTTP")

  objXMLHTTP.Open "GET", strURL, False
  objXMLHTTP.Send Cstr(Rnd())

  getHTMLBin = objXMLHTTP.responseBody
  Set objXMLHTTP = Nothing
end function

function binToText(varBinData, intDataSizeInBytes)
  On Error Resume Next
           
  Const adFldLong = &H00000080
  Const adVarChar = 200
  Set objRS = CreateObject("ADODB.Recordset")

  objRS.Fields.Append "txt", adVarChar, intDataSizeInBytes, adFldLong
  objRS.Open

  objRS.AddNew
  objRS.Fields("txt").AppendChunk varBinData
  binToText = objRS("txt").Value

  objRS.Close
  Set objRS = Nothing
end function

Jeg kan bare ikke finde ud af, om man kan gøre det i mit tilfælde. Jeg tænker noget med at læse en linje og så skære det fra man ikke skal bruge, for koden er jo den samme hver gang pånær tallet.
Avatar billede medions Nybegynder
12. september 2002 - 11:02 #8
Hvis du kan få alt koden til at ligge i en variabel kan du trække de forskellige data ud ved at gøre sådan her... (I dette tilfælde har jeg fx. trukket dit IP nr. ud af teksten)

<html>
<head>
    <title></title>
</head>
<body>

<script language="VBScript">
   
    strCode = "<!DOCTYPE HTML PUBLIC '-//IETF//DTD HTML//EN'><HTML><HEAD><TITLE>XXXXXXXXXX - Data Meter (version 0.7b)</TITLE></HEAD><BODY><body background='' bgcolor='#ffffff' text='#000000' link='#0000A0' vlink='#000000' alink='#000000'><center><b>Your Upload/Download stats</b><br><br><table><tr><td>IP Address:<br>Upload:<br>Download:<br>Total:<br>Limit:<br>Used:</td><td>172.16.1.38<br>2 [MB]<br>66 [MB]<br>68 [MB]<br>1000 [MB]<br>7%</td></tr> </table><br><br>Web (http) &amp; XXXXXXX E-mail (pop3) trafic notcounted in.<br><br><br><a href='XXXXXXXX'>XXXXXXXXX</a> - Data Meter (version 0.7b)</center></BODY></HTML>"
    If InStr(strCode, "[MB]") Then
        MsgBox(InStr(strCode, "[MB]"))
        MsgBox(Mid(strCode, InStr(strCode, "[MB]")-17,11))
    End If
'msgbox(strCode)
</script>

</body>
</html>

//>Rune
Avatar billede Peter Praktikant
12. september 2002 - 11:09 #9
men er det ikke muligt, at scriptet i stedet tager adressen som parameter og derefter indlæser denne og finder de forskellige variable, for siden er jo ikke sådan som jeg har indsat hvergang, tallene varierer.
Avatar billede Peter Praktikant
12. september 2002 - 11:10 #10
desuden havde jeg også tænkt, at det skulle indsættes som en vbs-fil, altså ikke bare som et script. Vil det betyde nogle større ændringer?
Avatar billede medions Nybegynder
12. september 2002 - 12:18 #11
Nej, det ville ikke være de store ændringer der skulle til...

Jeg forstår ikke hvad du mener emd at indlæse og så finde variablerne for siden...! -Man kan jo ikke indlæse alt tekst fra en side... -men er det da ikke dit eget site? -Hvis det er så kan du jo bare kontakte databasen/selv lave script der gør det...

//>Rune
Avatar billede Peter Praktikant
12. september 2002 - 12:22 #12
det er ikke mit eget site, derfor kan jeg ikke kontakte databasen. Jeg bor på et kollegie hvor vi har en download kvote, denne vises på siden. Men jeg har nu fået det til at virke med følgende kode:

function ip

  ' Get ip
  page = binToText(getHTMLBin("http://pedersen.omk.dk:8080/cgi-bin/datameter.pl"), 1000)
  ip = Mid(page, InStr(page, "[MB]")-17,11)
 

end function

function htmlToAcsii(value)
  value = replace(value, "<br>", " ")   
  value = replace(value, vbLf, "")
  value = replace(value, vbCr, "")
  value = replace(value, "&aring;", "å")
  value = replace(value, "&aelig;", "æ")
  value = replace(value, "&oslash;", "ø")
  value = replace(value, "&Aring;", "Å")
  value = replace(value, "&Aelig;", "Æ")
  value = replace(value, "&Oslash;", "Ø")
  value = replace(value, "&aacute;", "á")
  value = replace(value, "&quot;", """")
 
  htmlToAcsii = value
end function

function getHTMLBin(strURL)
  On Error Resume Next

  Dim objXMLHTTP, strReturn
  Set objXMLHTTP = CreateObject("Microsoft.XMLHTTP")

  objXMLHTTP.Open "GET", strURL, False
  objXMLHTTP.Send Cstr(Rnd())

  getHTMLBin = objXMLHTTP.responseBody
  Set objXMLHTTP = Nothing
end function

function binToText(varBinData, intDataSizeInBytes)
  On Error Resume Next
           
  Const adFldLong = &H00000080
  Const adVarChar = 200
  Set objRS = CreateObject("ADODB.Recordset")

  objRS.Fields.Append "txt", adVarChar, intDataSizeInBytes, adFldLong
  objRS.Open

  objRS.AddNew
  objRS.Fields("txt").AppendChunk varBinData
  binToText = objRS("txt").Value

  objRS.Close
  Set objRS = Nothing
end function

Som du kan se har jeg brugt koden jeg tidligere har postet og kombineret den med lidt af dit. Nu skal jeg bare lave funktioner til at trække resten ud med.
Avatar billede Peter Praktikant
12. september 2002 - 12:25 #13
den skal lige finpudses, og jeg skal jo heller ikke indlæse kilden for hver værdi jeg vil have ud. Desuden har jeg ikke rigtigt brug for funktionen htmlToAscii, men det kan være jeg kan bruge den til noget smart så jeg lettere kan finde de forskellige værdier i koden. Men tak for hjælpen.
Avatar billede medions Nybegynder
12. september 2002 - 12:29 #14
Anytime ;o)
Thx 4 Poinz

//>Rune
Avatar billede Peter Praktikant
12. september 2002 - 12:33 #15
men tror du der er en smartere eller mere elegant måde at gøre det på?
Avatar billede medions Nybegynder
12. september 2002 - 12:43 #16
Hmm nej, ik' rigtig..

//>Rune
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester