Page 1 of 1

[ES]culturalia+IMDB+selección de carteles de calidad

Posted: 2003-11-25 09:31:44
by lagarto
Hola,

he modificado el script de folgui (gracias) para añadir la opción de elegir los carteles del probable mejor sitio de carteles en lengua hispana: http://carteles.metropoliglobal.com/. De esta mandera te permite elegir entre el cartel de culturalia o los de dicha página, normalmente tiene varios carteles de una misma pelicula y en muy buena calidad. Yo antes siempre me bajaba el cartel de dicha página pero como soy vago prefiero que se haga solo ;) , se agradecen sugerencias.

Code: Select all

// GETINFO SCRIPTING
// Culturalia+IMDB+carteles
(***************************************************
*                                                  *
*  Movie importation script for:                   *
*    Culturalia, http://www.culturalianet.com      *
*    http://carteles.metropoliglobal.com           *
*  Original version made by David Arenillas        *
*  New version made by  lagarto del desierto       *
*  Contributors:                                   *
*    						   *	
*    Antoine Potten 				   *
*    Jose Miguel Folgueira                         *
*    RedDwarf                                      *     
*    Hades666                                      *
*    KaBeCi                                        *
*                                                  *
*  Thanks to Culturalia's webmaster for his help   *
*  and for providing more direct access to his     *
*  database                                        *
*                                                  *
*  Movie importation script for:                   *
*      IMDB (US), http://us.imdb.com               *
*                                                  *
*  (c) 2002 Antoine Potten    antoine@buypin.com   *
*  Contributors :                                  *
*    Danny Falkov                                  *
*    Kai Blankenhorn                               *
*    lboregard                                     *
*    Ork <ork@everydayangels.net>                  *
*    Trekkie <Asimov@hotmail.com>                  *
*    Youri Heijnen                                 *
*                                                  *
*  For use with Ant Movie Catalog 3.4.x            *
*  www.ant.be.tf/moviecatalog ··· www.buypin.com   *
*                                                  *
*  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                *
*                                                  *
***************************************************)

program Culturalia_IMDb;
const
  BaseURLMetropoli = 'http://carteles.metropoliglobal.com/';
  BaseURLCulturalia = 'http://www.culturalianet.com/bus/catalogo.php';
  UseLongestDescIMDB = False; // If set to False shortest description available will be imported, faster since taken from main page

  ImportMetropoliImage=True;
  // Set the following constants to True to import field, or False to skip field (fiels to import from IMDB). By default, only the fields not available at  Culturalia are set to True.
  // Pon las siguientes constantes a True para importar campo o False para no hacerlo (campos a importar de IMDB). Por defecto, sólo los campos no disponibles en Culturalia están a True.
  ImportActors = True;
  ImportCategory = False;
  ImportComments = False;
  ImportCountry = False;
  ImportDescription = False;
  ImportDirector = False;
  ImportLength = True;
  ImportLanguage = False;
  ImportOriginalTitle = False;
  ImportTranslatedTitle = False;
  LeaveOriginalTitle = False; // True will get Translated Title, yet Original Title field will remain same
  ImportPicture = False;
  ImportLargePicture = False; // If set to False small pic will be imported
  ImportRating = True;
  ImportURL = True;
  ImportYear = False;
 
  TitleMixedCase = False; // If true, each letter of each word of title begins with Uppercase. If false, the script transforms the titles in lowercase except first word

  ExternalPictures = False;
    { True: Pictures will be stored as external files in the folder of the
            catalog
      False: Pictures will be stored inside the catalog (only for .amc files) }
  ManualPictureSelect = False;
    { True: If no Title Match found a picture selection window appears
      False: Revert to IMDB picture }

var
  MovieName,MovieNameTotal, Titulo: string;
  MovieURL: string;
  tmp: string;
  Articles: array of string;
  Index: Integer;
  CulturaliaPicture,  MetropoliPicture: string ;
    
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;

procedure AnalyzePageIMDB(Address: string);
var
  Page: TStringList;
  LineNr: Integer;
  TitleFound: Boolean;
  MovieURL: String;
begin
  Page := TStringList.Create;
  Page.Text := GetPage(Address);
  if pos('<TITLE>IMDb', Page.Text) = 0 then
  begin
    AnalyzeMoviePageIMDB(Page);
  end else
  begin
    TitleFound := False;
    LineNr := 0;
    LineNr := FindLine('<H2><A NAME="top">Most popular searches</A></H2>', Page, LineNr);
    if LineNr > -1 then
    begin
      MovieURL := AddMoviesTitles(Page, LineNr);
      TitleFound := True;
    end;
    LineNr := FindLine('<H2><A NAME="mov">Movies</A></H2>', Page, LineNr);
    if (LineNr > -1) And Not (TitleFound) then
    begin
      MovieURL := AddMoviesTitles(Page, LineNr);
      TitleFound := True;
    end;
    LineNr := FindLine('<H2><A NAME="tvm">TV-Movies</A></H2>', Page, LineNr);
    if (LineNr > -1) And Not (TitleFound) then
    begin
      MovieURL := AddMoviesTitles(Page, LineNr);
      TitleFound := True;
    end;
    LineNr := FindLine('<H2><A NAME="vid">Made for video</A></H2>', Page, LineNr);
    if (LineNr > -1) And Not (TitleFound) then
    begin
      MovieURL := AddMoviesTitles(Page, LineNr);
      TitleFound := True;
    end;
    LineNr := FindLine('<H2><A NAME="tvs">TV series</A></H2>', Page, LineNr);
    if (LineNr > -1) And Not (TitleFound) then
    begin
      MovieURL := AddMoviesTitles(Page, LineNr);
      TitleFound := True;
    end;
    if TitleFound then
      AnalyzePageIMDB(MovieURL);
  end;
  Page.Free;
