Main /

Lego PAB Per Script

Lego PAB Per Script

LEGO Pick A Brick per Script

Worum gehts? Mit dem Lego Digital Designer kann man seine eigenen Modelle kreieren. Das ist eine feine Sache. Macht fast so viel Spaß, wie mit den echten Steinen, aber auch nur fast, man hat nix zum anfassen oder bewundern noch zum Spielen. Also muss das Modell nach Hause kommen. Man könnte jetzt einfach den Bestellen-Button oben rechts im Designer drücken und legt sich dann allerdings auf den Rücken, so teuer... ja es war schon immer etwas teurer etwas besonderes zu haben.

Allerdings...

Über LEGO Pab kann man die vielen bunten LEGO Steine auch einzeln bestellen, das kostet fast nur die Hälfte, dafür hat man allerdings keinen hübschen Karton zum Wegwerfen und auch leider keine hübsch gedruckte Bauanleitung. Was aber ein LEGO Freak ist, der braucht keine Bauanleitung, nur ein einzelnes Bild des Modells. Zudem ist das zusammenklicken einer Bestellung der einzelnen Steine, die im Designer zusammengestöpselt wurden, nicht gerade einfach.

Also muss eine Möglichkeit her, das per Script zu machen.

Erster Test

Es gibt bestimmt eine Erweiterung für Firefox, die uns dabei helfen könnte. In Menü Extras->Add-ons kann man nach Firefox Extensions suchen, also Fluchs Javascript execute eingegeben und voilà, Execute JS ist das was wir suchen. Schnell installieren und Firefox neu starten. Jetzt sollte über Menü Extras->Open Execute JS der Javascript Executer gestartet werden können.

Leider ist die interessante LEGO PAB Seite in ein IFrame gestopft. (Siehe Quellcode) Aber das kann man ja auch direkt aufrufen. Also eben http://shop.lego.com/pab fürs Cookie und dann http://shop.lego.com/pab/PabPage.aspx für den Javascript Executor. Jetzt den Javascript Executor starten:

  • Target window sollte sein: Lego Shop - Mozilla Firefox
  • Wichtig Häckchen vor Content Window sonst gibt es eine Messagebox mit ReferenceError: addBrick is not defined.
  • JS-Code to execute:
Rechts klick auf in die Tüte und Link-Adresse kopieren auswählen, das ins Execute JS einfügen.
es sollte dann dort sowas stehen javascript:addBrick(4211050,1)
  • Execute Button drücken, fertig.

Jetzt sollte rechts eine Pick-A-Brick-Tüte erscheinen mit dem Teil, das man gerade ausgewählt hat.

Script

Hat alles geklappt, braucht man jetzt nur noch ein Script, das die lxf Dateien des Designers zerlegt und in einzelne Javascript:addBrick(<Nummer>, 1) Zeilen zerlegt und der Massenbestellung sollte nichts mehr im Weg stehen. Name.lxf ist per Zip komprimiert, also unzip Name.lxf darin sind 2 Dateien, eine IMAGE100.LXFML und ein Bild IMAGE100.png.

Die <Nummer> steht in der XML Datei Name.LXFML Datei als Attribut itemNos="<Nummer>" eines Elements Brick danach sollte sich prima scannen lassen.

Als Beispielchen mal ein triviales Perl Script, einfach die lxf Datei mit unzip auspacken und dort das Script mit perl script.pl starten. Als Output bekommt man viele viele javascript:addBrick() Zeilen die nur noch kopiert werden müssen.

#!/usr/bin/perl -w

use strict;

local *FILE;

if (open(FILE, "IMAGE100.LXFML"))
{
    my $line;
    while ($line = <FILE>)
    {
        if ($line =~ /<Brick.*itemNos="(.*)"/)
        {
            print "javascript:addBrick($1,1)\n";
            print "alert('add $1, this alert must be :-(')\n";
        }
    }
    close(FILE);
}

Cracks machen das natürlich mit XSLT aber davon verstehe ich nix, Perl geht ja auch.

Ob es wirklich funktioniert, habe ich noch nicht probiert. Aber trotzdem:

Happy LEGO Bestellung...

Fazit

Es funktioniert so leider nicht ganz, das Lego System nimmt nicht mehr als 2 addBrick() Kommandos an frowning smiley Deshalb habe ich den Code für mich dahingehend geändert, das jedes Teil zuerst in einem Hash abgelegt wird und das Auftreten gezählt wird. Am Ende wird dann eine Liste ausgegeben, die sämtliche Teile enthält, damit reduziert sich der Copy&Paste Auswand etwas.

Aber das gelbe vom Ei ist es noch nicht shit

Dank an Andi für die Tipps.

Fazit^2^

Habe herausgefunden, das ein alert() zusätzlich erstmal hilft, ist zwar nicht so schön, etliche male den Alarm weg zu drücken, aber das spart das Kopieren jeweils von 2 Zeilen nebst erneutem Einfügen, vielleicht geht es aber auch, wenn man in die Statuszeile was pinselt. Das habe ich aber noch nicht geprüft.

Frische Änderungen | Menü editieren
zuletzt geändert am 17.11.2010 09:47 Uhr von Lars
Edit Page | Page History