Заходите в "Информация о фильме" жмете пиктограмму "Поиск на сайтах Кинопоиск,imbd...", видите такую картину. Ставите курсор на "Кинопоиск" и жмете кнопку "изменить". Меняете скрипт загрузки на этот (свой сохраните в какой нибудь файл на всякий случай).mobikon wrote:я так и не понял, как же исправить, чтобы в информацию о фильме с Кинопоиска загружался весь список актеров, а не только первый
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.