end;

function FindValue(BeginTag, EndTag: string; Page: TStringList; var LineNr: Integer; var Line: string): string;
var
  BeginPos, EndPos: Integer;
  Value: string;
begin
  Result := '';
  Value := '';
  BeginPos := Pos(BeginTag, Line);
  if BeginPos > 0 then
  begin
    BeginPos := BeginPos + Length(BeginTag);
    if BeginTag = EndTag then
    begin
      Delete(Line,1,BeginPos-1);
      BeginPos := 1;
    end;
    EndPos := pos(EndTag, Line);
    while ((EndPos = 0) and (LineNr < Page.Count-1 )) do
    begin
      Value := Value + copy(Line, BeginPos, Length(Line) - BeginPos);
      // Next Line
      BeginPos := 1;
      LineNr := LineNr + 1;
      Line := Page.GetString(LineNr);
      if Value = '' then
        Exit;
      EndPos := Pos(EndTag, Line);
    end;
    Value := Value + copy(Line, BeginPos, EndPos - BeginPos);
   end;
  Result := Value;
end;

procedure AnalyzeMoviePageIMDB(Page: TStringList);
var
  Line, Value, Value2, FullValue, OldOriginalTitle: string;
  LineNr, Desc, i: Integer;
  BeginPos, EndPos: Integer;
  OldTitleParts, AllTitles: TStringList;
  LongDescr: Boolean;
begin
  LongDescr := UseLongestDescIMDB;
  if (LongDescr) and (Pos('<a href="plotsummary">', Page.Text) = 0) then
    LongDescr := False;
  MovieURL := 'http://imdb.com/title/tt' + copy(Page.Text, pos('<a href="/title/tt',Page.Text)+19, 7);

  // URL
  if (ImportURL)then 
    SetField(fieldURL, MovieURL);

  AllTitles := TStringList.Create;

  // Original Title & Year
if (ImportOriginalTitle) or (ImportYear) then
  begin
    LineNr := FindLine('<title>', Page, 0);
    Line := Page.GetString(LineNr);
    if LineNr > -1 then
    begin
      BeginPos := pos('<title>', Line);
      if BeginPos > 0 then
        BeginPos := BeginPos + 7;
      EndPos := pos('(', Line);
      if EndPos = 0 then
        EndPos := Length(Line);
      Value := copy(Line, BeginPos, EndPos - BeginPos - 1);
      HTMLDecode(Value);
      if ImportOriginalTitle then
        OldOriginalTitle := GetField(fieldOriginalTitle);
      if (ImportTranslatedTitle) and Not (LeaveOriginalTitle) then
        SetField(fieldOriginalTitle, Value);
      BeginPos := pos('(', Line) + 1;
      if BeginPos > 0 then
      begin
        EndPos := Pos('/I', Line);
        if EndPos < BeginPos then
          EndPos := pos(')', Line);
        Value := copy(Line, BeginPos, EndPos - BeginPos);
        if ImportYear then
          SetField(fieldYear, Value);
      end;
    end;
  end;

  // Translated Title
  if ImportTranslatedTitle then
  begin
    OldTitleParts := TStringList.Create;
    // Tokenize OldOriginalTitle while removing certain chars/common words ("the", "of")
    Value := AnsiUpperCase(OldOriginalTitle);
    Value := StringReplace(StringReplace(Value, ',', ' '), ':', ' ');
    Value := StringReplace(StringReplace(Value, '(', ' '), ')', ' ');
    Value := StringReplace(StringReplace(Value, 'OF', ' '), 'THE', ' ');
    repeat
      Value := StringReplace(Value, '  ', ' ');
    until Pos('  ', Value) = 0;
    Value := StringReplace(Trim(Value), ' ', ',');
    // Value now contains the original title (comma-separated) that was filled in before running the script
    Value2 := '';
    for i := 1 to Length(Value) do
    begin
      if Pos(',', Copy(Value, i, 1)) = 0 then
        Value2 := Value2 + Copy(Value, i, 1);
      if (Pos(',', Copy(Value, i, 1)) = 1) or (i = Length(Value)) then
      begin
        OldTitleParts.Add(Value2); // put each comma-separated value from Value into a separate string in TitleParts
        Value2 := '';
      end;
    end;
    for i := 0 to OldTitleParts.Count - 1 do
    // Begin comparing title parts (from the title originally filled in by moviedb owner) with
    // the 'true' Original Title (extracted from IMDb) to see if it's a foreign title and needs a Translated Title
    begin
      if Pos(OldTitleParts.GetString(i), AnsiUpperCase(GetField(fieldOriginalTitle))) <= 0 then
      begin // no match, must be a foreign title
        LineNr := FindLine('Also Known As', Page, 0);
        if LineNr > -1 then
        begin
          Line := Page.GetString(LineNr);
          if Pos('Also Known As', Line) > 0 then
          begin
            BeginPos := Pos('Also Known As', Line) + 26;
            Value := Copy(Line, BeginPos, Length(Line) - BeginPos - 4);
            Value := StringReplace(Value, '<br>', '/ ');
            SetField(fieldTranslatedTitle, Value);
          end;
        end;
        Break;
      end;
    end;
    OldTitleParts.Free;
  end;

  // Rating
