SDG (ESP)

If you made a script you can offer it to the others here, or ask help to improve it. You can also report here bugs & problems with existing scripts.
Post Reply
vicanna
Posts: 6
Joined: 2005-02-21 19:21:15

SDG (ESP)

Post by vicanna »

Pequeña modificacion la cual inserta el codec de video, audio y la resolución. Esta preparado para cuando se puedan extraer mas datos.

modification which inserts codec of video, audio and the resolution. This prepared for when data can be extracted but

Code: Select all

(***************************************************

Ant Movie Catalog importation script
www.antp.be/software/moviecatalog/

[Infos]
Authors=Icecubix - modifi. VicAnna
Title=SDG (ES)
Description=Movie importation script for SDG
Site=http://www.sdg-es.org
Language=ES
Version=2.0
Requires=3.5.0
Comments=Versión reescrita de cero (SDG-es.com --> SDG-es.org)
License=The source code of the script can be used in another program only if full credits to script author and a link to Ant Movie Catalog website are given in the About box or in the documentation of the program.|
GetInfo=1

[Options]

***************************************************)

 

program SDG; 

const 
  BaseURL = 'http://www.sdg-es.org/foro/sdge.php'; 
  BaseURL2 = 'http://www.sdg-es.org/'; 

var 
  ModoBatch : boolean; 
  BuscarCaratula : boolean; 
  MovieName: string; 
  Page: TStringList; 

//------------------------------------------------------------------------------------ 

function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer; 
var 
  i: Integer; 
begin 
  Result := -1; 
  if StartAt < 0 then 
    StartAt := 0; 
  for i := StartAt to List.Count-1 do 
    if Pos(AnsiUpperCase(Pattern), AnsiUpperCase(List.GetString(i))) <> 0 then 
    begin 
      Result := i; 
      Break; 
    end; 
end; 
//------------------------------------------------------------------------------------ 

function TextBetween(var S: string; StartTag: string; EndTag: string): string; 
var 
  InitialPos: Integer; 
  longEnd: Integer; 
begin 
  InitialPos := Pos(StartTag, S); 
  Delete(S, 1, InitialPos + Length(StartTag) - 1); 
  if( Length(EndTag)>0) then 
  begin 
    InitialPos := Pos(EndTag, S); 
    result := copy(S, 1, InitialPos - 1); 
    Delete(S, 1, InitialPos + 1); 
  end else 
  begin 
    result := copy(S, 1, Length(S)); 
  end 
end; 
//------------------------------------------------------------------------------------ 


function TextBetween_noDelete(S: string; StartTag: string; EndTag: string): string; 
var 
  InicioPos: Integer; 
  s2: String; 
begin 
  S2 := S; 
  InicioPos := Pos(StartTag, S2); 
  Delete(S2, 1, InicioPos + Length(StartTag) - 1); 
  InicioPos := Pos(EndTag, S2); 
  result := copy(S2, 1, InicioPos - 1); 
end; 


procedure BuscarPelicula(Nombrepeli: string); 
var 
  LineNr: Integer; 
  Line, LineAux: string; 
  MovieTitle, MovieAddress: string; 
  Elementos: Integer; 
  Item: string; 
  Enlace, Titulo, Linea: string; 
  s1, s2: string; 
  i1, i2: integer; 

begin 
  Page := TStringList.Create; 
  Page.Text := PostPage(BaseURL, URLEncode('do=buscando&busquedarapida=1&cadena=') + Nombrepeli); 

  if Pos('<strong><a href="sdge.php?', Page.Text) = 0 then 
  begin 
    ShowMessage('No se ha han encontrado películas por "' + Nombrepeli + '"'); 
  end else 
  begin 
    Page.savetofile('d:\borrar1.html'); 
    if not ModoBatch then 
    begin 
       PickTreeClear; 
       LineNr := 0; 
       LineNr := FindLine('<strong><a href="sdge.php?', Page, LineNr); 
       PickTreeAdd('SDG. Películas por: "' + MovieName + '"', ''); 
       while LineNr > 0 do 
       begin 
         Linea := Page.GetString(LineNr); 
         Titulo := TextBetween_noDelete(Linea, '">', '</a>'); 
         Enlace := TextBetween_noDelete(Linea, 'a href="sdge.php', '">'); 
         Enlace := BaseURL + TextBetween_noDelete(Linea, 'a href="sdge.php', '">'); 
         s1 := 'sdge.php?s=';           i1 := pos(s1, Enlace); 
         s2 := '&do=verelink';      i2 := pos(s2, Enlace); 
         if (i1 > 0) and (i2 > 0) then 
            Enlace := copy(Enlace, 0, i1+8) + copy(Enlace, i2+5, length(Enlace)); 

         PickTreeAdd(Titulo, Enlace); 
         LineNr := FindLine('<strong><a href="sdge.php?', Page, LineNr+1); 
       end; 
       Page.Free; 
       if PickTreeExec(Enlace) then 
         AnalyzePage(Enlace); 
    end else 
    if not ModoBatch then 
      ShowMessage('No se ha encontrado ninguna coincidencia por título'); 
  end 
