Here's another alternate biography script using theaudiodb.com.
Current stats.
21,899 Artist biographies.
+ various Language Translations.

// ==PREPROCESSOR==
// @name "Biography Text theaudiodb.com"
// @author "zeremy"
// @import "%fb2k_profile_path%marc2003\common8.js"
// @feature "v1.4"
// @feature "watch-metadb"
// ==/PREPROCESSOR==
var p = new panel("Biographies theaudiodb.com", ["metadb", "remap", "custom_menu"]);
var t = new text("bio", 6, 30, p.w - 12, p.h - 30);
var source = window.GetProperty("download_source", "theaudiodb.com");
var lang = window.GetProperty("language", "EN");
var a_lang = "";
var folder = fb.ProfilePath + "wsh_theaudiodb\\";
folder.create();
var artist_folder = folder + t.artist.validate() + "\\";
artist_folder.create();
on_item_focus_change();
function on_size()
{
p.size();
t.w = p.w - 12;
t.h = p.h - 30;
t.size();
p.menu_btn.x = p.w - p.menu_btn.w;
}
function on_paint(gr)
{
p.draw_background(gr);
p.left_text(gr, t.artist, p.title_font, p.textcolour_hl, 6, 6, p.w - 12, 24);
gr.DrawLine(6, 29, p.w - 6, 29, 1, p.textcolour_hl);
t.draw(gr);
p.menu_btn.draw(gr);
gr.DrawLine(6, 50, p.w - 6, 50, 1, p.textcolour_hl);
p.left_text(gr, t.a_lang, p.normal_font, p.textcolour, 6, 26, p.w - 12, 24);
p.right_text(gr, "[theaudiodb.com] " + lang, p.normal_font, p.textcolour, 6, 6, p.w - 12, 24);
}
function on_playback_stop()
{
// t.artist = "";
t.a_lang = "";
// t.text = "";
t.update();
window.Repaint();
}
function on_metadb_changed()
{
if (!p.metadb)
return;
p.artist = p.eval(p.artist_tf);
if (t.artist == p.artist)
return;
t.artist = p.artist;
t.text = "";
var artist_folder = folder + t.artist.validate() + "\\";
artist_folder.create();
t.filename = artist_folder + source + "." + lang + ".txt";
if (t.filename.is_file())
{
t.text = p.open(t.filename);
}
else
{
get();
}
get_a_lang();
t.update();
window.Repaint();
}
function on_mouse_wheel(step)
{
t.wheel(step);
}
function on_mouse_move(x, y)
{
p.move(x, y);
t.move(x, y);
}
function on_mouse_lbtn_up(x, y)
{
if (p.menu_btn.lbtn_up(x, y))
return;
t.lbtn_up(x, y);
}
function get()
{
if (t.artist == "" || t.artist == "?")
return;
var artist_folder = folder + t.artist.validate() + "\\";
artist_folder.create();
t.filename = artist_folder + source + ".json";
var fn = t.filename;
var url = ("http://www.theaudiodb.com/api/v1/json/1/search.php?s=" + encodeURIComponent(t.artist));
t.xmlhttp.open("GET", url, true);
t.xmlhttp.send();
t.xmlhttp.onreadystatechange = function ()
{
if (t.xmlhttp.readyState == 4)
{
if (t.xmlhttp.status == 200)
{
var text = t.xmlhttp.responsetext;
t.text = text;
}
else
{
p.console("HTTP error: " + t.xmlhttp.status);
t.text = "This artist does not have a biography";
}
p.save(t.text, fn);
if (t.filename.is_file())
{
t.text = p.open(t.filename);
try
{
t.filename = artist_folder + source;
data = t.text;
json_data = JSON.parse(data);
json_data = json_data.artists;
items = json_data.length;
//EN
for (i = 0; i < items; i++)
{
fn_en = t.filename + "." + "EN" + ".txt"
response = json_data[i].strBiographyEN;
if (response == null)
{}
else
{
p.save(response, fn_en);
}
}
//DE
for (i = 0; i < items; i++)
{
fn_de = t.filename + "." + "DE" + ".txt"
response = json_data[i].strBiographyDE;
if (response == null)
{}
else
{
p.save(response, fn_de);
}
}
//FR
for (i = 0; i < items; i++)
{
fn_fr = t.filename + "." + "FR" + ".txt"
response = json_data[i].strBiographyFR;
if (response == null)
{}
else
{
p.save(response, fn_fr);
}
}
//CN
for (i = 0; i < items; i++)
{
fn_cn = t.filename + "." + "CN" + ".txt"
response = json_data[i].strBiographyCN;
if (response == null)
{}
else
{
p.save(response, fn_cn);
}
}
//IT
for (i = 0; i < items; i++)
{
fn_it = t.filename + "." + "IT" + ".txt"
response = json_data[i].strBiographyIT;
if (response == null)
{}
else
{
p.save(response, fn_it);
}
}
//JP
for (i = 0; i < items; i++)
{
fn_jp = t.filename + "." + "JP" + ".txt"
response = json_data[i].strBiographyJP;
if (response == null)
{}
else
{
p.save(response, fn_jp);
}
}
//RU
for (i = 0; i < items; i++)
{
fn_ru = t.filename + "." + "RU" + ".txt"
response = json_data[i].strBiographyRU;
if (response == null)
{}
else
{
p.save(response, fn_ru);
}
}
//ES
for (i = 0; i < items; i++)
{
fn_es = t.filename + "." + "ES" + ".txt"
response = json_data[i].strBiographyES;
if (response == null)
{}
else
{
p.save(response, fn_es);
}
}
//PT
for (i = 0; i < items; i++)
{
fn_pt = t.filename + "." + "PT" + ".txt"
response = json_data[i].strBiographyPT;
if (response == null)
{}
else
{
p.save(response, fn_pt);
}
}
//SE
for (i = 0; i < items; i++)
{
fn_se = t.filename + "." + "SE" + ".txt"
response = json_data[i].strBiographySE;
if (response == null)
{}
else
{
p.save(response, fn_se);
}
}
//NL
for (i = 0; i < items; i++)
{
fn_nl = t.filename + "." + "NL" + ".txt"
response = json_data[i].strBiographyNL;
if (response == null)
{}
else
{
p.save(response, fn_nl);
}
}
//HU
for (i = 0; i < items; i++)
{
fn_hu = t.filename + "." + "HU" + ".txt"
response = json_data[i].strBiographyHU;
if (response == null)
{}
else
{
p.save(response, fn_hu);
}
}
//NO
for (i = 0; i < items; i++)
{
fn_no = t.filename + "." + "NO" + ".txt"
response = json_data[i].strBiographyNO;
if (response == null)
{}
else
{
p.save(response, fn_no);
}
}
//IL
for (i = 0; i < items; i++)
{
fn_il = t.filename + "." + "IL" + ".txt"
response = json_data[i].strBiographyIL;
if (response == null)
{}
else
{
p.save(response, fn_il);
}
}
//PL
for (i = 0; i < items; i++)
{
fn_pl = t.filename + "." + "PL" + ".txt"
response = json_data[i].strBiographyPL;
if (response == null)
{}
else
{
p.save(response, fn_pl);
}
}
get_a_lang();
t.update();
}
catch (err)
{}
}
t.artist = "";
on_item_focus_change();
}
}
}
function get_a_lang()
{
var artist_folder = folder + t.artist.validate() + "\\";
var a_lang = [];
//EN - 4
lang_filename = artist_folder + source + "." + "EN" + ".txt";
if (lang_filename.is_file())
{
a_lang.push("EN");
}
//DE - 5
lang_filename = artist_folder + source + "." + "DE" + ".txt";
if (lang_filename.is_file())
{
a_lang.push("DE");
}
//FR - 6
lang_filename = artist_folder + source + "." + "FR" + ".txt";
if (lang_filename.is_file())
{
a_lang.push("FR");
}
//CN - 7
lang_filename = artist_folder + source + "." + "CN" + ".txt";
if (lang_filename.is_file())
{
a_lang.push("CN");
}
//IT - 8
lang_filename = artist_folder + source + "." + "IT" + ".txt";
if (lang_filename.is_file())
{
a_lang.push("IT");
}
//JP - 9
lang_filename = artist_folder + source + "." + "JP" + ".txt";
if (lang_filename.is_file())
{
a_lang.push("JP");
}
//RU - 10
lang_filename = artist_folder + source + "." + "RU" + ".txt";
if (lang_filename.is_file())
{
a_lang.push("RU");
}
//ES - 11
lang_filename = artist_folder + source + "." + "ES" + ".txt";
if (lang_filename.is_file())
{
a_lang.push("ES");
}
//PT - 12
lang_filename = artist_folder + source + "." + "PT" + ".txt";
if (lang_filename.is_file())
{
a_lang.push("PT");
}
//SE - 13
lang_filename = artist_folder + source + "." + "SE" + ".txt";
if (lang_filename.is_file())
{
a_lang.push("SE");
}
//NL - 14
lang_filename = artist_folder + source + "." + "NL" + ".txt";
if (lang_filename.is_file())
{
a_lang.push("NL");
}
//HU - 15
lang_filename = artist_folder + source + "." + "HU" + ".txt";
if (lang_filename.is_file())
{
a_lang.push("HU");
}
//NO - 16
lang_filename = artist_folder + source + "." + "NO" + ".txt";
if (lang_filename.is_file())
{
a_lang.push("NO");
}
//IL - 17
lang_filename = artist_folder + source + "." + "IL" + ".txt";
if (lang_filename.is_file())
{
a_lang.push("IL");
}
//PL - 18
lang_filename = artist_folder + source + "." + "PL" + ".txt";
if (lang_filename.is_file())
{
a_lang.push("PL");
}
t.a_lang = "LNG : " + a_lang;
}
p.menu = function ()
{
var _menu = window.CreatePopupMenu();
_menu.AppendMenuItem(p.metadb ? MF_STRING : MF_GRAYED, 1, "Refresh (Download)");
_menu.AppendMenuItem(p.metadb ? MF_STRING : MF_GRAYED, 2, "Refresh (Avaliable Languages)");
_menu.AppendMenuSeparator();
_menu.AppendMenuItem(MF_STRING, 4, "EN");
_menu.AppendMenuItem(MF_STRING, 5, "DE");
_menu.AppendMenuItem(MF_STRING, 6, "FR");
_menu.AppendMenuItem(MF_STRING, 7, "CN");
_menu.AppendMenuItem(MF_STRING, 8, "IT");
_menu.AppendMenuItem(MF_STRING, 9, "JP");
_menu.AppendMenuItem(MF_STRING, 10, "RU");
_menu.AppendMenuItem(MF_STRING, 11, "ES");
_menu.AppendMenuItem(MF_STRING, 12, "PT");
_menu.AppendMenuItem(MF_STRING, 13, "SE");
_menu.AppendMenuItem(MF_STRING, 14, "NL");
_menu.AppendMenuItem(MF_STRING, 15, "HU");
_menu.AppendMenuItem(MF_STRING, 16, "NO");
_menu.AppendMenuItem(MF_STRING, 17, "IL");
_menu.AppendMenuItem(MF_STRING, 18, "PL");
_menu.CheckMenuRadioItem(4, 18, lang == "EN" ? 4 : lang == "DE" ? 5 : lang == "FR" ? 6 : lang == "CN" ? 7 : lang == "IT" ? 8 : lang == "JP" ? 9 : lang == "RU" ? 10 : lang == "ES" ? 11 : lang == "PT" ? 12 : lang == "SE" ? 13 : lang == "NL" ? 14 : lang == "HU" ? 15 : lang == "NO" ? 16 : lang == "IL" ? 17 : 18);
var idx = _menu.TrackPopupMenu(p.menu_btn.x, p.menu_btn.y);
switch (idx)
{
case 1:
if (p.metadb)
{
get();
}
break;
case 2:
if (p.metadb)
{
get_a_lang();
t.update();
window.Repaint();
}
break;
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18:
lang = idx == 4 ? "EN" : idx == 5 ? "DE" : idx == 6 ? "FR" : idx == 7 ? "CN" : idx == 8 ? "IT" : idx == 9 ? "JP" : idx == 10 ? "RU" : idx == 11 ? "ES" : idx == 12 ? "PT" : idx == 13 ? "SE" : idx == 14 ? "NL" : idx == 15 ? "HU" : idx == 16 ? "NO" : idx == 17 ? "IL" : "PL";
p.console("Language Changed To: " + lang);
window.SetProperty("language", lang);
var artist_folder = folder + t.artist.validate() + "\\";
get_a_lang();
t.filename = artist_folder + source + "." + lang + ".txt";
if (t.filename.is_file())
{
t.text = p.open(t.filename);
}
else
{
t.text = "No Biography Found";
}
t.update();
window.Repaint();
}
_menu.Dispose();
}