Page 1 of 1

Script for 35mm.it

Posted: 2003-09-17 10:42:54
by vinzit
Can I have some suggestions for a script grabbing on 35mm.it?

Thanks

vinz

Posted: 2003-10-08 21:49:31
by pandavr
Here is the script :grinking:

Code: Select all

// GETINFO SCRIPTING
// 35mm.it

(***************************************************
*  Movie importation script for:                  *
*  35mm.it, http://www.35mm.it                    *
*                                                 *
* (c) 2003 Ivan Saorin ivan.saorin@email.it       *
*                                                 *
*  For use with Ant Movie Catalog 3.4.1           *
*  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 www35mm;
var
  OriginalMovieName: string;
  TranslatedMovieName: string;
  TheMovieAddress: string;
  FirstUrl: string;

function RemoveTabs(Pattern: string): string;
begin
  repeat
    Delete(Pattern, 1, 1);
  until ord(copy(Pattern, 1, 1)) <> 9;

  result := Pattern;
end;

function Space2html(Url: string): string;
var
  Temp : string;
  SpacePos : Integer;
begin
  repeat
    SpacePos := pos(' ', Url);
    if SpacePos <> 0 then
      begin
        Temp := copy(Url, 1, SpacePos -1);
        Delete(Url, 1, SpacePos);
        Temp := Temp + '%20' + Url;
        Url := Temp;
      end;
  until pos(' ', Url) = 0;

  result := Url;
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;

procedure AnalyzePage(Address: string);
var
  Page: TStringList;
  LineStart: integer;
  BeginPos: integer;
begin
  Page := TStringList.Create;
  Page.Text := GetPage(Address);

  if (FindLine('35mm.it - Problema temporaneo di connessione', Page, 0) <> -1) then
  begin
    ShowMessage('35mm.it - Problema temporaneo di connessione.' + #13#10 + 'Servizio momentaneamente non disponibile.');
    exit;
  end;


  LineStart := FindLine('<select ', Page, 0);
  if LineStart = -1 then
  begin
    LineStart := FindLine('Film trovati:<b>0</b>', Page, 0);
    if LineStart <> -1 then
    begin
      ShowMessage('Nessun film trovato');
    end
    else
    begin
      ShowMessage('Errore nell''esecuzione dello script!');
    end;
  end
  else
  begin
    PickTreeClear;
    AddMoviesTitles(Page);
    if TheMovieAddress='' then
    begin
      if PickTreeExec(Address) then
      begin
        SetField(fieldURL, Address);
        Page.Text := GetPage(Address);
        AnalyzeMoviePage(Page);
      end;
    end
    else
    begin
      SetField(fieldURL, TheMovieAddress);
      Page.Text := GetPage(TheMovieAddress);
      AnalyzeMoviePage(Page);
    end;
  end;
  Page.Free;
end;

function getFieldValues(marker, markerend: string; Page: TStringList; var LineNr: integer): string;
var
  temp: string;
  idx: integer;
begin
  result := '';
  LineNr := FindLine(marker, Page, LineNr);
  if (LineNr > -1) then
  begin
    temp := Page.getString(LineNr);
    idx := Pos(marker, temp);
    idx := idx + length(marker);
    temp := copy(temp, idx, length(temp) - idx);

    LineNr := LineNr + 1;
    while (Pos(markerend, Page.getString(LineNr)) = 0) do
    begin
      temp := temp + Page.getString(LineNr);
      LineNr := LineNr + 1;
    end;
    temp := StringReplace(temp, '- ', '- ');
    temp := StringReplace(temp, '<br>', #13#10);
    HTMLRemoveTags(temp);
    result := temp;
  end;
end;

function getFieldValue(marker, markerend: string; Page: TStringList; var LineNr: integer; mantainMarker: boolean): string;
var
  Line: string;
  markerEndLength: integer;
  idx1: integer;
  l: integer;
begin
    result := '';
    l := LineNr;
    markerEndLength := length(MarkerEnd);
    LineNr := FindLine(marker, Page, LineNr);
    //ShowMessage(marker + '=' + IntToStr(LineNr));
    if (LineNr = -1) then
    begin
      LineNr := l;
      exit;
    end;
    Line := Page.GetString(LineNr);
    idx1 := Pos(marker, Line);
    
    while (idx1 = -1) do
    begin
        LineNr := LineNr + 1;
        Line := Page.GetString(LineNr);
        idx1 := Pos(marker, Line);
    end;
    
    if (mantainMarker) then
      idx1 := idx1 + length(marker);

    while (copy(Line, idx1, markerEndLength) <> markerEnd) do
    begin
      result := result + copy(Line, idx1, 1);
      idx1 := idx1 + 1;
    end;
    idx1 := idx1 + markerEndLength;
end;

function parseDuration(value: string): string;
var
  idx: integer;
  hours, minutes: string;
  h, m: integer;
begin
  result := '';
  if (length(value) = 0) then
    exit;
  idx := Pos('e', value);
  hours := copy(value, 1, idx - 3);
  minutes := copy(value, idx + 2, Length(value) - idx - 2);
  h := StrToInt(hours, 2);
  m := StrToInt(minutes, 2);
  result := IntToStr(h * 60 + m);
end;

procedure getBigImage(Address: string; var result: string);
var
  Page: TStringList;
  idx: integer;
begin
  Page := TStringList.Create;
  Page.Text := GetPage(Address);
  idx := 0;
  result := 'http://www.35mm.it' + trim(getFieldValue('<img name="img_pers" src="', '"', Page, idx, true));
  Page.Free;
end;

procedure AnalyzeMoviePage(Page: TStringList);
var
  Fine: Integer;
  Line: string;
  LineNr: Integer;
  Field: integer;
  imgSmall: string;
  temp, marker: string;
  cnt, idx: integer;
  multimedialink, duration: string;
begin
  Fine := 0;
  LineNr := 0;
  // ImmagineSmall
  imgSmall := trim(getFieldValue('/immagini/film/', '"', Page, LineNr, false));
    
  // Translated Title
  SetField(fieldTranslatedTitle, trim(getFieldValue('<span class="titolorosso">', '</span>', Page, LineNr, true)));

  // Original Title
  SetField(fieldOriginalTitle, trim(getFieldValue('<b>', '</b>', Page, LineNr, true)));
  LineNr := LineNr + 1;

  // Country
  SetField(fieldCountry, trim(getFieldValue(' ', '<br>', Page, LineNr, true)));
  LineNr := LineNr + 1;

  // Duration
  duration := parseDuration(trim(getFieldValue(' ', '<br>', Page, LineNr, true)));
  SetField(fieldLength, duration);
  LineNr := LineNr + 1;

  // Type
  SetField(fieldCategory, trim(getFieldValue('<b>', '</b>', Page, LineNr, true)));
  LineNr := LineNr + 1;

  // Direction
  temp := trim(getFieldValue('">', ' ', Page, LineNr, true)) + ' ';
  LineNr := LineNr + 1;
  temp := temp + trim(getFieldValue(' ', '</a>', Page, LineNr, true));
  SetField(fieldDirector, temp);
  LineNr := LineNr + 1;

  // Year
  SetField(fieldYear, trim(getFieldValue('Anno: ', ' ', Page, LineNr, true)));
  LineNr := LineNr + 1;

  cnt := 0;
  while (cnt < 2) do
  begin
      temp := trim(Page.getString(LineNr));
      if (temp <> '') then
        while ((copy(temp,1,1) = ' ') or (copy(temp,1,1) = #9)) do
          delete(temp, 1, 1);
      if ((temp <> '<br>') and (temp <> '</td>'))then
        cnt := 0
      else if (temp = '</td>') then
        cnt := 10
      else
        cnt := cnt + 1;
      LineNr := LineNr + 1;
  end;

  // Producer
  if (cnt < 5) then
  begin
    SetField(fieldProducer, trim(Page.getString(LineNr)));
    LineNr := LineNr + 1;
  end;

  // Description
  temp := getFieldValues('<img src="/img/trama.gif" width="54" height="12" border="0"><br><br>', '</td>', Page, LineNr);
  if (temp <> '') then
  begin
    temp := StringReplace(temp, #9, '');
    if (copy(temp, length(temp) - 14, 15) = 'Leggi il finale') then
      temp := copy(temp, 1, length(temp) - 15);
    SetField(fieldDescription, trim(temp));
    LineNr := LineNr + 1;
  end;

  // Stars
  marker := 'Attori Protagonisti' + #13#10;
  temp := getFieldValues('<img src="/img/protagonisti.gif" width="138" height="12" border="0"><br><br>', '</td>', Page, LineNr);
  if (temp <> '') then
  begin
    temp := StringReplace(temp, #9, '');
    LineNr := LineNr + 1;
  end;
  marker := marker + temp + #13#10;

  // Cast
  marker := marker + 'Cast' + #13#10;
  temp := getFieldValues('<img src="/img/cast.gif" width="42" height="12" border="0"><br><br>', '</td>', Page, LineNr);
  if (temp <> '') then
  begin
    temp := StringReplace(temp, #9, '');
    LineNr := LineNr + 1;
  end;
  marker := marker + temp + #13#10;

  // Crew
  temp := getFieldValues('<img src="/img/crew.gif" width="46" height="12" border="0"><br><br>', '</td>', Page, LineNr);
  if (temp <> '') then
  begin
    temp := StringReplace(temp, #9, '');
    LineNr := LineNr + 1;
  end;
  marker := marker + temp + #13#10;
  SetField(fieldActors, trim(marker));

  // Review
  temp := getFieldValues('<a class="link" href="/magazine/recensioni/vedi_recensione_film.xtml?id=7951">', '</a><br><br>', Page, LineNr);
  if (temp <> '') then
  begin
    while (copy(temp,1,1) = #9) do
      delete(temp,1,1);
    marker := temp;
    LineNr := LineNr + 2;
  
    temp := Page.getString(LineNr);
    HTMLRemoveTags(temp);
    while (copy(temp,1,1) = #9) do
      delete(temp,1,1);
    marker := marker + #13#10 + temp;
    SetField(fieldComments, marker);
  end;

  // Multimedia link
  multimedialink := 'http://www.35mm.it' + trim(getFieldValue('/film/tuttiifilm/multimedia.xtml?id=', '"', Page, LineNr, false));
  if (multimedialink <> 'http://www.35mm.it') then
  begin
    getBigImage(multimedialink, temp);
    GetPicture(temp, False);
  end
  else
    GetPicture(imgSmall, False);

  DisplayResults;
end;

procedure AddMoviesTitles(Page: TStringList);
var
  LineNr: Integer;
  Line: string;
  MovieTitle, MovieAddress: string;
  BeginPos, EndPos: Integer;
  template, completeCode, ch: string;
  code0, code1: string;
  cnt, idx, idx1: integer;
begin
  template := '<option value="';
  TheMovieAddress := '*';
  LineNr := 0;
  LineNr := FindLine('name="id_f"',Page,LineNr);
  if (LineNr = -1) then
  begin
    ShowMessage('Errore nell''esecuzione dello script!');
    exit;
  end;
  LineNr := LineNr + 1;

  completeCode := '';
  cnt := 0;

  while (true) do
  begin
    MovieTitle := '';
    completeCode := '';
    
    while (Line = '') do
    begin
      LineNr := LineNr + 1;
      Line := Page.GetString(LineNr);
    end;

    if (FindLine('</select>',Page,LineNr) = LineNr) then break;

    idx := pos(template, Line);
    idx := idx + length(template);
    ch := copy(Line, idx, 1);
    while (ch <> '"') do
    begin
      completeCode := completeCode + ch;
      idx := idx + 1;
      ch := copy(Line, idx, 1);
    end;
    while (copy(Line, idx, 1) <> '>') do
    begin
      idx := idx + 1;
    end;
    MovieTitle := copy(Line, idx + 1, length(Line) - idx);
    idx1 := Pos('!', completeCode);

    if (idx1 > 0) then
    begin
      code0 := copy(completeCode, 1, idx1 - 1);
      code1 := copy(completeCode, idx1+1, length(Line) - idx1 + 1);
    end
    else
      code0 := completeCode;

    if (code1 <> '') then
      MovieAddress := code1
    else
      MovieAddress := 'http://www.35mm.it/film/tuttiifilm/schedafilm.xtml?id=' + code0 + '&';
      
    PickTreeAdd(MovieTitle, MovieAddress);
    Line := '';
    if (cnt = 0) then
      TheMovieAddress := MovieAddress;

    cnt := cnt + 1;
  end;
  if (cnt > 1) then
    TheMovieAddress := '';
end;

begin
  if CheckVersion(3,4,1) then
  begin
    TranslatedMovieName := GetField(fieldTranslatedTitle);
    OriginalMovieName := GetField(fieldOriginalTitle);
    if (Input('35mm.it', 'Immetti il titolo italiano del film:', TranslatedMovieName) and
       Input('35mm.it', 'Immetti il titolo originale del film:', OriginalMovieName))  then
    begin
       FirstUrl := 'http://www.35mm.it/ricerca/avanzata/ricerca_avanzata_film.xtml?homepage=yes&ricerca=yes';
       if (TranslatedMovieName <> '') then
          FirstUrl := FirstUrl + '&titolo=' + UrlEncode(TranslatedMovieName);
       if (OriginalMovieName <> '') then
          FirstUrl := FirstUrl + '&titoloriginale=' + UrlEncode(OriginalMovieName)
       else
          FirstUrl := FirstUrl + '&titoloriginale=' + UrlEncode(TranslatedMovieName);
       AnalyzePage(FirstUrl);
    end;
  end else
    ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.4.1)');
end.

Posted: 2003-10-09 09:26:56
by antp
nice :)