if ImportRating then
  begin
    LineNr := FindLine('User Rating:', Page, 0);
    if LineNr > -1 then
    begin
      Line := Page.GetString(LineNr + 4);
      if Pos('/10', Line) > 0 then
      begin
        BeginPos := pos('<b>', Line) + 3;
        Value := IntToStr(Round(StrToInt(StrGet(Line, BeginPos), 0) + (StrToInt(StrGet(Line, BeginPos + 2), 0) / 10)));
        SetField(fieldRating, Value);
      end;
    end;
  end;


  // Language
  LineNr := FindLine('Language:', Page, 0);
  if LineNr > -1 then
  begin
    Line := Page.GetString(LineNr + 1);
    BeginPos := pos('/">', Line) + 3;
    EndPos := pos('</a>', Line);
    if EndPos = 0 then
      EndPos := Length(Line);
    Value := copy(Line, BeginPos, EndPos - BeginPos);
    if ImportLanguage then
      SetField(fieldLanguages, Value);
  end;

  // Picture
  if ImportPicture then
    GetMoviePicture(Value, Page, AllTitles);
  AllTitles.Free;

// Director
if ImportDirector then
  begin
    LineNr := FindLine('Directed by', Page, 0);
    if LineNr > -1 then
    begin
      FullValue := '';
      Line := Page.GetString(LineNr + 1);
      repeat
        BeginPos := pos('">', Line) + 2;
        EndPos := pos('</a>', Line);
        Value := copy(Line, BeginPos, EndPos - BeginPos);
        if (Value <> '(more)') and (Value <> '') then
        begin
          if FullValue <> '' then
            FullValue := FullValue + ', ';
          FullValue := FullValue + Value;
        end;
        Delete(Line, 1, EndPos);
      until Pos('</a>', Line) = 0;
      HTMLDecode(FullValue);
      SetField(fieldDirector, FullValue);
    end;
  end;


  // Actors
  if ImportActors then
  begin
    LineNr := FindLine('ast overview', Page, 0);
    if LineNr = -1 then
      LineNr := FindLine('redited cast', Page, 0);
    if LineNr > -1 then
    begin
      FullValue := '';
      Line := Page.GetString(LineNr);
      repeat
        BeginPos := Pos('<td valign="top">', Line);
        if BeginPos > 0 then
        begin
          Delete(Line, 1, BeginPos);
          Line := copy(Line, 25, Length(Line));
          BeginPos := pos('">', Line) + 2;
          EndPos := pos('</a>', Line);
          if EndPos = 0 then
            EndPos := Pos('</td>', Line);
          Value := copy(Line, BeginPos, EndPos - BeginPos);
          if (Value <> '(more)') and (Value <> '') then
          begin
            BeginPos := pos('.... </td><td valign="top">', Line);
            if BeginPos > 0 then
            begin
              EndPos := pos('</td></tr>', Line);
              BeginPos := BeginPos + 27;
              Value2 := copy(Line, BeginPos, EndPos - BeginPos);
              if Value2 <> '' then
              begin
                Value := Value + ' (as ' + Value2 + ')';
              end;
            end;
            if FullValue <> '' then
              FullValue := FullValue + ', ';
            FullValue := FullValue + Value;
          end;
          EndPos := Pos('</td></tr>', Line);
          Delete(Line, 1, EndPos);
        end else
        begin
          Line := '';
        end;
      until Line = '';
      HTMLDecode(FullValue);
      SetField(fieldActors, FullValue);
    end;
  end;

  //Country
  if ImportCountry then
  begin
    LineNr := FindLine('Country:', Page, 0);
    if LineNr > -1 then
    begin
      Line := Page.GetString(LineNr + 1);
      BeginPos := pos('/">', Line) + 3;
      EndPos := pos('</a>', Line);
      Value := copy(Line, BeginPos, EndPos - BeginPos);
      HTMLDecode(Value);
      SetField(fieldCountry, Value);
    end;
  end;

  // Category
  if ImportCategory then
  begin
    LineNr := FindLine('Genre:', Page, 0);
    if LineNr > -1 then
    begin
      Line := Page.GetString(LineNr + 1);
      BeginPos := pos('/">', Line) + 3;
      EndPos := pos('</a>', Line);
      Value := copy(Line, BeginPos, EndPos - BeginPos);
      HTMLDecode(Value);
      SetField(fieldCategory, Value);
    end;
  end;

  //Description
