Загрузка инфы с сайта "Кинопоиск"

tan
Posts: 6
Joined: Sun Mar 07, 2010 9:15 pm

Re: Загрузка инфы с сайта "Кинопоиск"

Post by tan »

mobikon wrote:я так и не понял, как же исправить, чтобы в информацию о фильме с Кинопоиска загружался весь список актеров, а не только первый
Заходите в "Информация о фильме" жмете пиктограмму "Поиск на сайтах Кинопоиск,imbd...", видите такую картину.
untitled.PNG
untitled.PNG (27.23 KiB) Viewed 22565 times
Ставите курсор на "Кинопоиск" и жмете кнопку "изменить". Меняете скрипт загрузки на этот (свой сохраните в какой нибудь файл на всякий случай).

Code: Select all

const
  csKinopoiskTitle         = '<title>(.*?)</title>';
  csKinopoiskImage         = 'img src="/images/film/(.*?)"';
  csKinopoiskOriginalName  = '<span style="color: \#666; font-size: 13px">(.*?)</span>';
  csKinopoiskRatingMPAA    = '<img src='#39'/images/mpaa/(.*?).gif'#39' height=11 alt';
  csKinopoiskCast          = 'В главных ролях:(.*?)class="all">...</a></td></tr>';
  csKinopoiskCastActor     = '<a href="/level/.*?/people/(.*?)/" class="all">(.*?)</a></td></tr>';
  csKinopoiskIMDB          = 'IMDB: (.*?)</div>';
  csKinopoiskRating        = 'text-decoration: none">(.*?)<span style="font:100';
  csKinopoiskDescripton    = '<tr><td colspan=3 style=\"padding:10px;padding-left:20px;\" class=\"news\">(.*?)</td></tr>';

  csKinopoiskActorImage    = 'src='#39'/images/actor/(.*?)'#39;
  
function FindMediaInfo(const aRegEx: string; var aMatch: string): Boolean;
begin
  with TRegExpr.Create(aRegEx) do try
    Result := Search(HtmlText);
    if Result then 
      aMatch := Match
  finally
    Free
  end    
end;  

function AddMediaInfo(aImdbItem: THmsIMDBItem; const aRegExpr, aCaption: string; 
                      const aImageRegExpr: string = ''): THmsIMDBItem;
var
  sMatch: string;
begin
  Result := nil;
  if FindMediaInfo(aRegExpr, sMatch) then begin
    Result := aImdbItem.ChildList.AddItem(aCaption, ReplaceStr(HmsHtmlToText(sMatch), '|', ''));
    if (aImageRegExpr <> '') and FindMediaInfo(aImageRegExpr, sMatch) then
      Result.Image := 'http://www.kinopoisk.ru/images/film/' + sMatch
  end
end;

procedure AddMediaInfoMulti(aImdbItem: THmsIMDBItem; const aParams: array of string);
var
  i: Integer;
begin
  i := 0;
  while i < Length(aParams) do begin
    AddMediaInfo(aImdbItem, aParams[i], aParams[i + 1]);
    Inc(i, 2)
  end  
end;

procedure AddMediaInfoGeneric(aImdbItem: THmsIMDBItem; const aPrefixRegEx: array of string);
const
  GenericRegEx = '</td>(.*?)</td></tr>';
var
  i: Integer;
  sCaption: string;
