URLDownloadToFile, en VB6

Signaler
Messages postés
44
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
25 avril 2019
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour,
Je me sers régulièrement de cette API pour télécharger des pages html.
J'ai quelques vidéos perso sur VIMEO et pour relever les compteurs j'ai créé une routine qui fonctionne très bien : chargement de la page à l'adresse URL de la vidéo puis analyse de cette page pour récupérer la valeur du compteur.
Mais la même routine ne fonctionne pas avec une adresse YOUTUBE ! Attention, ça n'est pas la vidéo que je veux charger mais la page html où se trouve le compteur d'une vidéo. Le code retour de l'API est bien 0 mais mais rien n'est enregistré sur mon DD.
J'ai fait des tests sur d'autres sites, ça fonctionne partout sauf chez YOUTUBE.
Avez-vous une idée du pourquoi ?
Merci de votre aide.
Apolinaire

13 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Bonjour,

Je ne vois pas pourquoi cela ne marcherait pas.
Montre-nous le code exact concerné (déclaration de la fonction de l'Api de Windows + tout le code relatif au chargement, avec l'url utilisée). Avant de nous le montrer, toutefois, fais sauter, si utilisé, tout On Error Resume next ou autre gestion d'erreur ===>> teste === >>> dis-nous où ça planterait ainsi


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
44
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
25 avril 2019

Pour le moment, la piste que j'envisage c'est le "?" qui se trouve dans l'URL YOUTUBE alors que ce caractère n'est pas dans les autres URL comme celles de VIMEO.

Exemple adresse VIMEO :
http://vimeo.com/35908367
Exemple adresse YOUTUBE :
http://www.youtube.com/watch?v=HMc3BxYuwRs

Mais par quoi le remplacer ?
Je vais voir pour vous mettre un extrait de mon code mais là je ne suis pas sur le bon PC...
Apolinaire
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Ah ...
et c'est là la réponse à ce que je t'ai demandé ?
Tu crois ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
44
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
25 avril 2019

Oui cher ucfoutu
Je me cite : "Je vais voir pour vous mettre un extrait de mon code mais là je ne suis pas sur le bon PC..." Eh oui, on ne fait pas ce que l'on veut en entreprise.
J'ai donc pu réaccéder au PC sur lequel se trouve mon code et le voici ci-dessous. Déclaration API, fonction et appel de la fonction.


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
Dim retval

lngRetVal = URLDownloadToFile(0, URL, LocalFilename, 0, 0)

If lngRetVal = 0 Then
DownloadFile = True
Else
retval = MsgBox("Problème pour télécharger " & URL, vbOKOnly, "Téléchargement impossible")
End If

End Function




Private Sub btLancer_Click()
Dim strURL As String
Dim strPathRép As String

strPathRép = App.Path & "\Stockage"
'Ne fonctionne pas avec l'URL suivante
strURL = "http://www.youtube.com/watch?v=diAFCexxKfs"
'Fonctionne avec cette URL
'strURL = "http://vimeo.com/29877873"

DownloadFile strURL, strPathRép & "\Page_html.txt"

End Sub


Merci de te pencher sur le problème, c'est sympa. Comme ce code fonctionne très bien quand il n'y a pas de "?" dans l'adresse, je pense qu'il faut chercher par là mais je ne sais pas par quoi le remplacer. Certainement pas par chr(63) qui n'en est qu'une autre écriture...
Apolinaire
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
je ne vois pas ce que le signe ? aurait à voir dans cette affaire !
Je penche plutôt vers autre chose, à commencer par ton fichier d'accueil
Regarde (testé et fonctionne) :

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

Function DownloadPage(ByVal url As String, ByVal FileName As String) As Boolean
  Dim done As Boolean
  Dim bon As Long
    ok = True
    If Dir$(FileName) <> "" Then
        Kill FileName
    End If
    bon = URLDownloadToFile(0, url, FileName, 0, 0)
    If Dir$(FileName) = "" Then
        ok = False
    End If
    DownloadPage = ok