if ImportDescription then
  begin
    LineNr := FindLine('Plot Summary:', Page, 0);
    if LineNr < 1 then
      LineNr := FindLine('Plot Outline:', Page, 0);
    if LineNr > -1 then
    begin
      Line := Page.GetString(LineNr);
      BeginPos := pos('</b>', Line) + 5;
      EndPos := pos('<a href', Line);
      if EndPos < 1 then
      begin
        Line := Line + Page.GetString(LineNr+1);
        EndPos := pos('<br><br>', Line);
        if EndPos < 1 then
          EndPos := Length(Line);
      end;
      Value := copy(Line, BeginPos, EndPos - BeginPos);
      HTMLDecode(Value);
      if UseLongestDescIMDB then
        SetField(fieldDescription, GetDescriptions(MovieURL + 'plotsummary'))
      else
        SetField(fieldDescription, Value);
    end;
  end;

  // Comments
  if ImportComments then
  begin
    LineNr := FindLine('<b>Summary:</b>', Page, 0);
    if LineNr > -1 then
    begin
      Value := '';
      repeat
        LineNr := LineNr + 1;
        Line := Page.GetString(LineNr);
        EndPos := Pos('</blockquote>', Line);
        if EndPos = 0 then
          EndPos := Length(Line)
        else
          EndPos := EndPos - 1;
        Value := Value + Copy(Line, 1, EndPos) + ' ';
      until Pos('</blockquote>', Line) > 0;
      HTMLDecode(Value);
      Value := StringReplace(Value, '<br>', #13#10);
      Value := StringReplace(Value, #13#10+' ', #13#10);
      SetField(fieldComments, Value);
    end;
  end;

  // Length
  if ImportLength then
  begin
    LineNr := FindLine('Runtime:', Page, 0);
    if LineNr > -1 then
    begin
      Line := Page.GetString(LineNr + 1);
      EndPos := pos(' min', Line);
      if EndPos = 0 then
        EndPos := pos('  /', Line);
      if EndPos = 0 then
        EndPos := Length(Line);
      if Pos(':', Line) < EndPos then
        BeginPos := Pos(':', Line) + 1
      else
        BeginPos := 1;
      Value := copy(Line, BeginPos, EndPos - BeginPos);
      SetField(fieldLength, Value);
    end;
  end;
end;

procedure GetMoviePicture(Language: string; Page, AllTitles: TStringList);
var
  Line, Value, Value2, Aka, PictureAddress: string;
  AmazonPage: TStringList;
  FoundOnAmazon, PickTreeSelected, PictureAvailable: Boolean;
  TitleRef, ImgRef, NoImage: string;
  LineNr, BeginPos, EndPos, PickTreeCount, ParagraphIndex, Index, TitleLine, LastMatch: Integer;
begin
  FoundOnAmazon := False;

  if ImportLargePicture then
  begin
    // Find Alternate Titles for Movies which are not in English
    Aka := '';
    if Language <> 'English' Then
    begin
      LineNr:= FindLine('Also Known As',Page,0);
      EndPos:=0;
      if LineNr > -1 then
      begin
        Line := Page.GetString(LineNr);
        repeat
          Aka:=FindValue('<br>','<br>',Page,LineNr,Line);
          if Aka <> '' then
          begin
            BeginPos:=1;
            EndPos:=Pos('(',Line);
            if EndPos = 0 then
              EndPos := Length(Aka);
            Value := copy(Aka, BeginPos, EndPos - BeginPos - 1);
            Value:=TransFormIMDBTitle(Value);
            AllTitles.Add(Value);
          end;
        until (Pos('Runtime',Line) > 0) or (Pos('MPAA',Line) > 0 );
      end;
    end;
 
    TitleRef:='dvd>';
    ImgRef:='dvd><img';
    NoImage:='/icons/dvd-no-image.gif';
    LineNr := FindLine('title="DVD available at Amazon.com"', Page, 0);
    if LineNr = -1 then
    begin
      LineNr := FindLine('title="VHS available at Amazon.com"', Page, 0);
      if LineNr > -1 then
      begin
        TitleRef:='video>';
        ImgRef:='video><img';
        NoImage:='/icons/video-no-image.gif';
      end;
    end;
 
    if LineNr > -1 then
    begin
      Line := Page.GetString(LineNr);
      BeginPos := Pos('href="', Line) + 5;
      Delete(Line, 1, BeginPos);
      EndPos := Pos('"', Line);
      Value := Copy(Line, 1, EndPos - 1);
      AmazonPage := TStringList.Create;
      AmazonPage.Text := GetPage('http://us.imdb.com' + Value);
 
      // Original Title
      Value2 := AllTitles.GetString(0);
      Value2 := TransFormIMDBTitle(Value2);
 
      PickTreeClear;
      PickTreeCount := 0;
      PickTreeAdd('Available Titles for matching a picture to: ' + Value2, '');
 
      ParagraphIndex := 1;
      LineNr := 0;
      LastMatch := -1;
      TitleLine := -1;
      repeat
        LineNr := FindLine('<b>'+IntToStr(ParagraphIndex)+'.', AmazonPage, LineNr);
 
        if LineNr > -1 then
        begin
          TitleLine:=LineNr;
          Value:='';
          PictureAvailable:=False;
          repeat
            TitleLine:=TitleLine +1;
            Line:= AmazonPage.GetString(TitleLine);
            BeginPos:=0;
            if Pos(TitleRef,Line) > 0 then
            begin
              if Pos(ImgRef,Line) = 0 then
              begin
                for Index:=0 to AllTitles.Count -1 do
                begin
                  Value2:=AllTitles.GetString(Index);
                  BeginPos:=Pos(Value2,Line);
                  if BeginPos > 0 then
                    Break;
                end;
                // Match not found
                if BeginPos = 0 then
                begin
                  BeginPos:=Pos(TitleRef,Line)+Length(TitleRef);
                  EndPos:=Pos('</a>',Line);
                  Value:=Copy(Line,BeginPos,EndPos-BeginPos);
                end;
              end
              else
              begin
                PictureAvailable:=(Pos(NoImage,Line) = 0);
                PictureAddress:=IntToStr(TitleLine);
              end;
            end;
            if BeginPos > 0 then
              Break;
          until (Pos('</table>',Line ) > 0);
 
          // Try to Find a Title Match
          if Pos(Value2,Line) > 0 then
          begin
            // Compare Current Title to Original
            BeginPos := Pos(TitleRef, Line) + Length(TitleRef) -1;
            Delete(Line, 1, BeginPos);
            EndPos:= Pos('(',Line);
            if EndPos = 0 Then
              EndPos := Pos('</a>', Line);
            Value := Copy(Line, 1, EndPos - 1);
            Value:= Trim(Value);
            if Value = Value2 then
            begin
              if PictureAvailable then
                LastMatch:=LineNr;
                //Break
            end;
          end;
          if PictureAvailable then
          begin
            PickTreeAdd(Value,PictureAddress);
            PickTreeCount:=PickTreeCount+1;
          end;
        end;
        ParagraphIndex:=ParagraphIndex+1;
      until (LineNr = -1);
      LineNr:=LastMatch;
      if (LineNr = -1) then
      begin
        // Handle Amazon Page Redirection(s)
        LineNr:= FindLine('You clicked on this item',AmazonPage,0);
        if (LineNr = -1) then
          LineNr:=FindLine('Customers who bought',AmazonPage,0);
        // Display the Picture Selection Window
        if (LineNr = -1) and ManualPictureSelect and (PickTreeCount > 0) then
        begin
          PickTreeSelected:=PickTreeExec(PictureAddress);
          if PickTreeSelected then
            LineNr:=StrToInt(PictureAddress,0);
        end;
        if (LineNr > -1 ) then
        begin
          LineNr := FindLine('src="http://images.amazon.com/images/P/',AmazonPage, LineNr);
          if not PickTreeSelected then
            TitleLine:= FindLine('/exec/obidos/ASIN/',AmazonPage, 0);
          if (LineNr > TitleLine) then
            LineNr:=-1
          if LineNr > -1 then
          begin
            Line := AmazonPage.GetString(LineNr);
            BeginPos := Pos('src="http://images.amazon.com/images/P/', Line) + 4;
            Delete(Line, 1, BeginPos);
            EndPos := Pos('"', Line);
            Value := Copy(Line, 1, EndPos - 1);
            Value := StringReplace(Value, 'TZZZZZZZ', 'LZZZZZZZ');
            Value := StringReplace(Value, 'THUMBZZZ', 'LZZZZZZZ');
            GetPicture(Value, ExternalPictures);
            FoundOnAmazon := True;
          end;
        end;
      end
      else
      begin
        LineNr := FindLine('http://images.amazon.com/images/P/', AmazonPage, LineNr);
        if LineNr < TitleLine then
        begin
          Line := AmazonPage.GetString(LineNr);
          BeginPos := Pos('src="', Line) + 4;
          Delete(Line, 1, BeginPos);
          EndPos := Pos('"', Line);
          Value := Copy(Line, 1, EndPos - 1);
          Value := StringReplace(Value, 'THUMBZZZ', 'LZZZZZZZ');
          GetPicture(Value, ExternalPictures);
          FoundOnAmazon := True;
        end;
      end;
      AmazonPage.Free;
    end;
  end; // if ImportLargePicture

  if not FoundOnAmazon then
  begin
    {  not found on Amazon, so taking what's available directly on IMDB.
       if we are lucky, a picture from amazon but directly linked in the page  }
    LineNr := FindLine('<img alt="cover" align="left" src="http://ia.imdb.com/media/imdb/', Page, 0);
    if LineNr < 0 then
      LineNr := FindLine('<img alt="cover" align="left" src="http://posters.imdb.com/', Page, 0);
    if LineNr < 0 then
      LineNr := FindLine('<img alt="cover" align="left" src="http://images.amazon.com/', Page, 0);
    if LineNr > -1 then
    begin
      Line := Page.GetString(LineNr);
      BeginPos := pos('src="', Line) + 4;
      Delete(Line, 1, BeginPos);
      EndPos := pos('"', Line);
      Value := copy(Line, 1, EndPos - 1);
      Value := StringReplace(Value, 'MZZZZZZZ', 'LZZZZZZZ'); // change URL to get the Large instead of Small image
      GetPicture(Value, ExternalPictures);
    end;
  end;
end;

function TransformTitle(Title: string): string;
var
  BeginPos, EndPos: Integer;
  Value: string;
  Words: array of string;
  Articles: array of string;
  Replace,Original: string;
  Index, CommaCount: Integer;
Begin
  // Original Title
  Result:=Title;

  Setarraylength(Words,11);
  Words[0]:=' In ';
  Words[1]:=' On ';
  Words[2]:=' Of ';
  Words[3]:=' As ';
  Words[4]:=' The ';
  Words[5]:=' At ';
  Words[6]:=' And A ';
  Words[7]:=' And ';
  Words[8]:=' An ';
  Words[9]:=' To ';
  Words[10]:=' For ';

  SetArrayLength(Articles,35);
  Articles[0]:=' The';
  Articles[1]:=' a';
  Articles[2]:=' An';
  Articles[3]:=' Le';
  Articles[4]:=' L''';
  Articles[5]:=' Les';
  Articles[6]:=' Der';
  Articles[7]:=' Das';
  Articles[8]:=' Die';
  Articles[9]:=' Des';
  Articles[10]:=' Dem';
  Articles[11]:=' Den';
  Articles[12]:=' Ein';
  Articles[13]:=' Eine';
  Articles[14]:=' Einen';
  Articles[15]:=' Einer';
  Articles[16]:=' Eines';
  Articles[17]:=' Einem';
  Articles[18]:=' Il';
  Articles[19]:=' Lo';
  Articles[20]:=' La';
  Articles[21]:=' I';
  Articles[22]:=' Gli';
  Articles[23]:=' Le';
  Articles[24]:=' Uno';
  Articles[25]:=' Una';
  Articles[26]:=' Un''';
  Articles[27]:=' O';
  Articles[28]:=' Os';
  Articles[29]:=' As';
  Articles[30]:=' El';
  Articles[31]:=' Los';
  Articles[32]:=' Las';
  Articles[33]:=' Unos';
  Articles[34]:=' Unas';

  // Count the Comma in The Title
  CommaCount := 0;
  EndPos := 0;
  Value := Title;
  repeat
     BeginPos := Pos(',', Value);
     if BeginPos > 0 then
     begin
       Delete(Value, 1, BeginPos);
       CommaCount := CommaCount + 1;
       EndPos := EndPos + BeginPos;
     end;
  until( Pos(',',Value) = 0);

  // Compare the Article to a list of known ones
  for Index := 0 to 34 do
  begin
    if Pos(Articles[Index], Value) <> 0 then
    begin
       CommaCount := 1;
       BeginPos := EndPos;
       Break;
    end;
  end;

  if (BeginPos > 0) and (CommaCount = 1) then
  begin
    Value := Copy(Title, BeginPos + 1, Length(Title));
    Value := Trim(Value);
    Result := Value + ' ' + Copy(Title, 1, BeginPos - 1);
  end;

  BeginPos := Pos(': ', Result);
  if BeginPos > 0 then
    Result := StringReplace(Result, ': ', ' - ');

  If TitleMixedCase then
     Result := AnsiMixedCase(Result, ' ')
  else
    begin
     Result := AnsiLowerCase(Result);
     Result := AnsiUpFirstLetter(Result);
    end;

  for Index := 0 to 10 do
  begin
    if Pos(Words[Index],Result) <> 0 then
    begin
      Original := Words[Index];
      Replace := AnsiLowerCase(Original);
      Result := StringReplace(Result, Original, Replace);
    end;
  end;

  Result := StringReplace(Result, ' - the ', ' - The ');
  Result := Trim(Result);
end;

function GetDescriptions(Address: string): string;
var
  Line, Value: string;
  LineNr: Integer;
  BeginPos, EndPos,Longest: Integer;
  Page: TStringList;
begin
  Result := '';
  Longest := 0;
  Page := TStringList.Create;
  Page.Text := GetPage(Address);
  LineNr := FindLine('<p class="plotpar">', Page, 0);
  while LineNr > -1 do
  begin
    Value := '';
    repeat
      Line := Page.GetString(LineNr);
      BeginPos := pos('"plotpar">', Line);
      if BeginPos > 0 then
        BeginPos := BeginPos + 10
      else
        BeginPos := 1;
      EndPos := pos('</p>', Line);
      if EndPos < 1 then
        EndPos := Length(Line) + 1;
      if Value <> '' then
        Value := Value + ' ';
      Value := Value + copy(Line, BeginPos, EndPos - BeginPos);
      LineNr := LineNr + 1;
    until (pos('</p>', Line) > 0) or (LineNr = Page.Count);
    HTMLDecode(Value);
    PickListAdd(Value);

    if Length(Value) > Longest then
    begin
      Result := Value;
      Longest := Length(Value);
    end;

    LineNr := FindLine('<p class="plotpar">', Page, LineNr);
  end;
  Page.Free;
end;

function AddMoviesTitles(Page: TStringList; var LineNr: Integer): String;
var
  Line: string;
  MovieTitle, MovieAddress: string;
  StartPos: Integer;
begin
  repeat
    LineNr := LineNr + 1;
    Line := Page.GetString(LineNr);
    StartPos := pos('="', Line);
    if StartPos > 0 then
    begin
      Startpos := Startpos + 2;
      MovieAddress := copy(Line, StartPos, pos('">', Line) - StartPos);
      StartPos := pos('">', Line) + 2;
      MovieTitle := copy(Line, StartPos, pos('</A>', Line) - StartPos);
      HTMLDecode(Movietitle);
      if Length(Result) <= 0 then
        Result := 'http://us.imdb.com' + MovieAddress;
    end;
  until pos('</OL>', Line) > 0;
end;

procedure AnalyzePageCulturalia(Address: string);
var
  Page: TStringList;
  LineNr: Integer;
  Code, Title, TitleOrig, Year: string;
begin
  Page := TStringList.Create;
  Page.Text := GetPage(Address);
  if Pos('No se ha encontrado ningún artículo por título', Page.Text) > 0 then
  begin
    ShowMessage('No se ha encontrado ninguna coincidencia por título');
  end else
  begin
    PickTreeClear;
    LineNr := 1;
    Page.Text := StringReplace(Page.Text, '<br>', #13#10);
    PickTreeAdd('Search results:', '');
    while LineNr + 3 < Page.Count do
    begin
      Code := GetValueAfter(Page.GetString(LineNr), 'Codigo = ');
      Title := GetValueAfter(Page.GetString(LineNr+1), 'Titulo = ');
      TitleOrig := GetValueAfter(Page.GetString(LineNr+2), 'Titulo original = ');
      Year := GetValueAfter(Page.GetString(LineNr+3), 'Año = ');
      PickTreeAdd(Title + ' (' + TitleOrig + '), ' + Year, BaseURLCulturalia + '?catalogo=1&codigo=' + Code);
      LineNr := LineNr + 5;
    end;
    Page.Free;
    if PickTreeExec(Address) then
      AnalyzeMoviePageCulturalia(Address);
  end;
end;

procedure AnalyzeMoviePageCulturalia(Address: string);
var
  Page: TStringList;
  Comments: string;
  strTitle: string;
  strSinopsis: string;
  Line: string;
  LineNr: Integer;
  tmp: string;
begin
  Page := TStringList.Create;
  Page.Text := StringReplace(GetPage(Address), '<br><br>', #13#10);
  Page.Text := StringReplace(Page.Text, '<br>', #13#10);
  strTitle := GetValueAfter(Page.GetString(1), 'Titulo = ');
  if copy(strTitle, Length(strTitle), Length(strTitle)) = '.' then
  begin
    tmp := Copy(strTitle, 1, Length(strTitle) -1);
  end else
  begin
    tmp := strTitle;
  end;
  SetField(fieldTranslatedTitle, TransformTitle(tmp));
  tmp := GetValueAfter(Page.GetString(2), 'Titulo original = ');
  SetField(fieldOriginalTitle, TransformTitle(tmp));
  SetField(fieldYear, GetValueAfter(Page.GetString(3), 'Año = '));
  SetField(fieldCategory, GetValueAfter(Page.GetString(4), 'Genero = '));
  SetField(fieldCountry, GetValueAfter(Page.GetString(5), 'Nacion = '));
  SetField(fieldDirector, GetValueAfter(Page.GetString(6), 'Director = '));
  SetField(fieldActors, GetValueAfter(Page.GetString(7), 'Actores = '));
  SetField(fieldProducer, GetValueAfter(Page.GetString(8), 'Productor = '));
  Comments := 'Guión: ' + GetValueAfter(Page.GetString(9), 'Guion = ');
  Comments := Comments + #13#10 + 'Fotografía: ' + GetValueAfter(Page.GetString(10), 'Fotografia = ');
  Comments := Comments + #13#10 + 'Música: ' + GetValueAfter(Page.GetString(11), 'Musica = ');
  SetField(fieldComments, Comments);
  LineNr := FindLine('Sinopsis = ', Page, 0);
  Line := Page.GetString(LineNr);
  strSinopsis := GetValueAfter(Line, 'Sinopsis = ');
  LineNr := LineNr + 1;
  Line := Page.GetString(LineNr);
  while pos('URL = ', Line) = 0 do
  begin
    strSinopsis := strSinopsis + #13#10 + Line;
    LineNr := LineNr + 1;
    Line := Page.GetString(LineNr);
  end
  HTMLRemoveTags(strSinopsis);
  SetField(fieldDescription, StringReplace(StringReplace(strSinopsis, '“', '"'), '”', '"'));
  LineNr := FindLine('URL = ', Page, 0);
  if LineNr <> -1 then
    SetField(fieldURL, GetValueAfter(Page.GetString(LineNr), 'URL = '));
  LineNr := FindLine('Imagen = ', Page, 0);
  if LineNr <> -1 then

    CulturaliaPicture:=GetValueAfter(Page.GetString(LineNr), 'Imagen = ');
//    GetPicture(CulturaliaPicture, False);

  Page.Free;
end;

function GetValueAfter(Line, Identifier: string): string;
begin
  if Pos(Identifier, Line) = 1 then
    Result := Copy(Line, Length(Identifier)+1, Length(Line))
  else
    Result := '';
end;


procedure AnalyzePageMetropoli(Address: string);
var
  Page: TStringList;
  LineNr: Integer;
  Code: string;
begin
  Page := TStringList.Create;

  Page.Text := GetPage(Address);
  if Pos('No se han encontrado resultados', Page.Text) > 0 then
  begin
    MetropoliPicture:='';
  end else
  begin

    LineNr := 1;
    Page.Text := StringReplace(Page.Text, '<br>', #13#10);

 while LineNr < Page.Count do
   
   begin
     Code := GetValueBetween(Page.GetString(LineNr), 'a href="4planti.php?id=','"');
     LineNr := LineNr + 1;
     if Code<>'' then break;
    end;

     Page.Free;
  
    MetropoliPicture:=BaseURLMetropoli + '4planti.php?id=' + code ;
   
  end;
end;


procedure AnalyzeMoviePageMetropoli(Address: string);
var
  Page: TStringList;
  LineNr,i: Integer;
  Code: string;
begin

    i:=0;
    Page := TStringList.Create;
    Page.Text := GetPage(Address);
    LineNr := 1;
    Page.Text := StringReplace(Page.Text, '<br>', #13#10);

 while LineNr < Page.Count do
    begin

     Code := GetValueBetween(Page.GetString(LineNr), 'pgrande.php?image_id=','"');

     if Code<>'' then
     begin
     i:=i+1;
     PickTreeAdd('carteles.metropoliglobal.com ('+ IntToStr(i)+')',BaseURLMetropoli+'pgrande.php?image_id='+code);
     end;
     LineNr := LineNr + 1;

    end;

    Page.Free;


end;

procedure AnalyzeImagePageMetropoli  (Address: string);
var

 Page: TStringList;
 LineNr: Integer;
 code: string;
begin
    Page := TStringList.Create;
    Page.Text := GetPage(Address);
    Page.Text := StringReplace(Page.Text, '<br>', #13#10);
    LineNr:=FindLine('img src=".',page,0);
    Code := GetValueBetween(Page.GetString(LineNr), 'img src="./','"');
    GetPicture(BaseURLMetropoli+code, False);
end;


procedure ChooseImage;
var
Address: string;
begin

PickTreeClear

PickTreeAdd('carteles disponibles:', '');


if ImportMetropoliImage=true then
begin

if MetropoliPicture<>'' then AnalyzeMoviePageMetropoli(MetropoliPicture);
if culturaliaPicture<>'' then  PickTreeAdd('culturalianet.com ',  culturaliaPicture);

if PickTreeExec(Address) then
begin

if  pos(BaseURLMetropoli,address)<>0  then
AnalyzeImagePageMetropoli(Address)
else
GetPicture(Address, False);

end;

end else GetPicture(culturaliaPicture, False);

end;


function GetValueBetween(Line, tleft,tright:string): string;
var
position:integer;
begin
position:=Pos(tleft, Line);

  if position <> 0 then
    begin
    Result := Copy(Line, Length(tleft)+position,Length(Line));
     position:=Pos(tright, result);
    Result := Copy(result, 1,position-1);
  end else
    Result := '';


end;


begin
  SetArrayLength(Articles,11);
  Articles[0]:='Lo ';
  Articles[1]:='La ';
  Articles[2]:='Le ';
  Articles[3]:='Uno ';
  Articles[4]:='Una ';
  Articles[5]:='Un ';
  Articles[6]:='El ';
  Articles[7]:='Los ';
  Articles[8]:='Las ';
  Articles[9]:='Unos ';
  Articles[10]:='Unas ';

  CulturaliaPicture:='' ;
  MetropoliPicture:='';

  

if CheckVersion(3,4,0) then
   begin
    MovieName := GetField (fieldTranslatedTitle);
       if MovieName = '' then
    MovieName := GetField(fieldOriginalTitle);
    if MovieName = '' then
      Input('Importar de Culturalia', 'Introduce el Titulo de la Pelicula:', MovieName);

    MovieName:=AnsiLowerCase(MovieName);
    MovieName:=AnsiMixedCase(MovieName,' ');

    If MovieName <> '' then
      begin

        // Eliminate spanish article if exists
        for Index := 0 to 10 do
        begin
         if Pos(Articles[Index], MovieName) <> 0 then
         MovieName := copy(MovieName, length(Articles[Index]), length(MovieName));
        end;

        // Eliminate point(s) at final of MovieName before search
        tmp := MovieName;
        if Copy(tmp, Length(tmp), Length(tmp)) = '.' then
        MovieName := Copy(tmp, 1, Length(tmp) -1);

        AnalyzePageCulturalia(BaseURLCulturalia + '?catalogo=1&texto=' + UrlEncode(MovieName) + '&donde=3');
        AnalyzePageIMDB('http://us.imdb.com/Tsearch?title='+UrlEncode(GetField(fieldOriginalTitle)));
        if GetField (fieldTranslatedTitle) <>''  then MovieName :=  GetField (fieldTranslatedTitle);
        if ImportMetropoliImage then AnalyzePageMetropoli(BaseURLMetropoli + '4resultados.php' + '?titulo=' + UrlEncode(MovieName) + '&&director=&&interpretes=&&Submit=Buscar');
        ChooseImage;
        DisplayResults;
      end;
   end else
     ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.4.0)');
end.
un saludo.

Posted: 2003-11-25 19:35:56
by antp
Hi,
I prefer that topics are in English. French is an exception because I can understand it ;)

Posted: 2003-11-26 14:02:32
by folgui
lagarto has modified the culturalia+imdb (single) script. He has added an option to choose between downloading the movie picture from culturalia or from http://carteles.metropoliglobal.com where they have better quality (large pic).

Good job lagarto, personally i won't use it (prefer to add my pics manually), but other people would be interested.

Regards, folgui

Posted: 2003-12-25 17:01:59
by KaBeCi
hola, los carteles de http://carteles.metropoliglobal.com estan bueniiiisimos, excelente calidad, no conocia la pagina. Lo que si, el script no funciona, por lo menos en mi PC. Lo probe con Get Information -> From Script y desde Tool -> Scripting. Y Siempre hace lo mismo: se fija los carteles, me da a elejir, corre el resto del script y termina OK, pero el cartel no está. Si elijo el cartel de culturalia, anda bien. 1ro pensé que podia tener algo que ver con el uso externo los carteles (yo los guardo afuera del catalogo, ExternalPictures=True), pero parece que no porque probe guardarlo adentro del AMC y tampoco funcionó.

Hay 3 lineas en el script que dicen GetPicture y que en vez de usar la variable "ExternalPictures" dicen "False"

Otra cosa, quiza sería preferible que busque los carteles al final en vez de al principio asi cuando no encuentra la pelicula en culturalia/imdb ni siquiera pierde tiempo buscando el cartel.
Gracias por el script

Traduction
Hi, Pictures at http://carteles.metropoliglobal.com are great, but the script is not working here, I tryed it with Get Information -> From Script and Tool -> Scripting and i got always the same problem: it let me choose the picture and get all the info from imdb/culturalia OK, but then the picture is not saved. It wroks fine when I choose the Culturalia picture, but when i choose the Metropoliglobal it doesnt save it (when the script is finished).

There're 3 GetPicture lines in the script that doesnt use the "ExeternalPictures" variable and instead of it, says "False"

Another thing, maybe would be better to 1st search for the movie on culturalia/imdb, and then look for the pictures, so if the movie is not found at imdb/culturalia, it doesnt wast time looking for a picture.
Thanks for the script

KABECi
gracias por tu colaboracion lagarto!!!

Posted: 2004-11-19 17:30:12
by Murnau_Vs_Buñuel
si, a mi me pasa lo mismo que dice cabezi, esta pagina de carteles esta muy bien y si funcionara el script seria lo maximo ;)

yes to my happens just like it says cabezi to me, this web of posters this very well and if worked script will be the best;)