Page 1 of 1

[REL] WiiTDB (ES) v1.01

Posted: 2012-03-31 10:49:50
by morfius
Please save as "WiiTDB (ES).ifs"
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.
dedicado a Emma

Posted: 2012-06-24 20:17:29
by RANICUAJO
gracias también desde españa
que grande este programa, y que grandes los que aportais los scripts

un saludo

Posted: 2012-07-13 17:51:40
by morfius
Gracias a ti RANICUAJO. ¿Lo has probado?