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

Radio

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

Post by Radio »

Добрый день! В версии 1.15 не загружался список актёров в главных ролях. Заменил как советовали csKinopoiskCastActor = '<a href="/level/.*?/people/(.*?)/">(.*?)</a></span>';
Загружается, но вместе с актёрами в карточку попадают и актёры дубляжа из раздела "Роли дублировали:"

Как их убрать и оставить только актёров?


и второй вопрос: можно ли загрузить информацию с Кинопоиска сразу для всех или выделенной группы фильмов, а не вручную по одному заходя в карточку к каждому фильму?

Спасибо!
Attachments
2.jpg
2.jpg (81.04 KiB) Viewed 24316 times
iyoo

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

Post by iyoo »

Добрый день, форум,

У меня дохрена фильмов и в общем-то меня задолбало жать на кнопку загрузки инфы с сайта кинопоиска, поэтому я сделал скрипт который обрабатывает пакетно список фильмов, который необходимо загрузить. Может еще кому понадобится. Скрипт написан очень топорно, потому что не знаю я этого вашего паскакаля. Его можно повесить на кнопку и обновлять вручную. Сделал бы и автоматически, но не знаю как получить список всех фильмов, а не только присутствующих в списке.

Code: Select all

const               
  csItem        = '<a href=\".*?\">(.*?)</a>';
  csTitle       = '<title>(.*?)</title>';
  csProducer    = '<td class="type">продюсер</td><td>(.*?)</td>';
  csActors      = '<span class="title">В главных ролях:</span>(.*?)<span class="title">';
  csDirector    = '<td class="type">режиссер</td><td>(.*?)</td>';
  csGenre       = '<td class="type">жанр</td><td>(.*?)</td>';
  csYear        = '<td class="type">год</td><td class=""><a href=\".*?\">(.*?)</a></td>';
  csRate        = 'alt='#39'рейтинг (.*?)'#39' border';

function FindMediaInfo(const aHtmlText: string; const aRegEx: string; var aMatch: string): Boolean;
begin
  with TRegExpr.Create(aRegEx) do
  try
    Result := Search(aHtmlText);
    if Result then 
      aMatch := Match
  finally
    Free
  end    
end;

function FindMediaInfoMulti(const aHtmlText: string; const aRegExAll: string; const aRegExItem: string; var aMatch: string): Boolean;
var
  sMatch: string;
begin
  if FindMediaInfo(aHtmlText, aRegExAll, sMatch) then
  begin
    with TRegExpr.Create(aRegExItem) do 
    try
      if Search(sMatch) then             
      repeat
        if Match <> '...' then
        begin
          aMatch := aMatch + Match + ', ';
        end;
      until not SearchAgain; 
    finally
      Free;
    end;    
    Delete(aMatch, Length(aMatch) - 1, 2);
  end;
end;

procedure ProcessItem(aItem: THmsScriptMediaItem; var aSuccessCount: Integer);
var
  i: Integer;
  html: string;
  filmName: string;
  res: Boolean;
  sMatch: string;
  
begin
  filmName := HmsHttpEncode(LeftCopy(aItem.Properties[4], Length(aItem.Properties[4]) - 4)); 
  html := HmsDownloadURL('http://www.kinopoisk.ru/index.php?kp_query=' + filmName);
  res := FindMediaInfo(html, '<a class="all" href=\"(.*?)\">.*?</a>', sMatch);
  html := HmsDownloadURL('http://www.kinopoisk.ru' + sMatch);

  if FindMediaInfo(html, csTitle, sMatch) then 
  begin
    aItem.Properties[4] := sMatch;
  end;

  sMatch := '';
  if FindMediaInfoMulti(html, csDirector, csItem, sMatch) then 
  begin
    aItem.Properties[28] := sMatch;
  end;

  sMatch := '';
  if FindMediaInfoMulti(html, csProducer, csItem, sMatch) then 
  begin
    aItem.Properties[29] := sMatch;
  end;

  sMatch := '';
  if FindMediaInfoMulti(html, csGenre, csItem, sMatch) then 
  begin
    aItem.Properties[9] := sMatch;
  end;
  
  sMatch := '';
  if FindMediaInfoMulti(html, csActors, csItem, sMatch) then 
  begin
    aItem.Properties[36] := sMatch;
  end;

  if FindMediaInfo(html, csYear, sMatch) then 
  begin
    aItem.Properties[8] := sMatch;
  end;

  if FindMediaInfo(html, csRate, sMatch) then 
  begin
    aItem.Properties[30] := sMatch;
  end;

  aSuccessCount := aSuccessCount + 1;
end;
 
var
  i, iSuccessCount: Integer;
  MediaItemList: THmsScriptMediaItemList;

begin
  MediaItemList := HmsCurrentMediaListItems;
  try
    iSuccessCount := 0;  
    if MediaItemList.Count > 0 then begin
      HmsShowProgress('Загрузка метаданных...');
      try
        for i := 0 to MediaItemList.Count - 1 do begin
          if HmsCancelPressed then
            Break
          else begin  
            ProcessItem(MediaItemList[i], iSuccessCount);
            HmsSetProgress(Round(((i + 1) / MediaItemList.Count) * 100))
          end  
        end  
      finally
        HmsHideProgress
      end      
    end;
    if HmsCancelPressed then
      MessageDlg('Загрузка прервана пользователем.', mtError, mbOK, 0)
    else if iSuccessCount > 0 then
      MessageDlg('Загрузка метаданных прошла успешно.', mtInformation, mbOK, 0)
    else
      MessageDlg('Нет информации для загрузки.', mtError, mbOK, 0)
  finally
    MediaItemList.Free
  end;
  HmsDatabaseAutoSave;
  ProcessMediaResult := True      
end.
Elka

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

Post by Elka »

Скрипт замечательный, только пришлось его немножко подточить напильником (до ума ещё не довёл-доведу - выложу).

Но вот возник один вопрос, как его научить цеплять картинки(эскизы)? Картинка это какой по счёту параметр объекта коллекции? И как поступать с файлом картинки? Сначала предварительно куда-то скачать?
VIPet

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

Post by VIPet »

Никак не пойму где все эти скрипты прописывать,чтобы кинопоиск пакетно использовать?
Captain

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

Post by Captain »

А кто может пояснить, почему с Кинопоиска не подгружается описание содержания фильма, а с Thetvdb.com - подгружается но почему-то на английском, хотя на самом сайте есть русское описание???
Captain

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

Post by Captain »

Совет по исправлению скрипта для загрузки содержания фильмов с Кинопоиска в этой теме я нашел, но вот по сериалам - как сделать русский язык? Что изменить в скрипте?
PyCu4

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

Post by PyCu4 »

Господа, прошу вас поделится рабочим скриптом для кинопоиска.
А то у меня не грузит ни описание ни актёров.

И такой вопрос: а комплексно все фильмы одним кликом можно... ?
Captain

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

Post by Captain »

Кстати, в итоге и у меня не грузит ни то, ни другое :(
achilles_85

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

Post by achilles_85 »

Всем привет. Проблема такая: при загрузке инфы с кинопоиска почему-то актеры грузятся по 2 раза. Как это исправить? HMS 1.20.3
achilles_85

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

Post by achilles_85 »

Неужели ни у кого нет такой проблемы?
Post Reply