Création d'un logiciel d'optimisation de commande Bricklink

La modélisation 3D des Lego, entre autres.
wardead
Level 2
Level 2
 
Messages: 11
Localisation: en chti'cardie, pas loin de la baie de somme
Âge: 47 ans

Messagepar wardead » Ven Fév 21, 2014 12:36 pm

Salut les gens

Suite a une discussion sur le topoc Lego sur HFR avec Anio, arkrom, Tipiak_82 (qui nous rejoindra ici j'espère) et moi même concernant le développement d'un logiciel permettant d'optimiser un peu des commandes BL, on s'est dit que ça serait bien d'en faire un topoc ici pour fixer les idées et voir si c est réalisable.

J'en appelle donc a tous les bidouilleurs/programmeurs qui voudraient réfléchir a la question a faire un coucou ici pour en parler :)

ce premier post rapide pour démarrer mais je vais rajouter un peu d'info sur ce qu'il s'est deja dit pour continuer l'histoire.

Edit 1 : pour rappel : TUTO commander sur BL : topic124.html

Wardead

Avatar de l’utilisateur
Anio
Administrateur
Administrateur
 
Messages: 19486
Âge: 37 ans
revieweurmoceurstarwarsexpertambassadeur

Messagepar Anio » Ven Fév 21, 2014 12:46 pm

Je copie/colle les débuts de réflexion :

Tipiak a écrit:Lurkeur de ce sujet depuis longtemps, c'est grâce à (ou à cause de) celui-ci que je suis tombé dans la passion des lego. Je m'intéresse principalement aux Technic et aux City (ainsi qu'aux Duplo pour ma fille). J'ai récemment découvert les Modulars avec le Pet Shop et le Town Hall. Les anciens Modulars m'intéressent également mais sont hors de prix.
Voici donc le sujet qui m'amène. Sur différents forums, dont celui-ci, il y a plusieurs personnes qui ont entreprise de reproduire certains sets en achetant les pièces à l'unité (modulars ou le fameux Faucon Millenium par exemple). Je m'y suis intéressé mais j'ai vite abandonné devant le travail nécessaire (comparer les prix Bricklink, lego, voire même remplacer certaines pièces honéreuses). Je me suis alors lancé dans la création d'une application java (mon autre passion est la programmation) qui ferait une partie du travail pour moi. Voici donc son fonctionnement actuel :
- à partir d'un numéro de set, je récupère automatiquement l'inventaire du set sur Brickset (détails de toutes les pièces et leur nombre dans le set concerné) ;
- je récupère ensuite automatiquement le prix de chaque pièce à l'unité sur le site Pick a Brick de Lego ainsi que Briques & Pièces du même site Lego (les prix peuvent varier et Briques & Pièces possède plus de pièces que Pick a Brick) ;
- j'effectue ensuite une recherche automatique sur Bricklink pour chaque pièce en ne prenant que les boutiques qui ont la pièce en question, à un prix inférieur à celui de lego (Pick a Brick et Briques & Pièces) et avec une quantité supérieure à celle du set, et je prend le prix de la boutique la moins chère.

J'obtiens donc (au bout d'un petit quart d'heure, cela demande encore optimisation) un fichier Excel qui pour chaque pièce possède les infos suivantes :
- son prix chez Lego (Pick a Brick et Briques & Pièces) et Bricklink ;
- le nombre de cette pièce dans le set ;
- le prix total pour cette pièce pour chacun des magasins ;
- le prix le moins cher ;
- la différence de prix entre Bricklink et le prix le moins cher de chez Lego ;
- l'adresse du store Bricklink correspondant.

Voici mon problème. C'est intéressant de comparer les prix Lego et les prix Bricklink, mais sans connaître les frais de port de chaque boutique, cela perd un peu de son intérêt. Etant loin d'être un expert Bricklink, existe-t-il un moyen de connaître les frais de port (même approximatif) d'une boutique de manière automatique ? Peut-il être intéressant d'acheter des exemplaires d'une même pièce dans différentes boutiques bricklink ?
Je poste également sur ce forum pour avoir un avis sur cette application et si vous voudriez avoir d'autres informations qui permettrait d'arriver au meilleur prix que celles que j'ai indiqué ? Cela vous intéresse-t-il par exemple de pouvoir comparer le prix d'une pièce sur les différents magasins ? Cela m'aiderait à proposer à la communauté un outil complet qui faciliterait les démarches.

Merci d'avoir lu ce pavé, et merci d'avance pour vos réponses.


Anio a écrit:Mais là, tu fais face à un impondérable. Les frais de port, c'est strictement impossible à prendre en compte. Ou alors, de façon forfaitaire, un peu à l'arrache.
J'ai eu des shops US qui chargent 3$ pour une enveloppe à bulles tandis que dans un autre Etat US, le mec, il m'a collé 9$ dans la tronche pour 40 grammes (j'ai reçu, enveloppe affranchie à 6$...).
Tu n'arriveras pas à faire un système qui arrive à gérer les fdp. Quand bien même tu y arriverais (et tu serais un génie), il te faudrait considérer si le shop US rajoute des frais paypal sur la transaction ou bien les supporte, ou encore s'il charge un extra fee si le prix par lot est inférieur à la norme définie par le shop, ou encore si la commande totale a plus que X lots (handling fee).

Ton application est sûrement intéressante à partir du moment où le prix Lego est inférieur au prix Bricklink dans la meilleure boutique.
Dans ce cas, pas de soucis, pas de question à se poser : avec des frais de ports dérisoires, tu commandes des pièces détachées Lego (prix standard du port : 1,80€).

Mais sur Bricklink, il y a trop de paramètres différents et surtout à la discrétion du vendeur pour que tu puisses pondre un algorithme qui fasse la totalité de la démarche. Tu ne peux pas gérer :
- les frais de port
- les frais paypal
- les frais de préparation de commande
- les frais d'emballage
- si t'as pas de bol, la douane
- le fait que faire une commande en Chine, c'est plus risqué (perso, avec 300 commandes à mon actif, j'ai toujours évité certains pays continents)
- le fait que faire 2 commandes, c'est plus d'emmerde que de faire une commande.

Ma méthode :
1) je remplis ma Wanted List manuellement, et je repère les références critiques (rares) dans celle-ci
2) je me débrouille pour aller en priorité dans les shops qui ont ces références en priorité (idéalement, j'essaie de trouver un shop qui a plusieurs références rares)
3) ensuite, j'écrème le volume restant, avec le By Shop et éventuellement Lego.

