[REL] Cinefania [ES] - Primera version

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
gilistico
Posts: 22
Joined: 2005-12-12 18:09:27

[REL] Cinefania [ES] - Primera version

Post by gilistico »

Cinefania con 16.000 peliculas, 17.000 personas, 286 estucios de cine, y 181 series de TV no tenía ningún script publico. De modo que aquí os pongo el que hice para mí.

Es quizas una de las mejores páginas en castellano para películas clásicas o de serie B.

Cinefania (ES).ifs

Code: Select all

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

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

[Infos]
Authors= gilistico
Title=Cinefania (ES)
Description=Movie importation script for Cinefania Spain
Site=http://www.cinefania.com
Language=ES
Version=1.0
Requires=3.5.0
Comments=
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 Cinefania;

const
  SearchBaseURL = 'http://www.cinefania.com/resultado.php?l=&requiredcriterio=';
  SearchPostFix = '&menu=titulos';
  BaseURL1 = 'http://www.cinefania.com';

var
  MovieName: string;
  MovieURL: string;



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

function DeleteTags(var S: string): string;
var
	n,len, tag: Integer;
	c: char;
	t: String;
begin

	tag := 0;
	t := '';
	len := length(s);

	for n :=1 to len do
	begin
		c := Copy(s,n,1);
		if(tag=1) then
		begin
			if(c='>') then tag := 0;
			continue;
		end
		else
		begin
			if(c='<') then
			begin
				tag := 1;
				continue;
			end;
			t := t + c;
		end;
	end 
	s := t;
	result := t;
end;


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

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(Pattern, List.GetString(i)) <> 0 then
    begin
      Result := i;
      Break;
    end;
end;
//------------------------------------------------------------------------------------

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

procedure AnalyzePage(Address: string);

var
	Page: TStringList;
	LineNr: Integer;
	Line, Line2, Aux: string;
	Count: Integer;
	MovieTitle, MovieAddress: string;

begin

	Page := TStringList.Create;
	Count :=0;
  	PickTreeClear;

	while TRUE do
	begin

		Page.Text := GetPage(Address);

		LineNr := FindLine('<a href="/movie.php/', Page, 0);

		if (LineNr = -1) AND (Count=0) then
		begin
			ShowMessage('No se ha encontrado ningún registro');
  			Page.Free;
			exit;	
		end;

	    	Line := Page.GetString(LineNr);


		while TRUE do
		begin

			Line2 := Line;

			MovieAddress := TextBetween (Line, '<a href="', '">');

			if(MovieAddress ='') then 
				break;

		       	MovieTitle := TextBetween (Line2, '/">', '</a>');
	

			if(MovieTitle ='') then 
				break;

			MovieTitle := MovieTitle + ' (' + TextBetween (Line2, '(', ')') +')';

			Aux := TextBetween (Line2, 'Título alternativo de:', '<br>');
			if Aux <> '' then 
				MovieTitle := MovieTitle + ' [' + Aux  +']';
	
			HTMLDecode(MovieTitle);
			DeleteTags(MovieTitle);
			MovieTitle := AnsiUpFirstLetter(AnsiLowerCase(MovieTitle));
			Count := Count + 1;
			PickTreeAdd(MovieTitle, BaseURL1 + MovieAddress);

		end;

		LineNr := FindLine('Siguiente</a>', Page, 0);

		if LineNr = -1 then
			break;

	    	Line := Page.GetString(LineNr);

		Address := TextBetween (Line, '<td align=center> <b><a href="', '">');

	end;


     	if PickTreeExec(Address) then
        	AnalyzeMoviePage(Address);

  	Page.Free;

end;


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

