Page 1 of 1

IMDB Rating

Posted: 2008-11-19 00:24:28
by LaMaOne
Hi,

I'm having a problem with the IMDB script (version: 3.37)
It seems that the "User rating" field is no longer imported/found since recently.
I checked AMC, the Rating field is still set to modifiable so that's not it.
When I check the "Shows results window" and run the script, it properly retreives values for all fields I asked, except for the Rating.

Is anyone else experiecing this problem?

Here's the IMDB script (v3.37) that I'm using.

Code: Select all

program IMDB;

uses
  StringUtils1;

  // ***** Manually set UserCountry to your required Classification Country below *****
const
  //UserCountry = '';
  { Delete the line above and remove the "//" in front of one the
    following lines, or add your country if it is not listed }
  UserCountry = 'USA';
  //UserCountry = 'Canada';
  //UserCountry = 'Mexico';
  //UserCountry = 'Brazil';
  //UserCountry = 'Argentina';
  //UserCountry = 'Australia';
  //UserCountry = 'India';
  //UserCountry = 'Italy';
  //UserCountry = 'Spain';
  //UserCountry = 'Portugal';
  //UserCountry = 'France';
  //UserCountry = 'Germany';
  //UserCountry = 'Netherlands';
  //UserCountry = 'UK';
  //UserCountry = 'Ireland';
  //UserCountry = 'Finland';
  //UserCountry = 'Norway';
  //UserCountry = 'Sweden';
  //UserCountry = 'Switzerland';

var
  MovieName: string;
  MovieURL: string;
  MovieNumber: string;

// ***** analyzes IMDB's results page that asks to select a movie from a list *****

procedure AnalyzeResultsPage(Address: string);
var
  PageText: string;
  Value: string;
begin
  PageText := GetPage(Address);
  if pos('<title>IMDb', PageText) = 0 then
    begin
      AnalyzeMoviePage(PageText)
    end else
    begin
      if Pos('<b>No Matches.</b>', PageText) > 0 then
        begin
          if GetOption('BatchMode') = 0 then
            ShowMessage('No movie found for this search.');
          Exit;
        end;
      if GetOption('BatchMode') = 0 then
        begin
          PickTreeClear;
          repeat
            Value := TextBefore(PageText, '</b> (Displaying', '<p><b>');
            if Value <> '' then
            begin
              HTMLRemoveTags(Value);
              HTMLDecode(Value);
              PickTreeAdd(Value, '');
            end;
            Value := TextBetween(PageText, '<table><tr>', '</table>');
            PageText := RemainingText;
          until not AddMovieTitles(Value);
          Value := TextBefore(PageText, '"><b>more titles</b></a>', '<a href="');
          if Value <> '' then
            PickTreeMoreLink('http://us.imdb.com' + Value);
          if PickTreeExec(Address) then
            AnalyzeResultsPage(Address);
        end
      else
        begin
          Value := TextBetween(PageText, '.</td><td valign="top">', '</a>');
          if Value <> '' then
            AnalyzeResultsPage(TextBetween(Value, '<a href="', '">'));
        end;
    end;
end;

// ***** analyzes Google's results page that asks to select a movie from a list *****

procedure AnalyzeGooglesResultsPage(GoogleAddress: string);
var
  PageText: string;
  Value: string;
  Address: string;
begin
  PageText := GetPage(GoogleAddress);
  Address := '';
  if Pos('did not match any documents', PageText) > 0 then
    begin
      if GetOption('BatchMode') = 0 then
        ShowMessage('No movie found for this search');
        Exit;
    end;
  if GetOption('BatchMode') = 0 then
    begin
      PickTreeClear;
      PickTreeAdd('Google`s search results for "' + MovieName + '" on IMDB', '');
      repeat
        Value := TextBetween(PageText, '<h2 class=r>', '</a>');
        PageText := RemainingText;
        Address := TextBetween(Value, '<a href="', 'maindetails"');
        if (GetOption('AllActors') = 1) or (GetOption('Producer') = 1) then
          Address := Address + 'combined';
        HTMLRemoveTags(Value);
        HTMLDecode(Value);
        if (Pos(') - ', Value) = 0) and (Value <> '') then
          PickTreeAdd(Value, Address);
      until Value = '';
      if PickTreeExec(GoogleAddress) then
        AnalyzeResultsPage(GoogleAddress);
    end
  else
    begin
      Value := TextBetween(PageText, '<h2 class=r>', '</a>');
      if Value <> '' then
        AnalyzeResultsPage(TextBetween(Value, '<a href="', 'maindetails"'));
    end;
