Script for ripping genre, year & record label from beatport.com


#20

credit goes to jaimz, i'm sure you meant him :slight_smile:


#21

:blush: jaimz i'm sorry. btw trutru what do you think of my suggestions?


#22

In a reply to a private mail request I sent jaimz,

As you requested, I have I have gone ahead and changed all I can in the script and I am coming a little stuck now. I’ve attached the script so you can see all the changes made and I’ve put in all the code I want in there. I’ve also put ‘#’’s in there so the script still works and put notes in the script to help you along (that’s if you want to help me) :slight_smile: so thanks jaimz.

I’m sorry for annoying you but your help here would be invaluable to me!

WHAT I’VE DONE DO FAR:

Changed the order of the titles around in the script so they look in order.
Added this to the search function. Just cuts out all the crap :slight_smile: got it form pones script. (Thanks pone) BTW I took out the artist lookout and kept just the album.

]=$trim($regexp($regexp($repl($regexp(%album%,'(\(|\[).*(\)|\]).*',),-, ,_, ,/, ,:, ,., ,", ,!, ,?, ,&, ), (web|cd *\d*|vinyl|ep|e p ) *$,,1), (web|cd *\d*|vinyl|ep|e p ) *$,,1)

DISCNUMBER as "1/1"
DISCOGS MEDIATYPE as "WEB 320kbps"
REALEASE TIME as YEAR not DATE
(Original Mix) to (OM)

NOT DOING:

Extended to Xtd

NEED HELP WITH:

ALBUM ARTIST
I what the "album artist" to be the same as "albumartist" as traktor reads %album artist% instead. I tried a long time to change the script around but I had no luck.

WWW be the url of the release e.g. http://www.beatport.com/release/serious-remixes/399988

Can’t seem to find this in Beatports API.

DISCOG_RELEASE ID be ...s-remixes/399988

I wrote this into the script but it doesn’t seem to work!

# BEATPORT RELEASE ID
outputto "discogs_release_id"
findline "<id>"
findinline "<id>"
sayuntil "</"

UNSYNCED LYRICS be 'Exclusive to beatport.com' if it’s exclusive
Beatport says in its API it’s a string like any other such as the release date:

Here’s the link to Beatports ‘object structures’ where I seen it.
http://api.beatport.com/object-structures.html#id1

I wrote this into the script but it doesn’t seem to work!

# NEW RELEASE, EXCLUSIVE, GENERAL CONTENT, CLASSIC
outputto "unsyncedlyrics"
findline "<currentStatus>"
findinline "<currentStatus>"
sayuntil "</"
CATALOG # add the catalog # to the end of the album like: Serious (Remixes) [MM9330] with closed angle brackets like [ ]

I wrote this into the script but it doesn’t seem to work!

# ALBUM
outputto "album"
findline "<name>"
findinline "<name>"
sayuntil "</"
say " ["
findline "<catalogNumber>"
findinline "<catalogNumber>"
sayuntil "</"
say "]"

This was my stab at scripting a little and hope its useful to others also..Thanks in advance for your help.

_Beatport__Release___stevehero_edit.src (5.23 KB)


#23

put this at the end of the script after the

outputto "album artist"
 sayoutput "albumartist"

put this at any place in the script:

outputto "WWW"
  sayoutput "currentpreview"

I have put this also inside my own mod of the script. But it seems not work for all releases. Sometime you get a URL to a beatport page that doesn't seem to exist. Like with you example release. It seems as if beatport has put it out of their shop, but still keeps the data in it's API.

If you have a look at the artist page, you will see that "Serious Remixes" is not listed (anymore?).
http://www.beatport.com/artist/manufacture...perstars/126978
but the API page is still their:
http://api.beatport.com/catalog/releases/d...l&id=399988

put this at the end of the script:

 outputto "discogs_release_id"
 gotoline 1
 findline "<release id="
 findinline "<release id=\""
 sayuntil "\""

put this in the tracks loop between _LENGTH and GENRE (only the part in the Code window. the rest is for you to see where exactly to put it in):

outputto "_length"
findline "<trackLength>"
findinline ">"
sayuntil "</"    
say "|"
outputto "unsyncedlyrics"
  findline "<release id="
  findinline " exclusive=\""
  if "true"
      say "Exclusive to beatport.com"
  endif
  say "|"outputto "Genre"
findline "<genre"
joinuntil "</genre>"
findinline "<name>"
sayuntil "</"
say "|

put this at the end of the script

outputto "album"
  say " ["
  sayoutput "catalog #"
  say "]"

Why have you changed the original way to write PUBLISHER and CATALOG #?
Your script doesn't work here. It gets the publisher of the first recommendation link ("Users Also Bought") and the catalog # of the second one at the bottom of the page, not the publisher and the catalog # of the release itself.
You can fix that by putting
gotoline 1
before the Publisher and Catalog # part which at your script, or by putting these parts back to their original position at the upper part of the script.

EDIT:
and for your MMDD date:
put this after the year part (only the part in the Code window. the rest is for you to see where exactly to put it in):

outputto "year"
findline ""
findinline ""
sayuntil "</"

outputto "date"
   gotochar 1
   findinline "<dateReleased>"
   findinline "-"
   sayuntil "-"
   findinline "-"
   sayuntil "</"

#24

Just to let you know I came across a URL which didn't work,
John Dahlbäcks - Out There http://www.beatport.com/release/out-there/170967
I thought it was my mod to the script but I referenced it against the original one and it had the same problem.

Everything worked as it should do its just I have a few things I need to ask, simple Q's for you but just to help clear my mind a little!!
How come the order in which the headings belong is so important?
Are you a web developer as such or do you need to be in order to do this lark?
Regards the script is it possible to parse beatport for compilations?
And I have a further Q down the page regards the "currentStatus (string)" which includes "exlusive, classics etc"

WORKS: Making the "album artist" the same as "albumartist".
QUOTE (pone @ Aug 22 2011, 12:56) <{POST_SNAPBACK}>
put this at the end of the script after the
outputto "album artist"
 sayoutput "albumartist"<!--QuoteEnd--></div><!--QuoteEEnd-->
WORKS: Adding the Beatport URL to "www". I've tested this out on a couple of albums and no problems as yet. Thanks.
QUOTE (pone @ Aug 22 2011, 12:56) <{POST_SNAPBACK}>
put this at any place in the script:
outputto "WWW"
  sayoutput "currentpreview"

I have put this also inside my own mod of the script. But it seems not work for all releases. Sometime you get a URL to a beatport page that doesn't seem to exist. Like with you example release. It seems as if beatport has put it out of their shop, but still keeps the data in it's API.

If you have a look at the artist page, you will see that "Serious Remixes" is not listed (anymore?).
http://www.beatport.com/artist/manufacture...perstars/126978
but the API page is still their:
http://api.beatport.com/catalog/releases/d...l&id=399988


NOTE
If you take a look here http://bit.ly/qtXs3k on there releases page you'll find it, the page you were referring to is just the artist page which only shows there LATEST RELEASES WORKS: Adding the id from beatport to the "discogs_release_id".
QUOTE (pone @ Aug 22 2011, 12:56) <{POST_SNAPBACK}>
put this at the end of the script:
 outputto "discogs_release_id"
 gotoline 1
 findline "<release id="
 findinline "<release id=\""
 sayuntil "\""<!--QuoteEnd--></div><!--QuoteEEnd-->
WORKS: Checking if a release is exclusive and adding it to the unsyncedlyrics.

But I was hoping to get the following as beatport has it:
currentStatus (string): The state of the track on Beatport.com. Can be any of ["New Release", "Exclusive", "General Content", "Classic"].
It would be quite handy to refer some tracks as classic because it would make putting playlist together that bit easier.

QUOTE (pone @ Aug 22 2011, 12:56) <{POST_SNAPBACK}>
put this in the tracks loop between _LENGTH and GENRE (only the part in the Code window. the rest is for you to see where exactly to put it in):
outputto "_length"
findline "<trackLength>"
findinline ">"
sayuntil "</"    
say "|"
outputto "unsyncedlyrics"
  findline "<release id="
  findinline " exclusive=\""
  if "true"
      say "Exclusive to beatport.com"
  endif
  say "|"outputto "Genre"
findline "<genre"
joinuntil "</genre>"
findinline "<name>"
sayuntil "</"
say "|.<!--QuoteEnd--></div><!--QuoteEEnd-->
WORKS: Appends the "catolog #" to the end of the "album" with square brackets.
QUOTE (pone @ Aug 22 2011, 12:56) <{POST_SNAPBACK}>
put this at the end of the script
outputto "album"
  say " ["
  sayoutput "catalog #"
  say "]"<!--QuoteEnd--></div><!--QuoteEEnd-->
Not sure why I done that to be honest, but I know one thing these scripts are fickle buggers!!! :slight_smile: WORKS: Taking the beatport year format YYYY-MM-DD and putting the %date% as MMDD.
QUOTE (pone @ Aug 22 2011, 12:56) <{POST_SNAPBACK}>
and for your MMDD date:

put this after the year part (only the part in the Code window. the rest is for you to see where exactly to put it in):

outputto "year"
findline ""
findinline ""
sayuntil "</"

outputto "date"
   gotochar 1
   findinline "<dateReleased>"
   findinline "-"
   sayuntil "-"
   findinline "-"
   sayuntil "</"<!--QuoteEnd--></div><!--QuoteEEnd-->

Thanks once again pone for your help.

######EDIT######
I've attached the mod version I done with the kind help of @pone. I attached screen shots of it for anyone to see before downloading.
BTW in case ur wondering how I got the add info screen larger? Photoshop :stuck_out_tongue: (Would love that window to resize though!!)

_Beatport__Release___stevehero_edit.src (5.92 KB)




#25

The problem is the missing cover of the release. I stumbled across similar releases. I described the problem here and also present a solution:
[ws] beatport.com

Because the parsing of the web source always runs from left to right and from up to down. Commands like findline and findinline only look in one direction. If the parser is already behind a certain entry, it will not find it with a simple findline command. So it is a good advice to parse the entries of a document in the order of the document.

There are different sollutions to overcome this.

  • gotoline 1 always sets the parser back to the top of the page
  • gotochar 1 always sets the parser back to the start of the line
  • you can search backward with commands like:
    findinline "whatever" -1
    findline "whatever" -1
    moveline -1

btw: are you using the debug command? Very helpfull to see what exactly the script is doing in every line.

No, I'm just a manic music collector with too much time. I learned these things here in the forum and by doing over the last years.

What is the problem with compilations? They are parsed like normal releases.
Do you want a tagfield like COMPIPLATION = 1 for compilations? The problem will be that beatport treats proper compilations in the same way as albums with featuring or remix artists. And I can see nothing like releasetype = single/album/compilation on beatport. So I don't know how to built something in the script which decides if it is a compilation or not.

What can be done is simply to write COMPIPLATION = 1 for every release where VA is put in as albumartist. For that, put that into the script (only the part in the Code window. the rest is for you to see where exactly to put it in):

if "<performer ref=\"Artist\""

###################CHANGE "VA" TO YOUR LIKING###################

    set "albumartist", "VA"

###################CHANGE "VA" TO YOUR LIKING###################

outputto "compilation"
say "1"endif

Can you give me a release that is marked as "classic"? I have found this status only for tracks, not for a whole release.
Do you also want "gerneral content" and "new release". Consider, "general content" holds no info at all and "new release" will be outdated a month later.

No, I still can't see it. Only "Serious", not "Serious Remixes". And the link to the releasepage as presented in the API page gives an empty page: http://www.beatport.com/release/serious-remixes/399988


#26

Maybe beatport will fix this problem at some point, pity they don't have a button to report the page faulty.

Interesting stuff, I shall take note of this. Thanks.

What do you mean? Is there an application for this?

So how long has it taken you to get this advanced? Have you any useful links for me to learn more?

QUOTE (pone @ Aug 23 2011, 11:14) <{POST_SNAPBACK}>
What can be done is simply to write COMPILATION = 1 for every release where VA is put in as albumartist. For that, put that into the script (only the part in the Code window. the rest is for you to see where exactly to put it in):
if "<performer ref=\"Artist\""

###################CHANGE "VA" TO YOUR LIKING###################

    set "albumartist", "VA"

###################CHANGE "VA" TO YOUR LIKING###################

outputto "compilation"
say "1"endif<!--QuoteEnd--></div><!--QuoteEEnd-->

Thanks for the COMPILATION workaround.

I just see it stated here, http://api.beatport.com/object-structures.html#release I do not know how to reach a specific albums API, only the examples given.

Your problem seems to be the country your in and you do not have privileges to see that page or more to the point BUY the release. I'm from Ireland I can see the remix version. Don't worry this happens me as well. Cant see why Record labels would want to limit themselves to specific country's!!! :huh: I've attached a screen shot to your link to prove it IS there.



#27

you can put this command into the script:
debug "on" "C:\Users<user name>\AppData\Roaming\Mp3tag\data\sources\debug.txt"

This will give you a textfile which presents:

  • the full web source as the script reads it
  • a log of what the script is doing in every line. it shows the script line, the script command, the script output (of the last outputto command) and the line and position of the parser in the web source.
  • shows error messages when something is not found.

you can also use
debug "off"
at a later part of the script to stop the log at a certain point

You can use debug at any point after [ParserScriptIndex]=... or/and after [ParserScriptAlbum]=...
These two sections are seperated for this command. If you use it in [ParserScriptIndex]=... it will stop at [ParserScriptAlbum]=... You can also use it more then one time in a script when you use different filenames for what I called debug.txt E.g. you can you debug_index.txt for the first part and debug_album.txt for the second.

I started with my modifications of dano's discogs script like you do with jaimz's. Over the time i came across new problems and ideas, so I learned more by trying to optimize my script. It looked pretty differnt two years ago, at that point it had passages in it which I took from dano without understanding how they work exactly.

There is no special link. I'm sure you already read the help page:
http://help.mp3tag.de/main_online.html

And I can see you read parts of the Web Sources Discusssion and the Web Sources Scipts Forums here. I found it helpfull to download other scripts and see how they work. That gave me an understanding of what can be done. I searched a lot in the forum to see if something is explained about special commands. And I simply asked in the forum when I had problems to understand how something works.

Another usefull thing are regular expressions. These are explained here:
http://help.mp3tag.de/options_format.html#regexp
And in many examples in the forum, mainly to format tag fields. But the principle how they work is the same for web sources scripts.

so how have you written the script if you can't see the source?

take the release-number out of the url of the standard html release page and put it at the end of this url to see the API structure:
http://api.beatport.com/catalog/releases/d...mat=xml&id=

Ah, that's another explanation. I think you are right.
Labels have country specific distirbution deals with different distribution companies. So maybe they have an exclusive deal for Germany with a different web shop.


#28

I was hoping I could search by catalog id of beatport like 2108597
Thats the most sure way, I'll try to change the script myself but it would be nice if you would implement it...

The link to do that is

http://api.beatport.com/catalog/tracks?v=1...&id=2108597


#29

I can't open your link.
Anyway, do like this:

Delete everything in the script until [ParserScriptAlbum]=... and replace it with this:

[Name]=beatport.com
[BasedOn]=http://api.beatport.com
[AlbumUrl]=http://api.beatport.com/catalog/releases/detail?v=1.0&format=xml&id=%s
[SearchBy]=%beatport_release_id%

[ParserScriptAlbum]=...

I have used [SearchBy]=%beatport_release_id%. If you have already stored the ID in another field, insert its name here.


#30

getting a error connecting to server http://api.beatport.com

thx for helping me out


#31

you have to put a valid beatport release id into the search box, the number in the url like 399988 for this release:
http://www.beatport.com/release/serious-remixes/399988


#32

I see now the solution you gave me is for release (album) id, but I ment track id.

When you download the files each file starts with its own unique track id.
This id is a 100% sure way to connect the track...

I believe this is the url
http://api.beatport.com/catalog/tracks?v=...t=xml&id=%s

It finds the track now, but not all data is in the fields.
All fields are empty except the cover picture...


#33

The result xml needs to be parsed differently.
I'm not really succeding in it :frowning:

I don't really understand why you don't have this already.
I always download the wav files from beatport and there is absolutly nothing of meta data in it.
I used to transform my orderemail data to a txt file and use that in MP3 tag, but not all data is in the email.
I would like to have the genre in it, and the cover..
Well as much data as is posible..

I hope you can help me out on this one..


#34

ok, like for this URL: http://api.beatport.com/catalog/tracks?v=1...&id=2108597

This seems to be a page for one track only.
Since the structure it pretty different to a release page, you would need to write a whole new script.
And you could tag only one track with each script run.

When you have tracks bought from beatport with a track id, aren't these tracks full tagged already?


#35

reading your second answer, i understand.
wav files have no metadata. you transform them into mp3 and want metadata for that.
well, since the track api is rather simple, it should be possible to write a script for it. but i need some time for that, maybe I'll do it this week.

Can you give me a list of what data you want from the api page in what tag field?

And are ther tracks which list more than one releases at their track id page. Like tracks which appear on a album and on a compilation? If so, how to deal with that?


#36

Hi again

I managed to do some good work on it, so I can moge a bit on...

I still would like to have the beatport track ID in the tracknumber but also the "catalog #" tag
If posible to recup the beatport id from the filename (first part as default by beatport).
I now first put the id in the "catalog #" tag and let the script read that tag.
Please not that I changed the & when having 2 artists (or more) in a semicolomn.
This is more appropriate because some softs like WMP wil then be able to classify this tracks at both artists..

It would be nice I could use this scipt to automatiacly fetch data for x number of tracks.
Now i need to to 1 at a time :frowning:

Very much tanks if you wanna look into this.
I'm very much sure people will apprciate this.

[Name]=beatport.com
[BasedOn]=http://api.beatport.com
[AlbumUrl]=http://api.beatport.com/catalog/tracks?v=1.0&format=xml&id=%s
[SearchBy]=%catalog #%

[ParserScriptAlbum]=...
outputto "tracks"
findline ""
findinline ">"
sayuntil "</"
findline ""
findinline ">"
say " ("
sayuntil "</"
say ")|"

outputto "year"
findline ""
findinline ""
sayuntil "</"

outputto "coverurl"
findline "width="60" height="60" ref="release""
moveline 1
findinline "image url=""
sayuntil "" "

#outputto "album""
#findline "<release exclusive="false""
#findinline ""
#sayuntil "</"

outputto "publisher"
findline "<label id"
findline ""
findinline ""
sayuntil "</"

outputto "genre"
findline "<genre id"
findline ""
findinline ""
sayuntil "</"

outputto "artist"
findline "<performer ref="Artist""
joinuntil ""
findinline ""
sayuntil "</"
moveline 1
unspace
if "<performer ref="Artist""
joinuntil ""
say "; "
findinline ""
sayuntil "</"
moveline 1
unspace
if "<performer ref="Artist""
set "albumartist", "Various Artists"
endif
endif
replace "|" "/"


#37

Thanks, its all a bit confusing at the min but I'll get it in all good time. I have done what you said and debuged the search by
release ID you posted in this post here and the returns it sends back are very detailed indeed!

BTW. I used your code:

[Name]=beatport.com
[BasedOn]=http://api.beatport.com
[AlbumUrl]=http://api.beatport.com/catalog/releases/detail?v=1.0&format=xml&id=
[SearchBy]=%discogs_release_id%

[ParserScriptAlbum]=...

The Release: 371080 is coming back with unfavoured results.

Its coming back with:
Artist: Red Carpet, Marcus Schossow
AlbumArtist: Artist: Red Carpet & Marcus Schossow
Album Artist: Artist: Red Carpet & Marcus Schossow
Title: Alright 2011 feat. Marcus Schossow ((Marcus Schossow Remix))
www
: http://api.beatport.com/catalog/releases/d...l&id=371080 for which I'd like the main URL

I would like to know how to change the Album Artist to match that of the Artist with a ", " I tried modifing the code:

moveline 1
unspace
if "<performer ref=\"Artist\""
joinuntil "</performer>"
say ", "
findinline "<name>"<PERFORMER performer ?

But this didn''t have the desired results. Its fine once the album goes over 3 artists then album artist becomes "VA" but having only two artists I want the " & " sign to become ", " and the title: Alright 2011 feat. Marcus Schossow ((Marcus Schossow Remix)) is not right. I'm not sure the reason for this.

Your script has developed so much and thanks for that. The export thing was a stroke for genious. :slight_smile:

Dunno really, but I have not really done much scripting it was all really simple stuff I have done so far but until I get a better understanding of it all then I'll just have to make do with pickin peoples brains on here!


#38

Here is the main URL:
http://www.beatport.com/release/alright-2011/371080
You get that by clicking on the preview button down left at the web sources dialog windows.

QUOTE (stevehero @ Aug 24 2011, 22:04) <{POST_SNAPBACK}>
I would like to know how to change the Album Artist to match that of the Artist with a ", " I tried modifing the code:
moveline 1
          unspace
          if "<performer ref=\"Artist\""
          joinuntil "</performer>"
          say ", "
          findinline "<name>"<PERFORMER performer ?

But this didn''t have the desired results. Its fine once the album goes over 3 artists then album artist becomes "VA" but having only two artists I want the " & " sign to become ", " and the title: Alright 2011 feat. Marcus Schossow ((Marcus Schossow Remix)) is not right. I'm not sure the reason for this.

I discovered the difference of artist and albumartist at many releases. I have solved this with an action group which I use after the web script i such cases. This also puts "artist 1, artist 2, artist 3" to "artist 1, artist 2 and artist 3":

Action 1: Format Value
Field: ARTIST
Formatstring: $regexp(%artist%,', ([^,]+)$',' & $1 ')

Action 2: Format Value
Field: MIXARTIST
Formatstring: $regexp(%mixartist%,', ([^,]+)$',' & $1 ')

But now as I dig deeper into that beatport script, I see it's easy to change inside the script:
change this:

<!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->outputto "Artist"
 sayregexp "(?<=<Artist>)[^<]+" <b>", "</b> "</track>"
 say "|"<!--fontc--></span><!--/fontc-->

into this:

<!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->outputto "Artist"
 sayregexp "(?<=<Artist>)[^<]+" <b>" & "</b> "</track>"
 say "|"<!--fontc--></span><!--/fontc-->

But that won't do the ..., ... & ... trick for three or more artists.
Here is a usefull threat on that freacky sayregxp command: /t/6993/1

For the ((Mixname)) thing: It seems that the beatport API page is somehow ill-formated. It has
(Marcus Schossow Remix)
where it normally should have
Marcus Schossow Remix

We can fix that with a regexpreplace command (the bold line is new):

<!--fonto:Courier New--><span style="font-family:Courier New"><!--/fonto-->outputto "tracks"
 findline "<name>"
 findinline ">"
 sayuntil "</"
 findline "<mixName>"

regexpreplace "(([^<]+))" "$1"

 findinline ">"<!--fontc--></span><!--/fontc-->

p.s.:
As you asked me for links at hints, I have forgotten to mention the very usefull freeware notepad++. It's like notedpad, but with plus plus more options and possibilities. It also refreshes the debug files when it is rewritten if you watch it with this tool:
http://notepad-plus-plus.org/
For this exists is an also very usefull language extension for the mp3tag web sources script language which highligts the comands of the script for a better overview. That helps to avoid typos, because you see they don't have the correct colour:
Web Sources Framework: Help needed

p.p.s:
I'm sorry. I didn't read your post carefully enough. I changed the , & artist albumartist thing exactly the other way around as you wanted it. For your desired solution you started right with replacing

say " & "

with

say ", "

at albumartist. And that is all what is necessary. You have also changed the next line (at least in the code you presented in your post). That would normally result into a Adjust Album Information window with all tag fields empty, because the line doesn't fit into the web sources syntax.

p.p.p.s:
Sorry, I also didn't understand your www problem. Here is the code for getting the main url when currentpreview is not available (as it is the case when you skip the [ParserScriptIndex]=... Part):

outputto "WWW"

gotoline 1
findline ""
findinline ""
say "http://www.beatport.com/release/"
sayuntil ""
say "/"
sayoutput "discogs_release_id"


#39

so i would advice you to use a different tag field for the beatport track ID, as this is something different as the catalog #.
But there seems to be no catalog # in the track-api-page. Only the beatport release id from where the track is taken from. You would have to do an additional run of a script for releases to to get the catalog #.

Yes. The tracknames are like trackid_title_name_mix_name.mp3, right? This will give you the frist numbers of the filename:

[SearchBy]=$regexp(%_filename%,^(\d+).+,$1)

The proper way to write multivalue tags in Mp3tag is to use \\ as a seperator. But this has some points you have to do right:
You have to write say "\\" to get \\.
And you have to save the files a second time after using the script to get the tag seperated.
see here: /t/9432/1
But if "; " works for you as a workaround, you can stick to this.

Here was a project to get this done. Don't know if it works. Tested it a while ago and didn't get it going. Produced a system crash after serveral trys. Now it says "project stopped" in the first post.
/t/6702/1

Your script generally works nice. Good work!

If you replace

outputto "tracks"

with

outputto "title"

you don't get that track number which will be always 1 for a script for one file.

p.s.:
and here is a working code to get the album name:

outputto "album"

findline "<release id="
joinuntil ""
findinline ""
sayuntil ""