Youtube

Vous avez développé un logiciel en PureBasic et vous souhaitez le faire connaitre ?
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Youtube

Message 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)
;}
Dernière modification par Droopy le jeu. 26/juil./2007 0:16, modifié 3 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message 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.
Avatar de l’utilisateur
venom
Messages : 3136
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message 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 :)
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message 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é )
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Modification apportées :
  • - Chemin de téléchargement définissable
    - Zip avec Code source / icones / Exe
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Super Droopy !
Je vais tester ça !
Tu es un chef !
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message 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:
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message 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
Coolman
Messages : 432
Inscription : sam. 01/janv./2005 16:07

Message 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)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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:
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message 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
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message 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
Dernière modification par Ollivier le ven. 20/juil./2007 20:35, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message 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:
Répondre