end;

// ***** adds the movie titles found on IMDB's results page *****

function AddMovieTitles(List: string): Boolean;
var
  Value: string;
  Address: string;
begin
  Result := False;
  if GetOption('HideAkaTitles') = 1 then
    Value := TextBetween(List, '.</td><td valign="top">', ')<')
  else
    begin
      Value := TextBetween(List, '.</td><td valign="top">', '</td>');
      Value := StringReplace(Value, 'aka', ' | aka');
    end;
  List := RemainingText;
  while Value <> '' do
  begin
    Address := TextBetween(Value, '<a href="/title/tt', '/');
    if (GetOption('AllActors') = 1) or (GetOption('Producer') = 1) then
      Address := Address + '/combined'
    else
      Address := Address + '/';
    HTMLRemoveTags(Value);
    HTMLDecode(Value);
    if GetOption('HideAkaTitles') = 1 then
      Value := Value + ')';
    PickTreeAdd(Value, 'http://us.imdb.com/title/tt' + Address);
    Result := True;
    if GetOption('HideAkaTitles') = 1 then
      Value := TextBetween(List, '.</td><td valign="top">', ')<')
    else
      begin
        Value := TextBetween(List, '.</td><td valign="top">', '</td>');
        Value := StringReplace(Value, 'aka', ' | aka');
      end;
    List := RemainingText;
  end;
end;

// ***** analyzes the page containing movie information *****

procedure AnalyzeMoviePage(PageText: string);
var
  Value, Value2, Value3, FullValue: string;
  p, Count: Integer;
begin
  MovieNumber := TextBetween(PageText, '<input type="hidden" name="auto" value="legacy/title/tt', '/"><input');
  if MovieNumber = '' then
    MovieNumber := TextBetween(PageText, '<input type="hidden" name="auto" value="legacy/title/tt', '/combined"><input');
  if ((GetOption('AllActors') = 1) or (GetOption('Producer') = 1)) and (Pos('<div id="tn15" class="maindetails">', PageText) > 0) then
    PageText := GetPage('http://us.imdb.com/title/tt' + MovieNumber + '/combined');
  MovieURL := 'http://imdb.com/title/tt' + MovieNumber;
  // URL
  if CanSetField(fieldURL) then
    SetField(fieldURL, MovieURL);
  // OriginalTitle & Year
  if CanSetField(fieldOriginalTitle) or CanSetField(fieldYear) then
  begin
    Value := TextBetween(PageText, '<title>', '</title>');
    Value2 := TextBefore(Value, ' (', '');
    Value := RemainingText;
    HTMLDecode(Value2);
    if CanSetField(fieldOriginalTitle) then
      SetField(fieldOriginalTitle, Value2);
    if Pos('/', Value) > 0 then
      Value2 := TextBefore(Value, '/', '')
    else
      Value2 := TextBefore(Value, ')', '');
    if CanSetField(fieldYear) then
      SetField(fieldYear, Value2);
  end;
  // Rating
  if CanSetField(fieldRating) then
  begin
