if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it
turbofilm-community-api
каркас для парсеров сайта turbofilm.tv
предназначен только для внутреннего использования продвинутыми пользователями сайта turbofilm.tv
для того, чтобы пользоваться пакетом, нужно иметь регистрацию
архитектуру модуля можно описать двумя словами: connect наоборот — вы пишите middleware, и делаете исходящий запрос, а middleware делает всю остальную работу
установка
вам потребуется node.js и npm
в консоли:
$npm install turbofilm-community-api
в текстовом редакторе:
var turbofilm = require ('turbofilm-community-api');
использование
для начала, вам нужно узнать у своего браузера значение куки под именем IAS_ID
, без него ничего работать не будет
передать IAS_ID
внутрь скрипта можно целыми двумя способами: напрямую, как в примере ниже, и через переменную окружения TF_IAS_ID
(это может понадобиться для запуска в облаке)
turbofilm.config.ias_id = "<ваш IAS_ID>"
turbofilm ('/', function (err, data) {
console.log (data.url) // -> "/"
console.log (data.response) // -> http.ClientResponse
console.log (data.body) // -> String – текст страницы
console.log (data.config) // -> Object – настройки модуля
console.log (data.match) // -> String.match () – далее
});
во фрагменте выше объект data – это то, чем оперируют middleware. на данный момент не один middleware не был подключен, давайте сделаем это
turbofilm.use (".*", turbofilm.middleware.$);
сразу же видно две особенности:
- в одноименном свойстве находятся несколько встроенных middleware (ниже)
- в отличии от connect-а, пути пишутся обычными регекспами (именно для этого нужно data.match), что больше похоже на роутер django
теперь, стало доступно свойство data.$
turbofilm ("/", function (err, data) {
console.log (data.$); // -> cheerio.load (data.body)
});
все middleware выполняются последовательно в порядке вызова .use
встроенные middleware
###$### экспортирует в data.$ cheerio-дерево документа
###links####
экспортирует в data.links массив $(a[href])
, требует, чтобы $ было включено раньше
###parseBlog### экспортирует в data.posts массив постов со страницы (о парсерах ниже), требует $
###parsePost#### экспортирует в data.post пост со страницы (без комментариев!), требует $
###parseComments#### экспортирует в data.comments массив комментариев со страницы, требует $
###parseOnpageSeries### на каждой странице вверху есть список сериалов, этот парсер парсит именно их экспортирует в data.series массив сериалов со страницы, требует $
###экспериментальные### нужны для работы с базой данных redis
для того, чтобы включить экспериментальные middleware нужно в middleware.js в самом верху заменить строчку:
var ENABLE_REDIS = true;
сразу же потребуется установить пакеты для работы с редисом
$npm install hiredis redis
встроенные парсеры
как несложно догадаться, parseX middleware – это некие парсеры, которые выдирают из cheerio-дерева некие данные. Ниже описаны форматы данных, экспортируемые встроенными парсерами, на некотором json-like псевдокоде
###parseBlog### data.posts = [ { // то же самое, что и parseComments, плюс: offset: Number // номер поста в блоге } ... ]
###parsePost#### data.post = { id: String, // идентификатор поста blogName: String, // название блога, в котором опубликован пост blogUrl: String, // url блога, в котором опубликован пост title: String, // название поста url: String, // url самого поста author: String, // url на страницу профиля автора username: String, // отображаемое имя автора pubdate: String, // дата публикации поста. Строка, как на турбофильме votes: Number, // рейтинг поста text: String, comments: Array // то же самое, что и parseComments }
###parseComments#### data.comments = [ { level: Number, // уровень вложенности в треде (от 0 до 7) id: String, // идентификатор комментария в формате /comm\d+/ author: String, // url на страницу профиля автора username: String, // отображаемое имя автора pubdate: String, // дата публикации комментария. Строка, как на турбофильме votes: Number, // рейтинг комментария text: String }, ... ]
###parseOnpageSeries### data.series = [ { img: String, // url на превью сериала, как на сайте alt: String, // alt-аттрибут картинки, соответствует канонiчному названию сериала на сайте ru: String, // название сериала на русском языке en: String, // название сериала на английском языке url: String // url на страницу сериала }, ... ]
###parseCommentDate### data.comments = [ { pubdate: Date // Парсит дату публикации в объект Data } ]
middleware
middleware представляет собой обычную функцию-коллбэк, которая может выглядеть примерно так:
turbofilm.use (".*", function (data, callback) {
// некий код
callback ();
});
middleware должен вызвать функцию callback в конце своей работы, иначе другие коллбэки просто не смогут отработать.
можно передавать несколько обработчиков
turbofilm.use (".*", turbofilm.middleware.$, turbofilm.parseOnPageSeries);
кроме того, вместо регекспа можно передавать строку-идентификатор:
turbofilm.use ('post', ...);
data.match
внимательный читатель наверняка уже догадался, что в него просто передается результат вычисления url.match (regexp), больше тут добавить нечего
чего нет и что есть, но не работает
- на данный момент, нет повторной авторизации при ошибках авторизации, и, соответственно не работает .auth-метод
- также, нет возможности оставлять посты и комментарии с помощью .create.(post|comment|reply)
- нет никакой поддержки скачивания сериалов
пример
var turbofilm = require ('turbofilm-community-api');
turbofilm.config.ias_id = '0h2048hg08hg8h294gh92h4g8';
turbofilm.use ('.*', turbofilm.middleware.$);
turbofilm.use ('.*', turbofilm.middleware.links);
turbofilm.use ('[BT]log(?!=\/Posts\/)', turbofilm.middleware.parseBlog);
turbofilm.use ('[BT]log(?=\/Posts\/)', turbofilm.middleware.parsePost);
turbofilm.use ('.*', function (data, callback) {
callback ();
});
turbofilm ('/Tlog');
turbofilm ('/Tlog/Posts/31537');