Sincèrement, quand tu claques 400€ de commandes Bricklink, faire des calculs d’apothicaire pour économiser 20€, à mon avis, c'est pas rentable.
Et payer un peu plus cher pour être sûr de s'éviter des emmerdes, je peux te le garantir, ça vaut largement 20€.

J'essaie de faire le moins de commandes possible (quitte à payer les pièces plus cher) un peu pour économiser sur les frais de port, mais presque encore davantage pour économiser sur les emmerdes...
Plus de commandes, c'est mathématiquement plus d'emmerdes.

Ma conclusion : tu ne peux pas programmer un algo qui se substitue au libre arbitre et bon sens de l'acheteur, et encore moins au bon vouloir du vendeur.


Anio a écrit:A ce moment là, il pourrait être intéressant de faire un algo qui ressort les refs critiques.

Refs critiques en terme de disponibilités :
- dans moins de 10 shops ?
- entre 10 et 20 shops ?
- 20 et 50
- 75 et 100
(au delà de 100, c'est plus trop critique)

Refs critiques en terme de prix :
- prix unitaire entre 2 et 5€
- prix unitaire supérieur à 5€

Egalement, et c'est un point clé que Bricklink ne gère pas :

Admettons un Wanted List avec 4 refs A (rare) B (rare) C (pas trop rare) D (pas trop rare), avec les qté respectives 2, 4, 8, 8.

Aucun shop n'a A ET B. On part sur 2 commandes, déjà pour ces 2 refs. On a donc écrémé ces 2 refs.
Mais admettons que ces 2 shops ont tous les 2 les qtés 7 et 7 pour les refs C et D.
Et bien Bricklink ne ressort pas automatiquement ces 2 lots avec 7 (où on aurait par exemple pu faire 7 et 1, ou 1 et 7), alors que les pièces sont effectivement dispo dans les shops.
En effet, le lot dans le shop ne répond pas aux conditions du lot dans la wanted list.

Alors là, on fait la gymnastique en moins de 10 secondes, car on a 2 shops, et 2 refs restantes que l'on identifie bien.

Mais quand on a 170 références, admettons qu'on en écoule 30, pas évident d'aller checker les 140 restantes pour vérifier si, à défaut de gratter d'autres références, on peut gratter quelques quantités sur une référence (et permettre au final de faire des commandes en moins, grâce à une même ref répartie dans plusieurs shops)

Autrement dit : si on checke pas tout manuellement, il y a forcément des fois où on multiplie les commandes, pas parce que le shop n'a pas les pièces, mais parce qu'on ne voit pas qu'il les a.

Et là, il y a un truc à faire.

Mais la donne est complexe...


wardead a écrit:Je plussoie le monsieur, gérer les frais de port, c est la loose :(

A mon avis, si on veut gérer le port, il faut approximer (argh!) le modèle, en disant que pour nous en France, y a trois catégories de shop :
* les frenchies (pas de douanes, frais de port normalement light)
* les européens (pas de douanes, un peu plus de port)
* le reste du monde (risque de douanes, port plus cher)

en mettant une pondération sur les résultats genre par exemple un shop euro sera en moyenne 10% plus cher qu'un français et un shop monde sera 20% plus cher qu'un français.


Sinon il y a aussi la méthode de contournement, en partant de ce qu'a dit anio a savoir "moins de commandes c est mieux", ca doit indirectement limiter les frais aussi de ne pas multiplier les commandes.


Plus j'y reflechis, plus je me dit qu'en utilisant bricklink avec une wanted list avec les quantités a 1, on doit récupérer suffisamment d'info pour faire un calcul sympa


@Anio, tu pense que tu pourrais formuler plus précisément la notion de "critique"
c est d'abord une question de prix ou une question de rareté (c est pas forcément lié)

A mon avis faut faire un programme par itération :

* input de la liste de pieces qu'on cherche avec quantité
* input des parametres de depart (plutot optimiser le prix ou optimiser le nombre de commandes, privilégier les francais ou pas...)
* recup des datas via BL (wanted list + recherche par shop + recherche par piece)
* calcul d'une solution
* interaction avec l'utilisateur pour "optimisation intuitive" ou plutot "elimination des conneries les plus fragrantes" pour évaluer "ce qui fait le prix" dans la commande (pieces cheres, donc rares)
* recalcul d'une solution avec les opti

et eventuellement on recommence les deux dernieres etapes

z'en pensez quoi?


Anio a écrit:Perso, je ne mettrai pas de pondération, pas de port forfaitaire, et encore moins un truc foireux pour les éventuels frais paypal ou d'emballage.

Je classerai les résultats selon 4 groupes :
- France
- Europe
- USA
- Reste du monde (le canada étant dans le reste du monde ; par expérience, le port est plus élevé et le temps de livraison bcp plus long)

On peut même penser à des regroupements selon le pays de résidence de l'utilisateur. Pour un américain :
- USA
- Canada
- Europe
- Reste du monde.

Après, c'est à l'acheteur de jauger, éventuellement en regardant les conditions de chaque shop, et d'acheter en toute connaissance de cause.

wardead a écrit:@Anio, tu pense que tu pourrais formuler plus précisément la notion de "critique"
c est d'abord une question de prix ou une question de rareté

Alors là aussi, pas évident de répondre. :D

Ca dépend des objectifs de l'acheteur, du but poursuivi.

Par exemple, le corner café coute très cher, et un acheteur veut comme on dit, le "bricklinker".
Il y a la personne qui va vouloir refaire le set à la pièce (et variante de pièce) près, peu importe le prix. Ca, c'est le collectionneur pur et dur.
De l'autre côté, il va y avoir une personne qui substituera volontairement une pièces à une autre pour peu que la modif ne soit pas (trop) visible.

Ca dépend aussi du type de MOC.
Un MOC City ou Espace, on peut facilement changer des couleurs sur le MOC sans que ça pose problème. "Les pièces bleu clair sont trop rares et ça fait chier pour les commandes / trop chère et j'estime que c'est abusé pour mon petit camion/vaisseau ? Très bien, je le fais en vert lime."
Sur un MOC comme un UCS Star Wars, tu fais pas de chichi : tu changes pas la couleur sur un MOC Star Wars, c'est pas la fête.
Et, logiquement je dirai, tu ne fais pas une substitution bancale parce qu'il y a 6 pièces à 4€ l'une à acheter.

De mon point de vue, je placerai la criticité sur la disponibilité.
Ton algo fais la gymnastique et tout et tout, et ça ressort comment avoir au mieux sa liste de pièces (un tableau : 1 commande ici avec ça ça ça et ça, et une commande là-bas avec ça ça et ça).
Et avec ces résultats, si l'acheteur décèle une ref pas raisonnable, il change son MOC, il MàJ sa wanted list en conséquence, et il refait la manip : l'algo lui dira comment avoir sa nouvelle WL à 100% et de manière optimisée, avec la référence problématique supprimée/substituée.

On y revient : l'acheteur reste le maître à bord (quand c'est pas le vendeur...). Et il faut admettre que bien des paramètres découlent aussi de sa manière de procéder.
L'algo peut dire comment parvenir au mieux à ce que l'acheteur à défini, mais il ne peut pas définir ce à quoi l'acheteur doit parvenir.


Tipiak a écrit:Voici une 1ère ébauche. Le fichier est généré tel quel, sauf pour la mise en page

Image

La colonne "Critique" est basé sur le prix unitaire (< 1; entre 1 et 3; > 3), mais je me demande si ça ne serait pas plus pertinent de se baser sur le prix total pour la pièce. La colonne "Dispo" se basera sur le nombre de store BL proposant la pièce en qté suffisante pour le set.

Pour l'instant il n'y a aucun regroupement pour les stores BL, mais il est prévu de faire un autre fichier avec pour chaque store BL les pièces à commander et les totaux par store.

La recherche BL se fait que sur les stores qui ont au moins la quantité requises de pièces pour le set. Mais d'après vos retours, il faudrait plutôt faire des combinaisons entre stores pour essayer d'arriver au prix le moins cher. J'étudie comment mettre ça en place.

Mes essais se font sur le Modular Green Grocer


Avis aux programmeurs ou utilisateurs de Bricklink, vos commentaires sont les bienvenus ! :D
Think outside the box.

Tout plein de liens utiles dans mon profil ! :P

wardead
Level 2
Level 2
 
Messages: 11
Localisation: en chti'cardie, pas loin de la baie de somme
Âge: 47 ans

Messagepar wardead » Ven Fév 21, 2014 12:55 pm

Synthèse rapide de ce qui s'est déjà dit :

Abbéviations :
BL : Bricklink
WL : Wanted list de BL


Problématique de départ :

Commander sur BL quand on a une liste de pièces un peu velue, c'est pas pratique car il y a beaucoup de shops différents.
Jongler entre la disponibilité des pièces, le prix, les frais annexes (ports, douanes), la multiplication des commandes est fastidieux.

Contournement classique : Utiliser les wanted lists de BL puis "optimiser" a la main
problèmes induits par les WL : ne prend pas en compte les shops n'ayants pas la quantité requise d'une pièce = perte d'optimisation


Un logiciel pour aider a commander sur Bricklink pourrait (a discuter) :
* gérer la localisation des shops grossièrement dans une optique d'opti des frais
* gérer une whitelist / blacklist de shop
* prendre en compte d'une manière ou d'une autre les pièces dites "critiques" (rares et/ou cheres)
* pouvoir optimiser pour réduire le prix ( économie d'argent, les legos c est cher) et/ou le nombre de commandes (économie d'énergie, gérer 50 commandes c est relou)

Un logiciel ne pourrait pas (a discuter) :
* gérer les remplacements de pièces par d'autres (couleurs approx par exemple)
* prendre en compte littéralement et dans le détail :
=> les frais de port : trop variable
=> les frais de douanes : trop aléatoire
=> les frais paypal ( a voir)



Proposition de fonctionnement (a discuter) :
( 0) paramétrage préliminaire )
1) entrée de la liste de pièces a commander par couple de [ référence/couleur ] (a définir)
2) récupération des données sur BL
3) calcul d'une solution (en local)
4) proposition de la solution a l'utilisateur qui apporte ses corrections/optimisations
5) on repart en 2) si besoin puis 3) et 4) jusqu'a obtenir une solution satisfaisante (définir "satisfaisante")
6) vérification de la validité de la solution via BL puis passage des commandes