//   (Remove the "//" of the next two lines beginning with "Value" and add "//"
//    to the following two lines if you would like to import arithmetic ratings
//    instead of IMDB's user ratings)
//    Value := GetPage(MovieURL + '/ratings');
//    Value := TextBetween(Value, 'Arithmetic mean = ', '. ');
    Value := TextBetween(PageText, '<b>User Rating:</b>', '<br/>');
    Value := TextBetween(Value, '<b>', '/');
    if Value <> '' then
      SetField(fieldRating, Value);
  end;
  // Picture
  if CanSetPicture then
  begin
    case GetOption('ImageKind') of
      4:  if not ImportMerchandisingPicture then
              if not ImportDvdDetailsPicture then
                ImportSmallPicture(PageText);
      5:  if not ImportDvdDetailsPicture then
              if not ImportMerchandisingPicture then
                ImportSmallPicture(PageText);
    else
      ImportSmallPicture(PageText);
    end;
  end;
  // Director
  if CanSetField(fieldDirector) then
  begin
    Value := TextBetween(PageText, '<h5>Director', '</div>');
    Value := StringReplace(TextBetween(Value, #13#10, #13#10), '<br/><a', ', <a');
    HTMLRemoveTags(Value);
    HTMLDecode(Value);
    Value := StringReplace(Value, ', more', '');
    Value := StringReplace(Value, ', (more)', '');
    SetField(fieldDirector, Value);
  end;
  // Actors
  if CanSetField(fieldActors) then
  begin
    Value := Trim(TextBetween(PageText, '<table class="cast">', '</table>'));
    if Value <> '' then
    begin
      FullValue := '';
      Count := 0;
      case GetOption('ActorsLayout') of
        0, 1:
          while Pos('<tr', Value) > 0 do
          begin
            Value2 := TextBetween(Value, '<tr', '</tr>');
            Value := RemainingText;
            if Pos('rest of cast', Value2) > 0 then
              Continue;
            if FullValue <> '' then
              FullValue := FullValue + #13#10;
            TextBefore(Value2, '</td>', '');
            Value2 := Trim(TextBetween(RemainingText, '/">', '</a>'));
            if Value2 <> '' then
            begin
              FullValue := FullValue + Value2;
              Count := Count + 1;
            end;
            if (Count = 10) and (GetOption('AllActors') = 2) then
              Break;
          end;
        2, 3:
          while Pos('<tr', Value) > 0 do
          begin
            Value2 := TextBetween(Value, '<tr', '</tr>');
            Value := RemainingText;
            if Pos('rest of cast', Value2) > 0 then
              Continue;
            if FullValue <> '' then
              FullValue := FullValue + #13#10;
            TextBefore(Value2, '</td>', '');
            Value2 := Trim(TextBetween(RemainingText, '/">', '</a>'));
            if Value2 <> '' then
            begin
              FullValue := FullValue + Value2;
              Value2 := Trim(TextBetween(RemainingText, '"char">', '</td>'));
              if Value2 <> '' then
                FullValue := FullValue + ' (as ' + Value2 + ')';
              Count := Count + 1;
              if (Count = 10) and (GetOption('AllActors') = 2) then
                Break;
            end;
          end;
        4:
          begin
            FullValue := Value;
            FullValue := StringReplace(FullValue, ' <tr><td align="center" colspan="4"><small>rest of cast listed alphabetically:</small></td></tr>', '');
            FullValue := StringReplace(FullValue, '</tr>', #13#10);
          end;
      end;
      HTMLRemoveTags(FullValue);
      HTMLDecode(FullValue);
      case GetOption('ActorsLayout') of
        0, 2:
          FullValue := StringReplace(FullValue, #13#10, ', ');
      end;
      SetField(fieldActors, FullValue);
    end;
  end;
  //Country
  if CanSetField(fieldCountry) then
  begin
    SetField(fieldCountry, ImportList(PageText, GetOption('MultipleValuesCountry'), '/Countries/'));
  end;
  //Category
  if CanSetField(fieldCategory) then
  begin
    SetField(fieldCategory, ImportList(PageText, GetOption('MultipleValuesCategory'), '/Genres/'));
  end;
  // Language
  if CanSetField(fieldLanguages) then
  begin
    SetField(fieldLanguages, ImportList(PageText, GetOption('MultipleValuesLanguages'), '/Languages/'));
  end;
  // Audio Format
  if CanSetField(fieldAudioFormat) then
  begin
    SetField(fieldAudioFormat, ImportList(PageText, GetOption('MultipleValuesAudioFormat'), '/List?sound-mix'));
  end;
  // Aspect Ratio
  begin
    Value := '';
    Value := TextBetween(PageText, '<h5>Aspect Ratio:</h5>', '</div>');
    Value := StringReplace(TextBetween(Value, #13#10, #13#10), '<br/><a', ', <a');
    HTMLRemoveTags(Value);
    HTMLDecode(Value);
    Value := StringReplace(Value, ', more', '');
    Value := StringReplace(Value, ', (more)', '');
    Value := StringReplace(Value, ' more', '');
    if (CanSetField(fieldVideoFormat)) and (GetOption('AspectRatio') = 1) then
      SetField(fieldVideoFormat, Value);
    if (CanSetField(fieldResolution)) and (GetOption('AspectRatio') = 2) then
      SetField(fieldResolution, Value);
  end;
  // Description
  if CanSetField(fieldDescription) then
  begin
    Value := TextBetween(PageText, '<h5>Plot:</h5>', '</div>');
    if Value = '' then
      Value := TextBetween(PageText, '<h5>Plot Summary:</h5>', '</div>');
    Value := StringReplace(Value, Textbetween(Value, '<a class="tn15more inline" href="synopsis">', '</a>'), '');
    Value := StringReplace(Value, '<a class="tn15more inline" href="synopsis"></a>', '');
    if Value = #13#10 + #13#10 then
      Value := '';
    if (GetOption('DescriptionSelection') = 0) and (Pos('<a class="tn15more inline"', Value) > 0) then
      Value := TextBetween(PageText, '<h5>Plot:</h5>', '<a class="tn15more inline"');
    Value := TextAfter(Value, #13#10);
    if Value <> '' then
      SetField(fieldDescription, ImportSummary(Value));
  end;
  // Length
  if CanSetField(fieldLength) then
  begin
    Value := TextBetween(PageText, '<h5>Runtime:</h5>' + #13#10, ' ');
    if Value <> '' then
    begin
      if Pos(':', Value) > 0 then
        SetField(fieldLength, TextAfter(Value, ':'))
      else
        SetField(fieldLength, Value);
    end;
  end;
  // Writer (Producer Field)
  if CanSetField(fieldProducer) then
  begin
    if GetOption('Producer') = 1 then
    begin
      Value := TextBetween(PageText, 'Produced by</a></h5>', '</table>');
      FullValue := '';
      Value2 := TextBetween(Value, '<a href="/name/', '</a>');
      while Value2 <> '' do
      begin
        Value := RemainingText;
        Value2 := TextAfter(Value2, '">');
        if FullValue <> '' then
          FullValue := FullValue + ', ';
        FullValue := FullValue + Value2;
        Value2 := TextBetween(Value, '<a href="/name/', '</a>');
      end;
      HTMLDecode(FullValue);
      SetField(fieldProducer, FullValue);
    end
    else
    begin
      Value := TextBetween(PageText, '<h5>Writer', '</div>');
      Value := StringReplace(TextBetween(Value, #13#10, #13#10), '<br/>', ', ');
      HTMLRemoveTags(Value);
      HTMLDecode(Value);
      if Value <> '' then
      begin
        Value := StringReplace(Value, '..., more', '');
        Value := StringReplace(Value, ', more', '');
        Value := Trim(StringReplace(Value, ' and, ', ', '));
        while StrGet(Value, Length(Value)) = ',' do
        begin
          Delete(Value, Length(Value), 1);
          Value := Trim(Value);
        end;       
        SetField(fieldProducer, Value);
      end;
    end;
  end;
  // AKA Name
  if CanSetField(fieldTranslatedTitle) then
  begin
    Value := TextBetween(PageText, '<h5>Also Known As:</h5>', #13);
    if Value <> '' then
    begin
      Value := Trim(StringReplace(Value, ' <br>', ', '));
      if StrGet(Value, Length(Value)) = ',' then
        Delete(Value, Length(Value), 1);
      HTMLRemoveTags(Value);
      HTMLDecode(Value);
      SetField(fieldTranslatedTitle, Value)
   end;
  end;
  // Comments
  if CanSetField(fieldComments) then
  begin
    if (GetOption('CommentType') = 1) then
    begin
      Value := TextAfter(PageText,'<a href="usercomments">');
      if (Value <> '') or (Pos('a href="usercomments" class="link"', PageText) > 0) then
      begin
        Value2 := '';
        FullValue := GetPage(MovieURL+'/usercomments');
        FullValue := TextAfter(FullValue, 'comment useful :-</small><br>');
        while FullValue <> '' do
        begin
          Value := TextBetween(FullValue, '<b>', '<div');
          Value2 := Value2 + #13#10 + #13#10 + TextBefore(Value, '</b>', '');
          Value := RemainingText;
          Value2 := Value2 + #13#10 + 'Date: ' + TextBetween(Value, '<small>', '</small>');
          Value := RemainingText;
          Value := 'Author: ' + TextBetween(Value, 'comments">', '<br>');
          HtmlRemoveTags(Value);
          Value2 := Value2 + #13#10 + Value;
          Value := RemainingText;
          Value := TextBetween(Value, '<p>' + #13#10, #13#10 + '</p>');
          Value := StringReplace(Value, #13#10, ' ');
          Value := StringReplace(Value, '<br><br>', #13#10);
          Value := StringReplace(Value, '<br>', #13#10);
          HtmlDecode(Value);
          Value2 := Value2 + #13#10 + #13#10 + Trim(Value);
          FullValue := TextAfter(FullValue, 'comment useful :-</small><br>');
        end;
        HTMLRemoveTags(Value2);
        HTMLDecode(Value2);
        SetField(fieldComments, 'USER COMMENTS:' + Value2 + #13#10);
      end;
    end
    else
    if (GetOption('CommentType') = 0) then
    begin
      Value := TextAfter(PageText, '/comments">');
      if Value <> '' then
      begin
        Value := TextBetween(Value, '<p>', '</p>');
        Value := StringReplace(Value, #13#10, ' ');
        Value := StringReplace(Value, '<br>', #13#10);
        HTMLRemoveTags(Value);
        HTMLDecode(Value);
        Value := Trim(Value);
        while Pos('  ', Value) > 0 do
          Value := StringReplace(Value, '  ', ' ');
        while Pos(#13#10, Value) = 1 do
          Delete(Value, 1, 2);
        SetField(fieldComments, Value + #13#10);
      end;
    end
    else
    if (GetOption('CommentType') = 2) then
      SetField(fieldComments, '');
  end;
  // TagLine
  if GetOption('GetTagline') > 0 then
  begin
    Value := TextBetween(PageText, '<h5>Tagline:</h5>' + #13#10, #13);
    if Pos('<a', Value) > 0 then
      Value := TextBefore(Value, '<a', '');
    HTMLRemoveTags(Value);
    HTMLDecode(Value);
    Value := Trim(Value);
    if Value <> '' then
    begin
      if StrGet(Value, 1) <> '"' then
        Value := '"' + Value + '"';
      case GetOption('GetTagline') of
        1:
          begin
            if GetField(fieldDescription) <> '' then
              Value := Value + #13#10 + #13#10 + GetField(fieldDescription);
            SetField(fieldDescription, Value);
          end;
        2:
          begin
            if GetField(fieldComments) <> '' then
              Value := Value + #13#10 + #13#10 + GetField(fieldComments);
            SetField(fieldComments, Value);
          end;
      end;
    end;
  end;
  // Trivia
  if GetOption('Trivia') > 0 then
  begin
    sleep(50);
    Value := MovieUrl;
    FullValue := GetPage(Value+'/trivia');
    Value := TextBetween(FullValue, '<ul class="trivia">', #13#10 + '</ul>' + #13#10);
    if Value <> '' then
    begin
      Value := StringReplace(Value, #13#10, '');
      while Pos('  ', Value) > 0 do
        Value := StringReplace(Value, '  ', '');
      while Pos('<li> ', Value) > 0 do
        Value := StringReplace(Value, '<li> ', '<li>');
      Value := StringReplace(Value, '<li>', #13#10 + '- ');
      HTMLRemoveTags(Value);
      HTMLDecode(Value);
      case GetOption('Trivia') of
        1:
          begin
            if GetField(fieldDescription) <> '' then
              Value := GetField(fieldDescription) + #13#10 + #13#10 + 'IMDB TRIVIA: ' + Value
            else
              Value :=  'IMDB TRIVIA: ' + Value;
            SetField(fieldDescription, Value);
          end;
        2:
          begin
            if GetField(fieldComments) <> '' then
              Value := GetField(fieldComments) + #13#10 + #13#10 + 'IMDB TRIVIA: ' + Value
            else
              Value :=  'IMDB TRIVIA: ' + Value;
            SetField(fieldComments, Value);
          end;
      end;
    end;
  end;
  // Awards
  if (GetOption('Awards') > 0) then
  begin
    ImportAwards();
  end;
  // Classification
  if GetOption('Classification') > 0 then
  begin
    if UserCountry = '' then
      ShowMessage('Country not set for classification selection - Click "Editor" tab in the scripting window, then select your country by modifying the required line as explained in the first lines of the code')
    else
    begin
      Value := TextBetween(PageText, '<a href="/List?certificates=' + UserCountry + ':' , '&&heading=14');
      if Value <> '' then
      begin
        if GetOption('Classification') = 1 then
          SetField(fieldMediaType, Value)
        else
         SetField(fieldComments, GetField(fieldComments) + #13#10 + #13#10 + 'Classification: ' + Value);
      end;
    end;
  end;
  // MPAA rating
  if (GetOption('MPAA') > 0) then
  begin
     Value := Trim(TextBetween(PageText, '<h5><a href="/mpaa">MPAA</a>:</h5> ' + #13#10 , #13));
     if Value <> '' then
     begin
      if GetOption('MPAA') = 1 then
        SetField(fieldMediaType, TextBetween(Value, 'Rated ', ' '))
      else
        SetField(fieldComments, GetField(fieldComments) + #13#10 + #13#10 + Value);
     end;
  end;
end;

// ***** Imports lists like Genre, Country, etc. depending of the selected option *****

function ImportList(PageText: string; MultipleValues: Integer; StartTag: string): string;
var
  Value, Value2: string;
begin
  if MultipleValues = 0 then
  begin
    Value := TextBetween(PageText, StartTag, '</a>');
    Value2 := TextAfter(Value, '">');
  end
  else
  begin
    Value := TextBetween(PageText, StartTag, '</div>');
    Value2 := TextBefore(Value, '<a class="tn15more inline"', '');
    if Value2 = '' then
      Value2 := Value;
    Value2 := TextAfter(Value2, '">');
    HTMLRemoveTags(Value2);
    if MultipleValues = 1 then
      Value2 := StringReplace(Value2, ' | ', ', ');
    if MultipleValues = 2 then
      Value2 := StringReplace(Value2, ' | ', ' / ');
    if MultipleValues = 3 then
      Value2 := '';
  end;
  Value2 := StringReplace(Value2, #13#10, '');
  Value2 := StringReplace(Value2, ' , ', ', ');
  HTMLDecode(Value2);
  Result := Trim(Value2);
end;

// ***** functions to import the different pictures kinds, depending of the option selected by user *****

function ImportSmallPicture(PageText: string): Boolean;
var
  Value: string;
begin
  Result := False;
  Value := TextBetween(PageText, '<div class="photo">', '</div>');
  if (Value <> '') and (Pos('"Poster Not Submitted"', Value) = 0) then
  begin
    Value := TextBetween(Value, 'src="', '"');
    if Value <> '' then
    begin
      GetPicture(Value);
      Result := True;
    end;
  end;
end;

//Image from DVD Details Page
function ImportDvdDetailsPicture: Boolean;
var
  Value, PageText: string;
begin
  Result := False;
  PageText := GetPage(MovieUrl+'/dvd');
  Value := TextBefore(PageText, '.jpg alt="', '<table class="dvd_section" cellpadding="10"><tr>');
  if Value <> '' then
  begin
    Value := TextBetween(Value, '<a href="', '">');
    if Value <> '' then
      Result := ImportFromAmazonRedirect('http://us.imdb.com' + Value);
  end;
end;

//Image from Merchandising Links (/sales) Page
function ImportMerchandisingPicture: Boolean;
var
  Value, PageText: string;
begin
  Result := False;
  PageText := GetPage(MovieUrl+'/sales');
  Value := TextBefore(PageText, '.jpg" width=', '<td class=w_rowtable_colcover><a href="');
  if Value <> '' then
  begin
    Value := TextBefore(Value, '"><img', '');
    if Value <> '' then
      Result := ImportFromAmazonRedirect('http://us.imdb.com' + Value);
  end;
end;

function ImportFromAmazonRedirect(Url: string): Boolean;
var
  Value, PageText: string;
begin
  Result := False;
  PageText := GetPage(Url);
  Value := TextBetween(PageText, '<td id="prodImageCell"', '" id="prodImage"');
  Value := StringReplace(TextAfter(Value, ' src="'), '_AA240', '');
  if Value <> '' then
  begin
    GetPicture(Value);
    Result := True;
  end;
end;

// ***** Gets summaries for the movie, based on the plot outline given in parameter (that contains the URL to more summaries) *****

function ImportSummary(PlotText: string): string;
var
  Address, Value, Value2, Value3, Value4, PageText, Longest: string;
begin
  Address := TextBetween(PlotText, 'href="', '" ');
  if (Address = '') or (GetOption('DescriptionSelection') = 0) or (GetOption('DescriptionSelection') = 3) then
  begin
    Value3 := Trim(TextBefore(PlotText, '<a ', ''));
    if Value3 = '' then
      Value3 := Trim(PlotText);
    HTMLRemoveTags(Value3);
    HTMLDecode(Value3);
  end;
  if (Address <> '') and (GetOption('DescriptionSelection') > 0) then
  begin
    PageText := GetPage('http://us.imdb.com' + Address);
    PickListClear;
    Longest := '';
    Value := TextBetween(PageText, '<p class="plotpar">', '</p>');
    PageText := RemainingText;
    while Value <> '' do
    begin
      Value := TextBefore(Value, '<i>', '');
      Value := Trim(StringReplace(Value, #13#10, ' '));
      Value := StringReplace(Value, '<br>', #13#10);
      HTMLRemoveTags(Value);
      HTMLDecode(Value);
      while Pos('  ', Value) > 0 do
        Value := StringReplace(Value, '  ', ' ');
      if Length(Value) > Length(Longest) then
        Longest := Value;
      PickListAdd(Trim(Value));
      Value := TextBetween(PageText, '<p class="plotpar">', '</p>');
      PageText := RemainingText;
    end;
    if (GetOption('BatchMode') > 0) or (GetOption('DescriptionSelection') = 2) then
      Value4 := Longest
    else
    begin
      if not PickListExec('Select a description for "' + GetField(fieldOriginalTitle) + '"', Value4) then
        Value4 := '';
    end;
  end;
  if Value3 <> '' then
  begin
     if Value4 <> '' then
     begin
        Result := Value3 + #13#10 + #13#10 + Value4;
     end
     else
     begin
        Result := Value3;
     end;
  end
  else
  begin
     Result := Value4;
  end;
end;

// Import awards
procedure ImportAwards;
var
  PageText, FullValue, Block, Value, Row: string;
  Year, Result, Award, Category: string;
begin
  sleep(50);
  Value := MovieUrl;
  PageText := GetPage(Value+'/awards');
  PageText := TextBetween(PageText, '<table style=', '</table>');
  FullValue := '';
  while PageText <> '' do
  begin
    Block := TextBetween(PageText, '<big>', '<big>');
    if Block = '' then
    begin
      Block := PageText;
      PageText := '';
    end
    else
    begin
      Block := '<big>' + Block;
      PageText := '<big>' + RemainingText;
    end;
    Value := TextBetween(Block, '<big>', '</tr>');
    Block := RemainingText;
    HTMLRemoveTags(Value);
    HTMLDecode(Value);
    FullValue := FullValue + #13#10 + '- ' + Value;
    Year := '';
    Result := '';
    repeat
      Award := '';
      Category := '';
      Row := TextBetween(Block, '<tr>', '</tr>');
      Block := RemainingText;
      if (Row <> '<th>Year</th><th>Result</th><th>Award</th><th>Category/Recipient(s)</th>')
        and (Row <> '<td colspan="4"> </td>') then
      begin
        if Pos('<a href="/Sections/Awards', Row) > 0 then
        begin
          Year := TextBetween(Row, '<a href="/Sections/Awards', '</a></td>');
          Row := RemainingText;
          Year := Trim(TextAfter(Year, '>'));
        end;
        if Pos('valign="center"><b>', Row) > 0 then
        begin
          Result := TextBetween(Row, 'valign="center"><b>', '</b></td>');
          HTMLDecode(Result);
          Row := RemainingText;
        end;
        if Pos('valign="center">', Row) > 0 then
        begin
          Award := TextBetween(Row, 'valign="center">', '</td>');
          HTMLDecode(Award);
          Row := RemainingText;
        end;
        if Award <> '' then
          FullValue := FullValue + #13#10 + '   ' + Year + ' ' + Result + ' "' + Award + '"';
        Category := TextBetween(Row, '<td valign="top"> ' + #13#10, '<br>');
        HTMLDecode(Category);
        Row := StringReplace(StringReplace(RemainingText, #13#10, ''), '<br>', ', ');
        HTMLRemoveTags(Row);
        HTMLDecode(Row);
        Row := Trim(Row);
        if Row = ',' then
          Row := '';
        if (Row <> '') or (Category <> '') then
        begin
          FullValue := FullValue + #13#10 + '      ' + Category;
          if Row <> '' then
          begin
            while StrGet(Row, Length(Row)) = ',' do
            begin
              Delete(Row, Length(Row), 1);
              Row := Trim(Row);
            end;
            if Category = '' then
              FullValue := FullValue + Row
            else
              FullValue := FullValue + ': ' + Row;
          end;
        end;
      end;
    until Pos('</tr>', Block) = 0;
  end;
  if FullValue <> '' then
    case GetOption('Awards') of
      1:
        begin
          if GetField(fieldDescription) <> '' then
            Value := GetField(fieldDescription) + #13#10 + #13#10 + 'AWARDS: ' + FullValue
          else
            Value := 'AWARDS: ' + FullValue;
          SetField(fieldDescription, Value);
        end;
      2:
        begin
          if GetField(fieldComments) <> '' then
            Value := GetField(fieldComments) + #13#10 + #13#10 + 'AWARDS: ' + FullValue
          else
            Value := 'AWARDS: ' + FullValue;
          SetField(fieldComments, Value);
        end;
    end;
end;

// ***** beginning of the program *****

begin
  if CheckVersion(3,5,0) then
  begin
    MovieName := '';
    if GetOption('BatchMode') = 2 then
    begin
      MovieName := GetField(fieldURL);
      if Pos('imdb.com', MovieName) = 0 then
        MovieName := '';
    end;
    if MovieName = '' then
      MovieName := GetField(fieldOriginalTitle);
    if MovieName = '' then
      MovieName := GetField(fieldTranslatedTitle);
    if GetOption('BatchMode') = 0 then
    begin
      if not Input('IMDB Import', 'Enter the title or the IMDB URL of the movie:', MovieName) then
        Exit;
    end
    else
      Sleep(500);
    if MovieName <> '' then
    begin
      if Pos('imdb.com', MovieName) > 0 then
        AnalyzeResultsPage(MovieName)
      else
      begin
        MovieName := StringReplace(MovieName, '&', 'and');
        if GetOption('GoogleSearch') = 1 then
          AnalyzeGooglesResultsPage('http://www.google.com/search?num=30&q=site:www.imdb.com/title/+' + UrlEncode(MovieName) + '+/maindetails')
        else
        if GetOption('GoogleSearch') = 2 then
          AnalyzeGooglesResultsPage('http://www.google.com/search?num=30&q=site:www.imdb.com/title/+%22' + UrlEncode(MovieName) + '%22+/maindetails')
        else
        begin
          if (GetOption('BatchMode') > 0) or (GetOption('PopularSearches') = 1) then
            AnalyzeResultsPage('http://us.imdb.com/find?tt=1;q=' + UrlEncode(MovieName))
          else
            AnalyzeResultsPage('http://us.imdb.com/find?more=tt;q=' + UrlEncode(MovieName));
        end;
      end;
    end;
  end
  else
    ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.0)');
end.

Re: IMDB Rating

Posted: 2008-11-19 06:31:47
by bad4u
LaMaOne wrote:I'm having a problem with the IMDB script (version: 3.37)
It seems that the "User rating" field is no longer imported/found since recently.
This problem has been fixed on 3.38, while current version is 3.39. Please download latest version from http://update.antp.be/amc/scripts/ or simply use the script "Update Scripts". ;)