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_INV et de pièces qu'il recherche YOUR_WANT
  • L'idée est de comparer MY_INV avec YOUR_WANT, et MY_WANT avec YOUR_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_WANT depuis BrickLink vers un fichier .csv (c'est une fonctionnalité offerte par le site)
  • A l'aide d'un SOMMEPROD, je croise les pièces de MY_INV avec YOUR_WANT et YOUR_INV avec MY_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 couleur COLOR
  • 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 :
    capture d e cran 2020 09 06 a 16 27 32

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=False

Cela 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.

54urls.txt (276.00 Octets)

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
61lego.xlsm (19.69 Ko)

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.

capture d ecran 54

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

Rechercher des sujets similaires à "bricklink exchanger recuperer prix piece lego web"