BrickLink eXchanger : récupérer un prix de pièce LEGO sur le web
Bonjour,
Véritable AFOL (Adult Fan Of Lego) mais aussi programmeur du dimanche, je me lance dans un projet de construction d'un outil permettant aux utilisateurs d'échanger des pièces de Lego de leur stock.
Par ce post sur le forum, je demande de l'aide pour m'aider à récupérer une information sur un site web : je galère depuis des semaines sans succès.
Le principe est le suivant :
- L'utilisateur A dispose de l'inventaire de ses pièces de Lego sous forme d'une Wanted List sur le site BrickLink, que l'on va appeler
MY_INV - L'utilisateur A dispose également d'une liste de pièces de Lego dont il a besoin pour compléter ses projets, également sous forme d'une Wanted List sur le site BrickLink.com, que l'on va appeler
MY_WANT - De même, l'utilisateur B dispose d'un inventaire
YOUR_INVet de pièces qu'il rechercheYOUR_WANT - L'idée est de comparer
MY_INVavecYOUR_WANT, etMY_WANTavecYOUR_INV, et de constituer un "panier" chez A et un panier chez B de même valeur (en euros). - Il ne reste plus qu'à A et à B de s'envoyer mutuellement par voie postale les pièces dans leur panier pour faire l'échange.
Voici comment j'envisage de réaliser ça en Excel :
- On exporte les listes
MY_INV,MY_WANT,YOUR_INV,YOUR_WANTdepuis BrickLink vers un fichier .csv (c'est une fonctionnalité offerte par le site) - A l'aide d'un
SOMMEPROD, je croise les pièces deMY_INVavecYOUR_WANTetYOUR_INVavecMY_WANT - Il reste à récupérer la "cote argus" de chaque pièce, puis à constituer les "paniers" de valeur équivalente.
A savoir :
- Chaque pièce de Lego est caractérisée par un numéro d'identifiant
ITEMID, et un code couleurCOLOR - Sur BrickLink, on peut récupérer la "cote argus" de chaque pièce de Lego à partir de son identifiant et de sa couleur. Cf. URL #1 dans le fichier URLs.txt ci-joint.
On constate qu'il suffit d'indiquer dans l'URL l'identifiant (3024 dans l'exemple) et la couleur (11) pour pointer sur la cote de la pièce correspondante. - Sur cette "cote argus" (appelée "price guide" sur BrickLink), je pense que la valeur la plus pertinente est le prix moyen de vente réelle de la pièce usagée sur les 6 derniers mois :
J'ai commencé un projet (fichier ci-joint), avec une fonction publique GetBrickLinkPrice(ItemID, Color) censée faire une requête web pour récupérer ce montant, mais ça ne fonctionne pas (cf. fonction dans le fichier ci-joint - je ne peux pas la copier-coller ici car je n'ai pas encore le droit d'insérer des URLs dans mes posts sur ce forum).
Pourtant, la requête fonctionne lorsque je la place dans un fichier .iqy dont voici le contenu :
WEB
1
<mettre ici l'URL #1 du fichier URLs.txt ci-joint>
Selection=1
Formatting=None
PreFormattedTextToColumns=True
ConsecutiveDelimitersAsOne=True
SingleBlockTextImport=False
DisableDateRecognition=False
DisableRedirections=FalseCela place le résultat dans un onglet en texte brut, et je n'ai plus qu'à récupérer la cellule B14.
Mais cela ne me permet pas de le faire dans une macro.
J'ai fouillé aussi le net à la recherche d'outils de web scrapping et autre parseurs, mais rien de convainquant.
Quant à Google Sheet, il semble qu'il existait jusqu'à peu une fonctionnalité IMPORTXML() qui permettait de récupérer directement une valeur d'une page web grâce à son xPath (récupérable grâce à l'inspecteur de Chrome). Mais cela ne fonctionne plus, semble-t-il.
Autre piste : le site BrickLink propose des API. Mais là, je n'ai aucune idée de comment utiliser ce type de fonctionnalité avec Excel...
Voir l'URL #2 vers la page Wiki correspondant à l'API GetPriceGuide dans le fichier URLs.txt ci-joint.
Une âme charitable pour m'aider ?
Merci !
Jonathan.
Bonjour,
Il y a bien PowerQuery, mais je ne pense pas qu'il soit compatible mac.
Autre solution
Sub Maj()
Dim URL$, obj As New DataObject
DoEvents
URL = Cells(1, 1).Value
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", URL, False
.Send
If .Status = 200 Then
txt = .responseText
txt = Split(txt, "Used")(2)
txt = Split(txt, "Qty Avg Price:</TD><TD><B>EUR ")(1)
txt = Split(txt, "</B>")(0)
Cells(1, 2) = Val(txt)
End If
End With
End Sub
Merci pour cette proposition rapide
Je vous confirme que ça ne fonctionne pas sur Mac (il semble qu'il ne connait pas l'instruction CreateObject("MSXML2.XMLHTTP").
J'ai fait un essai sur PC, et j'obtiens l'erreur suivante après quelques secondes :
Erreur d'exécution '9': L'indice n'appartient pas à la sélection.
le debugger VBA s'arrête sur la ligne Split qty avg price.
Avez-vous une idée ?
merci
Sur PC, je confirme que je récupère bien la donnée.
Attention à la macro qui est ici mal reproduite, il y a un blanc insécable codé en html que j'ai surligné et non un espace ... il se peut qu'en recopiant ce blanc insécable devient un espace ! Reprends stricto sensu le fichier que j'ai posté.
Désolé pour mac, je ne connais ... mais il doit y avoir moyen de récupérer le code source d'une autre façon et dans ce cas le split devrait fonctionner.
J'ai réessayé votre macro sur la version d'Excel de mon PC personnel, et cette fois-ci, cela fonctionne parfaitement !
Bravo à vous, et merci pour votre aide !
N'oublie de clore le sujet et cliquant sur le V