Ergebnise in Liste

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Fox
Beiträge: 75
Registriert: 08.08.2007 10:14
Kontaktdaten:

Ergebnise in Liste

Beitrag von Fox »

Hallo, ich habe ein programm das auf einer suchmaschine musictitel sucht die kostenlos heruntergeladen werden können. aber ich will nicht das man auf die suchseite weitergeleitet sonder die ergebnisse in einer liste dargestellt werden sollen und wenn man auf einen title klickt das es die url der titels im browser öffnet sodass er heruntergeladen wird. ich habe nur die demo version hoffe aber das es reicht hier der code

Code: Alles auswählen

Result = MessageRequester("About", "U-Music was coded by FoX ---> Martin Hocquel", #PB_MessageRequester_Ok)
  a$ = ""
  b$ = "http://www.projectplaylist.com/musicsearch?searchfor="
Input$ = InputRequester("Titel/Interpet", "Bitte geben Sie den Titel bzw. Interpreten ihres Songs ein", "") 
  If Input$ > ""
    a$ = "Es wird nach ihrem Begriff gesucht. Bitte haben Sie einen Moment Geduld:" + Chr(10)  
    a$ + Input$                                                   
  Else  
    a$ = "Es wird nach ihrem Begriff gesucht. Bitte haben Sie einen Moment Geduld:"
  EndIf
  MessageRequester("Connect", a$, 0)
  If OpenWindow(0, 0, 0, 800, 600, "U-Music") And CreateGadgetList(WindowID(0))  
    WebGadget(0, 10, 10, 750, 550, b$ + Input$)  

   
    If CreateMenu(0, WindowID(0))    
      MenuTitle("Menü")
        MenuItem(1, "About "   +Chr(9)+"U-Music")
        MenuItem(2, "Exit"  +Chr(9)+"U-Music")
    EndIf
    Repeat
    EventID = WaitWindowEvent()
    
    If EventID = #PB_Event_Menu

      Select EventMenu()
           
        Case 1 
     MessageRequester("About", "This Programm was created by Martin Hocquel")
     Case 2 
     End
EndSelect


    EndIf

  Until Event = #PB_Event_CloseWindow

EndIf

End

Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Ergebnise in Liste

Beitrag von Kiffi »

ist nicht ganz trivial. In der aktuellen Beta-Version gibt es erweiterte
WebGadget-Funktionalitäten. Allerdings sind die in der momentan
verfügbaren Demo IMO nicht vorhanden.

Ich weiss momentan nicht, ob Userlibs in der Demo gehen. Wenn ja, dann
lade Dir den PureDispHelper von Thomas herunter und installiere ihn.
Wenn Du dabei Hilfe benötigst, dann sag Bescheid.

Danach kannst Du Dir mit folgendem Code alle Hyperlinks innerhalb einer
Webseite ausgeben lassen. Deine Aufgabe ist es dann, die entsprechenden
richtigen Verweise zu ermitteln und diese dann in ein ListViewGadget oder
ListIconGadget zu füllen.

Code: Alles auswählen

; GetLinksFromWebpage

EnableExplicit

Define.l oIE, oDoc, oLink, Result
Define.l AnzahlLinks.l, Counter.l
Define.l InnerText.l, HRef.l

dhToggleExceptions(#True)
oIE = dhCreateObject("InternetExplorer.Application")

If oIE
  
  dhPutValue  (oIE, ".Visible = %b", #False)
  dhCallMethod(oIE, ".Navigate(%T)", @"www.google.de")
  
  Repeat
    dhGetValue("%d", @Result, oIE, ".ReadyState")
  Until Result = 4
  
  dhGetValue("%o", @oDoc, oIE, ".Document")
  
  If oDoc
    
    dhGetValue("%d", @AnzahlLinks, oDoc, ".Links.Length")
    
    Debug Str(AnzahlLinks) + " Link(s) vorhanden"
    
    Debug "------------"
    
    If AnzahlLinks
      
      For Counter = 0 To AnzahlLinks - 1
        
        dhGetValue("%o", @oLink, oDoc, ".Links(%d)", Counter)
        
        If oLink
          
          dhGetValue("%T", @InnerText, oLink, ".InnerText")
          If InnerText
            Debug "Link " + Str(Counter + 1) + " (Text): " + PeekS(InnerText)
            dhFreeString(InnerText)
          EndIf
           
          dhGetValue("%T", @HRef, oLink, ".HRef")
          If HRef
            Debug "Link " + Str(Counter + 1) + " (Zieladresse): " + PeekS(HRef)
            dhFreeString(HRef)
          EndIf
          
          Debug "------------"
          
          dhReleaseObject(oLink)
          
        EndIf
        
      Next
      
    EndIf
    
    dhReleaseObject(oDoc)
    
  EndIf
  
  dhReleaseObject(oIE)
  
EndIf
Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Fox
Beiträge: 75
Registriert: 08.08.2007 10:14
Kontaktdaten:

re

Beitrag von Fox »

hab jetzt die lib installiert aber jetzt kommt beim kombilieren der fehler:
POLINK:fatal error:File not found: 'UUID.LIB'
Benutzeravatar
Fox
Beiträge: 75
Registriert: 08.08.2007 10:14
Kontaktdaten:

Beitrag von Fox »

hi ich hab ja jetzt pb full und hab weiter an u-music programmiert. mitlerweile habe ich die downloadfunktion mit procressbar und allem aber ich bekomme es nicht hin die ergebnise in ein listviewgadget zu bekommen. könnt ihr mir nochmal helfen?

FoX
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Fox hat geschrieben:aber ich bekomme es nicht hin die ergebnise in ein listviewgadget zu bekommen
zeig mal ein bisschen Code.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Fox
Beiträge: 75
Registriert: 08.08.2007 10:14
Kontaktdaten:

Beitrag von Fox »

hi also hier mein bisheriger alter code:

u-music:

Code: Alles auswählen

MessageRequester("","U-Music ist ein Programm welches Links zu Musikdateien im Internet sucht. Das Programm und der Musik Download sind völlig legal, da nur der Upload von Musikdateien strafbar ist. Dieses Gesetz gilt innerhalb Deutschlands.                                                                                                                                                                                                                                                                                                                                                                                                               Programmierer: Martin Hocquel", #PB_MessageRequester_Ok)
If OpenWindow(0, 0, 0, 1000, 1000, "U-Music", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0)) 
  If CreateGadgetList(WindowID(0)) 
If CreateMenu(0, WindowID(0))    
      MenuTitle("Dieses Programm unterliegt dem Copyright von Martin Hocquel.   www.Power-FoX.de")
              Input$ = InputRequester("Suche", "Titel/Interpreten eingeben:", "") 
              If Input$ 
                a$ = ""
                a$ + Input$
                b$ = "http://www.projectplaylist.com/musicsearch?searchfor=" 
              Else 
                a$ = "Keine Eingabe, für Support bitte an >>>fox@power-fox.de.vu<<< schreiben" 
              EndIf
              If OpenWindow(0, 0, 0, 800, 600,"U-Music Suche     ---->       " + a$, #PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
    WebGadget(0, 10, 10, 900, 900, b$ + a$)

    Repeat 
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf


  EndIf
EndIf

EndIf
Result = MessageRequester("U-Music", "Möchten Sie das Suchergebnis speichern?", #PB_MessageRequester_YesNo)
  i$ = "Suche wurde erfolgreich gespeichert "
  If Result = #PB_MessageRequester_Yes       
    i$ + ""
    CreateFile(0, "Gesuchter Titel (U-Music).txt")
    WriteStringN(0, a$ + "-->" + b$ + a$ )
  Else                                       
    End
  EndIf
  MessageRequester("U-Music", i$, #PB_MessageRequester_Ok)
  

die download funktion:

Code: Alles auswählen

Enumeration 
  #Window 
  #cmdStart 
  #progressbar 
  #Frame 
  #cmdExit 
  #Label 
  #Label2 
  #URL 
EndEnumeration 


Procedure.s Reverse(s.s) 
  O.s=Mid(s,Len(s),1) 
  P=Len(s)-1 
  While P>0 
    O.s=O+Mid(s,P,1) 
    P=P-1 
  Wend 
  ProcedureReturn O 
EndProcedure 

Procedure SetProgressbarRange(Gadget.l, Minimum.l, Maximum.l) 
 
  PBM_SETRANGE32 = $400 + 6 
  SendMessage_(GadgetID(Gadget), PBM_SETRANGE32, Minimum, Maximum) 
EndProcedure 

Procedure DoEvents() 
  msg.MSG 
  If PeekMessage_(msg,0,0,0,1) 
    TranslateMessage_(msg) 
    DispatchMessage_(msg) 
  Else 
    Sleep_(1) 
  EndIf 
EndProcedure 

Procedure.s GetQueryInfo(hHttpRequest.l, iInfoLevel.l) 
  lBufferLength.l=0 
  lBufferLength = 1024 
  sBuffer.s=Space(lBufferLength) 
  HttpQueryInfo_(hHttpRequest, iInfoLevel, sBuffer, @lBufferLength, 0) 
  ProcedureReturn Left(sBuffer, lBufferLength) 
EndProcedure 

Procedure UrlToFileWithProgress(myFile.s, URL.s) 
  isLoop.b=1 
  Bytes.l=0 
  fBytes.l=0 
  Buffer.l=4096 
  res.s="" 
  tmp.s="" 
  
  OpenType.b=1 
  INTERNET_FLAG_RELOAD.l = $80000000 
  INTERNET_DEFAULT_HTTP_PORT.l = 80 
  INTERNET_SERVICE_HTTP.l = 3 
  HTTP_QUERY_STATUS_CODE.l = 19 
  HTTP_QUERY_STATUS_TEXT.l = 20 
  HTTP_QUERY_RAW_HEADERS.l = 21 
  HTTP_QUERY_RAW_HEADERS_CRLF.l = 22 

  memID=AllocateMemory(Buffer) 

  Result = CreateFile(1, myFile) 
  hInet = InternetOpen_("", OpenType, #Null, #Null, 0) 
  hURL = InternetOpenUrl_(hInet, URL, #Null, 0, INTERNET_FLAG_RELOAD, 0) 
  
  ;get Dateigröße 
  domain.s = ReplaceString(Left(URL,(FindString(URL, "/",8) - 1)),"http://","") 
  hInetCon = InternetConnect_(hInet,domain, INTERNET_DEFAULT_HTTP_PORT, #Null, #Null, INTERNET_SERVICE_HTTP, 0, 0) 
  If hInetCon > 0 
    hHttpOpenRequest = HttpOpenRequest_(hInetCon, "HEAD", ReplaceString(URL,"http://"+domain+"/",""), "http/1.1", #Null, 0, INTERNET_FLAG_RELOAD, 0) 
    If hHttpOpenRequest > 0 
      iretval = HttpSendRequest_(hHttpOpenRequest, #Null, 0, 0, 0) 
      If iretval > 0 
        tmp = GetQueryInfo(hHttpOpenRequest, HTTP_QUERY_STATUS_CODE) 
        If Trim(tmp) = "200" 
          tmp = GetQueryInfo(hHttpOpenRequest, HTTP_QUERY_RAW_HEADERS_CRLF) 
          If FindString(tmp,"Content-Length:",1)>0 
            ii.l=FindString(tmp, "Content-Length:",1) + Len("Content-Length:") 
            tmp = Mid(tmp, ii, Len(tmp)-ii) 
            myMax = Val(Trim(tmp)) 
          EndIf 
        EndIf 
      EndIf 
    EndIf 
  EndIf 
  
  SetGadgetText(#Label, "Dateigröße: " + Str(myMax)) 
  SetProgressbarRange(#progressbar,0,myMax) 
  
  ;start downloading 
  Repeat 
    InternetReadFile_(hURL, memID, Buffer, @Bytes) 
    If Bytes = 0 
      isLoop=0 
    Else 
      fBytes=fBytes+Bytes 
        SetGadgetText(#Label2, "Heruntergeladen: " + Str(fBytes)) 
      If myMax >= fBytes: SetGadgetState(#progressbar, fBytes): EndIf 
      WriteData(1,memID, Bytes) 
    EndIf 
      DoEvents() 
  Until isLoop=0 
  InternetCloseHandle_(hURL) 
  InternetCloseHandle_(hInet) 
  SetGadgetState(#progressbar, 0) 
  CloseFile(1)    
  FreeMemory(memID) 
EndProcedure 



If OpenWindow(#Window, 0, 0, 400, 175, "Downloader", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered ) 

  If CreateGadgetList(WindowID(#Window)) 
      StringGadget(#URL, 10, 10, 380, 20, "") 
      ProgressBarGadget(#progressbar, 10, 40, 380, 30, 0,100 , #PB_ProgressBar_Smooth) 
      TextGadget(#Label, 10, 80,300,20,"Datei Größe:") 
      TextGadget(#Label2, 10, 100,300,20,"Bereits Heruntergeladen:") 
      Frame3DGadget(#Frame, -10, 120, 420, 110, "") 
      ButtonGadget(#cmdExit, 160, 140, 110, 25, "Beenden") 
      ButtonGadget(#cmdStart, 280, 140, 110, 25, "Start", #PB_Button_Default) 
  EndIf 
        
  Repeat 
    EventID.l = WaitWindowEvent() 
    If EventID = #PB_Event_Gadget    
      Select EventGadget() 
        Case #cmdStart 
        
          URL.s = GetGadgetText(#URL) 
          
          ;get filename (checking /) 
          myFile.s= Right(URL, FindString(Reverse(URL),"/",1)-1) 
          ;request path 
          myFolder.s = PathRequester ("Speichern'" + myFile + "'?", "C:\") 

          UrlToFileWithProgress(myFolder + myFile, URL) 
        Case #cmdExit 
          End 
      EndSelect 
    EndIf               
  Until EventID = #PB_Event_CloseWindow 
EndIf 
End 

und am schluss solte es eigentlich fertig so aussehen:

http://foxhp.fo.funpic.de/umusic.jpg
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Fox hat geschrieben:hi also hier mein bisheriger alter code:
sieht gruselig aus ;-) aber zu Deinem momentanen Problem:

nachdem Du mit

Code: Alles auswählen

UrlToFileWithProgress(myFolder + myFile, URL) 
die entsprechende Webseite auf Deine Platte heruntergeladen hat, musst
Du sie wieder in den Speicher laden. Schau Dir hierfür mal folgende
Befehle zum Laden der Datei an:

Code: Alles auswählen

ReadFile() 
Eof()
ReadString()
CloseFile()
Danach musst Du die in den Speicher geladene Datei nach den
entsprechenden Hyperlinks durchsuchen. Das geht mit den Befehlen:

Code: Alles auswählen

FindString()
Len()
Mid(), Left(), Right()
Die in der Datei gefundenen Links kannst Du mit AddGadgetItem() dann
Zeile für Zeile in ein ListIconGadget einfügen.

Setze Dich mal ein wenig mit obigen Befehlen auseinander und wenn Du
an einer Stelle ein konkretes Problem hast, dann kannst Du hier auf Hilfe
hoffen. :-)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Fox
Beiträge: 75
Registriert: 08.08.2007 10:14
Kontaktdaten:

Beitrag von Fox »

hi :) ich bin zwar gerade in der schule und kann es noch nicht testen aber wenn ich heim komme probiere ich es gleich aus danke schonmal

fox
Antworten