begin
  for i := 0 to Length(aPrefixRegEx) - 1 do begin
    sCaption := ReplaceStr(aPrefixRegEx[i], '\', '');
    AddMediaInfo(aImdbItem, aPrefixRegEx[i] + GenericRegEx, 
        UpperCase(Copy(sCaption, 1, 1)) + Copy(sCaption, 2, Length(sCaption) - 1))
  end               
end;

procedure AddCastInfo(aImdbItem: THmsIMDBItem);
var
  CastItem: THmsIMDBItem;
  sCastInfo: string;
begin
  if FindMediaInfo(csKinopoiskCast, sCastInfo) then begin
    CastItem := aImdbItem.ChildList.AddItem('В главных ролях', '');
    with TRegExpr.Create(csKinopoiskCastActor) do try
      if Search(sCastInfo) then repeat
        CastItem.ChildList.AddItem(HmsHtmlToText(Match(2)), '', 'http://www.kinopoisk.ru/images/actor/' + Match + '.jpg')
      until not SearchAgain; 
    finally
      Free
    end    
  end
end;

procedure SetMediaItemProperties(aImdbItem: THmsIMDBItem; const aParams: array of string);
var
  i: Integer;
  ImdbParam: THmsIMDBItem;
begin
  i := 0;
  while i < Length(aParams) do begin
    ImdbParam := aImdbItem.ChildList.FindItem(aParams[i]);
    if ImdbParam <> nil then
      HmsSetMediaItemProperty(aParams[i + 1], ImdbParam.Value); 
    Inc(i, 2)
  end  
end;

var
  IMDBItem, ActorItem, TitleItem: THmsIMDBItem;
  IMDBInfo: THmsIMDBInfo;
  ActorList: string;
  i: Integer;
begin
  IMDBInfo := THmsIMDBInfo.Create;
  try
    HtmlText := HmsRemoveLineBreaks(HtmlText);
    IMDBItem := IMDBInfo.AddItem('Кинопоиск', '');
    AddMediaInfo(IMDBItem, csKinopoiskTitle, 'Название', csKinopoiskImage); 
    AddMediaInfo(IMDBItem, csKinopoiskOriginalName, 'Оригинальное название');
    AddMediaInfoGeneric(IMDBItem, ['год', 'страна', 'слоган', 'режиссер', 
                                  'сценарий', 'продюсер', 'оператор', 
                                  'композитор', 'жанр', 'бюджет', 
                                  'премьера \(мир\)', 'премьера \(РФ\)',                    
                                  'релиз на DVD', 'релиз на Blu-Ray', 'время']);
    AddMediaInfoMulti(IMDBItem, [csKinopoiskRatingMPAA, 'Рейтинг MPAA',
                                csKinopoiskIMDB,       'Рейтинг IMDB',
                                csKinopoiskRating,     'Рейтинг',
                                csKinopoiskDescripton, 'Описание']);
    AddCastInfo(IMDBItem);                            
    MediaInfo := IMDBInfo.SaveToString;
//    ShowMessage(IMDBInfo.DisplayText);
    SetMediaItemProperties(IMDBItem, ['Название', 'mpTitle', 'Жанр', 'mpGenre',
               //'Продюсер', 'mpProducer', 'Режиссер', 'mpDirector', 
               'Режиссер', 'mpDirector', 
               'Год', 'mpYear', 'Рейтинг MPAA', 'mpRating']);
               
                   for i := 0 to 7 do begin           
      ActorItem := IMDBItem.ChildList.FindItem(Format('В главных ролях\%d', [i]));
      if ActorItem <> nil then begin
        if ActorList <> '' then 
          ActorList := ActorList + ', ';
        ActorList := ActorList + ActorItem.Name;
      end else
        Break  
    end;
    if ActorList <> '' then
      HmsSetMediaItemProperty('mpActor', ActorList);    

               
    //ActorItem := IMDBItem.ChildList.FindItem('В главных ролях\0');
   // if ActorItem <> nil then
   //   HmsSetMediaItemProperty('mpActor', ActorItem.Name);
    TitleItem := IMDBItem.ChildList.FindItem('Название');
    if (TitleItem <> nil) and (TitleItem.Image <> '') then
      HmsSetMediaItemProperty('mpThumbnail', HmsDownloadThumbnail(TitleItem.Image));
  finally
    IMDBInfo.Free
  end
end.
Всё.
mobikon

Re: Загрузка инфы с сайта "Кинопоиск"

Post by mobikon »

отлично, все работает как нужно! спасибо большое!
rexsniper

Re: Загрузка инфы с сайта "Кинопоиск"

Post by rexsniper »

Не подскажете, что надо сделать чтобы загружались постеры автоматически!
А то вся информация загружается, а постер нет - как исправить?
Версия 1.11 от 12/03/2010
Howard
Posts: 1
Joined: Wed Dec 09, 2009 12:11 pm

Re: Загрузка инфы с сайта "Кинопоиск"

Post by Howard »

rexsniper wrote:Не подскажете, что надо сделать чтобы загружались постеры автоматически!
А то вся информация загружается, а постер нет - как исправить?
Аналогично. Версия 1.11.3 от 27/03/2010. С IMDB грузит нормально. Вроде началось после обновления с 10-ки. Замена скрипта не помогает...
rexsniper

Re: Загрузка инфы с сайта "Кинопоиск"

Post by rexsniper »

Howard wrote:
rexsniper wrote:Не подскажете, что надо сделать чтобы загружались постеры автоматически!
А то вся информация загружается, а постер нет - как исправить?
Аналогично. Версия 1.11.3 от 27/03/2010. С IMDB грузит нормально. Вроде началось после обновления с 10-ки. Замена скрипта не помогает...
Так что никто не поможет??? Кстати версия у меня тоже такая-же 1.11.3
tan
Posts: 6
Joined: Sun Mar 07, 2010 9:15 pm

Re: Загрузка инфы с сайта "Кинопоиск"

Post by tan »

Измените строку

Code: Select all

csKinopoiskImage         = 'img src="/images/film/(.*?)"';
на

Code: Select all

csKinopoiskImage         = 'src="/images/film/(.*?)"';
Attachments
untitled.jpg
untitled.jpg (143.75 KiB) Viewed 22484 times
rexsniper

Re: Загрузка инфы с сайта "Кинопоиск"

Post by rexsniper »

О,спасибо!
Pol Pitt

Re: Загрузка инфы с сайта "Кинопоиск"

Post by Pol Pitt »

Рыжий wrote:
Acidorych wrote:Здравствуйте у меня вопрос, в версии 1.15 не добавляется список актеров и описание фильма с Кинопоиска , где нужно подправить скрипт чтобы исправить ошибку??? а то я не очень разбираюсь в скриптах
Найти вот эту константу csKinopoiskCastActor в скрипте отвечающем за парсинг данных актёров и заменить на следующее:

csKinopoiskCastActor = '<a href="/level/.*?/people/(.*?)/">(.*?)</a></span>';
А у меня не сработало :(
Pol Pitt

Re: Загрузка инфы с сайта "Кинопоиск"

Post by Pol Pitt »

Сам себе отвечаю
Найти строку csKinopoiskCast = 'В главных ролях:(.*?)class="all">...</a></td></tr>';
и поменять на строку - csKinopoiskCast = 'В главных ролях:(.*?)">...</a></span>';
Тогда все вроде и работает нормально...
Pol Pitt

Re: Загрузка инфы с сайта "Кинопоиск"

Post by Pol Pitt »

Еще вопрос. Все загружается, но фотографии актеров не грузятся. Уже все перепробовал - результата ноль. Кто подскажет?
Post Reply