end; 
//------------------------------------------------------------------------------------ 

function AnalyzePage(Address: string): Integer; 
var 
  LineNr, LineNrAux, aux, numCds, found, multiplier: Integer; 
  Size, SizeLimit: Double; 
  Line: string; 
  Item: string; 
  Comments: string; 
  Actors: string; 
  Description: string; 
  isDual, isSubtitExt, isSonidoExt: Boolean; 
  Idiomas: string; 
  Subtit: String; 
  strAux: string; 
  delimiter: string; 
  SonidoExt: string; 
  TitOriginal: string; 

begin 
  Comments := ''; 
  Actors := ''; 
  Description := ''; 

  // URL 
  SetField(fieldURL, Address); 

  Page := TStringList.Create; 
  Page.Text := GetPage(Address); 

  // Titulo traducido 
  Item := buscaCampo('Detalles del Elink', 0, '>', '</a>'); 
  SetField(fieldTranslatedTitle, Item); 

  // Caratula 
  LineNr := FindLine('>Información<', Page, 0); 
  LineNr := LineNr + 8; 
  Line := Page.GetString(LineNr); 
  Item := TextBetween (Line, 'imagenes/elinks/', '"'); 
  GetPicture (BaseURL2 + 'imagenes/elinks/' + Item); 

  // Descripcion 
  Item := buscaCampo('<b>Descripción:', 1, '<br>', ''); 
  SetField(fieldDescription, Trim (Item)); 

  // Titulo original NO HAY!! 
  //SetField(fieldOriginalTitle, Item); 

  // Direccion 
  Item := buscaCampo('<b>Dirección:', 0, '</b>', ''); 
  SetField(fieldDirector, Trim (Item)); 

  // Interpretacion 
  Item := buscaCampo('<b>Interpretación:', 0, '</b>', ''); 
  SetField(fieldActors, Trim (Item)); 

  // Genero 
  Item := buscaCampo('<b>Género:', 0, '</b>', ''); 
  SetField(fieldCategory, Trim (Item)); 

  // Duracion 
  Item := buscaCampo('<b>Duración:', 0, '</b>' , 'min'); 
  SetField(fieldLength, Trim (Item)); 

  // Pais 
  Item := buscaCampo('<b>País:', 0, '</b>', ''); 
  SetField(fieldCountry, Trim (Item)); 

  // Year 
  Item := buscaCampo('<b>Año:', 0, '</b>', ''); 
  SetField(fieldYear, Trim (Item)); 

  // Resolucion
  Item := buscaCampo ('<b>Resolución:', 0, '</b>', '');
  SetField(fieldResolution, Trim (Item));
  
  // Video Codec
  Item := buscaCampo ('<b>Video Codec:', 0, '</b>', '');
  SetField(fieldVideoFormat, Trim (Item)) ;

  // Audio Codec
  Item := buscaCampo ('<b>Audio Codec:', 0, '</b>', '');
  SetField(fieldAudioFormat, trim (Item));

  // VideoBitrate
  Item := buscacampo  ('<b>Bitrate:', 0, '</b>', '');
  SetField(fieldVideoBitrate, trim (Item));

  // AudioBitrate
  Item := buscaCampo  ('<b>Bitrate:', 2, '</b>', '');
  SetField(fieldAudioBitrate, trim (Item));
  
  // Tamaño
  Item := buscaCampo  ('<b>tamaño:', 0, '</b>', '');
  SetField(fieldSize, trim (Item));
  
end; 


function buscaCampo(patron: String; offset: integer; ini, fin: string): String; 
var 
  i, LineNr: Integer; 
  Line: string; 
  Item: string; 
begin 
  Result := ''; 
  LineNr := FindLine(patron, Page, 0); 
  if LineNr > 0 then 
  begin 
    LineNr := LineNr + offset; 
    Line := Page.GetString(LineNr); 
    Item := TextBetween (Line, ini, fin); 
    HTMLDecode(Item); 
    Item := Trim(Item); 
    //borramos el punto final, si lo hay: 
    i := Length(Item); 
    if copy(Item,i,i) = '.' then 
      Item := copy(Item,0,i-1); 
    result := Item; 
  end; 
end; 

//------------------------------------------------------------------------------------ 
//------------------------------------------------------------------------------------ 

begin 
  if CheckVersion(3,5,0) then 
  begin 
    BuscarCaratula        := true; //getOption('BuscarCaratula') <> 0; 
    ModoBatch             := false; //getOption('ModoBatch') = 1; 

    MovieName := GetField(fieldOriginalTitle); 
    if MovieName = '' then 
      MovieName := GetField(fieldTranslatedTitle); 
      
    if ModoBatch or Input('Importar de SDG', 'Introduzca el titulo de la pelicula:', MovieName) then 
      if (Trim(MovieName)<> '') then 
         BuscarPelicula(UrlEncode(MovieName)); 
  end 
  else 
    ShowMessage('Este script requiere una version mas reciente de Ant Movie Catalog (por lo menos la version 3.5.0)'); 
