[Release] Lapicon 1.0.5
Ich habe vor einiger Zeit bereits einmal Lapicon erwähnt. Der Name steht für “Loose API Connection Language” und bezeichnet eine Scriptsprache, die Ähnlichkeiten mit Batch aufweist und dafür gedacht ist, mit XML-basierten WebServices zu interagieren.
Das klingt jetzt extrem technisch, das gebe ich zu, aber im Prinzip ist es ganz einfach: das Last.FM-API beispielsweise kann über Adressen der Form
http://ws.audioscrobbler.com/2.0/?method=[Funktion]&api_key=[APIKey]&[sonstige Parameter]
aufgerufen werden. Daraufhin wird eine Antwort gesendet, die folgende Form hat:
<?xml version="1.0" encoding="utf-8" ?> <lfm status="ok"> (...) </lfm>
Will man diese Antworten nun auswerten, müsste man sie als Programmierer zuerst per Hand auseinandernehmen oder auf entsprechende Bibliotheken zurückgreifen. Hinzu kommt natürlich der Aufwand beim Erstellen der Anfrage, beim Fehler abfangen, etc… Meist hat man dann mehr Daten gesammelt, als man eigentlich benötigt, hatte einen Haufen Schreibaufwand und weiß, bei der nächsten Anfrage geht’s wieder von vorne los. Lapicon übernimmt das alles und ermöglicht so eine gezielte Abfrage und Ausgabe von Daten in drei Zeilen.
Ein Lapicon-Script, dass beispielsweise die Last.FM-ID eines Titels abruft, wäre das folgende:
#lastfm [track.getInfo : artist=the+kooks&track=see+the+sun] store track/id in trackID echo ID: <trackID>
Hierbei wäre der gewünschte Track im Code verankert. Genauso gut könnten wir auch den User entscheiden lassen, was er haben will:
#lastfm read Interpret to artist read Titel to track [track.getInfo : artist=<artist>&track=<track>] store track/id in trackID echo ID: <trackID>
So einfach kann es gehen. Eine genaue Beschreibung des gesamten Befehlssatzes findet man in der Lapicon.txt, die sich im Paket oder hier findet. Ich werde aber demnächst noch eine Kurzeinführung verfassen.
Außerdem habe ich ein paar Lapicon-Scripts geschrieben, die es ermöglichen einzelne Tracks bis hin zu ganzen Alben anonym von Last.FM herunterladen. Dieses Paket, DarkSharpScripts, wird ebenfalls demnächst zum Download bereit stehen. Ich warte damit allerdings noch bis zur Veröffentlichung von LeSharp, da dort das kleine Programm Pico (Path to ID3 Converter) enthalten ist, dass anhand eines Dateipfades ID3-Tags nachträgt. Somit die richtige Ergänzung für die Lapicon-MP3s, die ohne Tags daherkommen.
Ich würde mich freuen, wenn irgendwer Lapicon ausprobieren würde. Am einfachsten geht das übrigens, wenn man eine Datei mit der Endung “.lpc” erstellt, unter Windows darauf doppelklickt und den Lapicon-Interpreter als Standardanwendung auswählt. Dann kann man die Scripts ab sofort per Doppelklick starten.
Download (SourceForge): https://sourceforge.net/project/showfiles.php?group_id=255668&package_id=319513&release_id=677641
[...] (22.04.2009): Diese Methode habe ich als eines der Beispiel-Scripts für Lapicon implementiert. Share and [...]
Inside Last.FM: Bestimmten Titel direkt downloaden | xscDevBlog - LastSharp & Co.
22 Apr 09 at 15:19
Hi Yannick,
bin gerade ein wenig am Spielen mit der API und versuche gerade einen Single-Track-Downloader zu schreiben auf Basis der Eingabe Artist und Titel.
Die TrackID bekomme ich, das PlayList-Laden läuft aber ins Leere. Hier der Code:
#lastfm
read Interpret to artist
read Titel to track
[track.getInfo : artist=<artist>&track=<track>] store track/id in trackID
echo ID: <trackID>
[playlist.fetch : playlistURL=lastfm://playlist/track/<trackID>&streaming=1&fod=1] store xspf:playlist/xspf:trackList/xspf:track/xspf:location in location
echo Location: <location>
Stefan
22 Apr 09 at 16:35
Schau dir mal die Datei “Location.lpc” im “examples”-Verzeichnis von Lapicon an. Die holt dir den Inhalt des “location”-Tags.
EDIT: Es kann auch passieren, dass eine Datei nicht streambar ist, dann ist ‘location’ auch leer.
Yannick
xsc
22 Apr 09 at 17:30
Danke – funzt.
Ergänzt man dies dann aber um ein
down >> test.mp3
so, bekomme ich leider ein
“Error during download: Der Remotesever hat einen Fehler zurückgegeben: (403) unzulässig”
oder ein
“Error during download: Der Server hat eine Protokollverletzung ausgeführt… Section=ResponseHeader Detail=Auf CR muss LF folgen”
Erstere Meldung vermute ich, wenn Last.FM den Titel – warum auch immer – nicht streamen mag. Letztere scheint das Problem zu sein, welches wir auch schon mit LastSharp hatten. Any idea?
Stefan
Stefan
23 Apr 09 at 09:08
@Stefan:
Die Loesung koennte Lapicon-Dokumentation, Punkt 13, bieten:
If the server returns an error, indicating a protocol violation, use ‘resolve’ first to resolve the URL:
Koennte funktionieren. Tut es zumindest bei mir. Die naechste Lapicon-Version enthaelt dann auch Abfragen, die pruefen, ob irgendwelche Werte vorhanden sind oder nicht, sodass man den Download auch nur dann startet, wenn in location ein Wert enthalten ist.
Yannick
xsc
23 Apr 09 at 13:19
Fein – wie bekommst Du eigentlich die eckigen Klammern in den Kommentaren rein? Bei mir wird der Kommentar immer “verstümmelt”, weil scheinbar irgendein “Feature” vermeintliche Code-Fragmente “herausfiltert”.
Ich habe nun
resolve location to rurl
als Statement ergänzt, bekomme dann aber den Fehler:
“Error: Ungültiger URI: Das URI-Format konnte nicht bestimmt werden.”
Stefan
Stefan
23 Apr 09 at 14:47
Eckige Klammern codieren: < ist < und > ist >.
Hast du “resolve location to rurl” im Code oder “resolve <location> to rurl”? Ersteres würde versuchen den String “location” aufzulösen (was wohl den erwähnten Fehler bewirkt), letzteres den Inhalt der Variable “location”.
Ich denke, das ist ein Hauptproblem bei der Verwendung von Lapicon: Man vergisst, das Variablen die Klammern benötigen, um ihren Wert zu liefern…
Yannick
xsc
23 Apr 09 at 19:24
Hallo Yannick,
vielen Dank! Manchmal liegt die richtige Antwort ganz nah – HTML und man kann alle Zeichen verwenden…
Ich habe folgendes Statements nun probiert:
resolve <location> to rurl
echo <rurl>
down <rurl> >> test.mp3
Ergebnis:
Es wird interessanterweise 2x die URL zu dem Titel (http://play.last.fm/anon/123.mp3) ausgegeben und dann bricht das Programm ab mit:
Error during download: Der Server hat eine Protokollverletzung ausgeführt.. Section=ResponseHeader Detail=Auf CR muss LF folgen
Stefan
Stefan
29 Apr 09 at 08:09
Da scheitert das Auflösen der URL aus irgendwelchen Gründen…
Lad doch mal die neueste Lapicon-Version herunter und probiere eines der DarkSharpScripts (Unterordner “packages”) aus. Wenn das auch nicht geht, dann könnte es auch irgendetwas mit Last.FM zu tun haben.
Yannick
xsc
1 Mai 09 at 19:53