[REL] WiiTDB (ES) v1.01
Posted: 2012-03-31 10:49:50
Please save as "WiiTDB (ES).ifs"
See code comments for details
Script for Catalog WiiGames Collection
Greetins from Spain
dedicado a Emma
See code comments for details
Script for Catalog WiiGames Collection
Greetins from Spain
Code: Select all
(***************************************************
Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/
[Infos]
Authors=mOrfiUs (morfius@hotmail.es)
Title=WiiTDB (ES)
Description=WiiTDB
Site=http://www.gametdb.com/Wii
Language=ES
Version=1.01 31/03/2012
Requires=3.5.1
Comments=see code comments
License=GPL
GetInfo=1
[Options]
AutoSelect=1|1|0=Confirmación de los títulos|1=Desatendido si sólo encuentra un resultado
BusES=1|1|0=Separa los intérpretes con saltos de línea|1=Separa los intérpretes con comas
UnaCateg=0|0|0=muestra todas las categorías|1=sólo muestra la primera categoría
***************************************************)
// dedicado a Emma
// www.gametdb.com/Wii es una base de datos (BBDD) de juegos Wii freeware disponible a través de Internet
// existen varias aplicaciones freeware para catalogar colecciones de juegos Wii que permiten su ejecución incluso desde la propia Wii
// sin embargo, para los que disponen del sistema SunDriver, no existe tal aplicación.
// es por eso que he creado este script enfocado a cubrir ese hueco.
// la forma más eficiente de su uso (si tenemos más de 50 juegos) es localizar el ID del archivo
// en la BBDD de títulos http://www.gametdb.com/titles.txt?LANG=ES
// e importar en AMC un archivo con todos nuestros juegos y sólo dos campos
// ej. para el juego "Spyro : Enter the Dragonfly"
// fieldMedia fieldTranslatedTitle
// GS8P7D Spyro.iso
// ej. para el juego "Monster Hunter Tri" utilizando campos adicionales para almacenar los switchs del SunDriver y el tamaño de la rar
// fieldMedia fieldTranslatedTitle fieldAudioFormat fieldSize
// RMHP08 MonsterHunterTri(3).iso OFF OFF OFF ON 2864
// para conocer todas las opciones de importación buscar en el foro
// a continuación ejecutar el script en modo desatendido y en unos minutos tendremos el catálogo
// por supuesto que se puede ir buscando uno a uno los juegos a partir del nombre, pero para el primer uso recomiendo la opción indicada.
// asignación de campos
// Título traducido -> nombre del archivo ISO almacenado en el DD (útil para SunDriver)
// Producer -> publisher
// Media -> ID Identificador único del juego en GameTDB
// Source -> region (PAL, NTSC, etc.)
// MediaType -> type
// Languages -> idiomas
// Director -> desarrollador
// Category -> género
// Rating -> valoración
// Comments -> Jugadores, accesorios, etc.
// Si el campo fieldMedia tiene un valor, se presupone que es el ID único en la web.
// Esto es especialmente útil para modo desatendido,
// ya que si importamos el nombre del archivo iso y conocemos el ID
// la búsqueda será exacta y obtendremos nuestro catálogo en apenas un minuto por cada 50 títulos
// ERRORES
// por algún motivo que desconozco AMC no visualiza bien algunas carátulas PNG de esta web
// la solución es guardar como JPG
// OBSERVACIONES
// para su adaptación a otros idiomas reemplazar "ES" por "FR" con cautela
// for other languages search and replace "ES" -> "FR" but caution!!!
program WiiTDB;
uses
StringUtils1;
const
BaseURL = 'http://www.gametdb.com/Wii';
var
GameName: string;
//------------------------------------------------------------------------------------
//
//
//------------------------------------------------------------------------------------
procedure AnalyzeSearchPage(Address: string);
var
Page: TStringList;
LineNr: Integer;
Line,Line2: string;
GameTitle, GameAddress: string;
begin
Page := TStringList.Create;
Page.Text := UTF8Decode(GetPage(Address));
// un solo resultado
LineNr := FindLine('<title>Search</title>', Page, 0);
if LineNr = -1 then
begin
LineNr := FindLine('valign=' + #39 + 'top' + #39 + '>ID', Page, 0);
Line := Page.GetString(LineNr+1);
HTMLRemoveTags(Line);
GameAddress := BaseURL + '/' + Line;
AnalyzeGamePage(GameAddress);
exit;
end;
LineNr := FindLine(' Results &ndash', Page, 0);
if LineNr = -1 then
// sin resultado
begin
SetField(fieldChecked, '');
if GetOption('AutoSelect') = 1 then exit;
ShowError('No se han encontrado resultados para ' + UpperCase(GameName))
Page.Free
exit;
end;
//LineNr := 0;
//varios resultados
PickTreeClear;
PickTreeAdd('Resultados en WiiTDB para ' + UpperCase(GameName), '');
while TRUE do
begin
LineNr := FindLine('href='+#39, Page, LineNr + 1);
if LineNr = -1 then
begin
LineNr := FindLine('Next</a>', Page,0);
if LineNr = -1 then break;
Line := Page.GetString(LineNr);
Address := TextBefore(Line, #39+'>Next</a>', 'href='+#39 );
HTMLDecode(Address);
Page.Text := UTF8Decode(GetPage(Address));
LineNr := FindLine(' Results &ndash', Page, 0);
continue;
end;
Line := Page.GetString(LineNr);
GameAddress := TextBetween(Line, 'href='+#39, #39);
Line := Page.GetString(LineNr+1);
HTMLRemoveTags(Line);
HTMLDecode(Line);
GameTitle := Line;
if Pos('/css', GameTitle) > 0 then break;
if (GameAddress <> '') AND (GameTitle <> '') then
PickTreeAdd(GameTitle, GameAddress);
end;
if PickTreeExec(Address) then
AnalyzeGamePage(Address);
Page.Free;
end;
//------------------------------------------------------------------------------------
procedure AnalyzeGamePage(Address: string);
var
Page: TStringList;
LineNr: Integer;
Line: string;
Item: string;
Comments: string;
Actors: string;
Directors: string;
begin
SetField(fieldURL, Address);
Page := TStringList.Create;
Page.Text := UTF8Decode(GetPage(Address));
// Título original, Sinopsis
LineNr := FindLine('title (ES)', Page, 0);
if LineNr = -1 then
begin
// si no encuentra título, sinopsis en Español lo busca en Inglés
LineNr := FindLine('title (EN)', Page, 0);
Line := Page.GetString(LineNr);
Item := TextBetween(Line, 'title (EN)</td><td valign="top">', '</td></tr>');
SetField(fieldOriginalTitle, Trim(Item));
Line := Page.GetString(LineNr);
Item := TextBetween(Line, 'synopsis (EN)</td><td valign="top">', '</td></tr>');
Item := Trim(StringReplace(Item, '<br clear="all" />', #13#10));
HTMLRemoveTags(Item);
end
else
begin
Line := Page.GetString(LineNr);
Item := TextBetween(Line, 'title (ES)</td><td valign="top">', '</td></tr>');
SetField(fieldOriginalTitle, Trim(Item));
// Título traducido
// SetField(fieldTranslatedTitle, Trim(Item));
Line := Page.GetString(LineNr);
Item := TextBetween(Line, 'synopsis (ES)</td><td valign="top">', '</td></tr>');
Item := Trim(StringReplace(Item, '<br clear="all" />', #13#10));
HTMLRemoveTags(Item);
end;
SetField(fieldDescription, Trim(Item));
// Año
LineNr := FindLine('valign=' + #39 + 'top' + #39 + '>release date', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr+1);
HTMLRemoveTags(Line);
Line := Left(Line, 4);
SetField(fieldYear, Line);
end;
// publisher
LineNr := FindLine('valign=' + #39 + 'top' + #39 + '>publisher', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr+1);
HTMLRemoveTags(Line);
SetField(fieldProducer, Line);
end;
// ID
LineNr := FindLine('valign=' + #39 + 'top' + #39 + '>ID', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr+1);
HTMLRemoveTags(Line);
SetField(fieldMedia, Line);
end;
// region
LineNr := FindLine('valign=' + #39 + 'top' + #39 + '>region', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr+1);
HTMLRemoveTags(Line);
SetField(fieldSource, Line);
end;
// type
LineNr := FindLine('valign=' + #39 + 'top' + #39 + '>type', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr+1);
HTMLRemoveTags(Line);
SetField(fieldMediaType, Line);
end;
// languages
LineNr := FindLine('valign=' + #39 + 'top' + #39 + '>languages', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr+1);
HTMLRemoveTags(Line);
SetField(fieldLanguages, Line);
end;
// developer
LineNr := FindLine('valign=' + #39 + 'top' + #39 + '>developer', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr+1);
HTMLRemoveTags(Line);
SetField(fieldDirector, Line);
end;
// genre
LineNr := FindLine('valign=' + #39 + 'top' + #39 + '>genre', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr+1);
HTMLRemoveTags(Line);
if GetOption('UnaCateg') = 1 then
Line := Left(Line, Pos(', ', Line) - 1);
SetField(fieldCategory, Line);
end;
// rating
LineNr := FindLine('valign=' + #39 + 'top' + #39 + '>rating', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr+1);
HTMLRemoveTags(Line);
SetField(fieldRating, Line);
end;
// players
LineNr := FindLine('valign=' + #39 + 'top' + #39 + '>players', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr+1);
HTMLRemoveTags(Line);
Comments := Comments + 'players: ' + Line + #13#10;
end;
// req. accessories
LineNr := FindLine('valign=' + #39 + 'top' + #39 + '>req. accessories', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr+1);
HTMLRemoveTags(Line);
Comments := Comments + 'req. accessories: ' + Line + #13#10;
end;
// accessories
LineNr := FindLine('valign=' + #39 + 'top' + #39 + '>accessories', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr+1);
HTMLRemoveTags(Line);
Comments := Comments + 'accessories: ' + Line + #13#10;
end;
// online players
LineNr := FindLine('valign=' + #39 + 'top' + #39 + '>online players', Page, 0);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr+1);
HTMLRemoveTags(Line);
Comments := Comments + 'online players: ' + Line + #13#10;
end;
SetField(fieldComments, Comments);
// Carátula
LineNr := FindLine('HQ</a>', Page, LineNr);
if LineNr <> -1 then
begin
Line := Page.GetString(LineNr);
Item := TextBetween(Line, '<a href="', '" alt="');
if Length(Item) = 0 then
Item := TextBetween(Line, '<img src="', '"');
GetPicture(Item);
end;
end;
//------------------------------------------------------------------------------------
begin
GameName := GetField(fieldMedia);
if Length(GameName) > 0 then
AnalyzeGamePage(BaseURL + '/' + GameName)
exit;
GameName := GetField(fieldOriginalTitle);
if GameName = '' then
GameName := GetField(fieldOriginalTitle);
if (GetOption('AutoSelect') = 0) or (GameName = '') then
if Input('Importador de WiiTDB', 'Juego:', GameName) = False then
exit;
if (GetOption('BusES') = 1) then
AnalyzeSearchPage(BaseURL +'/Search?action=search&q=group%3DWii&submit=Search&lang_EN=1&lang_ES=1&title_ES=' + UrlEncode(GameName))
else
AnalyzeSearchPage(BaseURL1 +'/Search?action=search&q=group%3DWii&submit=Search&title_ES=' + UrlEncode(GameName));
end.