Hello,
voici un exemple de code qui utilise un formulaire constitué de :
- un contrôle Image pour afficher une image de la couverture du livre
- un contrôle Textbox pour saisir le livre à rechercher
- un contrôle Textbox pour afficher l'url de l'image de la couverture du livre et le résumé du livre
Il faut créer un module avec la déclaration d'Api windows dedans :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #If VBA7 And Win64 Then
Public Declare PtrSafe Function URLDownloadToFile Lib "urlmon" _
Alias "URLDownloadToFileA" ( _
ByVal pCaller As LongPtr, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As LongPtr, _
ByVal lpfnCB As LongPtr _
) As Long
Public Declare PtrSafe Sub Sleep Lib "kernel32" _
(ByVal dwMilliseconds As LongPtr)
#Else
Public 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 Declare Sub Sleep Lib "kernel32" _
(ByVal dwMilliseconds As Long)
#End If |
Le principe du code :
On utilise l'objet COM Internet Explorer pour effectuer la recherche.
On lance une recherche par bing du livre sur le site Babelio (par Google il y a des soucis de cookies)
Normalement la première réponse est la page qui nous intéresse ( peut ne pas marcher suivant la saisie du texte de recherche)
On ouvre la page qui correspond à la première réponse.
On vient récupérer le résumé et le lien de l'image de la couverture
On télécharge l'image de la couverture dans un répertoire temporaire et on affiche alors cette image dans le contrôle image.
Le code du formulaire :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| Const RepTemp = "D:\temp\"
Private Sub CmdGo_Click()
Dim IEDoc As Object
Dim objResults As Object, objH2 As Object, elem As Object
Dim livre As Object, image As Object, livreResume As Object
Dim url As String, urlLivre As String, imgName As String
Dim IE As Object
Set IE = CreateObject("InternetExplorer.application")
url = "https://www.bing.com/search?q=" & _
WorksheetFunction.EncodeURL("Babelio " & _
Recherche.Text)
IE.Navigate url
IE.Visible = False
Do While IE.ReadyState <> 4 Or IE.Busy
DoEvents
Sleep (100)
Loop
Set IEDoc = IE.Document
Set objResults = IEDoc.getElementById("b_results")
Set objH2 = objResults.getElementsByTagName("h2")
For Each elem In objH2
Debug.Print elem.innerText
If Not elem.getElementsByTagName("a")(0) Is Nothing Then
Debug.Print elem.getElementsByTagName("a")(0).href
If InStr(1, elem.getElementsByTagName("a")(0).href, "www.babelio.com/livres") <> 0 Then
urlLivre = elem.getElementsByTagName("a")(0).href
Exit For
End If
End If
Next
If urlLivre <> "" Then
Result.Text = urlLivre
IE.Navigate urlLivre
Do While IE.ReadyState <> 4 Or IE.Busy
DoEvents
Sleep (100)
Loop
Set IEDoc = IE.Document
Set livre = IEDoc.getElementsByClassName("livre_con")(0)
Set image = livre.getElementsByTagName("img")(0)
Debug.Print image.src
Set livreResume = IEDoc.getElementsByClassName("livre_resume")(0)
Result.Text = image.src + vbCrLf + livreResume.innerText
' Recup image
imgName = Mid(image.src, InStrRev(image.src, "/") + 1)
URLDownloadToFile 0, image.src, RepTemp & imgName, 0, 0
Image1.Picture = LoadPicture(RepTemp & imgName)
End If
IE.Quit
End Sub |
Ami calmant, J.P
Partager