Page 1 of 1

New script TMdb (EN) v1.0

Posted: 2011-12-10 13:01:38
by legrad

Code: Select all

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

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

[Infos]
Authors=Legrad
Title=TMdb
Description=
Site=http://www.themoviedb.org/
Language=EN
Version=1.0
Requires=3.5.1
Comments=
License=
GetInfo=1
[Options]

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

program TMdb;
var
  MovieName: string;
  MovieURL: string;


  //------------------------------------------------------------------------------------
function UpFirstLetterWord(texto:string):string;
var espaco:integer;
sst:string;
begin
texto:=AnsiUpFirstLetter(AnsiLowerCase(texto));
repeat
    espaco:=Pos(' ',texto);
    sst:=AnsiUpperCase(Copy(texto,espaco+1,1));

texto:=Copy(texto,1,espaco-1)+'/|\'+sst+Copy(texto,espaco+2,length(texto));
until Pos(' ',texto)=0;
texto := StringReplace(texto, '/|\', ' ');
if Copy(texto,1,1)=' ' then
  texto:=Copy(texto,2,length(texto));
result:=texto;
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;

//------------------------------------------------------------------------------------
                               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 c = #9 then
         c := ' ';

      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;


//------------------------------------------------------------------------------------
procedure AnalyzePage(Address: string);
var
  strPage, MovieAddr, MovieTitle, MovieDate, MovieID, Movie: string;
  BeginPos, EndPos: Integer;
  BeginPoss, EndPoss: Integer;
begin
  strPage := GetPage(Address);
  BeginPos := Pos('<h3>Movie results for', strPage);
  if(BeginPos > -1)then
    begin
      PickTreeClear;
      Delete(strPage, 1, BeginPos);
      BeginPos := Pos('<a href="/movie/', strPage);
      EndPos := 1;
      while ((BeginPos > 0) and (EndPos > 0)) do

        begin
          Delete(strPage, 1, BeginPos);
          EndPos := Pos('">', strPage);
          MovieId := Copy(strPage,+16, EndPos-16);
          MovieAddr := 'http://www.themoviedb.org/movie/' + MovieId;
          BeginPoss := Pos('">',strPage);
          EndPoss := Pos('</span>', strPage);
          MovieTitle := Copy(strPage,BeginPoss, EndPoss);
          MovieTitle  := TextBetween(MovieTitle , '">', '');
          MovieTitle  := StringReplace(MovieTitle , '  ', '');
          DeleteTags(MovieTitle);
          MovieTitle := UTF8Decode(MovieTitle);
          PickTreeAdd(MovieTitle, MovieAddr);
          PickTreeSort;
          BeginPos := Pos('<a href="/movie/', strPage);
          if(Pos('</body>', strPage) < BeginPos) then
           BeginPos := -1;
        end;

    end;
    PickTreeExec(Address)
    AnalyzeMoviePage(Address);
end;
//------------------------------------------------------------------------------------
procedure AnalyzeMoviePage(Address: string);
var
  Page: TStringList;
  LineNr: Integer;
  Line: string;
  Item: string;
  Comments: string;
  Actors: string;
  Directors: string;
  Description: string;
  Busca: integer;


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

  // URL
  SetField(fieldURL, Address);
  Page := TStringList.Create;
  Page.Text := GetPage(Address);

  // fieldTranslatedTitle
  //fieldOriginalTitle
  LineNr := FindLine('id="title"><a href="http://www.themoviedb.org/movie/', Page, 0);
  Line := Page.GetString(LineNr);
  Item := TextBetween (Line, '">', '</h2>');
  Item := TextBetween (Item, '">', '</a>');
  HTMLDecode(Item);
  SetField(fieldTranslatedTitle, Trim (Item));
  SetField(fieldOriginalTitle, Trim (Item));


  //fieldYear
  LineNr := FindLine('id="title"><a href="http://www.themoviedb.org/movie/', Page, 0);
  Line := Page.GetString(LineNr);
  Item := TextBetween (Line, '">', '</h3>');
  Item := TextBetween (Item, '(', ')');
  HTMLDecode(Item);
    SetField(fieldYear, Trim (Item));

     // fieldRating
   LineNr := FindLine('<p class="average">', Page, 0);
  Line := Page.GetString(LineNr);
  Item := TextBetween (Line, '">', '/');
  HTMLDecode(Item);
    SetField(fieldRating, Trim (Item));
    
    //fieldDescription
 LineNr := FindLine('<p><strong>Runtime:</strong> <span id="runtime">', Page, 0);
  if LineNr > 0 then
  begin
    Item := copy(Page.Text, pos('<p><strong>Runtime:</strong> <span id="runtime">',Page.Text), length(Page.Text));
    Item := TextBetween (Item, '<p><strong>Runtime:</strong> <span id="runtime">', '</span></p>');
    Item  := Trim(Item );
    HTMLDecode(Item);
    SetField(fieldLength, Trim (Item));
      end;
      
     //fieldDescription
 LineNr := FindLine('<h3>Overview</h3>', Page, 0);
  if LineNr > 0 then
  begin
    Item := copy(Page.Text, pos('<h3>Overview</h3>',Page.Text), length(Page.Text));
    Item := TextBetween (Item, '<p id="overview">', '</p>');
    Item  := Trim(Item );
    HTMLDecode(Item);
    SetField(fieldDescription, Trim (Item));
   end;

   // fieldDirector
   LineNr := FindLine('<td class="job">Director:</td>', Page, 0);
  if LineNr > 0 then
  begin
    Item := copy(Page.Text, pos('<td class="person"><a href="/person/',Page.Text), length(Page.Text));
    Item := TextBetween (Item, '">', '</td>');
    Item := TextBetween (Item, '">', '</td>');
    Item  := Trim(Item );
    Item  := DeleteTags(Item );
    HTMLDecode(Item);
    SetField(fieldDirector, Trim (Item));

     end;
     
     // fieldActors
LineNr := FindLine('<div class="castItem">', Page, 0);
  if LineNr > 0 then
  begin
    Item := copy(Page.Text, pos('<div class="castItem">',Page.Text), length(Page.Text));
    Item := TextBetween (Item, '<span class="text">', '</table>');
    Item := StringReplace (Item, '<div class="castItem">', '), ');
    Item := StringReplace (Item, ' as ', '(as ');
    Item := StringReplace (Item, #13#10, '');
    Item := StringReplace (Item, '  ', '');
    Item  := DeleteTags(Item );
    Item := StringReplace (Item, '  ),   ', '), ');
    Item := StringReplace (Item, '(', ' (');
    SetField(fieldActors,(Item));
    end;

// fieldCategory
  LineNr := FindLine('<h3>Genres</h3>', Page, 0);
  if LineNr > 0 then
  begin
    Item := copy(Page.Text, pos('<h3>Genres</h3>',Page.Text), length(Page.Text));
    Item := TextBetween (Item, '<li>', '</ul>');
    Item  := Trim(Item );
    HTMLDecode(Item);
    Item  := DeleteTags(Item );
    Item := StringReplace (Item, '    ', ', ');
    Item := StringReplace (Item, ',  ', ',');
    SetField(fieldCategory, Trim (Item));
  end;

       SetField(fieldURL, Address+'/cast');
      Page := TStringList.Create;
      Page.Text := GetPage(Address+'/cast');
      

      // fieldComments

     LineNr := FindLine('<h4>Writing</h4>', Page, 0);
  if LineNr <> -1 then
  begin
    Item := copy(Page.Text, pos('<h4>Writing</h4>',Page.Text), length(Page.Text));
    Item := TextBetween (Item, '<tr>', '</table>');
    Item := StringReplace (Item, '</tbody>', '**');
    Item := StringReplace (Item, #13#10, '');
    Item := StringReplace (Item, '<td class="job">', ' (');
    Item := StringReplace (Item, ' </tr>', '), ');
    HTMLDecode(Item);
    Item  := DeleteTags(Item );
    Item := StringReplace (Item,'  ', '');
    Item := StringReplace (Item,',', ', ');
    Item := StringReplace (Item,',  ** ', '');
    Comments := Comments + 'Writer: ' + Item +#13#10;
end;

// fieldComments

     LineNr := FindLine('<h4>Editing</h4>', Page, 0);
  if LineNr <> -1 then
  begin
    Item := copy(Page.Text, pos('<h4>Editing</h4>',Page.Text), length(Page.Text));
    Item := TextBetween (Item, '<tr>', '</table>');
    Item := StringReplace (Item, '</tbody>', '**');
    Item := StringReplace (Item, #13#10, '');
    Item := StringReplace (Item, '<td class="job">', ' (');
    Item := StringReplace (Item, ' </tr>', '), ');
    HTMLDecode(Item);
    Item  := DeleteTags(Item );
    Item := StringReplace (Item,'  ', '');
    Item := StringReplace (Item,',', ', ');
    Item := StringReplace (Item,',  ** ', '');
    Comments := Comments + 'Editing: ' + Item +#13#10;
end;


// fieldComments

     LineNr := FindLine('<h4>Sound</h4>', Page, 0);
  if LineNr <> -1 then
  begin
    Item := copy(Page.Text, pos('<h4>Sound</h4>',Page.Text), length(Page.Text));
    Item := TextBetween (Item, '<tr>', '</table>');
    Item := StringReplace (Item, '</tbody>', '**');
    Item := StringReplace (Item, #13#10, '');
    Item := StringReplace (Item, '<td class="job">', ' (');
    Item := StringReplace (Item, ' </tr>', '), ');
    HTMLDecode(Item);
    Item  := DeleteTags(Item );
    Item := StringReplace (Item,'  ', '');
    Item := StringReplace (Item,',', ', ');
    Item := StringReplace (Item,',  ** ', '');
    Comments := Comments + 'Music: ' + Item +#13#10;
end;


// fieldComments

     LineNr := FindLine('<h4>Camera</h4>', Page, 0);
  if LineNr <> -1 then
  begin
    Item := copy(Page.Text, pos('<h4>Camera</h4>',Page.Text), length(Page.Text));
    Item := TextBetween (Item, '<tr>', '</table>');
    Item := StringReplace (Item, '</tbody>', '**');
    Item := StringReplace (Item, #13#10, '');
    Item := StringReplace (Item, '<td class="job">', ' (');
    Item := StringReplace (Item, ' </tr>', '), ');
    HTMLDecode(Item);
    Item  := DeleteTags(Item );
    Item := StringReplace (Item,'  ', '');
    Item := StringReplace (Item,',', ', ');
    Item := StringReplace (Item,',  ** ', '');
    Comments := Comments + 'Camera: ' + Item +#13#10;
end;
     // fieldComments

     LineNr := FindLine('<h3>Trailers', Page, 0);
  if LineNr <> -1 then
  begin
    Item := copy(Page.Text, pos('<h3>Trailers',Page.Text), length(Page.Text));
    Item := TextBetween (Item, '/>  <a href="', '" target="_blank">');
    HTMLDecode(Item);
    Item  := DeleteTags(Item );
    Comments := Comments + 'Trailer: ' + Item +#13#10;
end;

      // fieldComments

     LineNr := FindLine('<h3>Plot Keywords</h3>', Page, 0);
  if LineNr <> -1 then
  begin
    Item := copy(Page.Text, pos('<h3>Plot Keywords</h3>',Page.Text), length(Page.Text));
    Item := TextBetween (Item, '<h3>Plot Keywords</h3>', '</div></ul>');
    Item := StringReplace (Item,#13#10, '');
    Item := StringReplace (Item,'</a></li>', ', ');
    Item := StringReplace (Item,'<div style="clear: left;">', '*');
    HTMLDecode(Item);
    Item  := DeleteTags(Item );
    Item := StringReplace (Item,', *', '');
    Comments := Comments + 'Plot Keywords:' + Item +#13#10;
end;

// fieldComments

     LineNr := FindLine('<h3>Movie Facts</h3>', Page, 0);
  if LineNr <> -1 then
  begin
    Item := copy(Page.Text, pos('<h3>Movie Facts</h3>',Page.Text), length(Page.Text));
    Item := TextBetween (Item, '<h3>Movie Facts</h3>', '<span id="homepage">');
    HTMLDecode(Item);
    Item  := DeleteTags(Item );
    Comments := Comments + #13#10+'-Movie Facts-' + Item +#13#10;
end;

// fieldComments

     LineNr := FindLine('<h3>Release Info</h3>', Page, 0);
  if LineNr <> -1 then
  begin
    Item := copy(Page.Text, pos('<h3>Release Info</h3>',Page.Text), length(Page.Text));
    Item := TextBetween (Item, '<h3>Release Info</h3>', '</ul>');
    Item := StringReplace (Item,#13#10, '');
    HTMLDecode(Item);
    Item := StringReplace (Item,'</p></li>', #13#10);
    Item  := DeleteTags(Item );
    Comments := Comments + #13#10+'-Release Info-' +#13#10+ Item;
end;

   SetField(fieldComments, Comments);
   // fieldProducer

     LineNr := FindLine('<h4>Production</h4>', Page, 0);
  if LineNr <> -1 then
  begin
    Item := copy(Page.Text, pos('<h4>Production</h4>',Page.Text), length(Page.Text));
    Item := TextBetween (Item, '<tr>', '</tbody>');
    Item := StringReplace (Item, #13#10, '');
    Item := StringReplace (Item, '<td class="job">', ' (');
    Item := StringReplace (Item, ' </tr>', '), ');
    HTMLDecode(Item);
    Item  := DeleteTags(Item );
    Item := StringReplace (Item,'  ', '');
    Item := StringReplace (Item,',', ', ');
    SetField(fieldProducer, Trim (Item));
end;

      SetField(fieldURL, Address+'/posters');
      Page := TStringList.Create;
      Page.Text := GetPage(Address+'/posters');
      
  // Cover
  LineNr := FindLine('<img src="http://cf2.imgobject.com/', Page, 0);
  if LineNr <> -1 then
  begin
    Item := copy(Page.Text, pos('<img src="http://cf2.imgobject.com/',Page.Text), length(Page.Text));
    Item := TextBetween (Item, '<img src="http://cf2.imgobject.com/', '"');
    Item := StringReplace (Item,'w185', 'original');
    HTMLDecode(Item);
    GetPicture ('http://cf2.imgobject.com/'+Item);
  end;

     end;

 //-------------------------------------------------------------------------
begin
       if (CheckVersion(3,5,0)=FALSe) then
   begin
      ShowMessage('Need Ant Movie Catalog versión 3.5 or uppèr');
      exit;
   end;

   MovieName := GetField(fieldTranslatedTitle);
   if MovieName = '' then
            MovieName := GetField(fieldOriginalTitle);
Input('TMdb', 'Search:', MovieName);

     if(GetOption('No result') = 0) then  Input('TMdb', 'Search:', MovieName);

   AnalyzePage('http://www.themoviedb.org/search?search='+UrlEncode(MovieName));
end.

Posted: 2011-12-10 16:25:46
by antp
Thanks,
I removed the "(EN)" (I should remove it from the other scripts which have that in their title, and simply display it automatically since it is already specified in the language field).
I corrected a message which was still partially in Spanish :D
I also set GetInfo to 1, why did you set it to 0?

Posted: 2015-03-23 14:23:57
by carlosmg2
can you update this script?

Posted: 2015-03-23 16:53:05
by miagula
can you? pleeeease