end.
vicanna
Posts: 6
Joined: 2005-02-21 19:21:15

Help

Post by vicanna »

Necesito saber la opcion de alternativa si cambia un parametro , en este caso un espacio entre Codec y :

I need to know the option of alternative if it changes parametro, in this case a space between Codec and:

// Audio Codec
Item := buscaCampo ('<b>Audio Codec:', 0, '</b>', '');
SetField(fieldAudioFormat, trim (Item));
¿
if Item <>' 0' then
?
Item := buscaCampo ('<b>Audio Codec :', 0, '</b>', '');
SetField(fieldAudioFormat, trim (Item));
folgui
Posts: 113
Joined: 2003-02-04 19:15:03
Location: Madrid, Spain

Post by folgui »

¡Hola!

Pues depende de lo que encuentre entre los parámetros que le pasas a la función.

if Item <>' 0' then
no te vale porque no sabrás si es un '0', un '' u otra cosa (en ese punto del script).

Lo más sencillo es que lo hagas así, sin los : con lo cual te da igual el espacio.

Item := buscaCampo ('<b>Audio Codec', 0, '</b>', '');

Saludos, folgui

In English:

¡Hello!

It depends of what the function finds with the parameters you pass to it.

if Item <>' 0' then isn't valid because you wouldn't know if it's a '0' a '' or other string (at that point of script).

The most simple solution is get rid of : , so if you don't have to worry about the space.

Item := buscaCampo ('<b>Audio Codec', 0, '</b>', '');

Regards, folgui
vicanna
Posts: 6
Joined: 2005-02-21 19:21:15

Mil gracias y otra consulta

Post by vicanna »

Te agradezco sinceramente la solucion .. y mira que era sencilla ... si sabes claro esta.
Otra pregunta , si noi es mucho molestar, a veces, en vez de poner "Audio Codec" ponen "Audio Codec español" y "Audio Codec ingles"
porque lleva dos audios, el primero AC3 5.1 y el segundo en Mp3 , hay algun metodo para decirle al programa que si no encuentra "Audio Codec" a secas busque a ver si esta como "Audio Codec español" .
Y hay la posibilidad de colocar los dos tipos de audio, yo lo he provado y ... claro me machaca uno a otro.
Gracias por la paciencia, pero la perfeccion es dificil de buscar solo .. y mas si se empieza.

I sincerely thank for the solution. and sight to you that was simple... if you know clear this. Another question, if noi is much to bother, sometimes, instead of putting "Audio Codec" puts "Audio Codec espa" and "Audio Codec ingles" because it takes two audio ones, first 5,1 AC3 and the second in Mp3, is algun metodo to say to him to the program that if it does not find "Audio Codec" to droughts looks for to see if this like "Audio Codec espa" . And there is the possibility of placing types of audio both, I am proford and... clear she crushes one to another one. Thanks for the patience, but perfeccion is dificil to look for single. and but if it begins
folgui
Posts: 113
Joined: 2003-02-04 19:15:03
Location: Madrid, Spain

Post by folgui »

!Hola!

Es perfectamente posible lo que comentas y de varias maneras. Una podría ser la siguiente.

Puedes usar la función "FindLine" pasandole "Audio Codec español", si no la encuentra te devolverá -1 :

LineNr := FindLine('Audio Codec español', Page, 0)
If LineNr = -1 Then //en este caso sólo habrá un audio
FindLine('Audio Codec', Page, 0)
//Obtienes el audio único tal como lo estás haciendo
Else //en este caso tendremos dos o más audios
//Obtenemos el dato correspondiente a audio en castellano e imagino que la info del siguiente audio estará en la siguiente línea con lo cual, le asignamos a un string el dato del audio en castellano. Incrementamos en 1 el LineNr y obtenemos el dato del audio en ingles. En pseudo-codigo sería:

strAudio := ObtenerAudioEsp + '(esp) /'
LineNr := LineNr + 1
strAudio := strAudio + ObtenerAudioIng + '(eng')
SetField(fieldAudioCodec, strAudio);

¿me he explicado más o menos? Todo es de memoria y habré metido la gamba en algún sitio pero para hacerte una idea te vale. Lo del (esp) / (eng) es como una chapucilla para aclarar el codec de cada idioma.

Si no te aclaras, me lo dices y intentaré sacar tiempo para ponertelo más claramente

Por cierto, funciones como FindLine, TextBetween, etc. te las puedes ahorrar en tu código porque están en el fichero 'StringUtils1.pas' que incluye el AMC en el directorio de scripts, simplemente debes añadir la siguiente línea después de la línea program SDG; y antes de const

uses
StringUtils1;


Con esto basta para luego llamarlas sin tener que incluir el código de la función en cuestión.

Saludos, folgui.

* A LOT TO THINK TO TRANSLATE TO ENGLISH, AND I DON'T HAVE TIME NOW. SORRY * ;)
vicanna
Posts: 6
Joined: 2005-02-21 19:21:15

cerro

Post by vicanna »

Lastima cerro la web
Post Reply