End Function
Private Sub Command1_Click()
    Dim toto As Boolean
    Dim sURL As String
    Dim sFileName As String
    sURL = "http://www.youtube.com/watch?v=diAFCexxKfs"
    sFileName = "c:\test.txt"
    toto = DownloadPage(sURL, sFileName)
    If toto Then
        MsgBox "Téléchargement réussi."
    Else
        MsgBox "Erreur lors du télécharegement"
    End If
End Sub


Pour autant, bien évidemment, que j'aie les droits nécessaires pour zigouiller, écrire, etc... le fichier c:\test.txt (cela va de soi !)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
44
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
25 avril 2019

Merci. J'essaierai ça ce soir chez moi car actuellement le proxy de mon entreprise m'empêche de faire ce genre de tests.
Je donnerai des nouvelles.
Apolinaire
Messages postés
44
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
25 avril 2019

Bonsoir ucfoutu,
Voilà, j'ai essayé chez moi ton code sans en changer une virgule ! (si je peux dire...)
Et ça ne fonctionne pas. Voilà l'image de ce à quoi j'arrive. Tu reconnaitras ton code mot pour mot et même l'adresse Youtube que je n'ai pas changée.
Je suis maudit ! Il est où le problème ? Tu sembles penser que le "?" n'y est pour rien. Mais alors pourquoi ça fonctionne avec d'autres adresses comme celle de Vimeo ? Je viens d'essayer avec ton propre code avec une adresse Vimeo et j'obtiens bien le fichier désiré C:\test.txt.
Je n'y comprends rien.
Bonne fin de soirée.
Apolinaire
Messages postés
44
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
25 avril 2019

Je continue mes tests et je viens d'observer une chose très curieuse.
J'ai Avast gratuit installé sur mon PC. Nobody is perfect mais j'en suis content.
J'ai fait plusieurs fois l'expérience et les résultats sont constants.

Avast désactivé : je n'arrive à télécharger aucune adresse, ni Youtube ni Vimeo. A chaque fois : Erreur lors du téléchargement.

Avast activé : Youtube : Erreur lors du téléchargement et Vimeo : Téléchargement réussi !

Qui c'est qui connait Avast par ici ? Et qui pourrait me dire où se trouve le problème ?
Apolinaire
Messages postés
44
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
25 avril 2019

Bonsoir,
Ça ne fonctionne toujours pas chez moi. J'ai essayé en arrêtant l'antivirus et le firewall, j'ai remis le firewall et déclaré l'exe du code (une fois le mien, une fois le tien) comme étant autorisé à entrer/sortir. Enfin, j'ai essayé plein de solutions différentes et ça n'a jamais fonctionné pour une adresse Youtube. Je ne sais pas ce que tu as sur ton PC pour que ça fonctionne chez toi. Moi, c'est XP Pro SP3.
En tout cas merci Ucfoutu d'avoir essayé de m'aider. Si je trouve un jour une explication à mon problème je viendrai la mettre ici.
Apolinaire
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
Ecoute : tout ce que je peux te dire est que je viens de tester à nouveau sans problème sur ma machine (XP SP3)
C'est donc pour moi un problème à identifier sur ta machine.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
essaye toutefois en supprimant la ligne qui dit !
Kill Filename
c'est peut-être ce que tes protections n'aiment pas
Essaye également de ne pas choisir c:\ comme répertoire de destination. (évite également c:\program files)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
44
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
25 avril 2019

Bonjour,
Encore une petite découverte ce matin.
J'ai testé mon programme sur mon PC portable, chez moi donc sur la même ligne ADSL, même box, etc. Ce PC portable est aussi sous XP Pro mais SP2, avec le même antivirus et le même firewall que mon PC de bureau.
Et ça fonctionne très bien sur le PC portable, même pour les adresses Youtube. Et toujours pas sur le PC de bureau !
Serait-il possible que la différence SP2 - SP3 y soit pour quelque chose ?
Je continue mes recherches...
Apolinaire
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
233
SP3 n'a rien à y voir (relis mon message en ce qui concerne mes essais !)
Le problème est ailleurs, sur ta machine.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient