Avatar billede cronck Nybegynder
23. september 2005 - 23:14 Der er 18 kommentarer og
1 løsning

Hent værdier til program fra http

Hej eksperter.

Jeg er igang med at lave et lille program til at vise informationer om ens character i spillet RuneScape...

Hvordan kan jeg få programmet til at læse 'brugernavn' fra highscoren på www.runescape.com og hente oplysninger/levels om den bruger man nu har tastet ind?

Hvis at jeg kunne få et tilpasset eksempel ville det være rart...
Avatar billede cronck Nybegynder
24. september 2005 - 09:58 #1
Anyone...?
Avatar billede sjh Nybegynder
24. september 2005 - 11:30 #2
hvordan ser du brugernavnet??
Avatar billede sjh Nybegynder
24. september 2005 - 11:46 #3
så skal du bare selv opdele det..


Option Explicit

Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

Public Function DownloadFile(URL As String, LocalFilename As String) As Boolean
  Dim lngRetVal As Long
  lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)
  If lngRetVal = 0 Then DownloadFile = True
End Function

Private Sub Form_Load()
  DownloadFile "http://hiscore-web.runescape.com/aff/runescape/hiscores.html", "c:\hiscores.html"
End Sub
Avatar billede sjh Nybegynder
24. september 2005 - 13:07 #4
Husk en List1 (ListBox)


Option Explicit

Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Private Declare Function DeleteUrlCacheEntry Lib "Wininet.dll" Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long
 
Private Const ERROR_SUCCESS As Long = 0
Private Const BINDF_GETNEWESTVERSION As Long = &H10
Private Const INTERNET_FLAG_RELOAD As Long = &H80000000

Private Function DownloadFile(sSourceUrl As String, sLocalFile As String) As Boolean
  DownloadFile = URLDownloadToFile(0&, sSourceUrl, sLocalFile, BINDF_GETNEWESTVERSION, 0&) = ERROR_SUCCESS
End Function

Private Function DownloadString(sSourceUrl As String) As String
Dim intFree As Integer
Dim sLocalFile As String
  sLocalFile = "C:\dltemp.txt"
  Call DeleteUrlCacheEntry(sSourceUrl)
  If DownloadFile(sSourceUrl, sLocalFile) = True Then
    intFree = FreeFile
    Open sLocalFile For Input As #intFree
      DownloadString = Input$(LOF(intFree), intFree)
    Close #intFree
    Kill sLocalFile
  End If
End Function

Private Sub Form_Load()
Dim i As Integer
Dim strHtml As String
Dim strName As String

Dim arrXps As Variant
Dim arrRanks As Variant
Dim arrLevels As Variant
Dim arrNames As Variant

  strHtml = DownloadString("http://hiscore-web.runescape.com/aff/runescape/hiscores.html")
  strHtml = Replace(strHtml, Chr$(10), vbCrLf)
  'Text1.Text = strHtml

  arrRanks = Split(Replace(FindTags(strHtml, "<b>Rank</b><br>" & vbCrLf, vbCrLf & "</td>"), "<br>", ""), vbCrLf)
  arrLevels = Split(Replace(FindTags(strHtml, "<b>Level</b><br>" & vbCrLf, vbCrLf & "</td>"), "<br>", ""), vbCrLf)
  arrXps = Split(Replace(FindTags(strHtml, "<b>XP</b> <br>" & vbCrLf, vbCrLf & "</td>"), "<br>", ""), vbCrLf)
  strName = FindTags(strHtml, "<b>Name</b><br>" & vbCrLf, vbCrLf & "</td>")
  arrNames = ArrayFindTags(strName, "class=c" & vbCrLf & ">", "</a>")

  For i = LBound(arrNames) To UBound(arrNames)
    List1.AddItem "(" & arrRanks(i) & ")  " & arrNames(i) & "  Level:" & arrLevels(i) & " XP:" & arrXps(i)
  Next

End Sub

Public Function FindTags(strData As String, strTag1 As String, strTag2 As String) As String
Dim intStart As Long
Dim intEnd As Long
  intStart = InStr(1, strData, strTag1, vbTextCompare)
  If intStart > 0 Then
    intStart = (intStart + Len(strTag1))
    intEnd = InStr(intStart, strData, strTag2, vbTextCompare)
    If intEnd > 0 Then
      FindTags = Mid$(strData, intStart, (intEnd - intStart))
    End If
  End If
End Function

Public Function ArrayFindTags(strData As String, strTag1 As String, strTag2 As String) As Variant
Dim intEnd As Long
Dim intStart As Long
Dim arrTags() As String
Dim intTagsCount As Integer
  intStart = 1
  Do While intStart
    intStart = InStr(intStart, strData, strTag1, vbTextCompare)
    If intStart > 0 Then
      intStart = (intStart + Len(strTag1))
      intEnd = InStr(intStart, strData, strTag2, vbTextCompare)
      If intEnd > 0 Then
        ReDim Preserve arrTags(0 To intTagsCount) As String
        arrTags(intTagsCount) = Mid$(strData, intStart, (intEnd - intStart))
        intTagsCount = (intTagsCount + 1)
      End If
    End If
  Loop
  If intTagsCount > 0 Then
    ArrayFindTags = arrTags
      Else
    ArrayFindTags = Array()
  End If
End Function
Avatar billede cronck Nybegynder
24. september 2005 - 19:20 #5
Jeg har lige installeret min computer om, og kan ikke finde min VB 6 disk... :-(

Kan jeg bruge samme kode i VB 2005 Express Beta 2?
Avatar billede sjh Nybegynder
24. september 2005 - 20:04 #6
ja det ved jeg ikke.. hvis det er vb.net kan du nok ikke bruge koden.. men du kan måske huske om "VB 2005 Express Beta 2" var noget af det samme som vb6..
Avatar billede cronck Nybegynder
24. september 2005 - 20:07 #7
Jeg har nu VB.Net 2005 Express Beta 2 på maskinen jeg sidder ved...

Hvis at du kan, smider jeg gerne 60 point mere på, hvis at du vil hjælpe mig med at lave det i .Net, og få den til at finde brugeren ud fra txtUser.text og hvilken skill den skal finde XP på ud fra txtSkill.text som så skal smiddes ind i txtXP.text ....

Håber ikke at det er for meget :-)
Avatar billede sjh Nybegynder
24. september 2005 - 20:53 #8
desværre.. jeg har ikke vb.net og kender ikke til vb.net´s måde at kode på.. så det kan jeg ikke hjælpe med desværre..
Avatar billede cronck Nybegynder
24. september 2005 - 21:04 #9
Ok, jamen så prøver jeg at lave et nyt spm. i VB.Net istedet for...

Ellers tak for hjælpen ;)
Avatar billede cronck Nybegynder
25. september 2005 - 21:55 #10
Så har jeg fundet min vb 6.0 cd...

Jeg har prøvet at lave en listbox (list1), men hvad skal jeg ellers lave?
Og hvor kan jeg taste et brugernavn ind som at den skal søge på?
Avatar billede sjh Nybegynder
26. september 2005 - 02:24 #11
den skulle da meget gerne liste dem her:

  For i = LBound(arrNames) To UBound(arrNames)
    List1.AddItem "(" & arrRanks(i) & ")  " & arrNames(i) & "  Level:" & arrLevels(i) & " XP:" & arrXps(i)
  Next
Avatar billede cronck Nybegynder
26. september 2005 - 15:26 #12
Skal jeg oprette nogen kolonner på forhånd i listen?
Avatar billede cronck Nybegynder
26. september 2005 - 15:34 #13
Har fået det til at virke... :-)

Jeg har ændret den her: strHtml = DownloadString("http://hiscore-web.runescape.com/aff/runescape/hiscorepersonal.cgi?username=Cronck")

Og jeg ville gerne have den til at find oplysninger om 3 skills valgt fra en Drop-Down box i programmet.
For eks. Cooking, Ranged, og RuneCrafting

Nu vil jeg lige selv  bruge lidt tid på at gøre et godt forsøg, da du allerede har hjulpet mig tilstrækkeligt. Hvis ikke at jeg finder ud af det, vender jeg tilbage :-)
Avatar billede sjh Nybegynder
26. september 2005 - 15:38 #14
ja nu kan man jo kun se dine info hvis man er logget-ind på siden.. så det er måske ikke så smart et program du er ved at lave..
Avatar billede cronck Nybegynder
26. september 2005 - 16:36 #15
Nej, username finder den ud fra et tekst felt...
Man behøver ikke at logge ind på sin bruger i spillet, den søger bare på det brugernavn man har tastet ind, og så viser den alle ens stats på websiden.
Det er den web-side jeg vil have programmet til at "læse" :-)
Avatar billede sjh Nybegynder
26. september 2005 - 16:46 #16
hvis jeg klikker på -> http://hiscore-web.runescape.com/aff/runescape/hiscorepersonal.cgi?username=Cronck

så kan jeg ikke se dine oplysninger
Avatar billede cronck Nybegynder
26. september 2005 - 17:02 #17
Nej, det er fordi at RuneScape.com tvinger en til at vise reklamerne... Frames=True :-)

Men, den downloader min side fint hvis at jeg henter den i programmet...
Avatar billede cronck Nybegynder
26. september 2005 - 17:03 #18
Hvis at du klikker på denne, bliver du da også sendt til forsiden?
http://hiscore-web.runescape.com/aff/runescape/hiscores.html

;-)
Avatar billede cronck Nybegynder
26. september 2005 - 17:07 #19
Her er følg. kode som at jeg har problemer med...

Private Sub cmdDownload_Click()
If (txtUser.Text <> "") Then
  Dim strName As String
  Dim Temp As Variant
 
  strHtml = DownloadString("http://hiscore-web.runescape.com/aff/runescape/hiscorepersonal.cgi?username=" & txtUser.Text)
  Temp = FindTags(strHtml, cmbSkill(0).SelText & "</a></td>" & vbCrLf, "<tr><td><img src=")
End If
End Sub

cmbSkill(0) står for eks. til Hitpoints, og ja, alle skill'sne er skrevet med stort så at de matcher html filen.
Nu kan jeg bare ikke få den til at smide følg. oplysninger ind i programmet.
XP i txtXP(0).Text, og Level i txtLvl(0).Text....

Her er et udklip fra html'en:
</td></tr>
<tr><td><img src="http://www.runescape.com/img/hiscores/hitpoints.gif" valign="bottom" width=16 height=16 /></td><td>&nbsp;</td>
<td><a href="hiscoreuser.cgi?username=zezima&category=4" class=c>Hitpoints</a></td>
<td align="right">11</td><td align="right">
99
</td><td align="right">
34,092,125
</td></tr>
<tr><td><img src="http://www.runescape.com/img/hiscores/ranged.gif" valign="bottom" width=16 height=16 /></td><td>&nbsp;</td>
<td><a href="hiscoreuser.cgi?username=zezima&category=5" class=c>Ranged</a></td>
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