[IMDb (Large pic)] I want ALL actors

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
kinetix
Posts: 32
Joined: 2003-02-23 08:03:44
Location: Sweden

[IMDb (Large pic)] I want ALL actors

Post by kinetix »

I've asked before, and I now ask again...

Can someone P-L-E-A-S-E give me the code, so I can import every actor, instead of the few who are mentioned in the 'main details'.
I want the script to import the actors from 'combined deatails' (which includes every actor).

I asked this question before and the answer was given in the topic 'Another improvement...'
But now the code has been deleted and I need it again...

P-L-E-A-S-E help me....
antp
Site Admin
Posts: 9639
Joined: 2002-05-30 10:13:07
Location: Brussels
Contact:

Post by antp »

Unfortunately in my last backup of the DB it was already deleted (I should have saved this topic before cleaning old posts, it is my fault :(), and in my previous backups it was not yet written.
kinetix
Posts: 32
Joined: 2003-02-23 08:03:44
Location: Sweden

Post by kinetix »

OK.... Nothing to do about already deleted posts....

But if anyone out there is using this kind of script...
Pretty please, with sugar on the top, would you be so kind to give me a copy of it?
trekkie
Posts: 25
Joined: 2003-01-24 11:32:56

Post by trekkie »

At your request I've modified my previous script to extract all actors using the detailed IMDB page.

To do so you must change the
constant DetailedInfo at the begining of the script from FALSE to
TRUE.


Code: Select all

// GETINFO SCRIPTING
// IMDB (US) import with large picture (usually from Amazon.com)

(***************************************************
*  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>                 *
*                                                 *
*  For use with Ant Movie Catalog 3.4.0           *
*  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 IMDb;

const
  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 = True;
    { True: If no Title Match found a picture selection window appears
      False: Revert to IMDB picture }
  ImportLongDescription = True;
    { True: Automatically import the longest description
      False: Description selection window appears }
  ImportLanguage = False,
    { True: Import value of Language field }
  DetailedInfo = False;
    { True: Import Detailed Info Including All Actors }

var
  MovieName: string;
  TheMovieTitle: string;
  TheMovieAddress: 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 AnalyzePage(Address: string);
var
  Page: TStringList;
  LineNr: Integer;
  URL:String;
begin
  Page := TStringList.Create;
  Page.Text := GetPage(Address);
 
  if pos('<TITLE>IMDb', Page.Text) = 0 then
  begin
    // URL
    URL:='http://imdb.com/Title' + copy(Page.Text,pos('href="/Title?',Page.Text)+12, 8);
    If DetailedInfo Then
    Begin
       URL:= 'http://imdb.com/Details' + copy(Page.Text,pos('href="/Details?',Page.Text)+14, 8);
       Page.Text:=GetPage(URL);
    End;
    SetField(fieldURL,URL);
    AnalyzeMoviePage(Page)
  end else
  begin
    PickTreeClear;
    LineNr := 0;
    LineNr := FindLine('<H2><A NAME="top">Most popular searches</A></H2>', Page, LineNr);
    if LineNr > -1 then
    begin
      PickTreeAdd('Most popular searches', '');
      AddMoviesTitles(Page, LineNr);
    end;
    LineNr := FindLine('<H2><A NAME="mov">Movies</A></H2>', Page, LineNr);
    if LineNr > -1 then
    begin
      PickTreeAdd('Movies', '');
      AddMoviesTitles(Page, LineNr);
    end;
    LineNr := FindLine('<H2><A NAME="tvm">TV-Movies</A></H2>', Page, LineNr);
    if LineNr > -1 then
    begin
      PickTreeAdd('TV-Movies', '');
      AddMoviesTitles(Page, LineNr);
    end;
    LineNr := FindLine('<H2><A NAME="tvs">TV series</A></H2>', Page, LineNr);
    if LineNr > -1 then
    begin
      PickTreeAdd('TV Series', '');
      AddMoviesTitles(Page, LineNr);
    end;
    LineNr := FindLine('<H2><A NAME="vid">Made for video</A></H2>', Page, 0);
    if LineNr > -1 then
    begin
      PickTreeAdd('Made for video', '');
      AddMoviesTitles(Page, LineNr);
    end;
 
    //Sometimes, the IMDb sends a title in Most Popular Searches
    // and the same title in Movies.
    //TheMovieAddress and TheMovieTitle are used to choose directly
    // that one movie instead of asking the user.
    if TheMovieAddress = '' then
    begin
      if PickTreeExec(Address) then
        AnalyzePage(Address);
    end
    else
      AnalyzePage(TheMovieAddress);
  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 AnalyzeMoviePage(Page: TStringList);
var
  Line, Value, Value2, FullValue: string;
  LineNr, BeginPos, EndPos,EndTable: Integer;
  AllTitles: TStringList;
begin


  AllTitles := TStringList.Create;

  // Original Title & Year
  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);
    SetField(fieldOriginalTitle, Value);
    // IMDB original Title
    AllTitles.Add(Value);
    // IMDB Corrected Title
    Value:=TransformIMDBTitle(Value);
    AllTitles.Add(Value);
    BeginPos := pos('(', Line) + 1;
    if BeginPos > 0 then
    begin
      EndPos := pos(')', Line);
      Value := copy(Line, BeginPos, EndPos - BeginPos);
      SetField(fieldYear, Value);
    end;
  end;

  // Rating
  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;

  // 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;

  GetMoviePicture(Value, Page, AllTitles);
  AllTitles.Free;

  // Director
  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;

// Actors
  LineNr := FindLine('ast overview', Page, 0);
  if LineNr = -1 then
    LineNr := FindLine('redited cast', Page, 0);
  if LineNr = -1 then
    LineNr := FindLine('credits order', Page, 0);
  if LineNr > -1 then
  begin
    FullValue := '';
    Line := Page.GetString(LineNr);

    repeat
      BeginPos := Pos('<td valign="top">', Line);
      EndTable:=Pos('</table>',Line);

      if (BeginPos > 0) and (BeginPos < EndTable) 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
            if DetailedInfo and (Pos('Quotes?',Line) > 0 ) and 
                                (Pos('Quotes?',Line) - BeginPos < 40) Then
              BeginPos:=Pos('Quotes?',Line) + 16
            Else
              BeginPos := BeginPos + 27;

            EndPos := pos('</td></tr>', Line);
            Value2 := copy(Line, BeginPos, EndPos - BeginPos);
            HTMLRemoveTags(Value2);
            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;
  
  //Country
  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;

  //Category
  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;

  //Description
  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
      Line := Line + Page.GetString(LineNr+1);
    EndPos := pos('<a href="/Plot?', Line);
    if EndPos < 1 then
      EndPos := pos('<br><br>', Line);
    if EndPos < 1 then
      EndPos := Length(Line);
    PickListClear;
    Value := copy(Line, BeginPos, EndPos - BeginPos);
    HTMLDecode(Value);
    PickListAdd(Value);
    BeginPos := pos('/Plot?', Line);
    EndPos := pos('">(more)', Line);
    if (BeginPos <> 0) and (EndPos <> 0) then
    begin
      Value := copy(Line, BeginPos, EndPos - BeginPos);
      Value := GetDescriptions(Value);
    end;
    if not ImportLongDescription then
    begin
      Value := '';
      if PickListExec('Select a description for "' + MovieName + '"', Value) then
        SetField(fieldDescription, Value);
    end
    else
      SetField(fieldDescription, Value);
  end;

  // Comments
  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 - 2;
      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;

  // Length
  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;

  DisplayResults;
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;

  // 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;

  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 TransformIMDBTitle(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, ': ', ' - ');

  Result := AnsiMixedCase(Result, ' ');

  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('http://us.imdb.com' + 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;

procedure AddMoviesTitles(Page: TStringList; var LineNr: Integer);
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);
     
      //Remove duplicates
      if TheMovieTitle='' then
        begin
          TheMovieTitle:=MovieTitle;
          TheMovieAddress:='http://us.imdb.com' + MovieAddress;
        end
      else
        begin
          if TheMovieTitle<>'*' then
            if TheMovieTitle<>MovieTitle then
              begin
                TheMovieTitle:='*';
                TheMovieAddress:='';
              end;
        end;
      PickTreeAdd(MovieTitle, 'http://us.imdb.com' + MovieAddress);
    end;
  until pos('</OL>', Line) > 0;
end;

begin
  if CheckVersion(3,4,0) then
  begin
    TheMovieTitle:='';
    TheMovieAddress:='';
    MovieName := GetField(fieldOriginalTitle);
    if MovieName = '' then
      MovieName := GetField(fieldTranslatedTitle);

    if Input('IMDb Import', 'Enter the title of the movie:', MovieName) then
    begin
//      AnalyzePage('http://us.imdb.com/Tsearch?title='+UrlEncode(MovieName)+'&restrict=Movies+only');
      AnalyzePage('http://us.imdb.com/Tsearch?title='+UrlEncode(MovieName));
    end;
  end
  else
    ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.4.0)');
end.
Enjoy ;)
Last edited by trekkie on 2003-05-02 16:00:22, edited 1 time in total.
kinetix
Posts: 32
Joined: 2003-02-23 08:03:44
Location: Sweden

Post by kinetix »

Who's The Man?
You are! :grinking:


Thanks alot!
Really appreciate that! :clapping:

But there was one thing, that struck me as pretty wierd...
If you use this script and import the data for the movie 'Lord of the rings: Fellowship of the ring', you get all the actors... No problems with that...

But if you import the data for the movie 'A night at the Roxbury'...
The actors' characternames does not really match, and at the second half of the Actors-field, I get Link-tags in HTML-format.....

Any ideas on that??
trekkie
Posts: 25
Joined: 2003-01-24 11:32:56

Post by trekkie »

Small Bug Relating to Previous post Corrected. (Script misinterpreted Quotes Links )

Refer to the Actors Section in AnalyzeMoviePage procedure.
Post Reply