procedure AnalyzeMoviePage(Address: string);
var
  Page: TStringList;
  LineNr,LineNr1,LineNr2, aux, BeginPos: Integer;
  Line: string;
  Item, Picture: string;
  Comments, Guion, Musica, Foto, Productor, Alternativos: string;
  Actors: string;
  Directors: string;


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

  // URL
  SetField(fieldURL, Address);

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

  // Translated Title
  LineNr := FindLine('Títulos en español</b>:<br>-', Page, 0);
  if LineNr <> -1 then
  begin
  	Line := Page.GetString(LineNr);
	Item := TextBetween (Line, 'Títulos en español</b>:<br>-', 'Prod.');

	DeleteTags(Item);
  	HTMLDecode(Item);
	Item := AnsiUpFirstLetter(AnsiLowerCase(Trim (Item)));
  	SetField(fieldTranslatedTitle,Item);
   end;

  // Original Title
  Item := '';
  LineNr := FindLine('<td class="titulo1">', Page, 0);
  if LineNr <> -1 then
  begin
  	Line := Page.GetString(LineNr);
  	Item := TextBetween (Line, '<td class="titulo1">', '(<a href');
  	HTMLDecode(Item);
	Item := AnsiUpFirstLetter(AnsiLowerCase(Trim (Item)));
  	end;

  // Totulos Alternativos
  Alternativos := '';
  LineNr := FindLine('<b>Títulos alternativos</b>:<br>-', Page, 0);
  if LineNr <> -1 then
  begin
    	Line := Page.GetString(LineNr);
    	Alternativos := TextBetween (Line, '<b>Títulos alternativos</b>:<br>-', 'Prod.');
	DeleteTags(Alternativos);
	HTMLDecode(Alternativos);
	Alternativos := AnsiUpFirstLetter(AnsiLowerCase(Trim(Alternativos)));
	Alternativos := ' [' +  Alternativos + ']';
  end;
  SetField(fieldOriginalTitle,Item+Alternativos);



  // Picture - Part 1
  // TIPICO:     "/pics/1b/viewer.php?file='+file"
  Picture := '';
  LineNr1 := FindLine('window.open(''', Page, 0);
  LineNr2 := FindLine('imagebox(''', Page, 0);
  if (LineNr1 <> -1) AND (LineNr2 <> -1) then
  begin
  	Line := Page.GetString(LineNr1);
  	Item := TextBetween (Line, 'window.open(''', '''+file');

	Line := Page.GetString(LineNr2);
	Picture := BaseURL1 + Item + TextBetween (Line, 'imagebox(''', ''')');
  end;


  // Year
  LineNr := FindLine('crono&year=', Page, 0);
  if LineNr <> -1 then
  begin
    	Line := Page.GetString(LineNr);
    	Item := TextBetween (Line, 'crono&year=', '&l');
    	SetField(fieldYear, Trim (Item));
  end;

  // Length
  LineNr := FindLine('<b>Duración</b>:', Page, 0);
  if LineNr <> -1 then
  begin
  	Line := Page.GetString(LineNr);
  	Item := TextBetween (Line, '<b>Duración</b>:', '''<br>');

    	HTMLDecode(Item);
    	SetField(fieldLength, Trim (Item));
  end;

  // Country
  LineNr := FindLine('País</a></b>:', Page, 0);
  if LineNr <> -1 then
  begin
    	Line := Page.GetString(LineNr);
    	Item := TextBetween (Line, 'País</a></b>:', '<b>');
	DeleteTags(Item);
    	HTMLDecode(Item);
    	SetField(fieldCountry, Trim (Item));
  end;

  // Director
  Directors := '';
  LineNr := 0;
  while TRUE do
  begin
	LineNr := FindLine('<td>  Dirección</td>', Page, LineNr+1);
	if LineNr = -1 then
		break;

	Line := Page.GetString(LineNr - 1);
	Item := TextBetween (Line, '<td>', '</td>');
	DeleteTags(Item);
	HTMLDecode(Item);
	if Directors <> '' then
		Directors := Directors + ', ';
	Directors := Directors + Item;
   end
   if Directors <>'' then 
	SetField(fieldDirector, Trim (Directors));


  // Actors
  LineNr1 := FindLine('<b>Reparto</b>', Page, 0);
  LineNr2 := FindLine('Rubros', Page, 0);
  if (LineNr1 <> -1) AND (LineNr2<>-1) then
  begin
	for LineNr := LineNR1+1 to LineNr2 do
	begin
    		Line := Page.GetString(LineNr);
    		Item := TextBetween (Line, '<td> ', '</tr>');
		if Item = '' then
			continue;

		DeleteTags(Item);
    		HTMLDecode(Item);
		Actors := Actors + trim(Item) + #13#10;
	end;
    	SetField(fieldActors, Actors);
  end;

  // Productor
  LineNr := FindLine('Prod. o distr.</a></b>:', Page, 0);
  if LineNr <> -1 then
  begin
    	Line := Page.GetString(LineNr);
    	Item := TextBetween (Line, 'Prod. o distr.</a></b>:', '<b>');
	DeleteTags(Item);
    	HTMLDecode(Item);
    	SetField(fieldProducer, Trim (Item));
  end;
   

  // Critic
  LineNr := FindLine('<b>Reseña', Page, 0);
  if LineNr <> -1 then
  begin
   	Line := Page.GetString(LineNr);
    	Item := TextBetween (Line, '<b>Reseña', '<br>');
    	HTMLDecode(Item);
	DeleteTags(Item);
	SetField(fieldDescription, 'Reseña '+ Trim(Item));
  end;

   // Category
  LineNr := FindLine('GÉNERO Y CRÍTICA', Page, 0);
  if LineNr <> -1 then
  begin
    Line := Page.GetString(LineNr + 1);
    Item := TextBetween (Line, ' / ', ' / ');
   if Length(Item)> 100 then
     begin
        Line := Page.GetString(LineNr + 1);
        Item := TextBetween (Line, '<td  >', ' /');
     end;
    HTMLDecode(Item);
    SetField(fieldCategory, Trim (Item));
    
  end;


  // Estreno
  Comments := '';
  LineNr := FindLine('<b>Estreno</b>: ', Page, 0);
  if LineNr <> -1 then
  begin
    	Line := Page.GetString(LineNr);
    	Comments := 'Estreno: ' + TextBetween (Line, '<b>Estreno</b>: ', '<br>') + #13#10;
  end;

  // Official Webpage
  LineNr := FindLine('Link Externos', Page, 0);
  if LineNr <> -1 then
  begin
    	Line := Page.GetString(LineNr+3);
	Item := TextBetween (Line, '<a href="', '" target="_blank">');
 
   	BeginPos := pos('imdb', Item);
	if BeginPos < 1 then 
    		Comments := Comments + 'Link: ' + Item + #13#10;
  end;

  // Rating
  LineNr := FindLine('calif&rate=', Page, 0);
  if LineNr <> -1 then
  begin
    	Line := Page.GetString(LineNr);
    	Item := TextBetween (Line, 'calif&rate=', '&l');
	Item := StringReplace(Item, ',', '.');
    	SetField(fieldRating, FloatToStr(StrToFloat(Item)*10/5.5));
  end;

  // cargamos la página de creditos completos
  Page.Text := GetPage(Address+'/b');

  // Producción
  Productor := '';
  LineNr := 0;
  while TRUE do
  begin
	LineNr := FindLine('<td>  Producción</td>', Page, LineNr +1);
	if LineNr = -1 then
		break;

	Line := Page.GetString(LineNr - 1);
	Item := TextBetween (Line, '<td>', '</td>');
	DeleteTags(Item);
	HTMLDecode(Item);
	if Productor <> '' then
		begin
			Productor  := Productor  + ', ';
		end
	else 
		begin
			Productor  := 'Producción: ';
		end;

	Productor := Productor + Item;
   end
   if Productor <> '' then
	Productor := Productor + #13#10;

  // Guión
  Guion := '';
  LineNr := 0;
  while TRUE do
  begin
	LineNr := FindLine('<td>  Guión</td>', Page, LineNr +1);
	if LineNr = -1 then
		break;

	Line := Page.GetString(LineNr - 1);
	Item := TextBetween (Line, '<td>', '</td>');
	DeleteTags(Item);
	HTMLDecode(Item);
	if Guion <> '' then
		begin
			Guion  := Guion  + ', ';
		end
	else 
		begin
			Guion  := 'Guión: ';
		end;

	Guion := Guion + Item;
   end
   if Guion <> '' then
	Guion := Guion + #13#10;

  // Composer
  Musica := '';
  LineNr := 0;
  while TRUE do
  begin
	LineNr := FindLine('<td>  Música</td>', Page, LineNr +1);
	if LineNr = -1 then
		break;

	Line := Page.GetString(LineNr - 1);
	Item := TextBetween (Line, '<td>', '</td>');
	DeleteTags(Item);
	HTMLDecode(Item);
	if Musica <> '' then
		begin
			Musica  := Musica  + ', ';
		end
	else 
		begin
			Musica  := 'Música: ';
		end;
	Musica := Musica + Item;
   end
   if Musica <> '' then 
	Musica := Musica + #13#10;

  // Composer
  Foto := '';
  LineNr := 0;
  while TRUE do
  begin
	LineNr := FindLine('<td>  Fotografía</td>', Page,  LineNr +1);
	if LineNr = -1 then
		break;

	Line := Page.GetString(LineNr - 1);
	Item := TextBetween (Line, '<td>', '</td>');
	DeleteTags(Item);
	HTMLDecode(Item);
	if Foto <> '' then
		begin
			Foto  := Foto  + ', ';
		end
	else 
		begin
			Foto  := 'Fotografía: ';
		end;
	Foto := Foto + Item;
   end
   if Foto <> '' then 
	Foto := Foto + #13#10;

  Comments := Productor + Guion + Musica + Foto + Comments;
  HTMLDecode(Comments);
  SetField(fieldComments, Comments);

  // Picture - Part 2
  if Picture <>'' then
  begin
  	Page.Text := GetPage(Picture);
 	LineNr := FindLine('src=''', Page, 0);
	if LineNr <> -1 then
  	begin
  		Line := Page.GetString(LineNr);
  		Item := TextBetween (Line, 'src=''', ''' border');
    		BeginPos := pos('visor.html?id=', Item);

    		if BeginPos > 0 then
			Delete(Item, BeginPos, 14 );

		BeginPos := pos('http://', Item);
		if BeginPos = -1 then
			Item := BaseURL1 + Item;

		GetPicture (Item);
	end;
  end;

end;




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

begin

	if (CheckVersion(3,5,0)=FALSe) then		
		begin
    			ShowMessage('Se requiere Ant Movie Catalog versión 3.5 o superior');
			exit;
		end;

	MovieName := GetField(fieldOriginalTitle);

	if MovieName = '' then
	      MovieName := GetField(fieldTranslatedTitle);

    	Input('Cinefania', 'Titulo de la pelicula:', MovieName);

	AnalyzePage(SearchBaseURL + UrlEncode(MovieName)  + SearchPostfix);


end.
Post Reply