Page 1 sur 2

Youtube

Publié : lun. 16/juil./2007 15:10
par Droopy
Download les vidéos de YouTube

Source & Exe -->YouTube.zip
Image

Code : Tout sélectionner

;/ PureBasic 4.10b2
; Version 2.0

; Added : ProgressBar + Cancel Download + Size Downloaded / File Size / rate
; Added : Cancel Button / Resize / Translation in English

#Title="YouTube Download at "
Global VideoTitle.s,Path.s
Global DownloadURL.s, DownloadFilename.s, StopDownload, IsDownloading 

;{/ dataSection
DataSection
Back:IncludeBinary "back.ico"
Forward:IncludeBinary "forward.ico"
Home:IncludeBinary "home.ico"
Save:IncludeBinary "Download.ico"
Stop:IncludeBinary "Cancel.ico"
Chemin:IncludeBinary "Path.ico"
EndDataSection
;}

Enumeration
  #Web
  #ToolBar
  #Home
  #Back
  #Forward
  #Path
  #Download
  #Cancel
  #StatusBar
  #Progress
EndEnumeration

Procedure.s FileNameConformation(File.s) ; Renvoie un nom de fichier sans les caractères interdits
  
  For n=1 To Len(File)
    c.s=Mid(File,n,1)
    If FindString(c,"\",1)
      Out.s+" "
    ElseIf FindString(c,"/",1)
      Out.s+" "
    ElseIf FindString(c,":",1)
      Out.s+" "
    ElseIf FindString(c,"?",1)
      Out.s+" "
    ElseIf FindString(c,"*",1)
      Out.s+" "
    ElseIf FindString(c,"<",1)
      Out.s+" "
    ElseIf FindString(c,">",1)
      Out.s+" "
    ElseIf FindString(c,"|",1)
      Out.s+" "
    ElseIf FindString(c,Chr(34),1)
      Out.s+" "
    Else
      Out.s+c
    EndIf
  Next
  
  ProcedureReturn Out
EndProcedure

Procedure SaveYoutubeVideo(VideoId.s)
  
  ;/ ( Downloader With progress And Status By Joakim L. Christiansen )
  
  DisableToolBarButton(#ToolBar,#Cancel,#False)
  IsDownloading+#True
  
  DownloadURL.s = "http://cache.googlevideo.com/get_video?video_id="+VideoId
  DownloadFilename.s= Path+VideoTitle+".flv"
  
  Protected hInet, hURL, Bytes 
  Protected BufferLength = 2048, Buffer.s = Space(BufferLength) 
  
  Protected Url.s      = DownloadURL.s 
  Protected Filename.s = DownloadFilename.s 
  Protected File 
  Protected CurrentSize, PreviousSize, FileSize, time, BytesPerSecond 
  Protected Domain.s, String.s, i, BufferLengthWas = BufferLength 
  Protected hInetCon, hHttpOpenRequest, iretval 
  
  hInet = InternetOpen_("Downloader",0,0,0,0) 
  hURL  = InternetOpenUrl_(hInet,Url.s,0,0,$80000000,0) 
  
  ;Get filesize 
  Domain.s  = StringField(Url.s,3,"/") 
  hInetCon = InternetConnect_(hInet,Domain.s,80,#Null,#Null,3,0,0) 
  If hInetCon 
    hHttpOpenRequest = HttpOpenRequest_(hInetCon,"HEAD",ReplaceString(Url.s,"http://"+Domain.s+"/",""),#Null,#Null,0,$80000000,0) 
    If hHttpOpenRequest 
      iretval = HttpSendRequest_(hHttpOpenRequest,#Null,0,0,0) 
      If iretval 
        HttpQueryInfo_(hHttpOpenRequest,19,@Buffer.s,@BufferLength,0) ;changes the buffer length 
        String.s = PeekS(@Buffer.s,BufferLength): BufferLength = BufferLengthWas 
        If Trim(String.s) = "200" 
          HttpQueryInfo_(hHttpOpenRequest,22,@Buffer.s,@BufferLength,0) 
          String.s = PeekS(@Buffer.s,BufferLength): BufferLength = BufferLengthWas 
          If FindString(String.s,"Content-Length:",1) 
            i = FindString(String.s,"Content-Length:",1) + Len("Content-Length:") 
            String.s = Mid(String.s,i,Len(String.s)-i) 
            FileSize = Val(Trim(String.s)) 
          EndIf 
        EndIf 
      EndIf 
    EndIf 
  EndIf 
  
  ;Download file and update status 
  If hURL 
    File = CreateFile(#PB_Any,Filename.s) 
    If File 
      time = ElapsedMilliseconds() 
      SetGadgetAttribute(#Progress,#PB_ProgressBar_Maximum,FileSize) 
      While InternetReadFile_(hURL,@Buffer.s,BufferLength,@Bytes) And Bytes > 0 
        If StopDownload 
          Break 
        EndIf 
        WriteData(File,@Buffer.s,Bytes) 
        CurrentSize + Bytes 
        SetGadgetState(#Progress,CurrentSize) 
        StatusBarText(#StatusBar,0,"  "+Str(CurrentSize/1024)+"/"+Str(FileSize/1024)+"kb - "+Str(BytesPerSecond/1024)+"kb/s") 
        If time < ElapsedMilliseconds() - 1000 
          time = ElapsedMilliseconds() 
          BytesPerSecond = CurrentSize - PreviousSize 
          PreviousSize = CurrentSize 
        EndIf 
      Wend 
      CloseFile(File) 
    Else 
      MessageRequester("Warning!","Error creating file!",#MB_ICONWARNING) 
    EndIf 
    StopDownload = #False 
    IsDownloading = #False 
    SetGadgetState(#Progress,0) 
    If CurrentSize < FileSize 
      DeleteFile(Filename.s) 
    EndIf 
  Else 
    MessageRequester("Warning!","Download failed!",#MB_ICONWARNING) 
  EndIf 
  
  InternetCloseHandle_(hURL) 
  InternetCloseHandle_(hInetCon) 
  InternetCloseHandle_(hInet) 
  DisableToolBarButton(#ToolBar,#Cancel,#True)
  StatusBarText(#StatusBar,0,"")
EndProcedure

Procedure ToolBarImageButtonEx(ToolBarId,ButtonId,ImageId,ToolTip.s)
  ToolBarImageButton(ButtonId,ImageId)
  ToolBarToolTip(ToolBarId,ButtonId,ToolTip)
EndProcedure


Ini.s=GetPathPart(ProgramFilename())+StringField(GetFilePart(ProgramFilename()),1,".")+".ini"
OpenPreferences(Ini)
Path.s=ReadPreferenceString("Path","c:\")

;{ Visual Design
OpenWindow(0,0,0,1024,768,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget) 
SetWindowTitle(0,#Title+Path)
CreateGadgetList(WindowID(0))
WebGadget(#Web,10,30,1024-20,768-60,"http://www.youtube.com")
CreateToolBar(#ToolBar,WindowID(0))
ToolBarImageButtonEx(#ToolBar,#Home,ImageID(CatchImage(#PB_Any,?Home)),"www.Youtube.com")
ToolBarImageButtonEx(#ToolBar,#Back,ImageID(CatchImage(#PB_Any,?Back)),"Back")
ToolBarImageButtonEx(#ToolBar,#Forward,ImageID(CatchImage(#PB_Any,?Forward)),"Forward")
ToolBarSeparator()
ToolBarImageButtonEx(#ToolBar,#Path,ImageID(CatchImage(#PB_Any,?Chemin)),"Backup Path")
ToolBarSeparator()
ToolBarImageButtonEx(#ToolBar,#Download,ImageID(CatchImage(#PB_Any,?Save)),"Download")
ToolBarImageButtonEx(#ToolBar,#Cancel,ImageID(CatchImage(#PB_Any,?Stop)),"Cancel Download")
CreateStatusBar(#StatusBar,WindowID(0))
AddStatusBarField(150)
AddStatusBarField(3000)
ProgressBarGadget(#Progress,170,5,1024-181,20,0,100, #PB_ProgressBar_Smooth)
DisableToolBarButton(#ToolBar,#Cancel,#True)
DisableToolBarButton(#ToolBar,#Download,#True)
;}

;{ Event Management
Repeat 
  evt=WaitWindowEvent()
  
  If IsThread(Tid)=0 ; If not Downloading
    StatusBarText(#StatusBar,0," "+VideoId.s) ; Show VideoId
    If Len(VideoId.s)=11
      DisableToolBarButton(#ToolBar,#Download,#False) ; Enable Download
    EndIf
  Else
    DisableToolBarButton(#ToolBar,#Download,#True) ; Disable Download
  EndIf
   
  Select evt
    
    Case #PB_Event_Gadget
      If EventGadget()=#Web
        If Url.s<>GetGadgetText(#Web)
          StatusBarText(#StatusBar,1," "+GetGadgetText(#Web))
          Url=GetGadgetText(#Web)
          ; Get the VideoId
          VideoId.s=StringField(GetGadgetText(#Web),2,"=")
          VideoId=StringField(VideoId,1,"&")
        EndIf
      EndIf
      
    Case #PB_Event_SizeWindow
      ResizeGadget(#Web,10,30,WindowWidth(0)-20,WindowHeight(0)-60)
      ResizeGadget(#Progress,170,5,WindowWidth(0)-181,20)
       
    Case #PB_Event_Menu
      Select EventMenu()
        Case #Home
          SetGadgetText(#Web,"http://www.youtube.com")
        Case #Back
          SetGadgetState(#Web,#PB_Web_Back)
        Case #Forward
          SetGadgetState(#Web,#PB_Web_Forward)
        Case #Path
          temp.s=PathRequester("Backup Video Path",Path)
          If temp<>""
            Path=temp
            SetWindowTitle(0,#Title+Path)
          EndIf
          
        Case #Download
          If Not IsDownloading And Len(VideoId)=11
            Source.s=GetGadgetItemText(#Web,#PB_Web_HtmlCode) ; Extract the HTML code from the WebGadget
            ; Extract the VideoName
            g=FindString(Source,"<title>YouTube - ",1)+17
            d=FindString(Source,"</title>",g)
            VideoTitle.s=Mid(Source,g,d-g)
            VideoTitle=FileNameConformation(VideoTitle)
            Tid=CreateThread(@SaveYoutubeVideo(),VideoId)
          EndIf
          
        Case #Cancel
          StopDownload = #True 
          IsDownloading = #False 
          SetGadgetState(#Progress,0)
          DisableToolBarButton(#ToolBar,#Cancel,#True)
          
      EndSelect
  EndSelect
  
Until evt=#PB_Event_CloseWindow
WritePreferenceString("Path",Path)
;}

Publié : mar. 17/juil./2007 11:45
par Ar-S
Excellent Droopy !
J'utilise un sniffer utilisant winpcap pour choper les videos en streaming, nul doute que je vais bien analyser ton code pour comprendre son fonctionnement. Super !!!

P.S : Pourrais tu faire un petit zip des fichiers .ico (ou les incorporer en hex dans ton code) ?
Merci :)

2 petites choses qui seraient chouette pour l'améliorer :
- Ajout d'une barre de progression du téléchargement
- Ajout du choix du repertoire de sauvegarde.

Publié : mar. 17/juil./2007 17:04
par venom
effectivement sa pourrais etre bien simpa mais petite question je le lit avec quoi ce format " flv " 8O .


@++


arf suije bete c'est en video flash :wink: autant pour moi :)

Publié : mar. 17/juil./2007 18:01
par Backup
venom a écrit :effectivement sa pourrais etre bien simpa mais petite question je le lit avec quoi ce format " flv " 8O .


@++


arf suije bete c'est en video flash :wink: autant pour moi :)
avec ça
tu peux récupérer une video sur youtube
et
tu converti en mpg ou avi


http://michel.dobro.free.fr/Forum_PB/FL ... 032006.zip


a savoir que lorsque vous visionnez une video, sur un site de video, celle ci
est chargé dans le dossier Cache du navigateur !!
il suffit de changer le fichier qui peut porter un nom du genre
"6546535sdfsdf8465sd" (de grosse taille pour les video)
en "toto.flv", pour ensuite le convertir grace au soft ci dessus !! :D

Publié : mar. 17/juil./2007 18:24
par Droopy
venom a écrit :je le lit avec quoi ce format " flv "
Moi je le lis avec Media Player Classic + ffdshow ( filtre FLV activé )

Publié : mar. 17/juil./2007 20:50
par Droopy
Modification apportées :
  • - Chemin de téléchargement définissable
    - Zip avec Code source / icones / Exe

Publié : mer. 18/juil./2007 1:56
par Ar-S
Super Droopy !
Je vais tester ça !
Tu es un chef !

Publié : mer. 18/juil./2007 7:01
par Kwai chang caine
Genial DROOPY

Je viens de tester ton super code mais chez moi j'ai une erreur à la ligne 332

Code : Tout sélectionner

DisableMenuItem(#ToolBar,#Home,etat)
Et si je la commente, j'ai une erreur a la ligne suivante.
Je ne sais pas si je suis le seul ? :roll:

Publié : mer. 18/juil./2007 9:02
par Droopy
Kwai chang caine a écrit :j'ai une erreur à la ligne 332
Ce code est pour PB 4.x, n'utilise tu pas la 3.9x ?
AR S a écrit :Ajout d'une barre de progression du téléchargement
Je sais pas comment faire pour connaitre la taille de la vidéo avant de commencer le téléchargement

Publié : mer. 18/juil./2007 10:17
par Coolman
Dobro a écrit :
venom a écrit :effectivement sa pourrais etre bien simpa mais petite question je le lit avec quoi ce format " flv " 8O .


@++


arf suije bete c'est en video flash :wink: autant pour moi :)
avec ça
tu peux récupérer une video sur youtube
et
tu converti en mpg ou avi


http://michel.dobro.free.fr/Forum_PB/FL ... 032006.zip


a savoir que lorsque vous visionnez une video, sur un site de video, celle ci
est chargé dans le dossier Cache du navigateur !!
il suffit de changer le fichier qui peut porter un nom du genre
"6546535sdfsdf8465sd" (de grosse taille pour les video)
en "toto.flv", pour ensuite le convertir grace au soft ci dessus !! :D
Pour info, avec firefox, j'ai trouve une extension tres efficace pour afficher en clair le cache, il s'agit de cacheviewer, il est possible d'appliquer un filtre pour afficher par exemple tous les fichiers swf (flash) et de sauvegarder directement le fichier selectionné. avant j'utilisais un editeur hex pour visualiser l'entete des fichiers se trouvant dans le cache de firefox solution trop lourde au final...

8)

Publié : mer. 18/juil./2007 11:22
par Backup
Coolman a écrit : Pour info, avec firefox, j'ai trouve une extension tres efficace pour afficher en clair le cache, il s'agit de cacheviewer 8)

waaaaou ! excellent , j'adopte !! :D
Merci pour l'info :D

Vraiment Mozilla est un superbe navigateur !! je n'en veux pas d'autres !! :lol:

Publié : mer. 18/juil./2007 17:10
par lionel_om
Ar-S a écrit :Excellent Droopy !
J'utilise un sniffer utilisant winpcap pour choper les videos en streaming, nul doute que je vais bien analyser ton code pour comprendre son fonctionnement. Super !!!
Il me semble qu'il existe un logiciel de téléchargement de flux qui s'appelle SUPER !

Site officiel :
*************
http://www.erightsoft.net/home.html

Lien direct :
***********
http://www.erightsoft.net/SUPER.html#Dnload

Publié : mer. 18/juil./2007 18:27
par Ollivier
Ah ouais les gars, c'est cool! Par contre, moi je comprends maintenant pourquoi Illusion de Benny Benassy a été viré du site et remplacé par un message du style 'ce fichier a été mal lu chais pas trop quoi' :o

Alors, s'il vous plaît: utilisez ce superbe outil juste pour prendre les videos amateur sinon je ne pourrais plus me réveiller avec 'Laisse-moi foutre mon petit bordel de s n i p e r' :D

Excellent ce code.
XLC

Publié : mer. 18/juil./2007 18:46
par Backup
lionel_om a écrit : Il me semble qu'il existe un logiciel de téléchargement de flux qui s'appelle SUPER !
pour info le prg que j'ai donné "FLV converter" , fait aussi telechargement :wink:

Publié : jeu. 19/juil./2007 17:51
par Kwai chang caine
@DROOPY

Bah non, j'ai la 4.10 beta :roll:

Quand je charge ton code de debut de POST, que je le lance, il ouvre bien youtube, et quand je clique sur telecharger (L'icone de droite, le rectangle orange) , j'ai cette erreur.

J'suis dégouté apparement j'suis encore le seul :cry: