Получаем рейтинг фильма на КиноПоиск.Ру

5 минут на чтение

Здравствуйте, в этой статье я хотел бы поговорить как можно в своих проектах использовать рейтинг КиноПоиск.РУ. Да, конечно, самый простой способ — это отправить запрос на КиноПоиск, затем получить данные пропарсить, затем открыть найденную ссылку на фильм и там уже пропарсить (получить) рейтинг фильма. Но зачем так? если КиноПоиск.РУ предоставляет возможность получения рейтинга в xml-формате, что очень удобно парсить, нам для этого только остается узнать идентификатор фильма (его код, номер) — его можно получить пропарсив страницу поиска.  Для этого нам понадобится

  • IdHTTP
  • IXMLHttpRequest (библиотека MSXML_TLB)

Ну и конечно TButton, TLabel и так далее, с помощью TidHTTP - мы будем посылать запрос на сервер на фильм, которого нам необходимо получить, а IXMLHttpRequest нам понадобиться для работы с XML-данными, которые предоставляет нам КиноПоиск.РУ. Да конечно можно было и с помощью IXMLHttpRequest также послать запрос, а затем его обработать, но не будем мудрить.

КиноПоиск.РУ предоставляет следующие вид получения рейтинга — https://www.kinopoisk.ru/rating/507.xml и так для каждого фильма, только необходимо знать его идентификатор, в нашем случае мы его парсим (то есть получаем его)

Про работу с библиотекой MSXML_TLB я прочитал на блоге WebDelphi. Там автор довольно подробно описал возможности по работе с XML-данными с помощью это библиотеки, причем без использования Indy, Synapse для получения данных с сервера. Поэтому рассказывать подробно как и что про данную библиотеку не буду, хочу добавить одно, что в Delphi 7, по крайней мере у меня, подключив модуль в uses MSXML_TLB будет выдавать ошибку, что не найден модуль, поэтому, чтобы эту библиотеку создать необходимо выполнить следующее Project-Import Type Library и в появившемся окне находим там библиотеку — Microsoft XML, version 2.0 (Version 2.0), если ее выделить, то можно увидеть какие классы в нее входят, далее в данном же окне нажимаем на «Create Unit» тут же будет создан модуль MSXML_TLB, которые можно теперь безо всяких проблем подключать в uses.

Теперь давайте вернемся к нашему рейтингу фильмов. Тут также есть еще один небольшой нюанс, если мы будем использовать Indy, которые по умолчанию в Delphi 7, а также User-Agen, который по умолчанию стоит, то мы не сможет послать запрос, так как КиноПоиск.РУ просто посчитает нас роботом, для этого необходимо свойство User-Agent заполнить следующим

Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.55 Safari/533.4

Чтобы получить XML с помощью IXMLHttpRequest необходимо написать следующий код

procedure TForm1.Button1Click(Sender: TObject);
var
 PostData:TStringList;
 logIMDB,ratingKP,url,ratingIBDM:WideString;
 req: IXMLHttpRequest;
 XMLpage:String;
begin
   try
    PostData:=TStringList.Create;
    PostData.Clear;
    PostData.Add('first=no');
    PostData.Add('kp_query='+AnsiToUtf8(Edit1.Text));
    logIMDB:=IdHTTP1.Post('https://kinopoisk.ru/index.php',PostData);
    PostData.Free;
    if pos('К сожалению, по вашему запросу ничего не найдено...',logIMDB)<>0 then
     begin
      exit;
     end;
    if pos('/level/1/film/',logIMDB)<>0 then
     begin
      Delete(logIMDB,1,pos('/level/1/film/',logIMDB)+length('/level/1/film/')-1);
      Delete(logIMDB,pos('/sr/1/',logIMDB),length(logIMDB));
      req := {$IFDEF VER210}CoXMLHTTP{$ELSE}CoXMLHTTPRequest{$ENDIF}.Create;
      url:='https://www.kinopoisk.ru/rating/'+logIMDB+'.xml';
      req.open('GET', url, false, EmptyParam, EmptyParam);
      req.send(EmptyParam);
      XMLpage:=req.responseText;
      ShowMessage(XMLpage);
     end
    else
     exit;
   except
    on e:Exception do
     PostData.Free;
   end;
end;

Чтобы получить с помощью TIdHTTP напишем следующий код

procedure TForm1.Button1Click(Sender: TObject);
var
 PostData:TStringList;
 logIMDB,ratingKP,url,ratingIBDM:WideString;
 XMLpage:String;
begin
   try
    PostData:=TStringList.Create;
    PostData.Clear;
    PostData.Add('first=no');
    PostData.Add('kp_query='+AnsiToUtf8(Edit1.Text));
    logIMDB:=IdHTTP1.Post('https://kinopoisk.ru/index.php',PostData);
    PostData.Free;
    if pos('К сожалению, по вашему запросу ничего не найдено...',logIMDB)<>0 then
     begin
      exit;
     end;
    if pos('/level/1/film/',logIMDB)<>0 then
     begin
      Delete(logIMDB,1,pos('/level/1/film/',logIMDB)+length('/level/1/film/')-1);
      Delete(logIMDB,pos('/sr/1/',logIMDB),length(logIMDB));
      url:='https://www.kinopoisk.ru/rating/'+logIMDB+'.xml';
      XMLpage:=IdHTTP1.Get(url);
      ShowMessage(XMLpage);
     end
    else
     exit;
   except
    on e:Exception do
     PostData.Free;
   end;
end;

Да и кстати с одного ip-адреса Вы сможете в течении 10 минут отправлять запросы порядка 20 не больше, после чего необходимо менять ip-адрес. Ну и также после того как вы получили результат останется Вам его только пропарсить

Facebook Vk Ok LinkedIn Telegram

Похожие записи:

В этой статье хотел просто сказать, а точнее сделать для себя как будем парсить очень легко данные XML. Это делается для проекта VK API в Delphi, так как в каждой, рассмотренной статье по ВК API мы в основном получаем данные в формате XML, так что для удобства...
Итак, в свое время я делал для себя программу, которая должна была считывать текущие настройки сети и показывать их в программе. Далее, я мог эти настройки сохранить в файл, кроме этого, я мог ввести настройки сети (TCP/IP — ip-адрес, маску, dns-сервера) вручн...
Здравствуйте, в этой статье я хотел бы рассказать как можно получить ссылку с браузера, который Вы укажите, или можно сделать, который у Вас открыт в текущий момент, в Интернете полно таких исходников, но они довольно сильно громоздкие, а мы еще и получим заго...