Pull to refresh

Ридер последних фильмов с RuTracker с рейтингом IMDB

Привет, хабрасообщество.

Думаю, многие знают, что такое RuTracker (ex torrents.ru), лишний раз объяснять не стоит.

Готов предположить, что многим знаком алгоритм «Фильмы 2010-2011 -> %ANY_FILM% -> Ctrl-C -> IMDB».

Лично я уже устал от него, и сегодня я предлагаю Вам относительно удобное решение вопроса.

Мы напишем с Вами простое AIR-приложение, подгружающее Atom-feed из раздела «Фильмы 2010-2011», парсящее его, получающее imdb-рейтинг и позволяющее просматривать это всё в виде таблицы, с сортировкой и прочими радостями.

Для людей, не интересующихся программированием, но желающих иметь такую программу — в конце топика есть ссылка на готовую, а так же исходники.

Я не буду постить весь код, лишь пройдусь по самым важным местам.

Уже год как RuTracker умеет выдавать нам Atom-фиды по адресу: http://rutracker.org/forum/viewforum.php?f=XXXX, где XXXX — номер трида, из которого хотим получить фид.
Но выдаёт он их в кодировке windows-1251, поэтому первое, с кем нам предстоит столкнуться — преобразование полученного XML в UTF-8

var xmlResult : XML = new XML(byteArray.readMultiByte(byteArray.length, 'windows-1251'));


Так же, стоит не забывать использовать namespace при доступе к элементам документа, иначе будут возвращаться нулевые значения (т.к. элемента с namespace-ом по умолчанию в разметке нет):
// Объявим namespace
namespace entryNS = "http://www.w3.org/2005/Atom";

...

// и дальше в коде будем использовать конструкции вида:
trace(xmlResult.entryNS::entry.toXMLString())


Следующий важный момент — парсинг заголовка топика.
var regexpResult : Array = _data.entryNS::title.toString().match(/([^(]+) \(([^)]+)\)\s?\[\s?(\d+)\s*[г\.]*\s*,\s*([\sа-яА-Яё,\.\-\/]+)[,\.]?\s*([^\]]+)\](.+)/);
            
// Если составитель топика не читал правила оформления

if(regexpResult == null)
{
    this.name = _data.entryNS::title.toString();
    return;
}
            
this.name = regexpResult[1];
this.director = regexpResult[2];
this.year = regexpResult[3];
this.tags = regexpResult[4];
this.quality = regexpResult[5];
this.other = regexpResult[6];


Осталось дело за малым — получить рейтинги IMDB для каждого из фильмов в списке. Сделаем мы это с помощью сервиса The IMDB API

Формат запроса такой:

www.imdbapi.com/?t=%FILM_NAME%&y=%FILM_YEAR%&r=XML


, где
  • t — название фильма
  • y — не обязательный параметр, означающий год выпуска фильма (будем его использовать, т.к. мы его точно знаем из заголовка)
  • r — формат возвращаемых данных (может принимать значения XML или JSON)



Пример возвращаемых значений:
<?xml version="1.0" encoding="UTF-8"?>
<root response="True">
<movie title="The Big Lebowski" year="1998" rated="R" released="6 Mar 1998" genre="Comedy, Crime, Mystery" director="Joel Coen" writer="Ethan Coen, Joel Coen" actors="Jeff Bridges, John Goodman, Julianne Moore, Steve Buscemi" plot="Dude Lebowski, mistaken for a millionaire Lebowski, seeks restitution for his ruined rug and enlists his bowling buddies to help get it.
"
poster="http://ia.media-imdb.com/images/M/MV5BMTM5MjU5NTgxMF5BMl5BanBnXkFtZTYwMzY1NDg5._V1._SX320.jpg" runtime="1 hr 57 mins" rating="8.2" votes="190836" id="tt0118715" />
</root>


На последок приведу скриншот полученного в результате приложения (без дизайна)

Цветом слева отображается диапазон рейтинга — 0-5 красным, 5-7 жёлтым, 7-10 — зелёным. При клике — открывает IMDB. При клике на «Ссылка» — открывается страница топика RuTracker-а
Мои потребности вполне удовлетворены, фильмы искать стало гораздо проще

Ссылки:
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.