Dans un monde merveilleux et idéal, ce logiciel pourrait etre "communautaire" pour mettre en base de donnée de manière centralisée :
* une liste de références "critiques" qui pourraient etre priorisées dans les calculs de solutions
* une liste de pièces de remplacement typiques (panels 3*11 avec 2 trous par panels 3*11 avec 10 trous par exemple)

@Anio : spice d'y bourrin!!! cte copié collé :p j'avais pas osé

bronsky
Level 5
Level 5
 
Messages: 128
Localisation: NOINTOT, SEINE MARITIME
Âge: 53 ans

Messagepar bronsky » Sam Fév 22, 2014 3:56 pm

C'est un chouette truc que tu veux faire.
Il est clair que pour les frais annexes c'est une autre histoire et comme ces frais la sont propre a chaque boutique et qu'il n'y a aucune procédure la dessus, a moins de rentrer a la main pour chaque magasin les frais et tout le toutim je ne vois pas comment tu peux faire.
Je ne parle même pas des douanes qui a chaque interlocuteur (si si, lorsque tu appelles les douanes, tu n'as jamais la même réponse!!!)
Après tu peux faire une fourchette de frais annexes, genre paypal qui tourne au environ de 5%, les frais de port par rapport a au poids, en prenant par exemple les tarif international de la poste (qui sont d'un bon niveau) ou un transporteur annexe (genre dhl ou ups).
De mon points de vue, si déjà ton logiciel permet de centraliser tes commandes via des WL, c'est vraiment une bonne chose pour préparer un montage de modèle (bon le ucs 10179 est beaucoup en discussion, mais il a d'autre modèle qui nécessite une bonne quantité de pièces, euh le Venator sur ce forum déjà...)

wardead
Level 2
Level 2
 
Messages: 11
Localisation: en chti'cardie, pas loin de la baie de somme
Âge: 47 ans

Messagepar wardead » Sam Fév 22, 2014 7:49 pm

Salut,

De mon coté je continue a réfléchir et a prendre de l'information sur comment le faire.

Je ne suis pas un super codeur (il y a dix ans oui et encore...) donc je préfère passer pas mal de temps a concevoir la méthode plutôt que de commencer a coder bille en tête pour rien.

en sachant qu'interagir avec BL, dans l'absolu ce n'est pas très compliqué a réaliser via Curls, j'ai déjà commencé a regarder comment ça bouge avec firebug.

wardead
P.S. a priori il y a deja un soft qui fait quelque chose qui s'en rapproche, http://www.eurobricks.com/forum/index.p ... 82975&st=0 je regarde plus précisément

bronsky
Level 5
Level 5
 
Messages: 128
Localisation: NOINTOT, SEINE MARITIME
Âge: 53 ans

Messagepar bronsky » Sam Fév 22, 2014 11:01 pm

wardead a écrit:Salut,

De mon coté je continue a réfléchir et a prendre de l'information sur comment le faire.

Je ne suis pas un super codeur (il y a dix ans oui et encore...) donc je préfère passer pas mal de temps a concevoir la méthode plutôt que de commencer a coder bille en tête pour rien.

en sachant qu'interagir avec BL, dans l'absolu ce n'est pas très compliqué a réaliser via Curls, j'ai déjà commencé a regarder comment ça bouge avec firebug.

wardead
P.S. a priori il y a deja un soft qui fait quelque chose qui s'en rapproche, http://www.eurobricks.com/forum/index.p ... 82975&st=0 je regarde plus précisément


Mefie toi j'ai regarde ton soft, il a un malware dedans

Tipiak
Level 1
Level 1
 
Messages: 2

Messagepar Tipiak » Lun Fév 24, 2014 11:59 am

Bonjour à tous,

Je n'ai pas eu trop le temps ce WE pour venir poster ici. La partie "Criticité" au niveau du prix et "Dispo" sur le nombre de store BL est terminé. La prochaine étape est donc de lister pour chaque store BL la liste des pièces à commander et effectuer une comparaison par rapport au prix Lego. Pour chaque store, une approximation des frais de port sera effectué en fonction de sa localisation. On pourra ainsi comparer les prix "Lego" et les prix BL + FDP pour voir si cela est intéressant.
Je pensais également rajouter pour chaque commande sur un store BL une "note" qui sera déterminé par le nombre de pièces que ce store possède qui sont "critique" ou "dispo" dans peu de store. On peut imaginer un système comme cela :
- si prix < 1 € => + 1 pt pour chaque lot de pièce
- si prix > 1 € et < 3 € => + 3 pts
- si prix > 3 € => + 5pts
- si la pièce est dispo dans < 10 shop => + 10 pts
- si dispo dans > 10 et < 25 => + 7 pts
... et ainsi de suite

On aurait alors pour chaque store une note lié au nombre de pièces "intéressante" (en terme de prix / dispo). Pour le store avec la meilleure note, on pourrait relancer une recherche sur toutes les autres pièces pour essayer d'optimiser les frais de port et d'acheter le maximum de pièces dans le même store.
Qu'en pensez-vous ?

Seigneur Sith
Level 5
Level 5
 
Messages: 177
Localisation: 973 Guyane Française
Âge: 44 ans
vainqueurconcours2

Messagepar Seigneur Sith » Sam Mar 08, 2014 5:56 am

Bonjour,
Lorsque l'on souhaite passer une commande Bricklink, il faut d'abord répondre à cette question essentielle à mon avis:
Veut-on obtenir la plus grosse quantité de pièces possibles du set? Ou bien le plus de pièces rares du set?
Les 2 ne sont pas possibles chez le même vendeur, car le vendeur qui a les pièces rares n'est pas celui qui a les meilleurs tarifs pour les pièces basiques. je pense ne pas me tromper sur ce point.
Conclusion, si le set a beaucoup de pièces basiques, il faut d'abord écrémer la commande avec un vendeur avec des petits prix. Certains vendeurs font des prix dégressifs avec les quantités, et d'autres font des coupons de réduction pour les prochaines commandes. (votre logiciel pourra pas gérer tout ça à priori)
Faut penser à demander au vendeur si il peut récupérer des pièces rares sur votre commande? C'est toujours ça de gagner.

Là où le logiciel parait intéressant, c'est quand il s'agit de savoir si il vaut mieux faire 2 ou 3 commandes. Il faut que le logiciel gère les vendeurs "bidons" qui ont peu de commandes à leur actif, sinon c'est perte de temps.
Je perds du temps également sur Bricklink, lorsque je choisi un vendeur, je commence à rentrer les pièces et les quantités chez le vendeur dans le panier et que je n'ai pas le temps de finir le jour même. Je reviens le lendemain et parfois faut tout recommencer car le panier s'est vidé automatiquement.
Faudrait que le logiciel puisse injecter les références dans la wanted list (ça évite de checker chaque réf chez le vendeur), pour que la liste se retrouve dans le panier du vendeur directement, et que l'on est plus qu'à rentrer la quantité désirée.


Retourner vers Les Lego sur le PC

Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit et 3 invités