(RU) Kino-govno.com - http://kino-govno.com

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
KAA
Posts: 7
Joined: 2005-03-16 07:07:01
Location: Russia

(RU) Kino-govno.com - http://kino-govno.com

Post by KAA »

Скрипт для доступа к рецензиям на http://kino-govno.com:
Реализован полнотекстовый поиск + доступ к рецензиям по алфавиту
(если при запросе названия фильма оставить поле ввода пустым).

Файл - "Kino-govno (RU).ifs"

Code: Select all

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

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

[Infos]
Authors=Karamov Ilshat aka KAA (kaasoft@gmail.com)
Title=Kino-Govno (RU)
Description=Import from www.kino-govno.com
Site=www.kino-govno.com
Language=RU
Version=1.0.0
Requires=3.5.0
Comments=Доступ к рецензиям, размещенным на сайте www.kino-govno.com
License=This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
GetInfo=1

[Options]

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

program kinogovnokom;

const
  BaseAddress = 'http://kino-govno.com/';

var
  MovieName: string;

//==============================================================================
  procedure AnalyzePage(Address: string);
  var
    Page: TStringList;
    AddressText: string;
    HTMLText: string;
    BeginPos, EndPos: Integer;
  begin
  Page := TStringList.Create;
  
  if Address <> 'http://kino-govno.com/?search&s_str=' then
  begin
    Page.Text := GetPage(Address);
    HTMLText := GetText(Page.Text, '<b>Рецензии</b>', '<b>Новости</b>');

    if Pos('ничего не найдено', HTMLText) > 0 then
    begin
      ShowWarning('Увы и ах - по вашему запросу ничего не найдено. Попробуйте позвонить позднее.');
      Exit;
    end
    else
    begin
      PickTreeClear;
      PickTreeAdd('Найденные фильмы:', '');
      AddMoviesTitles(HTMLText);
    end;
  end
  else
  begin
    PickTreeClear;
    PickTreeAdd('Рецензии на Кино-Говно.ком в алфавитном порядке', '');
    AddAlphabet();
    if PickTreeExec(AddressText) then
    begin
      Page.Text := GetPage(AddressText);
      HTMLText := Page.Text;
    end;
    BeginPos := Pos('>Все</a></b></td></tr></table><hr><br></div></b>', HTMLText);
    HTMLText := Copy(HTMLText, BeginPos+Length('>Все</a></b></td></tr></table><hr><br></div></b>'), Length(HTMLText));
    EndPos :=  Pos('<a href=?reviews&ar=1>Архив рецензий', HTMLText);
    HTMLText := Copy(HTMLText, 0, EndPos-1);
    Page.Text:=Trim(HTMLText);
    PickTreeClear;
    PickTreeAdd('Фильмы на выбранный символ', '');
    AddMoviesTitles1(Page);
  end;
  
  if PickTreeExec(AddressText) then
  begin
    // URL
    if CanSetField(fieldURL) then
      SetField(fieldURL, AddressText);
    Page.Text := GetPage(AddressText);
    AnalyzeVideoPage(Page);
  end
  Page.Free;
end;

//==============================================================================
  procedure AddAlphabet();
  var
    i: integer;
    Alphabet, Addresses, MovieTitle, MovieAddress: string;
    StartPos, EndPos: Integer;
  begin
    MovieTitle:='';
    Alphabet :='===========Английские-названия========== '+
               '0-9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z '+
               '============Русские-названия============ '+
               '0-9 А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я ';
    Addresses:='@ '+
               '0eng A B C D E F G H I J K L M N O P Q R S T U V W X Y Z '+
               '@ '+
               '0рус А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Э Ю Я ';
    StartPos:=1;
    for  i:=1  to 57 do
    begin
      EndPos:=Pos(' ', Alphabet);
      MovieTitle := Copy(Alphabet, 1, EndPos);
      Alphabet:=Copy(Alphabet, EndPos+1, Length(Alphabet));

      EndPos:=Pos(' ', Addresses);
      MovieAddress := Copy(Addresses, 1, EndPos-1);
      Addresses:=Copy(Addresses, EndPos+1, Length(Addresses));

      if MovieAddress='@' then
       PickTreeAdd(MovieTitle, '')
      else
       PickTreeAdd(MovieTitle, BaseAddress+'?reviews&letter='+MovieAddress);
    end;
  end;

//==============================================================================
procedure AddMoviesTitles(HTMLText: String);
  var
    i: integer;
    Line, Text: string;
    Page: TStringList;
    MovieTitle, MovieAddress: string;
    StartPos, EndPos: Integer;
  begin
    Page:=TStringList.Create;
    HTMLText := StringReplace(HTMLText, '</div><br>', '');
    HTMLText := StringReplace(HTMLText, '<a href="', #13#10);

    Page.Text:=HTMLText;

    for  i:=0  to Page.Count-1 do
    begin
      Line := Page.GetString(i);
      if Line='' then
        Continue;
      EndPos := Pos('">', Line);
      MovieAddress := Copy(Line, 0, EndPos-1);
      Line:=Copy(Line, EndPos+Length('">'), Length(Line));
      EndPos := Pos('</a>', Line);
      MovieTitle := Copy(Line, 0, EndPos-1);

      HTMLDecode(MovieTitle);
      HTMLRemoveTags(MovieTitle);
      MovieTitle := Trim(MovieTitle);

      if MovieTitle='()' then
         MovieTitle := '(НАЗВАНИЕ ОТСУТСТВУЕТ)';
         
      PickTreeAdd(MovieTitle, BaseAddress+MovieAddress);
    end;
    Page.Free;
  end;

//==============================================================================
procedure AddMoviesTitles1(Page: TStringList);
  var
    i: integer;
    Line, Text: string;
    MovieTitle, MovieAddress: string;
    StartPos, EndPos: Integer;
  begin
    Text := StringReplace(Page.Text, '<a href="', #13#10);
    Page.Text:=Text;

    StartPos := Pos('<a href="', Line);
    Line := Copy(Line, StartPos+Length('<a href="'), Length(Line));

    for  i:=0  to Page.Count-1 do
    begin
      Line := Page.GetString(i);
      if Line='' then
        Continue;
      EndPos := Pos('">"', Line);
      MovieAddress := Copy(Line, 0, EndPos-1);
      Line:=Copy(Line, EndPos+Length('">"'), Length(Line));

      //EndPos := Pos('</font>', Line);
      EndPos := Pos('</b> (', Line);

      MovieTitle := Copy(Line, 0, EndPos-1);
      Line:=Copy(Line, EndPos+Length('</b> ('), Length(Line));

      HTMLDecode(MovieTitle);
      HTMLRemoveTags(MovieTitle);
      MovieTitle := StringReplace(MovieTitle, ')"', ') "');
      MovieTitle := StringReplace(MovieTitle, '" (', ' (');

      PickTreeAdd(MovieTitle, BaseAddress+MovieAddress);
    end;
  end;
//==============================================================================
  function GetText (Line: string; sBegin, sEnd: string): string;
  var
    BeginPos, EndPos: Integer;
    s: string;
  begin
   Result := '';
   BeginPos := Pos(sBegin, Line) + Length(sBegin);
   EndPos := Pos(sEnd, Line);
   if (BeginPos = 0) or (sBegin='') then
     BeginPos := 1;
   if (EndPos = 0) or (sEnd='') then
     EndPos := Length(Line);
   s := Copy(Line, BeginPos, EndPos - BeginPos);
   Result := s;
  end;

//==============================================================================
  procedure AnalyzeVideoPage(Page: TStringList);
  var
    HTMLText, Rating, Text: string;
    BeginPos, EndPos: Integer;
    MovieName, MovieNameTrans, MovieNameOrig, MovieRating,
               MoviePictureAddress, MovieDescription, MovieComments: string;
  begin

  HTMLText:=Page.Text;

  BeginPos := Pos('</TD><TD width="100%"><DIV class=top>«', HTMLText)+Length('</TD><TD width="100%"><DIV class=top>«');
  HTMLText := Copy(HTMLText, BeginPos, Length(HTMLText));

  EndPos := Pos('</span></h3><br><FONT class=revtxt>', HTMLText);
  HTMLText := Copy(HTMLText, 0, EndPos-1);
  HTMLText:=Trim(StringReplace(HTMLText,'</FONT></P><div align=justify class=revtxt><P>',#13#10));

  // Наименование
  if CanSetField(fieldTranslatedTitle) then
    begin
      EndPos := Pos('»</div><DIV class=top>', HTMLText);
      MovieNameTrans := Trim(Copy(HTMLText, 0, EndPos-1));
      HTMLDecode(MovieNameTrans);
      HTMLRemoveTags(MovieNameTrans);
      SetField(fieldTranslatedTitle, MovieNameTrans);
    end;
  BeginPos := Pos('»</div><DIV class=top>', HTMLText)+Length('»</div><DIV class=top>');
  HTMLText := Copy(HTMLText, BeginPos, Length(HTMLText));
  // Оригинальное наименование
  if CanSetField(fieldOriginalTitle) then
    begin
      EndPos := Pos('</div></TD></tr></table><P><FONT class=headline>', HTMLText);
      MovieNameOrig := Trim(Copy(HTMLText, 0, EndPos-1));
      HTMLDecode(MovieNameOrig);
      HTMLRemoveTags(MovieNameOrig);
      SetField(fieldOriginalTitle, MovieNameOrig);
    end;
  BeginPos := Pos('</div></TD></tr></table><P><FONT class=headline>', HTMLText)+Length('</div></TD></tr></table><P><FONT class=headline>');
  HTMLText := Copy(HTMLText, BeginPos, Length(HTMLText));
  // Рейтинг
  if CanSetField(fieldRating) then
    begin
       BeginPos := Pos('Читательский рейтинг</FONT><br><br>', HTMLText)+Length('Читательский рейтинг</FONT><br><br>');
       Rating := Copy(HTMLText, BeginPos, Length(HTMLText));
       BeginPos := Pos('<h3>', HTMLText)+Length('<h3>');
       Rating := Copy(HTMLText, BeginPos, Length(HTMLText));
       EndPos := Pos('%', Rating);
       Rating := Trim(Copy(Rating, 0, EndPos-1));
       Rating := StringReplace(Rating, ' ','');
       HTMLRemoveTags(Rating);
       Rating:=Trim(Rating);
       if StrToInt(Rating, 0) <> 0 then
       begin
          Rating:=FloatToStr(StrToFloat(Rating)/10);
          SetField(fieldRating, Rating);
       end;
    end;
  // Описание
  if CanSetField(fieldDescription) then
    begin
      EndPos := Pos('</I></div>', HTMLText);
      MovieDescription := Copy(HTMLText, 0, EndPos-1);
      MovieDescription:=Trim(StringReplace(MovieDescription,'−','-'));
      MovieDescription:=Trim(StringReplace(MovieDescription,'–','-'));
      MovieDescription:=Trim(StringReplace(MovieDescription,'—','-'));
      MovieDescription:=Trim(StringReplace(MovieDescription,'…','...'));
      MovieDescription:=Trim(StringReplace(MovieDescription,'Кадры из фильма',''));
      MovieDescription:=Trim(StringReplace(MovieDescription,'<div id=div_author align=right class=revtxt contentEditable=false style="text-decoration: italic; font-weight: bold";>',#13#10));
      MovieDescription:=Trim(StringReplace(MovieDescription,'</div><div align=right class=revtxt><I>',#13#10));

      MovieDescription:=StringReplace(MovieDescription, '        ', ' ');
      MovieDescription:=StringReplace(MovieDescription, '       ', ' ');
      MovieDescription:=StringReplace(MovieDescription, '      ', ' ');
      MovieDescription:=StringReplace(MovieDescription, '     ', ' ');
      MovieDescription:=StringReplace(MovieDescription, '    ', ' ');
      MovieDescription:=StringReplace(MovieDescription, '   ', ' ');
      MovieDescription:=StringReplace(MovieDescription, '  ', ' ');
      MovieDescription:=StringReplace(MovieDescription, #13#10+' ', #13#10);
      MovieDescription:=StringReplace(MovieDescription, #13#10+#13#10+' ', #13#10);

      HTMLDecode(MovieDescription);
      HTMLRemoveTags(MovieDescription);
      SetField(fieldDescription, 'Рецензия на Кино-Говно.ком:'+#13#10+MovieDescription);
    end;
  // Коментарий-отзыв
  if CanSetField(fieldComments) then
    begin
      MovieComments := 'Вердикт:';
      BeginPos := Pos('<FONT class=grade_active>' ,HTMLText)+Length('<FONT class=grade_active>');
      HTMLText := Copy(HTMLText, BeginPos, Length(HTMLText));
      EndPos := Pos('</FONT>' ,HTMLText);
      MovieComments := MovieComments + Copy(HTMLText, 0, EndPos-1)+#13#10;
      MovieComments := MovieComments+'Перевод:';
      BeginPos := Pos('<FONT class=local_active>' ,HTMLText)+Length('<FONT class=local_active>');
      HTMLText := Copy(HTMLText, BeginPos, Length(HTMLText));
      EndPos := Pos('</FONT>' ,HTMLText);
      MovieComments := MovieComments + Copy(HTMLText, 0, EndPos-1)+#13#10;

      BeginPos := Pos('Мнения</FONT><br><br><FONT class=revtxt>', HTMLText)+Length('Мнения</FONT><br><br><FONT class=revtxt>');;
      if BeginPos>0 then
      begin
        Text := Copy(HTMLText, BeginPos, Length(HTMLText));
        EndPos:=Pos('</font><HR SIZE=1>', Text);
        MovieComments:=MovieComments+Copy(Text, 0, EndPos-1);
      end;

      MovieComments:=Trim(StringReplace(MovieComments,'"','"'));
      HTMLDecode(MovieComments);
      HTMLRemoveTags(MovieComments);
      SetField(fieldComments, 'Комментарий редакции Кино-Говно.ком на фильм:'+#13#10+MovieComments);
    end;
end;


//==============================================================================
begin
  if CheckVersion(3,5,0) then
  begin
    MovieName := GetField(fieldTranslatedTitle);
    if MovieName = '' then
      MovieName := GetField(fieldOriginalTitle);
    if Input('Поиск на Кино-говно.ком', 'Название фильма (пусто для доступа по алфавиту):', MovieName) then
    begin
      AnalyzePage('http://kino-govno.com/?search&s_str='+UrlEncode(MovieName));
    end;
  end else
    ShowMessage('This script requires a newer version of Ant Movie Catalog (at least the version 3.5.0)');
end.
Post Reply