{"_id":"turbofilm-community-api","_rev":"45-49e88980a606abfe5d55010443ac3958","name":"turbofilm-community-api","description":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it","dist-tags":{"latest":"0.2.6"},"versions":{"0.0.1":{"name":"turbofilm-community-api","version":"0.0.1","main":"index.js","scripts":{"test":"node test.js"},"repository":"","author":"","license":"BSD","dependencies":{"request":"~2.21.0","cheerio":"~0.12.0","resourceful":"~0.3.3"},"readme":"turbofilm-community-api\n=======================\n\nзагляните вначале в run.sh, затем, в turbofilm.sh.\n\nпосле этого, можете посмотреть на index.js, download.js\n\nпарсеры хранятся в /parser\n\nюсейдж:\n-------\n\n```bash\n$ ./turbofilm.sh /Tlog\n$ ./turbofilm.sh /Tlog/Posts/22390\n```\n\n```javascript\nrequire ('turbofilm-community-api') (\"/Tlog/Posts/22390\", function (err, result) {\n\t\n})\n```","readmeFilename":"README.md","_id":"turbofilm-community-api@0.0.1","description":"turbofilm-community-api =======================","dist":{"shasum":"5274f48046c28e765d00c6199388e67eba17768a","tarball":"https://registry.npmjs.org/turbofilm-community-api/-/turbofilm-community-api-0.0.1.tgz","integrity":"sha512-R6VgZObwJWChnVD92knTLKJjXX80bAe0LCRp9UvuuvTDusUhKTDUOatvCR+yPzoEa+BQ33url77v5MpMUfufQQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC73BJsoVAD77eMghTggEW5l7IrT5BpLCOCAdbCjkPCpQIhALe1Tr7xgLWH117lqDTuIjfQT/AETYyw6S070CfLblYZ"}]},"_npmVersion":"1.1.65","_npmUser":{"name":"ambilight","email":"apsmav@gmail.com"},"maintainers":[{"name":"ambilight","email":"apsmav@gmail.com"}]},"0.0.2":{"name":"turbofilm-community-api","version":"0.0.2","main":"index.js","scripts":{"test":"node test.js"},"repository":"","author":"","license":"BSD","dependencies":{"request":"~2.21.0","cheerio":"~0.12.0"},"readme":"turbofilm-community-api\n=======================\n\nзагляните вначале в run.sh, затем, в turbofilm.sh.\n\nпосле этого, можете посмотреть на index.js, download.js\n\nпарсеры хранятся в /parser\n\nюсейдж:\n-------\n\n```bash\n$ ./turbofilm.sh /Tlog\n$ ./turbofilm.sh /Tlog/Posts/22390\n```\n\n```javascript\nrequire ('turbofilm-community-api') (\"/Tlog/Posts/22390\", function (err, result) {\n\t\n})\n```","readmeFilename":"README.md","_id":"turbofilm-community-api@0.0.2","description":"turbofilm-community-api =======================","dist":{"shasum":"373f3d666952025ac3f8629d88403843967a9d43","tarball":"https://registry.npmjs.org/turbofilm-community-api/-/turbofilm-community-api-0.0.2.tgz","integrity":"sha512-utQoGD4gkbSpsp42pasWxCkGHBtP4ebYnQ0IKKnd5eboIaYCS6Ejivj0BIss5SdwbY1/G77902pKj4LAmRKJ9Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE7efc19CZRLIJWErXCgcnZMGZyc+Ign5VDtgMcWn5KuAiEAwMuIqGyWCxYG7igG2JTGIsZejre3IGCoMIA7Q7o0wWM="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"ambilight","email":"apsmav@gmail.com"},"maintainers":[{"name":"ambilight","email":"apsmav@gmail.com"}]},"0.0.3":{"name":"turbofilm-community-api","version":"0.0.3","main":"index.js","scripts":{"test":"node test.js"},"repository":"","author":"","license":"BSD","dependencies":{"request":"~2.21.0","cheerio":"~0.12.0"},"readme":"turbofilm-community-api\n=======================\n\nзагляните вначале в run.sh, затем, в turbofilm.sh.\n\nпосле этого, можете посмотреть на index.js, download.js\n\nпарсеры хранятся в /parser\n\nюсейдж:\n-------\n\n```bash\n$ ./turbofilm.sh /Tlog\n$ ./turbofilm.sh /Tlog/Posts/22390\n```\n\n```javascript\nrequire ('turbofilm-community-api') (\"/Tlog/Posts/22390\", function (err, result) {\n\t\n})\n```","readmeFilename":"README.md","_id":"turbofilm-community-api@0.0.3","description":"turbofilm-community-api =======================","dist":{"shasum":"ccb1a8d6117e266b6ef11c174e084ad509f5704b","tarball":"https://registry.npmjs.org/turbofilm-community-api/-/turbofilm-community-api-0.0.3.tgz","integrity":"sha512-ImvoA8M3XDL6Kbfj47TZSMj6gA1PoQsiw9XZl4e3Nb/PylPGooSf5ul0VeqMXpMbs1zkTy9h9SQZbP+/mRbHew==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC1/dKOdiLYXgeD1lWlHzj/TeO84jLUpBtgkqG+zNeIuAiA6sKkoDt+Zyet0GR0Lp9XV+FIVC3JUPdpiOtQmO2mqmw=="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"ambilight","email":"apsmav@gmail.com"},"maintainers":[{"name":"ambilight","email":"apsmav@gmail.com"}]},"0.0.4":{"name":"turbofilm-community-api","version":"0.0.4","main":"index.js","scripts":{"test":"node test.js"},"repository":"","author":"","license":"BSD","dependencies":{"request":"~2.21.0","cheerio":"~0.12.0"},"readme":"turbofilm-community-api\n=======================\n\nзагляните вначале в run.sh, затем, в turbofilm.sh.\n\nпосле этого, можете посмотреть на index.js, download.js\n\nпарсеры хранятся в /parser\n\nюсейдж:\n-------\n\n```bash\n$ ./turbofilm.sh /Tlog\n$ ./turbofilm.sh /Tlog/Posts/22390\n```\n\n```javascript\nrequire ('turbofilm-community-api') (\"/Tlog/Posts/22390\", function (err, result) {\n\t\n})\n```","readmeFilename":"README.md","_id":"turbofilm-community-api@0.0.4","description":"turbofilm-community-api =======================","dist":{"shasum":"ff5c41d7d3e032f0e5322bd1c6bb34c8e6e5041b","tarball":"https://registry.npmjs.org/turbofilm-community-api/-/turbofilm-community-api-0.0.4.tgz","integrity":"sha512-jLLR/Itar/S8SPorCI75XLLOMeif6gpaAQRNZBplPnoJXJzfOI/f82V1vsTgLhDH9IuFa6FyiBq9ZWom9jrv4g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDMjFNtR/9EV8I6jxcsvZ9vPsXHtUmCRP2dMuFjc7xm+gIhAM4nwGTLR7jZXKOlBUzJkMne4F8l8yTRdBTVUjqHrlkz"}]},"_npmVersion":"1.1.65","_npmUser":{"name":"ambilight","email":"apsmav@gmail.com"},"maintainers":[{"name":"ambilight","email":"apsmav@gmail.com"}]},"0.0.5":{"name":"turbofilm-community-api","version":"0.0.5","main":"index.js","scripts":{"test":"node test.js"},"repository":"","author":"","license":"BSD","dependencies":{"request":"~2.21.0","cheerio":"~0.12.0"},"readme":"turbofilm-community-api\n=======================\n\nзагляните вначале в run.sh, затем, в turbofilm.sh.\n\nпосле этого, можете посмотреть на index.js, download.js\n\nпарсеры хранятся в /parser\n\nюсейдж:\n-------\n\n```bash\n$ ./turbofilm.sh /Tlog\n$ ./turbofilm.sh /Tlog/Posts/22390\n```\n\n```javascript\nrequire ('turbofilm-community-api') (\"/Tlog/Posts/22390\", function (err, result) {\n\t\n})\n```","readmeFilename":"README.md","_id":"turbofilm-community-api@0.0.5","description":"turbofilm-community-api =======================","dist":{"shasum":"43bc27f1af3226f5e7ad55f315e1e02ef353a60b","tarball":"https://registry.npmjs.org/turbofilm-community-api/-/turbofilm-community-api-0.0.5.tgz","integrity":"sha512-SIqgC+kEz/9KK5MsMJ219vmHhLWvt+9Lj6/A8PKdnsONj1OikFv4LaSWwxaoMzYIgNMzR6HVhVsrFT9N1kgToA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICFZ7mKnZMBLCJ/GrTFhP+3SwivIewOyX2l05OlOUYT9AiBcXftiKwHBYq7+vAbvgDYPNj8GM3JfgURYaKgr/pgO5g=="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"ambilight","email":"apsmav@gmail.com"},"maintainers":[{"name":"ambilight","email":"apsmav@gmail.com"}]},"0.1.0":{"name":"turbofilm-community-api","version":"0.1.0","main":"index.js","scripts":{"test":"node test.js"},"author":{"name":"Ambilight"},"license":"BSD","dependencies":{"request":"~2.21.0","cheerio":"~0.12.0"},"readme":"turbofilm-community-api\n=======================\n\nкаркас для парсеров сайта turbofilm.tv\n\n*предназначен только для внутреннего использования продвинутыми пользователями сайта turbofilm.tv*\n\n*для того, чтобы пользоваться пакетом, нужно иметь регистрацию*\n\nархитектуру модуля можно описать двумя словами: connect наоборот — вы пишите middleware, и делаете исходящий запрос, а middleware делает всю остальную работу\n\nустановка\n---------\n\nвам потребуется node.js и npm\n\nв консоли:\n\n\t$npm install turbofilm-community-api\n\nв текстовом редакторе:\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\nиспользование\n-------------\n\nдля начала, вам нужно узнать у своего браузера значение куки под именем `IAS_ID`, без него ничего работать не будет\n\nпередать `IAS_ID` внутрь скрипта можно целыми двумя способами: напрямую, как в примере ниже, и через переменную окружения `TF_IAS_ID` (это может понадобиться для запуска в облаке)\n\n\tturbofilm.config.ias_id = \"<ваш IAS_ID>\"\n\tturbofilm ('/', function (err, data) {\n\t\tconsole.log (data.url) // -> \"/\"\n\t\tconsole.log (data.response) // -> http.ClientResponse\n\t\tconsole.log (data.body) // -> String – текст страницы\n\t\tconsole.log (data.config) // -> Object – настройки модуля\n\t\tconsole.log (data.match) // -> String.match () – далее\n\t});\n\nво фрагменте выше объект data – это то, чем оперируют middleware. на данный момент не один middleware не был подключен, давайте сделаем это\n\n\t\n\tturbofilm.use (\".*\", turbofilm.middleware.$);\n\nсразу же видно две особенности:\n\n1. в одноименном свойстве находятся несколько встроенных middleware (ниже)\n2. в отличии от connect-а, пути пишутся обычными регекспами (именно для этого нужно data.match), что больше похоже на роутер django\n\nтеперь, стало доступно свойство data.$\n\n\tturbofilm (\"/\", function (err, data) {\n\t\tconsole.log (data.$); // -> cheerio.load (data.body)\n\t});\n\t\nвсе middleware выполняются последовательно в порядке вызова .use\n\t\nвстроенные middleware\n---------------------\n###$###\nэкспортирует в data.$ cheerio-дерево документа\n\n###links####\nэкспортирует в data.links массив `$(a[href])`, требует, чтобы $ было включено раньше\n\n###parseBlog###\nэкспортирует в data.posts массив постов со страницы (о парсерах ниже), требует $\n\n###parsePost####\nэкспортирует в data.post пост со страницы (без комментариев!), требует $\n\n###parseComments####\nэкспортирует в data.comments массив комментариев со страницы, требует $\n\n###экспериментальные###\nнужны для работы с базой данных redis\n\nдля того, чтобы включить экспериментальные middleware нужно в middleware.js в самом верху заменить строчку:\n\n\tvar ENABLE_REDIS = true;\n\nсразу же потребуется установить пакеты для работы с редисом\n\n\t$npm install hiredis redis\n\nвстроенные парсеры\n------------------\n\nкак несложно догадаться, parseX middleware – это некие парсеры, которые выдирают из cheerio-дерева некие данные. Ниже описаны форматы данных, экспортируемые встроенными парсерами, на некотором json-like псевдокоде\n\n###parseBlog###\n\tdata.posts = [\n\t\t{\t\t\t\t\t\t// то же самое, что и parseComments, плюс:\n\t\t\toffset: Number\t\t// номер поста в блоге\n\t\t}\n\t\t...\n\t]\n\n###parsePost####\n\tdata.post = {\n\t\tid: String,\t\t\t// идентификатор поста\n\t\tblogName: String,\t// название блога, в котором опубликован пост\n\t\tblogUrl: String,\t// url блога, в котором опубликован пост\n\t\ttitle: String,\t\t// название поста\n\t\turl: String,\t\t// url самого поста\n\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\tusername: String,\t// отображаемое имя автора\n\t\tpubdate: String,\t// дата публикации поста. Строка, как на турбофильме\n\t\tvotes: Number,\t\t// рейтинг поста\n\t\ttext: String,\n\t\tcomments: Array\t// то же самое, что и parseComments\n\t}\n\n###parseComments####\n\tdata.comments = [\n\t\t{\n\t\t\tlevel: Number,\t\t// уровень вложенности в треде (от 0 до 7) \n\t\t\tid: String,\t\t\t// идентификатор комментария в формате /comm\\d+/\n\t\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\t\tusername: String,\t// отображаемое имя автора\n\t\t\tpubdate: String,\t// дата публикации комментария. Строка, как на турбофильме\n\t\t\tvotes: Number,\t\t// рейтинг комментария\n\t\t\ttext: String\n\t\t},\n\t\t...\n\t]\n\nmiddleware\n----------\n\nmiddleware представляет собой обычную функцию-коллбэк, которая может выглядеть примерно так:\n\n\tturbofilm.use (\".*\", function (data, callback) {\n\t\t// некий код\n\t\tcallback ();\n\t});\n\nmiddleware должен вызвать функцию callback в конце своей работы, иначе другие коллбэки просто не смогут отработать.\n\ndata.match\n----------\n\nвнимательный читатель наверняка уже догадался, что в него просто передается результат вычисления url.match (regexp), больше тут добавить нечего\n\nчего нет и что есть, но не работает\n--------------------------------------------\n\n1. на данный момент, нет повторной авторизации при ошибках авторизации, и, соответственно не работает .auth-метод\n2. также, нет возможности оставлять посты и комментарии с помощью .create.(post|comment|reply)\n3. нет никакой поддержки скачивания сериалов\n\nпример\n------\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\tturbofilm.config.ias_id = '0h2048hg08hg8h294gh92h4g8';\n\tturbofilm.use ('.*', turbofilm.middleware.$);\n\tturbofilm.use ('.*', turbofilm.middleware.links);\n\tturbofilm.use ('[BT]log(?!=\\/Posts\\/)', turbofilm.middleware.parseBlog);\n\tturbofilm.use ('[BT]log(?=\\/Posts\\/)', turbofilm.middleware.parsePost);\n\t\n\tturbofilm.use ('.*', function (data, callback) {\n\t\tcallback ();\n\t});\n\t\n\tturbofilm ('/Tlog');\n\t\n\tturbofilm ('/Tlog/Posts/31537');","readmeFilename":"README.md","_id":"turbofilm-community-api@0.1.0","description":"turbofilm-community-api =======================","dist":{"shasum":"8e7e4398be1d09821f8fcbec801eb6db5924d960","tarball":"https://registry.npmjs.org/turbofilm-community-api/-/turbofilm-community-api-0.1.0.tgz","integrity":"sha512-nMkfms/yRKl5c0/u6V5LNHVKp2QwAZT42o9jMmfWYitARRzbAtt4WxZGIF4S+bj8iKKGO+xKlrhieUo+a6mQIA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA7hBjlnXokCl+XwTHWXZ3j3j7NPf5YmVMVVAbfslLKAAiAh6c0BwnMGTaTS7jnidmz1fQwrEC6Ls+xohq96OX7AOg=="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"ambilight","email":"apsmav@gmail.com"},"maintainers":[{"name":"ambilight","email":"apsmav@gmail.com"}]},"0.1.1":{"name":"turbofilm-community-api","version":"0.1.1","main":"index.js","scripts":{"test":"node test.js"},"author":{"name":"Ambilight"},"license":"BSD","dependencies":{"request":"~2.21.0","cheerio":"~0.12.0"},"readme":"turbofilm-community-api\n=======================\n\nкаркас для парсеров сайта turbofilm.tv\n\n*предназначен только для внутреннего использования продвинутыми пользователями сайта turbofilm.tv*\n\n*для того, чтобы пользоваться пакетом, нужно иметь регистрацию*\n\nархитектуру модуля можно описать двумя словами: connect наоборот — вы пишите middleware, и делаете исходящий запрос, а middleware делает всю остальную работу\n\nустановка\n---------\n\nвам потребуется node.js и npm\n\nв консоли:\n\n\t$npm install turbofilm-community-api\n\nв текстовом редакторе:\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\nиспользование\n-------------\n\nдля начала, вам нужно узнать у своего браузера значение куки под именем `IAS_ID`, без него ничего работать не будет\n\nпередать `IAS_ID` внутрь скрипта можно целыми двумя способами: напрямую, как в примере ниже, и через переменную окружения `TF_IAS_ID` (это может понадобиться для запуска в облаке)\n\n\tturbofilm.config.ias_id = \"<ваш IAS_ID>\"\n\tturbofilm ('/', function (err, data) {\n\t\tconsole.log (data.url) // -> \"/\"\n\t\tconsole.log (data.response) // -> http.ClientResponse\n\t\tconsole.log (data.body) // -> String – текст страницы\n\t\tconsole.log (data.config) // -> Object – настройки модуля\n\t\tconsole.log (data.match) // -> String.match () – далее\n\t});\n\nво фрагменте выше объект data – это то, чем оперируют middleware. на данный момент не один middleware не был подключен, давайте сделаем это\n\n\t\n\tturbofilm.use (\".*\", turbofilm.middleware.$);\n\nсразу же видно две особенности:\n\n1. в одноименном свойстве находятся несколько встроенных middleware (ниже)\n2. в отличии от connect-а, пути пишутся обычными регекспами (именно для этого нужно data.match), что больше похоже на роутер django\n\nтеперь, стало доступно свойство data.$\n\n\tturbofilm (\"/\", function (err, data) {\n\t\tconsole.log (data.$); // -> cheerio.load (data.body)\n\t});\n\t\nвсе middleware выполняются последовательно в порядке вызова .use\n\t\nвстроенные middleware\n---------------------\n###$###\nэкспортирует в data.$ cheerio-дерево документа\n\n###links####\nэкспортирует в data.links массив `$(a[href])`, требует, чтобы $ было включено раньше\n\n###parseBlog###\nэкспортирует в data.posts массив постов со страницы (о парсерах ниже), требует $\n\n###parsePost####\nэкспортирует в data.post пост со страницы (без комментариев!), требует $\n\n###parseComments####\nэкспортирует в data.comments массив комментариев со страницы, требует $\n\n###экспериментальные###\nнужны для работы с базой данных redis\n\nдля того, чтобы включить экспериментальные middleware нужно в middleware.js в самом верху заменить строчку:\n\n\tvar ENABLE_REDIS = true;\n\nсразу же потребуется установить пакеты для работы с редисом\n\n\t$npm install hiredis redis\n\nвстроенные парсеры\n------------------\n\nкак несложно догадаться, parseX middleware – это некие парсеры, которые выдирают из cheerio-дерева некие данные. Ниже описаны форматы данных, экспортируемые встроенными парсерами, на некотором json-like псевдокоде\n\n###parseBlog###\n\tdata.posts = [\n\t\t{\t\t\t\t\t\t// то же самое, что и parseComments, плюс:\n\t\t\toffset: Number\t\t// номер поста в блоге\n\t\t}\n\t\t...\n\t]\n\n###parsePost####\n\tdata.post = {\n\t\tid: String,\t\t\t// идентификатор поста\n\t\tblogName: String,\t// название блога, в котором опубликован пост\n\t\tblogUrl: String,\t// url блога, в котором опубликован пост\n\t\ttitle: String,\t\t// название поста\n\t\turl: String,\t\t// url самого поста\n\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\tusername: String,\t// отображаемое имя автора\n\t\tpubdate: String,\t// дата публикации поста. Строка, как на турбофильме\n\t\tvotes: Number,\t\t// рейтинг поста\n\t\ttext: String,\n\t\tcomments: Array\t// то же самое, что и parseComments\n\t}\n\n###parseComments####\n\tdata.comments = [\n\t\t{\n\t\t\tlevel: Number,\t\t// уровень вложенности в треде (от 0 до 7) \n\t\t\tid: String,\t\t\t// идентификатор комментария в формате /comm\\d+/\n\t\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\t\tusername: String,\t// отображаемое имя автора\n\t\t\tpubdate: String,\t// дата публикации комментария. Строка, как на турбофильме\n\t\t\tvotes: Number,\t\t// рейтинг комментария\n\t\t\ttext: String\n\t\t},\n\t\t...\n\t]\n\nmiddleware\n----------\n\nmiddleware представляет собой обычную функцию-коллбэк, которая может выглядеть примерно так:\n\n\tturbofilm.use (\".*\", function (data, callback) {\n\t\t// некий код\n\t\tcallback ();\n\t});\n\nmiddleware должен вызвать функцию callback в конце своей работы, иначе другие коллбэки просто не смогут отработать.\n\ndata.match\n----------\n\nвнимательный читатель наверняка уже догадался, что в него просто передается результат вычисления url.match (regexp), больше тут добавить нечего\n\nчего нет и что есть, но не работает\n--------------------------------------------\n\n1. на данный момент, нет повторной авторизации при ошибках авторизации, и, соответственно не работает .auth-метод\n2. также, нет возможности оставлять посты и комментарии с помощью .create.(post|comment|reply)\n3. нет никакой поддержки скачивания сериалов\n\nпример\n------\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\tturbofilm.config.ias_id = '0h2048hg08hg8h294gh92h4g8';\n\tturbofilm.use ('.*', turbofilm.middleware.$);\n\tturbofilm.use ('.*', turbofilm.middleware.links);\n\tturbofilm.use ('[BT]log(?!=\\/Posts\\/)', turbofilm.middleware.parseBlog);\n\tturbofilm.use ('[BT]log(?=\\/Posts\\/)', turbofilm.middleware.parsePost);\n\t\n\tturbofilm.use ('.*', function (data, callback) {\n\t\tcallback ();\n\t});\n\t\n\tturbofilm ('/Tlog');\n\t\n\tturbofilm ('/Tlog/Posts/31537');","readmeFilename":"README.md","_id":"turbofilm-community-api@0.1.1","description":"turbofilm-community-api =======================","dist":{"shasum":"7f0606a9a34a3f7f677e8abd2b9283457e2ef4e3","tarball":"https://registry.npmjs.org/turbofilm-community-api/-/turbofilm-community-api-0.1.1.tgz","integrity":"sha512-PLB/fsNqIWGUnXwXQ6Fhrd4MU4FbfVHe69wVN7ngcpnEqb/1WSb+++sm9oYaNgltQzVoc6SAwmch+Q4aWSxuPg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCS1MOVKbStYT1i82gRYUzxOUrrLuc5/erz46e8IRdefwIgQNoinNayRMhOjM86X0IjngVpBSbMdvsW1aEa6ODXXM8="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"ambilight","email":"apsmav@gmail.com"},"maintainers":[{"name":"ambilight","email":"apsmav@gmail.com"}]},"0.1.2":{"name":"turbofilm-community-api","version":"0.1.2","main":"index.js","scripts":{"test":"node test.js"},"author":{"name":"Ambilight"},"license":"BSD","dependencies":{"request":"~2.21.0","cheerio":"~0.12.0"},"readme":"turbofilm-community-api\n=======================\n\nкаркас для парсеров сайта turbofilm.tv\n\n*предназначен только для внутреннего использования продвинутыми пользователями сайта turbofilm.tv*\n\n*для того, чтобы пользоваться пакетом, нужно иметь регистрацию*\n\nархитектуру модуля можно описать двумя словами: connect наоборот — вы пишите middleware, и делаете исходящий запрос, а middleware делает всю остальную работу\n\nустановка\n---------\n\nвам потребуется node.js и npm\n\nв консоли:\n\n\t$npm install turbofilm-community-api\n\nв текстовом редакторе:\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\nиспользование\n-------------\n\nдля начала, вам нужно узнать у своего браузера значение куки под именем `IAS_ID`, без него ничего работать не будет\n\nпередать `IAS_ID` внутрь скрипта можно целыми двумя способами: напрямую, как в примере ниже, и через переменную окружения `TF_IAS_ID` (это может понадобиться для запуска в облаке)\n\n\tturbofilm.config.ias_id = \"<ваш IAS_ID>\"\n\tturbofilm ('/', function (err, data) {\n\t\tconsole.log (data.url) // -> \"/\"\n\t\tconsole.log (data.response) // -> http.ClientResponse\n\t\tconsole.log (data.body) // -> String – текст страницы\n\t\tconsole.log (data.config) // -> Object – настройки модуля\n\t\tconsole.log (data.match) // -> String.match () – далее\n\t});\n\nво фрагменте выше объект data – это то, чем оперируют middleware. на данный момент не один middleware не был подключен, давайте сделаем это\n\n\t\n\tturbofilm.use (\".*\", turbofilm.middleware.$);\n\nсразу же видно две особенности:\n\n1. в одноименном свойстве находятся несколько встроенных middleware (ниже)\n2. в отличии от connect-а, пути пишутся обычными регекспами (именно для этого нужно data.match), что больше похоже на роутер django\n\nтеперь, стало доступно свойство data.$\n\n\tturbofilm (\"/\", function (err, data) {\n\t\tconsole.log (data.$); // -> cheerio.load (data.body)\n\t});\n\t\nвсе middleware выполняются последовательно в порядке вызова .use\n\t\nвстроенные middleware\n---------------------\n###$###\nэкспортирует в data.$ cheerio-дерево документа\n\n###links####\nэкспортирует в data.links массив `$(a[href])`, требует, чтобы $ было включено раньше\n\n###parseBlog###\nэкспортирует в data.posts массив постов со страницы (о парсерах ниже), требует $\n\n###parsePost####\nэкспортирует в data.post пост со страницы (без комментариев!), требует $\n\n###parseComments####\nэкспортирует в data.comments массив комментариев со страницы, требует $\n\n###экспериментальные###\nнужны для работы с базой данных redis\n\nдля того, чтобы включить экспериментальные middleware нужно в middleware.js в самом верху заменить строчку:\n\n\tvar ENABLE_REDIS = true;\n\nсразу же потребуется установить пакеты для работы с редисом\n\n\t$npm install hiredis redis\n\nвстроенные парсеры\n------------------\n\nкак несложно догадаться, parseX middleware – это некие парсеры, которые выдирают из cheerio-дерева некие данные. Ниже описаны форматы данных, экспортируемые встроенными парсерами, на некотором json-like псевдокоде\n\n###parseBlog###\n\tdata.posts = [\n\t\t{\t\t\t\t\t\t// то же самое, что и parseComments, плюс:\n\t\t\toffset: Number\t\t// номер поста в блоге\n\t\t}\n\t\t...\n\t]\n\n###parsePost####\n\tdata.post = {\n\t\tid: String,\t\t\t// идентификатор поста\n\t\tblogName: String,\t// название блога, в котором опубликован пост\n\t\tblogUrl: String,\t// url блога, в котором опубликован пост\n\t\ttitle: String,\t\t// название поста\n\t\turl: String,\t\t// url самого поста\n\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\tusername: String,\t// отображаемое имя автора\n\t\tpubdate: String,\t// дата публикации поста. Строка, как на турбофильме\n\t\tvotes: Number,\t\t// рейтинг поста\n\t\ttext: String,\n\t\tcomments: Array\t// то же самое, что и parseComments\n\t}\n\n###parseComments####\n\tdata.comments = [\n\t\t{\n\t\t\tlevel: Number,\t\t// уровень вложенности в треде (от 0 до 7) \n\t\t\tid: String,\t\t\t// идентификатор комментария в формате /comm\\d+/\n\t\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\t\tusername: String,\t// отображаемое имя автора\n\t\t\tpubdate: String,\t// дата публикации комментария. Строка, как на турбофильме\n\t\t\tvotes: Number,\t\t// рейтинг комментария\n\t\t\ttext: String\n\t\t},\n\t\t...\n\t]\n\nmiddleware\n----------\n\nmiddleware представляет собой обычную функцию-коллбэк, которая может выглядеть примерно так:\n\n\tturbofilm.use (\".*\", function (data, callback) {\n\t\t// некий код\n\t\tcallback ();\n\t});\n\nmiddleware должен вызвать функцию callback в конце своей работы, иначе другие коллбэки просто не смогут отработать.\n\ndata.match\n----------\n\nвнимательный читатель наверняка уже догадался, что в него просто передается результат вычисления url.match (regexp), больше тут добавить нечего\n\nчего нет и что есть, но не работает\n--------------------------------------------\n\n1. на данный момент, нет повторной авторизации при ошибках авторизации, и, соответственно не работает .auth-метод\n2. также, нет возможности оставлять посты и комментарии с помощью .create.(post|comment|reply)\n3. нет никакой поддержки скачивания сериалов\n\nпример\n------\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\tturbofilm.config.ias_id = '0h2048hg08hg8h294gh92h4g8';\n\tturbofilm.use ('.*', turbofilm.middleware.$);\n\tturbofilm.use ('.*', turbofilm.middleware.links);\n\tturbofilm.use ('[BT]log(?!=\\/Posts\\/)', turbofilm.middleware.parseBlog);\n\tturbofilm.use ('[BT]log(?=\\/Posts\\/)', turbofilm.middleware.parsePost);\n\t\n\tturbofilm.use ('.*', function (data, callback) {\n\t\tcallback ();\n\t});\n\t\n\tturbofilm ('/Tlog');\n\t\n\tturbofilm ('/Tlog/Posts/31537');","readmeFilename":"README.md","_id":"turbofilm-community-api@0.1.2","description":"turbofilm-community-api =======================","dist":{"shasum":"b03867151d4be2d07be3167f9c81c8262ef8d74c","tarball":"https://registry.npmjs.org/turbofilm-community-api/-/turbofilm-community-api-0.1.2.tgz","integrity":"sha512-MhrMPPQ44+iEFEoOV1/axo4cTkaK9Ebk6UyM25AwKR8gnOu2yYZ55yE0rwFcGfb6Vyi76H4Hlhz73xemr6wU2w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICSnBUcrF9XnSf46SKcz8/vJbDuwav/Hh7V/XBL1xcoDAiBheV8cjakFeaCOZ96iqlT6PbPX5k5nvt8M7R4f8kRbUQ=="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"ambilight","email":"apsmav@gmail.com"},"maintainers":[{"name":"ambilight","email":"apsmav@gmail.com"}]},"0.1.4":{"name":"turbofilm-community-api","version":"0.1.4","main":"index.js","scripts":{"test":"node test.js"},"author":{"name":"Ambilight"},"license":"BSD","dependencies":{"request":"~2.21.0","cheerio":"~0.12.0","redis":"*"},"readme":"turbofilm-community-api\n=======================\n\nкаркас для парсеров сайта turbofilm.tv\n\n*предназначен только для внутреннего использования продвинутыми пользователями сайта turbofilm.tv*\n\n*для того, чтобы пользоваться пакетом, нужно иметь регистрацию*\n\nархитектуру модуля можно описать двумя словами: connect наоборот — вы пишите middleware, и делаете исходящий запрос, а middleware делает всю остальную работу\n\nустановка\n---------\n\nвам потребуется node.js и npm\n\nв консоли:\n\n\t$npm install turbofilm-community-api\n\nв текстовом редакторе:\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\nиспользование\n-------------\n\nдля начала, вам нужно узнать у своего браузера значение куки под именем `IAS_ID`, без него ничего работать не будет\n\nпередать `IAS_ID` внутрь скрипта можно целыми двумя способами: напрямую, как в примере ниже, и через переменную окружения `TF_IAS_ID` (это может понадобиться для запуска в облаке)\n\n\tturbofilm.config.ias_id = \"<ваш IAS_ID>\"\n\tturbofilm ('/', function (err, data) {\n\t\tconsole.log (data.url) // -> \"/\"\n\t\tconsole.log (data.response) // -> http.ClientResponse\n\t\tconsole.log (data.body) // -> String – текст страницы\n\t\tconsole.log (data.config) // -> Object – настройки модуля\n\t\tconsole.log (data.match) // -> String.match () – далее\n\t});\n\nво фрагменте выше объект data – это то, чем оперируют middleware. на данный момент не один middleware не был подключен, давайте сделаем это\n\n\t\n\tturbofilm.use (\".*\", turbofilm.middleware.$);\n\nсразу же видно две особенности:\n\n1. в одноименном свойстве находятся несколько встроенных middleware (ниже)\n2. в отличии от connect-а, пути пишутся обычными регекспами (именно для этого нужно data.match), что больше похоже на роутер django\n\nтеперь, стало доступно свойство data.$\n\n\tturbofilm (\"/\", function (err, data) {\n\t\tconsole.log (data.$); // -> cheerio.load (data.body)\n\t});\n\t\nвсе middleware выполняются последовательно в порядке вызова .use\n\t\nвстроенные middleware\n---------------------\n###$###\nэкспортирует в data.$ cheerio-дерево документа\n\n###links####\nэкспортирует в data.links массив `$(a[href])`, требует, чтобы $ было включено раньше\n\n###parseBlog###\nэкспортирует в data.posts массив постов со страницы (о парсерах ниже), требует $\n\n###parsePost####\nэкспортирует в data.post пост со страницы (без комментариев!), требует $\n\n###parseComments####\nэкспортирует в data.comments массив комментариев со страницы, требует $\n\n###экспериментальные###\nнужны для работы с базой данных redis\n\nдля того, чтобы включить экспериментальные middleware нужно в middleware.js в самом верху заменить строчку:\n\n\tvar ENABLE_REDIS = true;\n\nсразу же потребуется установить пакеты для работы с редисом\n\n\t$npm install hiredis redis\n\nвстроенные парсеры\n------------------\n\nкак несложно догадаться, parseX middleware – это некие парсеры, которые выдирают из cheerio-дерева некие данные. Ниже описаны форматы данных, экспортируемые встроенными парсерами, на некотором json-like псевдокоде\n\n###parseBlog###\n\tdata.posts = [\n\t\t{\t\t\t\t\t\t// то же самое, что и parseComments, плюс:\n\t\t\toffset: Number\t\t// номер поста в блоге\n\t\t}\n\t\t...\n\t]\n\n###parsePost####\n\tdata.post = {\n\t\tid: String,\t\t\t// идентификатор поста\n\t\tblogName: String,\t// название блога, в котором опубликован пост\n\t\tblogUrl: String,\t// url блога, в котором опубликован пост\n\t\ttitle: String,\t\t// название поста\n\t\turl: String,\t\t// url самого поста\n\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\tusername: String,\t// отображаемое имя автора\n\t\tpubdate: String,\t// дата публикации поста. Строка, как на турбофильме\n\t\tvotes: Number,\t\t// рейтинг поста\n\t\ttext: String,\n\t\tcomments: Array\t// то же самое, что и parseComments\n\t}\n\n###parseComments####\n\tdata.comments = [\n\t\t{\n\t\t\tlevel: Number,\t\t// уровень вложенности в треде (от 0 до 7) \n\t\t\tid: String,\t\t\t// идентификатор комментария в формате /comm\\d+/\n\t\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\t\tusername: String,\t// отображаемое имя автора\n\t\t\tpubdate: String,\t// дата публикации комментария. Строка, как на турбофильме\n\t\t\tvotes: Number,\t\t// рейтинг комментария\n\t\t\ttext: String\n\t\t},\n\t\t...\n\t]\n\nmiddleware\n----------\n\nmiddleware представляет собой обычную функцию-коллбэк, которая может выглядеть примерно так:\n\n\tturbofilm.use (\".*\", function (data, callback) {\n\t\t// некий код\n\t\tcallback ();\n\t});\n\nmiddleware должен вызвать функцию callback в конце своей работы, иначе другие коллбэки просто не смогут отработать.\n\ndata.match\n----------\n\nвнимательный читатель наверняка уже догадался, что в него просто передается результат вычисления url.match (regexp), больше тут добавить нечего\n\nчего нет и что есть, но не работает\n--------------------------------------------\n\n1. на данный момент, нет повторной авторизации при ошибках авторизации, и, соответственно не работает .auth-метод\n2. также, нет возможности оставлять посты и комментарии с помощью .create.(post|comment|reply)\n3. нет никакой поддержки скачивания сериалов\n\nпример\n------\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\tturbofilm.config.ias_id = '0h2048hg08hg8h294gh92h4g8';\n\tturbofilm.use ('.*', turbofilm.middleware.$);\n\tturbofilm.use ('.*', turbofilm.middleware.links);\n\tturbofilm.use ('[BT]log(?!=\\/Posts\\/)', turbofilm.middleware.parseBlog);\n\tturbofilm.use ('[BT]log(?=\\/Posts\\/)', turbofilm.middleware.parsePost);\n\t\n\tturbofilm.use ('.*', function (data, callback) {\n\t\tcallback ();\n\t});\n\t\n\tturbofilm ('/Tlog');\n\t\n\tturbofilm ('/Tlog/Posts/31537');","readmeFilename":"README.md","_id":"turbofilm-community-api@0.1.4","description":"turbofilm-community-api =======================","dist":{"shasum":"8999e98c750fc86d1743e4369a8979f674e537cf","tarball":"https://registry.npmjs.org/turbofilm-community-api/-/turbofilm-community-api-0.1.4.tgz","integrity":"sha512-XmD4eVkVxP6Rvr88Lst+1o82ogoXKljGPvw7WVh2OghftCGJWp/KLQE9Yba5YL5VpPBB/eeB+oIE7C1TgG64DA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD21UbbgRU84lIXcTBVXwbwJbBx243qURmJbJVWaOfHUgIhAO18Ss2+1ucxTc/H62TgUN08wYlHc7aJnB05tgD3jOvs"}]},"_npmVersion":"1.1.65","_npmUser":{"name":"ambilight","email":"apsmav@gmail.com"},"maintainers":[{"name":"ambilight","email":"apsmav@gmail.com"}]},"0.1.5":{"name":"turbofilm-community-api","version":"0.1.5","main":"index.js","scripts":{"test":"node test.js"},"author":{"name":"Ambilight"},"license":"BSD","dependencies":{"request":"~2.21.0","cheerio":"~0.12.0","redis":"*"},"readme":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it\n\nturbofilm-community-api\n=======================\n\nкаркас для парсеров сайта turbofilm.tv\n\n*предназначен только для внутреннего использования продвинутыми пользователями сайта turbofilm.tv*\n\n*для того, чтобы пользоваться пакетом, нужно иметь регистрацию*\n\nархитектуру модуля можно описать двумя словами: connect наоборот — вы пишите middleware, и делаете исходящий запрос, а middleware делает всю остальную работу\n\nустановка\n---------\n\nвам потребуется node.js и npm\n\nв консоли:\n\n\t$npm install turbofilm-community-api\n\nв текстовом редакторе:\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\nиспользование\n-------------\n\nдля начала, вам нужно узнать у своего браузера значение куки под именем `IAS_ID`, без него ничего работать не будет\n\nпередать `IAS_ID` внутрь скрипта можно целыми двумя способами: напрямую, как в примере ниже, и через переменную окружения `TF_IAS_ID` (это может понадобиться для запуска в облаке)\n\n\tturbofilm.config.ias_id = \"<ваш IAS_ID>\"\n\tturbofilm ('/', function (err, data) {\n\t\tconsole.log (data.url) // -> \"/\"\n\t\tconsole.log (data.response) // -> http.ClientResponse\n\t\tconsole.log (data.body) // -> String – текст страницы\n\t\tconsole.log (data.config) // -> Object – настройки модуля\n\t\tconsole.log (data.match) // -> String.match () – далее\n\t});\n\nво фрагменте выше объект data – это то, чем оперируют middleware. на данный момент не один middleware не был подключен, давайте сделаем это\n\n\t\n\tturbofilm.use (\".*\", turbofilm.middleware.$);\n\nсразу же видно две особенности:\n\n1. в одноименном свойстве находятся несколько встроенных middleware (ниже)\n2. в отличии от connect-а, пути пишутся обычными регекспами (именно для этого нужно data.match), что больше похоже на роутер django\n\nтеперь, стало доступно свойство data.$\n\n\tturbofilm (\"/\", function (err, data) {\n\t\tconsole.log (data.$); // -> cheerio.load (data.body)\n\t});\n\t\nвсе middleware выполняются последовательно в порядке вызова .use\n\t\nвстроенные middleware\n---------------------\n###$###\nэкспортирует в data.$ cheerio-дерево документа\n\n###links####\nэкспортирует в data.links массив `$(a[href])`, требует, чтобы $ было включено раньше\n\n###parseBlog###\nэкспортирует в data.posts массив постов со страницы (о парсерах ниже), требует $\n\n###parsePost####\nэкспортирует в data.post пост со страницы (без комментариев!), требует $\n\n###parseComments####\nэкспортирует в data.comments массив комментариев со страницы, требует $\n\n###экспериментальные###\nнужны для работы с базой данных redis\n\nдля того, чтобы включить экспериментальные middleware нужно в middleware.js в самом верху заменить строчку:\n\n\tvar ENABLE_REDIS = true;\n\nсразу же потребуется установить пакеты для работы с редисом\n\n\t$npm install hiredis redis\n\nвстроенные парсеры\n------------------\n\nкак несложно догадаться, parseX middleware – это некие парсеры, которые выдирают из cheerio-дерева некие данные. Ниже описаны форматы данных, экспортируемые встроенными парсерами, на некотором json-like псевдокоде\n\n###parseBlog###\n\tdata.posts = [\n\t\t{\t\t\t\t\t\t// то же самое, что и parseComments, плюс:\n\t\t\toffset: Number\t\t// номер поста в блоге\n\t\t}\n\t\t...\n\t]\n\n###parsePost####\n\tdata.post = {\n\t\tid: String,\t\t\t// идентификатор поста\n\t\tblogName: String,\t// название блога, в котором опубликован пост\n\t\tblogUrl: String,\t// url блога, в котором опубликован пост\n\t\ttitle: String,\t\t// название поста\n\t\turl: String,\t\t// url самого поста\n\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\tusername: String,\t// отображаемое имя автора\n\t\tpubdate: String,\t// дата публикации поста. Строка, как на турбофильме\n\t\tvotes: Number,\t\t// рейтинг поста\n\t\ttext: String,\n\t\tcomments: Array\t// то же самое, что и parseComments\n\t}\n\n###parseComments####\n\tdata.comments = [\n\t\t{\n\t\t\tlevel: Number,\t\t// уровень вложенности в треде (от 0 до 7) \n\t\t\tid: String,\t\t\t// идентификатор комментария в формате /comm\\d+/\n\t\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\t\tusername: String,\t// отображаемое имя автора\n\t\t\tpubdate: String,\t// дата публикации комментария. Строка, как на турбофильме\n\t\t\tvotes: Number,\t\t// рейтинг комментария\n\t\t\ttext: String\n\t\t},\n\t\t...\n\t]\n\nmiddleware\n----------\n\nmiddleware представляет собой обычную функцию-коллбэк, которая может выглядеть примерно так:\n\n\tturbofilm.use (\".*\", function (data, callback) {\n\t\t// некий код\n\t\tcallback ();\n\t});\n\nmiddleware должен вызвать функцию callback в конце своей работы, иначе другие коллбэки просто не смогут отработать.\n\ndata.match\n----------\n\nвнимательный читатель наверняка уже догадался, что в него просто передается результат вычисления url.match (regexp), больше тут добавить нечего\n\nчего нет и что есть, но не работает\n--------------------------------------------\n\n1. на данный момент, нет повторной авторизации при ошибках авторизации, и, соответственно не работает .auth-метод\n2. также, нет возможности оставлять посты и комментарии с помощью .create.(post|comment|reply)\n3. нет никакой поддержки скачивания сериалов\n\nпример\n------\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\tturbofilm.config.ias_id = '0h2048hg08hg8h294gh92h4g8';\n\tturbofilm.use ('.*', turbofilm.middleware.$);\n\tturbofilm.use ('.*', turbofilm.middleware.links);\n\tturbofilm.use ('[BT]log(?!=\\/Posts\\/)', turbofilm.middleware.parseBlog);\n\tturbofilm.use ('[BT]log(?=\\/Posts\\/)', turbofilm.middleware.parsePost);\n\t\n\tturbofilm.use ('.*', function (data, callback) {\n\t\tcallback ();\n\t});\n\t\n\tturbofilm ('/Tlog');\n\t\n\tturbofilm ('/Tlog/Posts/31537');","readmeFilename":"README.md","_id":"turbofilm-community-api@0.1.5","description":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it","dist":{"shasum":"206fc607b53f62cfc4c29daaf4e8435467912e49","tarball":"https://registry.npmjs.org/turbofilm-community-api/-/turbofilm-community-api-0.1.5.tgz","integrity":"sha512-JM3sbR1in49Zbay5x9a7CEKHEbSBR+PTtEpLO5lFnPpOawTU321i7jvQUntH0VfaH3fpZURL5V34hLXAN7L1RA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmiUK+sNJCApPNf1WWRvDpZ4v5UA5SM9TdhdO/A1gJiQIgWoNLJTFQ5K5CQfJr7ZUoGLfussu01jG+6yJZVfLMxgg="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"ambilight","email":"apsmav@gmail.com"},"maintainers":[{"name":"ambilight","email":"apsmav@gmail.com"}]},"0.1.6":{"name":"turbofilm-community-api","version":"0.1.6","main":"index.js","scripts":{"test":"node test.js"},"author":{"name":"Ambilight"},"license":"BSD","dependencies":{"request":"~2.21.0","cheerio":"~0.12.0","redis":"*"},"readme":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it\n\nturbofilm-community-api\n=======================\n\nкаркас для парсеров сайта turbofilm.tv\n\n*предназначен только для внутреннего использования продвинутыми пользователями сайта turbofilm.tv*\n\n*для того, чтобы пользоваться пакетом, нужно иметь регистрацию*\n\nархитектуру модуля можно описать двумя словами: connect наоборот — вы пишите middleware, и делаете исходящий запрос, а middleware делает всю остальную работу\n\nустановка\n---------\n\nвам потребуется node.js и npm\n\nв консоли:\n\n\t$npm install turbofilm-community-api\n\nв текстовом редакторе:\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\nиспользование\n-------------\n\nдля начала, вам нужно узнать у своего браузера значение куки под именем `IAS_ID`, без него ничего работать не будет\n\nпередать `IAS_ID` внутрь скрипта можно целыми двумя способами: напрямую, как в примере ниже, и через переменную окружения `TF_IAS_ID` (это может понадобиться для запуска в облаке)\n\n\tturbofilm.config.ias_id = \"<ваш IAS_ID>\"\n\tturbofilm ('/', function (err, data) {\n\t\tconsole.log (data.url) // -> \"/\"\n\t\tconsole.log (data.response) // -> http.ClientResponse\n\t\tconsole.log (data.body) // -> String – текст страницы\n\t\tconsole.log (data.config) // -> Object – настройки модуля\n\t\tconsole.log (data.match) // -> String.match () – далее\n\t});\n\nво фрагменте выше объект data – это то, чем оперируют middleware. на данный момент не один middleware не был подключен, давайте сделаем это\n\n\t\n\tturbofilm.use (\".*\", turbofilm.middleware.$);\n\nсразу же видно две особенности:\n\n1. в одноименном свойстве находятся несколько встроенных middleware (ниже)\n2. в отличии от connect-а, пути пишутся обычными регекспами (именно для этого нужно data.match), что больше похоже на роутер django\n\nтеперь, стало доступно свойство data.$\n\n\tturbofilm (\"/\", function (err, data) {\n\t\tconsole.log (data.$); // -> cheerio.load (data.body)\n\t});\n\t\nвсе middleware выполняются последовательно в порядке вызова .use\n\t\nвстроенные middleware\n---------------------\n###$###\nэкспортирует в data.$ cheerio-дерево документа\n\n###links####\nэкспортирует в data.links массив `$(a[href])`, требует, чтобы $ было включено раньше\n\n###parseBlog###\nэкспортирует в data.posts массив постов со страницы (о парсерах ниже), требует $\n\n###parsePost####\nэкспортирует в data.post пост со страницы (без комментариев!), требует $\n\n###parseComments####\nэкспортирует в data.comments массив комментариев со страницы, требует $\n\n###экспериментальные###\nнужны для работы с базой данных redis\n\nдля того, чтобы включить экспериментальные middleware нужно в middleware.js в самом верху заменить строчку:\n\n\tvar ENABLE_REDIS = true;\n\nсразу же потребуется установить пакеты для работы с редисом\n\n\t$npm install hiredis redis\n\nвстроенные парсеры\n------------------\n\nкак несложно догадаться, parseX middleware – это некие парсеры, которые выдирают из cheerio-дерева некие данные. Ниже описаны форматы данных, экспортируемые встроенными парсерами, на некотором json-like псевдокоде\n\n###parseBlog###\n\tdata.posts = [\n\t\t{\t\t\t\t\t\t// то же самое, что и parseComments, плюс:\n\t\t\toffset: Number\t\t// номер поста в блоге\n\t\t}\n\t\t...\n\t]\n\n###parsePost####\n\tdata.post = {\n\t\tid: String,\t\t\t// идентификатор поста\n\t\tblogName: String,\t// название блога, в котором опубликован пост\n\t\tblogUrl: String,\t// url блога, в котором опубликован пост\n\t\ttitle: String,\t\t// название поста\n\t\turl: String,\t\t// url самого поста\n\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\tusername: String,\t// отображаемое имя автора\n\t\tpubdate: String,\t// дата публикации поста. Строка, как на турбофильме\n\t\tvotes: Number,\t\t// рейтинг поста\n\t\ttext: String,\n\t\tcomments: Array\t// то же самое, что и parseComments\n\t}\n\n###parseComments####\n\tdata.comments = [\n\t\t{\n\t\t\tlevel: Number,\t\t// уровень вложенности в треде (от 0 до 7) \n\t\t\tid: String,\t\t\t// идентификатор комментария в формате /comm\\d+/\n\t\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\t\tusername: String,\t// отображаемое имя автора\n\t\t\tpubdate: String,\t// дата публикации комментария. Строка, как на турбофильме\n\t\t\tvotes: Number,\t\t// рейтинг комментария\n\t\t\ttext: String\n\t\t},\n\t\t...\n\t]\n\nmiddleware\n----------\n\nmiddleware представляет собой обычную функцию-коллбэк, которая может выглядеть примерно так:\n\n\tturbofilm.use (\".*\", function (data, callback) {\n\t\t// некий код\n\t\tcallback ();\n\t});\n\nmiddleware должен вызвать функцию callback в конце своей работы, иначе другие коллбэки просто не смогут отработать.\n\ndata.match\n----------\n\nвнимательный читатель наверняка уже догадался, что в него просто передается результат вычисления url.match (regexp), больше тут добавить нечего\n\nчего нет и что есть, но не работает\n--------------------------------------------\n\n1. на данный момент, нет повторной авторизации при ошибках авторизации, и, соответственно не работает .auth-метод\n2. также, нет возможности оставлять посты и комментарии с помощью .create.(post|comment|reply)\n3. нет никакой поддержки скачивания сериалов\n\nпример\n------\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\tturbofilm.config.ias_id = '0h2048hg08hg8h294gh92h4g8';\n\tturbofilm.use ('.*', turbofilm.middleware.$);\n\tturbofilm.use ('.*', turbofilm.middleware.links);\n\tturbofilm.use ('[BT]log(?!=\\/Posts\\/)', turbofilm.middleware.parseBlog);\n\tturbofilm.use ('[BT]log(?=\\/Posts\\/)', turbofilm.middleware.parsePost);\n\t\n\tturbofilm.use ('.*', function (data, callback) {\n\t\tcallback ();\n\t});\n\t\n\tturbofilm ('/Tlog');\n\t\n\tturbofilm ('/Tlog/Posts/31537');","readmeFilename":"README.md","_id":"turbofilm-community-api@0.1.6","description":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it","dist":{"shasum":"fa6379433c2f2b83ee99cd1b94af8fa0702b2258","tarball":"https://registry.npmjs.org/turbofilm-community-api/-/turbofilm-community-api-0.1.6.tgz","integrity":"sha512-a8hSPsTYFQDPP2nsLTpRWjNbCd/H3nWeFsa0mK7gbkrao/cEwelx3teK35rlbfq7smRd+WWUZPJ4A5H4YYu4zA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFJqmQ0ahIXbxgokLEKZuH6yndA2oTFduX9CQZUBJXksAiBx6LSX+VJx9kaHBRcP3e+RQSVjOJK+GB5pRDWR3bpvGw=="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"ambilight","email":"apsmav@gmail.com"},"maintainers":[{"name":"ambilight","email":"apsmav@gmail.com"}]},"0.1.7":{"name":"turbofilm-community-api","version":"0.1.7","main":"index.js","scripts":{"test":"node test.js"},"author":{"name":"Ambilight"},"license":"BSD","dependencies":{"request":"~2.21.0","cheerio":"~0.12.0","redis":"*"},"readme":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it\n\nturbofilm-community-api\n=======================\n\nкаркас для парсеров сайта turbofilm.tv\n\n*предназначен только для внутреннего использования продвинутыми пользователями сайта turbofilm.tv*\n\n*для того, чтобы пользоваться пакетом, нужно иметь регистрацию*\n\nархитектуру модуля можно описать двумя словами: connect наоборот — вы пишите middleware, и делаете исходящий запрос, а middleware делает всю остальную работу\n\nустановка\n---------\n\nвам потребуется node.js и npm\n\nв консоли:\n\n\t$npm install turbofilm-community-api\n\nв текстовом редакторе:\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\nиспользование\n-------------\n\nдля начала, вам нужно узнать у своего браузера значение куки под именем `IAS_ID`, без него ничего работать не будет\n\nпередать `IAS_ID` внутрь скрипта можно целыми двумя способами: напрямую, как в примере ниже, и через переменную окружения `TF_IAS_ID` (это может понадобиться для запуска в облаке)\n\n\tturbofilm.config.ias_id = \"<ваш IAS_ID>\"\n\tturbofilm ('/', function (err, data) {\n\t\tconsole.log (data.url) // -> \"/\"\n\t\tconsole.log (data.response) // -> http.ClientResponse\n\t\tconsole.log (data.body) // -> String – текст страницы\n\t\tconsole.log (data.config) // -> Object – настройки модуля\n\t\tconsole.log (data.match) // -> String.match () – далее\n\t});\n\nво фрагменте выше объект data – это то, чем оперируют middleware. на данный момент не один middleware не был подключен, давайте сделаем это\n\n\t\n\tturbofilm.use (\".*\", turbofilm.middleware.$);\n\nсразу же видно две особенности:\n\n1. в одноименном свойстве находятся несколько встроенных middleware (ниже)\n2. в отличии от connect-а, пути пишутся обычными регекспами (именно для этого нужно data.match), что больше похоже на роутер django\n\nтеперь, стало доступно свойство data.$\n\n\tturbofilm (\"/\", function (err, data) {\n\t\tconsole.log (data.$); // -> cheerio.load (data.body)\n\t});\n\t\nвсе middleware выполняются последовательно в порядке вызова .use\n\t\nвстроенные middleware\n---------------------\n###$###\nэкспортирует в data.$ cheerio-дерево документа\n\n###links####\nэкспортирует в data.links массив `$(a[href])`, требует, чтобы $ было включено раньше\n\n###parseBlog###\nэкспортирует в data.posts массив постов со страницы (о парсерах ниже), требует $\n\n###parsePost####\nэкспортирует в data.post пост со страницы (без комментариев!), требует $\n\n###parseComments####\nэкспортирует в data.comments массив комментариев со страницы, требует $\n\n###экспериментальные###\nнужны для работы с базой данных redis\n\nдля того, чтобы включить экспериментальные middleware нужно в middleware.js в самом верху заменить строчку:\n\n\tvar ENABLE_REDIS = true;\n\nсразу же потребуется установить пакеты для работы с редисом\n\n\t$npm install hiredis redis\n\nвстроенные парсеры\n------------------\n\nкак несложно догадаться, parseX middleware – это некие парсеры, которые выдирают из cheerio-дерева некие данные. Ниже описаны форматы данных, экспортируемые встроенными парсерами, на некотором json-like псевдокоде\n\n###parseBlog###\n\tdata.posts = [\n\t\t{\t\t\t\t\t\t// то же самое, что и parseComments, плюс:\n\t\t\toffset: Number\t\t// номер поста в блоге\n\t\t}\n\t\t...\n\t]\n\n###parsePost####\n\tdata.post = {\n\t\tid: String,\t\t\t// идентификатор поста\n\t\tblogName: String,\t// название блога, в котором опубликован пост\n\t\tblogUrl: String,\t// url блога, в котором опубликован пост\n\t\ttitle: String,\t\t// название поста\n\t\turl: String,\t\t// url самого поста\n\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\tusername: String,\t// отображаемое имя автора\n\t\tpubdate: String,\t// дата публикации поста. Строка, как на турбофильме\n\t\tvotes: Number,\t\t// рейтинг поста\n\t\ttext: String,\n\t\tcomments: Array\t// то же самое, что и parseComments\n\t}\n\n###parseComments####\n\tdata.comments = [\n\t\t{\n\t\t\tlevel: Number,\t\t// уровень вложенности в треде (от 0 до 7) \n\t\t\tid: String,\t\t\t// идентификатор комментария в формате /comm\\d+/\n\t\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\t\tusername: String,\t// отображаемое имя автора\n\t\t\tpubdate: String,\t// дата публикации комментария. Строка, как на турбофильме\n\t\t\tvotes: Number,\t\t// рейтинг комментария\n\t\t\ttext: String\n\t\t},\n\t\t...\n\t]\n\nmiddleware\n----------\n\nmiddleware представляет собой обычную функцию-коллбэк, которая может выглядеть примерно так:\n\n\tturbofilm.use (\".*\", function (data, callback) {\n\t\t// некий код\n\t\tcallback ();\n\t});\n\nmiddleware должен вызвать функцию callback в конце своей работы, иначе другие коллбэки просто не смогут отработать.\n\ndata.match\n----------\n\nвнимательный читатель наверняка уже догадался, что в него просто передается результат вычисления url.match (regexp), больше тут добавить нечего\n\nчего нет и что есть, но не работает\n--------------------------------------------\n\n1. на данный момент, нет повторной авторизации при ошибках авторизации, и, соответственно не работает .auth-метод\n2. также, нет возможности оставлять посты и комментарии с помощью .create.(post|comment|reply)\n3. нет никакой поддержки скачивания сериалов\n\nпример\n------\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\tturbofilm.config.ias_id = '0h2048hg08hg8h294gh92h4g8';\n\tturbofilm.use ('.*', turbofilm.middleware.$);\n\tturbofilm.use ('.*', turbofilm.middleware.links);\n\tturbofilm.use ('[BT]log(?!=\\/Posts\\/)', turbofilm.middleware.parseBlog);\n\tturbofilm.use ('[BT]log(?=\\/Posts\\/)', turbofilm.middleware.parsePost);\n\t\n\tturbofilm.use ('.*', function (data, callback) {\n\t\tcallback ();\n\t});\n\t\n\tturbofilm ('/Tlog');\n\t\n\tturbofilm ('/Tlog/Posts/31537');","readmeFilename":"README.md","_id":"turbofilm-community-api@0.1.7","description":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it","dist":{"shasum":"61c1cc8023253ba4a19ff91503ad6f91e787ccec","tarball":"https://registry.npmjs.org/turbofilm-community-api/-/turbofilm-community-api-0.1.7.tgz","integrity":"sha512-w+JWZqoiCXhhayi2Ah+U1rif/5C1vZzKFXFTFUSDVUo4zjckeebfwqzQuQLOxW3VLo7BE6JArwPIxXT/VWfS7g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDOdhsu84zfQleY6+a/FdBTSgmTI8FDQldf5PuuB1rvYwIhAK9RwDz7mgqL8PIwnXL0qwVrc1jEO9b2Vz1L5dGrFlvY"}]},"_npmVersion":"1.1.65","_npmUser":{"name":"ambilight","email":"apsmav@gmail.com"},"maintainers":[{"name":"ambilight","email":"apsmav@gmail.com"}]},"0.1.8":{"name":"turbofilm-community-api","version":"0.1.8","main":"index.js","scripts":{"test":"node test.js"},"author":{"name":"Ambilight"},"license":"BSD","dependencies":{"request":"~2.21.0","cheerio":"~0.12.0","redis":"*"},"readme":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it\n\nturbofilm-community-api\n=======================\n\nкаркас для парсеров сайта turbofilm.tv\n\n*предназначен только для внутреннего использования продвинутыми пользователями сайта turbofilm.tv*\n\n*для того, чтобы пользоваться пакетом, нужно иметь регистрацию*\n\nархитектуру модуля можно описать двумя словами: connect наоборот — вы пишите middleware, и делаете исходящий запрос, а middleware делает всю остальную работу\n\nустановка\n---------\n\nвам потребуется node.js и npm\n\nв консоли:\n\n\t$npm install turbofilm-community-api\n\nв текстовом редакторе:\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\nиспользование\n-------------\n\nдля начала, вам нужно узнать у своего браузера значение куки под именем `IAS_ID`, без него ничего работать не будет\n\nпередать `IAS_ID` внутрь скрипта можно целыми двумя способами: напрямую, как в примере ниже, и через переменную окружения `TF_IAS_ID` (это может понадобиться для запуска в облаке)\n\n\tturbofilm.config.ias_id = \"<ваш IAS_ID>\"\n\tturbofilm ('/', function (err, data) {\n\t\tconsole.log (data.url) // -> \"/\"\n\t\tconsole.log (data.response) // -> http.ClientResponse\n\t\tconsole.log (data.body) // -> String – текст страницы\n\t\tconsole.log (data.config) // -> Object – настройки модуля\n\t\tconsole.log (data.match) // -> String.match () – далее\n\t});\n\nво фрагменте выше объект data – это то, чем оперируют middleware. на данный момент не один middleware не был подключен, давайте сделаем это\n\n\t\n\tturbofilm.use (\".*\", turbofilm.middleware.$);\n\nсразу же видно две особенности:\n\n1. в одноименном свойстве находятся несколько встроенных middleware (ниже)\n2. в отличии от connect-а, пути пишутся обычными регекспами (именно для этого нужно data.match), что больше похоже на роутер django\n\nтеперь, стало доступно свойство data.$\n\n\tturbofilm (\"/\", function (err, data) {\n\t\tconsole.log (data.$); // -> cheerio.load (data.body)\n\t});\n\t\nвсе middleware выполняются последовательно в порядке вызова .use\n\t\nвстроенные middleware\n---------------------\n###$###\nэкспортирует в data.$ cheerio-дерево документа\n\n###links####\nэкспортирует в data.links массив `$(a[href])`, требует, чтобы $ было включено раньше\n\n###parseBlog###\nэкспортирует в data.posts массив постов со страницы (о парсерах ниже), требует $\n\n###parsePost####\nэкспортирует в data.post пост со страницы (без комментариев!), требует $\n\n###parseComments####\nэкспортирует в data.comments массив комментариев со страницы, требует $\n\n###экспериментальные###\nнужны для работы с базой данных redis\n\nдля того, чтобы включить экспериментальные middleware нужно в middleware.js в самом верху заменить строчку:\n\n\tvar ENABLE_REDIS = true;\n\nсразу же потребуется установить пакеты для работы с редисом\n\n\t$npm install hiredis redis\n\nвстроенные парсеры\n------------------\n\nкак несложно догадаться, parseX middleware – это некие парсеры, которые выдирают из cheerio-дерева некие данные. Ниже описаны форматы данных, экспортируемые встроенными парсерами, на некотором json-like псевдокоде\n\n###parseBlog###\n\tdata.posts = [\n\t\t{\t\t\t\t\t\t// то же самое, что и parseComments, плюс:\n\t\t\toffset: Number\t\t// номер поста в блоге\n\t\t}\n\t\t...\n\t]\n\n###parsePost####\n\tdata.post = {\n\t\tid: String,\t\t\t// идентификатор поста\n\t\tblogName: String,\t// название блога, в котором опубликован пост\n\t\tblogUrl: String,\t// url блога, в котором опубликован пост\n\t\ttitle: String,\t\t// название поста\n\t\turl: String,\t\t// url самого поста\n\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\tusername: String,\t// отображаемое имя автора\n\t\tpubdate: String,\t// дата публикации поста. Строка, как на турбофильме\n\t\tvotes: Number,\t\t// рейтинг поста\n\t\ttext: String,\n\t\tcomments: Array\t// то же самое, что и parseComments\n\t}\n\n###parseComments####\n\tdata.comments = [\n\t\t{\n\t\t\tlevel: Number,\t\t// уровень вложенности в треде (от 0 до 7) \n\t\t\tid: String,\t\t\t// идентификатор комментария в формате /comm\\d+/\n\t\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\t\tusername: String,\t// отображаемое имя автора\n\t\t\tpubdate: String,\t// дата публикации комментария. Строка, как на турбофильме\n\t\t\tvotes: Number,\t\t// рейтинг комментария\n\t\t\ttext: String\n\t\t},\n\t\t...\n\t]\n\nmiddleware\n----------\n\nmiddleware представляет собой обычную функцию-коллбэк, которая может выглядеть примерно так:\n\n\tturbofilm.use (\".*\", function (data, callback) {\n\t\t// некий код\n\t\tcallback ();\n\t});\n\nmiddleware должен вызвать функцию callback в конце своей работы, иначе другие коллбэки просто не смогут отработать.\n\ndata.match\n----------\n\nвнимательный читатель наверняка уже догадался, что в него просто передается результат вычисления url.match (regexp), больше тут добавить нечего\n\nчего нет и что есть, но не работает\n--------------------------------------------\n\n1. на данный момент, нет повторной авторизации при ошибках авторизации, и, соответственно не работает .auth-метод\n2. также, нет возможности оставлять посты и комментарии с помощью .create.(post|comment|reply)\n3. нет никакой поддержки скачивания сериалов\n\nпример\n------\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\tturbofilm.config.ias_id = '0h2048hg08hg8h294gh92h4g8';\n\tturbofilm.use ('.*', turbofilm.middleware.$);\n\tturbofilm.use ('.*', turbofilm.middleware.links);\n\tturbofilm.use ('[BT]log(?!=\\/Posts\\/)', turbofilm.middleware.parseBlog);\n\tturbofilm.use ('[BT]log(?=\\/Posts\\/)', turbofilm.middleware.parsePost);\n\t\n\tturbofilm.use ('.*', function (data, callback) {\n\t\tcallback ();\n\t});\n\t\n\tturbofilm ('/Tlog');\n\t\n\tturbofilm ('/Tlog/Posts/31537');","readmeFilename":"README.md","_id":"turbofilm-community-api@0.1.8","description":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it","dist":{"shasum":"06508c1d319e28f8f168ae1ae5e64c9db29e61dd","tarball":"https://registry.npmjs.org/turbofilm-community-api/-/turbofilm-community-api-0.1.8.tgz","integrity":"sha512-cLS0qQknYO2DnbQI8J3u7Oh8Y3ZJc3mDGFGR5EZ4kv6SQuLreEPccTxC+6ensOvpzpNcAPYogXzinOL9mBO2ug==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDH77ILLkcU6zYLqqExscHp4Ev6R2eCZ9E7mJfaRZOQGwIhALGA78rF9GEsakTpiwPJ49hPHXbASrVa9FVkDcRXNvII"}]},"_npmVersion":"1.1.65","_npmUser":{"name":"ambilight","email":"apsmav@gmail.com"},"maintainers":[{"name":"ambilight","email":"apsmav@gmail.com"}]},"0.1.9":{"name":"turbofilm-community-api","version":"0.1.9","main":"index.js","scripts":{"test":"node test.js"},"author":{"name":"Ambilight"},"license":"BSD","dependencies":{"request":"~2.21.0","cheerio":"~0.12.0","redis":"*"},"readme":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it\n\nturbofilm-community-api\n=======================\n\nкаркас для парсеров сайта turbofilm.tv\n\n*предназначен только для внутреннего использования продвинутыми пользователями сайта turbofilm.tv*\n\n*для того, чтобы пользоваться пакетом, нужно иметь регистрацию*\n\nархитектуру модуля можно описать двумя словами: connect наоборот — вы пишите middleware, и делаете исходящий запрос, а middleware делает всю остальную работу\n\nустановка\n---------\n\nвам потребуется node.js и npm\n\nв консоли:\n\n\t$npm install turbofilm-community-api\n\nв текстовом редакторе:\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\nиспользование\n-------------\n\nдля начала, вам нужно узнать у своего браузера значение куки под именем `IAS_ID`, без него ничего работать не будет\n\nпередать `IAS_ID` внутрь скрипта можно целыми двумя способами: напрямую, как в примере ниже, и через переменную окружения `TF_IAS_ID` (это может понадобиться для запуска в облаке)\n\n\tturbofilm.config.ias_id = \"<ваш IAS_ID>\"\n\tturbofilm ('/', function (err, data) {\n\t\tconsole.log (data.url) // -> \"/\"\n\t\tconsole.log (data.response) // -> http.ClientResponse\n\t\tconsole.log (data.body) // -> String – текст страницы\n\t\tconsole.log (data.config) // -> Object – настройки модуля\n\t\tconsole.log (data.match) // -> String.match () – далее\n\t});\n\nво фрагменте выше объект data – это то, чем оперируют middleware. на данный момент не один middleware не был подключен, давайте сделаем это\n\n\t\n\tturbofilm.use (\".*\", turbofilm.middleware.$);\n\nсразу же видно две особенности:\n\n1. в одноименном свойстве находятся несколько встроенных middleware (ниже)\n2. в отличии от connect-а, пути пишутся обычными регекспами (именно для этого нужно data.match), что больше похоже на роутер django\n\nтеперь, стало доступно свойство data.$\n\n\tturbofilm (\"/\", function (err, data) {\n\t\tconsole.log (data.$); // -> cheerio.load (data.body)\n\t});\n\t\nвсе middleware выполняются последовательно в порядке вызова .use\n\t\nвстроенные middleware\n---------------------\n###$###\nэкспортирует в data.$ cheerio-дерево документа\n\n###links####\nэкспортирует в data.links массив `$(a[href])`, требует, чтобы $ было включено раньше\n\n###parseBlog###\nэкспортирует в data.posts массив постов со страницы (о парсерах ниже), требует $\n\n###parsePost####\nэкспортирует в data.post пост со страницы (без комментариев!), требует $\n\n###parseComments####\nэкспортирует в data.comments массив комментариев со страницы, требует $\n\n###экспериментальные###\nнужны для работы с базой данных redis\n\nдля того, чтобы включить экспериментальные middleware нужно в middleware.js в самом верху заменить строчку:\n\n\tvar ENABLE_REDIS = true;\n\nсразу же потребуется установить пакеты для работы с редисом\n\n\t$npm install hiredis redis\n\nвстроенные парсеры\n------------------\n\nкак несложно догадаться, parseX middleware – это некие парсеры, которые выдирают из cheerio-дерева некие данные. Ниже описаны форматы данных, экспортируемые встроенными парсерами, на некотором json-like псевдокоде\n\n###parseBlog###\n\tdata.posts = [\n\t\t{\t\t\t\t\t\t// то же самое, что и parseComments, плюс:\n\t\t\toffset: Number\t\t// номер поста в блоге\n\t\t}\n\t\t...\n\t]\n\n###parsePost####\n\tdata.post = {\n\t\tid: String,\t\t\t// идентификатор поста\n\t\tblogName: String,\t// название блога, в котором опубликован пост\n\t\tblogUrl: String,\t// url блога, в котором опубликован пост\n\t\ttitle: String,\t\t// название поста\n\t\turl: String,\t\t// url самого поста\n\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\tusername: String,\t// отображаемое имя автора\n\t\tpubdate: String,\t// дата публикации поста. Строка, как на турбофильме\n\t\tvotes: Number,\t\t// рейтинг поста\n\t\ttext: String,\n\t\tcomments: Array\t// то же самое, что и parseComments\n\t}\n\n###parseComments####\n\tdata.comments = [\n\t\t{\n\t\t\tlevel: Number,\t\t// уровень вложенности в треде (от 0 до 7) \n\t\t\tid: String,\t\t\t// идентификатор комментария в формате /comm\\d+/\n\t\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\t\tusername: String,\t// отображаемое имя автора\n\t\t\tpubdate: String,\t// дата публикации комментария. Строка, как на турбофильме\n\t\t\tvotes: Number,\t\t// рейтинг комментария\n\t\t\ttext: String\n\t\t},\n\t\t...\n\t]\n\nmiddleware\n----------\n\nmiddleware представляет собой обычную функцию-коллбэк, которая может выглядеть примерно так:\n\n\tturbofilm.use (\".*\", function (data, callback) {\n\t\t// некий код\n\t\tcallback ();\n\t});\n\nmiddleware должен вызвать функцию callback в конце своей работы, иначе другие коллбэки просто не смогут отработать.\n\ndata.match\n----------\n\nвнимательный читатель наверняка уже догадался, что в него просто передается результат вычисления url.match (regexp), больше тут добавить нечего\n\nчего нет и что есть, но не работает\n--------------------------------------------\n\n1. на данный момент, нет повторной авторизации при ошибках авторизации, и, соответственно не работает .auth-метод\n2. также, нет возможности оставлять посты и комментарии с помощью .create.(post|comment|reply)\n3. нет никакой поддержки скачивания сериалов\n\nпример\n------\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\tturbofilm.config.ias_id = '0h2048hg08hg8h294gh92h4g8';\n\tturbofilm.use ('.*', turbofilm.middleware.$);\n\tturbofilm.use ('.*', turbofilm.middleware.links);\n\tturbofilm.use ('[BT]log(?!=\\/Posts\\/)', turbofilm.middleware.parseBlog);\n\tturbofilm.use ('[BT]log(?=\\/Posts\\/)', turbofilm.middleware.parsePost);\n\t\n\tturbofilm.use ('.*', function (data, callback) {\n\t\tcallback ();\n\t});\n\t\n\tturbofilm ('/Tlog');\n\t\n\tturbofilm ('/Tlog/Posts/31537');","readmeFilename":"README.md","_id":"turbofilm-community-api@0.1.9","description":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it","dist":{"shasum":"0558c39a1fb6b7ecaf7d0b1a6089290458763e93","tarball":"https://registry.npmjs.org/turbofilm-community-api/-/turbofilm-community-api-0.1.9.tgz","integrity":"sha512-wAx8CjRd7CXiSKqaA1l8CMxhX/g/8uHitM5pefwmTQvoxVNLhX3QXu7P23s9+IF31b0UesXTZi8+JWHGgPPN+g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF3YQvOVuJudBKiX1BVa1sJgbckSqOLwiAXzBWHiXP/JAiBFXiGuBOcon4Cy3Ps5B+QxuVdWGzftOWX9T7kcONTa6A=="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"ambilight","email":"apsmav@gmail.com"},"maintainers":[{"name":"ambilight","email":"apsmav@gmail.com"}]},"0.2.0":{"name":"turbofilm-community-api","version":"0.2.0","main":"index.js","scripts":{"test":"node test.js"},"author":{"name":"Ambilight"},"license":"BSD","dependencies":{"request":"~2.21.0","cheerio":"~0.12.0","redis":"*"},"readme":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it\n\nturbofilm-community-api\n=======================\n\nкаркас для парсеров сайта turbofilm.tv\n\n*предназначен только для внутреннего использования продвинутыми пользователями сайта turbofilm.tv*\n\n*для того, чтобы пользоваться пакетом, нужно иметь регистрацию*\n\nархитектуру модуля можно описать двумя словами: connect наоборот — вы пишите middleware, и делаете исходящий запрос, а middleware делает всю остальную работу\n\nустановка\n---------\n\nвам потребуется node.js и npm\n\nв консоли:\n\n\t$npm install turbofilm-community-api\n\nв текстовом редакторе:\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\nиспользование\n-------------\n\nдля начала, вам нужно узнать у своего браузера значение куки под именем `IAS_ID`, без него ничего работать не будет\n\nпередать `IAS_ID` внутрь скрипта можно целыми двумя способами: напрямую, как в примере ниже, и через переменную окружения `TF_IAS_ID` (это может понадобиться для запуска в облаке)\n\n\tturbofilm.config.ias_id = \"<ваш IAS_ID>\"\n\tturbofilm ('/', function (err, data) {\n\t\tconsole.log (data.url) // -> \"/\"\n\t\tconsole.log (data.response) // -> http.ClientResponse\n\t\tconsole.log (data.body) // -> String – текст страницы\n\t\tconsole.log (data.config) // -> Object – настройки модуля\n\t\tconsole.log (data.match) // -> String.match () – далее\n\t});\n\nво фрагменте выше объект data – это то, чем оперируют middleware. на данный момент не один middleware не был подключен, давайте сделаем это\n\n\t\n\tturbofilm.use (\".*\", turbofilm.middleware.$);\n\nсразу же видно две особенности:\n\n1. в одноименном свойстве находятся несколько встроенных middleware (ниже)\n2. в отличии от connect-а, пути пишутся обычными регекспами (именно для этого нужно data.match), что больше похоже на роутер django\n\nтеперь, стало доступно свойство data.$\n\n\tturbofilm (\"/\", function (err, data) {\n\t\tconsole.log (data.$); // -> cheerio.load (data.body)\n\t});\n\t\nвсе middleware выполняются последовательно в порядке вызова .use\n\t\nвстроенные middleware\n---------------------\n###$###\nэкспортирует в data.$ cheerio-дерево документа\n\n###links####\nэкспортирует в data.links массив `$(a[href])`, требует, чтобы $ было включено раньше\n\n###parseBlog###\nэкспортирует в data.posts массив постов со страницы (о парсерах ниже), требует $\n\n###parsePost####\nэкспортирует в data.post пост со страницы (без комментариев!), требует $\n\n###parseComments####\nэкспортирует в data.comments массив комментариев со страницы, требует $\n\n###parseOnpageSeries###\nна каждой странице вверху есть список сериалов, этот парсер парсит именно их\nэкспортирует в data.series массив сериалов со страницы, требует $\n\n###экспериментальные###\nнужны для работы с базой данных redis\n\nдля того, чтобы включить экспериментальные middleware нужно в middleware.js в самом верху заменить строчку:\n\n\tvar ENABLE_REDIS = true;\n\nсразу же потребуется установить пакеты для работы с редисом\n\n\t$npm install hiredis redis\n\nвстроенные парсеры\n------------------\n\nкак несложно догадаться, parseX middleware – это некие парсеры, которые выдирают из cheerio-дерева некие данные. Ниже описаны форматы данных, экспортируемые встроенными парсерами, на некотором json-like псевдокоде\n\n###parseBlog###\n\tdata.posts = [\n\t\t{\t\t\t\t\t\t// то же самое, что и parseComments, плюс:\n\t\t\toffset: Number\t\t// номер поста в блоге\n\t\t}\n\t\t...\n\t]\n\n###parsePost####\n\tdata.post = {\n\t\tid: String,\t\t\t// идентификатор поста\n\t\tblogName: String,\t// название блога, в котором опубликован пост\n\t\tblogUrl: String,\t// url блога, в котором опубликован пост\n\t\ttitle: String,\t\t// название поста\n\t\turl: String,\t\t// url самого поста\n\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\tusername: String,\t// отображаемое имя автора\n\t\tpubdate: String,\t// дата публикации поста. Строка, как на турбофильме\n\t\tvotes: Number,\t\t// рейтинг поста\n\t\ttext: String,\n\t\tcomments: Array\t// то же самое, что и parseComments\n\t}\n\n###parseComments####\n\tdata.comments = [\n\t\t{\n\t\t\tlevel: Number,\t\t// уровень вложенности в треде (от 0 до 7) \n\t\t\tid: String,\t\t\t// идентификатор комментария в формате /comm\\d+/\n\t\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\t\tusername: String,\t// отображаемое имя автора\n\t\t\tpubdate: String,\t// дата публикации комментария. Строка, как на турбофильме\n\t\t\tvotes: Number,\t\t// рейтинг комментария\n\t\t\ttext: String\n\t\t},\n\t\t...\n\t]\n\n###parseOnpageSeries###\n\tdata.series = [\n\t\t{\n\t\t\timg: String,\t\t\t// url на превью сериала, как на сайте\n\t\t\talt: String,\t\t\t// alt-аттрибут картинки, соответствует канонiчному названию сериала на сайте\n\t\t\tru:  String,\t\t\t// название сериала на русском языке\n\t\t\ten:  String,\t\t\t// название сериала на английском языке\n\t\t\turl: String\t\t\t\t// url на страницу сериала\n\t\t},\n\t\t...\n\t]\n\nmiddleware\n----------\n\nmiddleware представляет собой обычную функцию-коллбэк, которая может выглядеть примерно так:\n\n\tturbofilm.use (\".*\", function (data, callback) {\n\t\t// некий код\n\t\tcallback ();\n\t});\n\nmiddleware должен вызвать функцию callback в конце своей работы, иначе другие коллбэки просто не смогут отработать.\n\ndata.match\n----------\n\nвнимательный читатель наверняка уже догадался, что в него просто передается результат вычисления url.match (regexp), больше тут добавить нечего\n\nчего нет и что есть, но не работает\n--------------------------------------------\n\n1. на данный момент, нет повторной авторизации при ошибках авторизации, и, соответственно не работает .auth-метод\n2. также, нет возможности оставлять посты и комментарии с помощью .create.(post|comment|reply)\n3. нет никакой поддержки скачивания сериалов\n\nпример\n------\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\tturbofilm.config.ias_id = '0h2048hg08hg8h294gh92h4g8';\n\tturbofilm.use ('.*', turbofilm.middleware.$);\n\tturbofilm.use ('.*', turbofilm.middleware.links);\n\tturbofilm.use ('[BT]log(?!=\\/Posts\\/)', turbofilm.middleware.parseBlog);\n\tturbofilm.use ('[BT]log(?=\\/Posts\\/)', turbofilm.middleware.parsePost);\n\t\n\tturbofilm.use ('.*', function (data, callback) {\n\t\tcallback ();\n\t});\n\t\n\tturbofilm ('/Tlog');\n\t\n\tturbofilm ('/Tlog/Posts/31537');","readmeFilename":"README.md","_id":"turbofilm-community-api@0.2.0","description":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it","dist":{"shasum":"81bd4f9f51106754ea1a21d35be5190fe31bcb20","tarball":"https://registry.npmjs.org/turbofilm-community-api/-/turbofilm-community-api-0.2.0.tgz","integrity":"sha512-lTNBKyHvJrHRebBEPLI4vq3MXZy19Se5L34GlH2V/Ty+JL8PoYF7bpjtfYfTjsYC15qXYsVMv85t22elg1wYZA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAerAD/K4Jq86nd18I8RynH15gSR6y2GAGV6ySAy1uimAiATjsesSzv5RRE1fcNVtCEsQP4lKHRFzLfdUfaOPeUa+g=="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"ambilight","email":"apsmav@gmail.com"},"maintainers":[{"name":"ambilight","email":"apsmav@gmail.com"}]},"0.2.1":{"name":"turbofilm-community-api","version":"0.2.1","main":"index.js","scripts":{"test":"node test.js"},"author":{"name":"Ambilight"},"license":"BSD","dependencies":{"request":"~2.21.0","cheerio":"~0.12.0","redis":"*","async":"*"},"readme":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it\n\nturbofilm-community-api\n=======================\n\nкаркас для парсеров сайта turbofilm.tv\n\n*предназначен только для внутреннего использования продвинутыми пользователями сайта turbofilm.tv*\n\n*для того, чтобы пользоваться пакетом, нужно иметь регистрацию*\n\nархитектуру модуля можно описать двумя словами: connect наоборот — вы пишите middleware, и делаете исходящий запрос, а middleware делает всю остальную работу\n\nустановка\n---------\n\nвам потребуется node.js и npm\n\nв консоли:\n\n\t$npm install turbofilm-community-api\n\nв текстовом редакторе:\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\nиспользование\n-------------\n\nдля начала, вам нужно узнать у своего браузера значение куки под именем `IAS_ID`, без него ничего работать не будет\n\nпередать `IAS_ID` внутрь скрипта можно целыми двумя способами: напрямую, как в примере ниже, и через переменную окружения `TF_IAS_ID` (это может понадобиться для запуска в облаке)\n\n\tturbofilm.config.ias_id = \"<ваш IAS_ID>\"\n\tturbofilm ('/', function (err, data) {\n\t\tconsole.log (data.url) // -> \"/\"\n\t\tconsole.log (data.response) // -> http.ClientResponse\n\t\tconsole.log (data.body) // -> String – текст страницы\n\t\tconsole.log (data.config) // -> Object – настройки модуля\n\t\tconsole.log (data.match) // -> String.match () – далее\n\t});\n\nво фрагменте выше объект data – это то, чем оперируют middleware. на данный момент не один middleware не был подключен, давайте сделаем это\n\n\t\n\tturbofilm.use (\".*\", turbofilm.middleware.$);\n\nсразу же видно две особенности:\n\n1. в одноименном свойстве находятся несколько встроенных middleware (ниже)\n2. в отличии от connect-а, пути пишутся обычными регекспами (именно для этого нужно data.match), что больше похоже на роутер django\n\nтеперь, стало доступно свойство data.$\n\n\tturbofilm (\"/\", function (err, data) {\n\t\tconsole.log (data.$); // -> cheerio.load (data.body)\n\t});\n\t\nвсе middleware выполняются последовательно в порядке вызова .use\n\t\nвстроенные middleware\n---------------------\n###$###\nэкспортирует в data.$ cheerio-дерево документа\n\n###links####\nэкспортирует в data.links массив `$(a[href])`, требует, чтобы $ было включено раньше\n\n###parseBlog###\nэкспортирует в data.posts массив постов со страницы (о парсерах ниже), требует $\n\n###parsePost####\nэкспортирует в data.post пост со страницы (без комментариев!), требует $\n\n###parseComments####\nэкспортирует в data.comments массив комментариев со страницы, требует $\n\n###parseOnpageSeries###\nна каждой странице вверху есть список сериалов, этот парсер парсит именно их\nэкспортирует в data.series массив сериалов со страницы, требует $\n\n###экспериментальные###\nнужны для работы с базой данных redis\n\nдля того, чтобы включить экспериментальные middleware нужно в middleware.js в самом верху заменить строчку:\n\n\tvar ENABLE_REDIS = true;\n\nсразу же потребуется установить пакеты для работы с редисом\n\n\t$npm install hiredis redis\n\nвстроенные парсеры\n------------------\n\nкак несложно догадаться, parseX middleware – это некие парсеры, которые выдирают из cheerio-дерева некие данные. Ниже описаны форматы данных, экспортируемые встроенными парсерами, на некотором json-like псевдокоде\n\n###parseBlog###\n\tdata.posts = [\n\t\t{\t\t\t\t\t\t// то же самое, что и parseComments, плюс:\n\t\t\toffset: Number\t\t// номер поста в блоге\n\t\t}\n\t\t...\n\t]\n\n###parsePost####\n\tdata.post = {\n\t\tid: String,\t\t\t// идентификатор поста\n\t\tblogName: String,\t// название блога, в котором опубликован пост\n\t\tblogUrl: String,\t// url блога, в котором опубликован пост\n\t\ttitle: String,\t\t// название поста\n\t\turl: String,\t\t// url самого поста\n\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\tusername: String,\t// отображаемое имя автора\n\t\tpubdate: String,\t// дата публикации поста. Строка, как на турбофильме\n\t\tvotes: Number,\t\t// рейтинг поста\n\t\ttext: String,\n\t\tcomments: Array\t// то же самое, что и parseComments\n\t}\n\n###parseComments####\n\tdata.comments = [\n\t\t{\n\t\t\tlevel: Number,\t\t// уровень вложенности в треде (от 0 до 7) \n\t\t\tid: String,\t\t\t// идентификатор комментария в формате /comm\\d+/\n\t\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\t\tusername: String,\t// отображаемое имя автора\n\t\t\tpubdate: String,\t// дата публикации комментария. Строка, как на турбофильме\n\t\t\tvotes: Number,\t\t// рейтинг комментария\n\t\t\ttext: String\n\t\t},\n\t\t...\n\t]\n\n###parseOnpageSeries###\n\tdata.series = [\n\t\t{\n\t\t\timg: String,\t\t\t// url на превью сериала, как на сайте\n\t\t\talt: String,\t\t\t// alt-аттрибут картинки, соответствует канонiчному названию сериала на сайте\n\t\t\tru:  String,\t\t\t// название сериала на русском языке\n\t\t\ten:  String,\t\t\t// название сериала на английском языке\n\t\t\turl: String\t\t\t\t// url на страницу сериала\n\t\t},\n\t\t...\n\t]\n\nmiddleware\n----------\n\nmiddleware представляет собой обычную функцию-коллбэк, которая может выглядеть примерно так:\n\n\tturbofilm.use (\".*\", function (data, callback) {\n\t\t// некий код\n\t\tcallback ();\n\t});\n\nmiddleware должен вызвать функцию callback в конце своей работы, иначе другие коллбэки просто не смогут отработать.\n\ndata.match\n----------\n\nвнимательный читатель наверняка уже догадался, что в него просто передается результат вычисления url.match (regexp), больше тут добавить нечего\n\nчего нет и что есть, но не работает\n--------------------------------------------\n\n1. на данный момент, нет повторной авторизации при ошибках авторизации, и, соответственно не работает .auth-метод\n2. также, нет возможности оставлять посты и комментарии с помощью .create.(post|comment|reply)\n3. нет никакой поддержки скачивания сериалов\n\nпример\n------\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\tturbofilm.config.ias_id = '0h2048hg08hg8h294gh92h4g8';\n\tturbofilm.use ('.*', turbofilm.middleware.$);\n\tturbofilm.use ('.*', turbofilm.middleware.links);\n\tturbofilm.use ('[BT]log(?!=\\/Posts\\/)', turbofilm.middleware.parseBlog);\n\tturbofilm.use ('[BT]log(?=\\/Posts\\/)', turbofilm.middleware.parsePost);\n\t\n\tturbofilm.use ('.*', function (data, callback) {\n\t\tcallback ();\n\t});\n\t\n\tturbofilm ('/Tlog');\n\t\n\tturbofilm ('/Tlog/Posts/31537');","readmeFilename":"README.md","_id":"turbofilm-community-api@0.2.1","description":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it","dist":{"shasum":"312015454611ec62d74e1d1b412bbdd64f6a4ba8","tarball":"https://registry.npmjs.org/turbofilm-community-api/-/turbofilm-community-api-0.2.1.tgz","integrity":"sha512-nuNd7YyjWeALmUhzEDkXT0IQ+u4kkGZCHddZrDo3F157fn61irU6jcnF2XrcdcLdI9uke84kunh5ku/RyEW0MA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDTgKSLRhOJ3AahXgx/Prhq+wRSmU+CyDdf6TV34HvkuAiBJKOPl3LN1p7rLqKCpmfOTkavqpVsZwGqqrl8fC0Li6Q=="}]},"_npmVersion":"1.1.65","_npmUser":{"name":"ambilight","email":"apsmav@gmail.com"},"maintainers":[{"name":"ambilight","email":"apsmav@gmail.com"}]},"0.2.2":{"name":"turbofilm-community-api","version":"0.2.2","main":"index.js","scripts":{"test":"node test.js"},"author":{"name":"Ambilight"},"license":"BSD","dependencies":{"request":"~2.21.0","cheerio":"~0.12.0","redis":"*","async":"*"},"readme":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it\n\nturbofilm-community-api\n=======================\n\nкаркас для парсеров сайта turbofilm.tv\n\n*предназначен только для внутреннего использования продвинутыми пользователями сайта turbofilm.tv*\n\n*для того, чтобы пользоваться пакетом, нужно иметь регистрацию*\n\nархитектуру модуля можно описать двумя словами: connect наоборот — вы пишите middleware, и делаете исходящий запрос, а middleware делает всю остальную работу\n\nустановка\n---------\n\nвам потребуется node.js и npm\n\nв консоли:\n\n\t$npm install turbofilm-community-api\n\nв текстовом редакторе:\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\nиспользование\n-------------\n\nдля начала, вам нужно узнать у своего браузера значение куки под именем `IAS_ID`, без него ничего работать не будет\n\nпередать `IAS_ID` внутрь скрипта можно целыми двумя способами: напрямую, как в примере ниже, и через переменную окружения `TF_IAS_ID` (это может понадобиться для запуска в облаке)\n\n\tturbofilm.config.ias_id = \"<ваш IAS_ID>\"\n\tturbofilm ('/', function (err, data) {\n\t\tconsole.log (data.url) // -> \"/\"\n\t\tconsole.log (data.response) // -> http.ClientResponse\n\t\tconsole.log (data.body) // -> String – текст страницы\n\t\tconsole.log (data.config) // -> Object – настройки модуля\n\t\tconsole.log (data.match) // -> String.match () – далее\n\t});\n\nво фрагменте выше объект data – это то, чем оперируют middleware. на данный момент не один middleware не был подключен, давайте сделаем это\n\n\t\n\tturbofilm.use (\".*\", turbofilm.middleware.$);\n\nсразу же видно две особенности:\n\n1. в одноименном свойстве находятся несколько встроенных middleware (ниже)\n2. в отличии от connect-а, пути пишутся обычными регекспами (именно для этого нужно data.match), что больше похоже на роутер django\n\nтеперь, стало доступно свойство data.$\n\n\tturbofilm (\"/\", function (err, data) {\n\t\tconsole.log (data.$); // -> cheerio.load (data.body)\n\t});\n\t\nвсе middleware выполняются последовательно в порядке вызова .use\n\t\nвстроенные middleware\n---------------------\n###$###\nэкспортирует в data.$ cheerio-дерево документа\n\n###links####\nэкспортирует в data.links массив `$(a[href])`, требует, чтобы $ было включено раньше\n\n###parseBlog###\nэкспортирует в data.posts массив постов со страницы (о парсерах ниже), требует $\n\n###parsePost####\nэкспортирует в data.post пост со страницы (без комментариев!), требует $\n\n###parseComments####\nэкспортирует в data.comments массив комментариев со страницы, требует $\n\n###parseOnpageSeries###\nна каждой странице вверху есть список сериалов, этот парсер парсит именно их\nэкспортирует в data.series массив сериалов со страницы, требует $\n\n###экспериментальные###\nнужны для работы с базой данных redis\n\nдля того, чтобы включить экспериментальные middleware нужно в middleware.js в самом верху заменить строчку:\n\n\tvar ENABLE_REDIS = true;\n\nсразу же потребуется установить пакеты для работы с редисом\n\n\t$npm install hiredis redis\n\nвстроенные парсеры\n------------------\n\nкак несложно догадаться, parseX middleware – это некие парсеры, которые выдирают из cheerio-дерева некие данные. Ниже описаны форматы данных, экспортируемые встроенными парсерами, на некотором json-like псевдокоде\n\n###parseBlog###\n\tdata.posts = [\n\t\t{\t\t\t\t\t\t// то же самое, что и parseComments, плюс:\n\t\t\toffset: Number\t\t// номер поста в блоге\n\t\t}\n\t\t...\n\t]\n\n###parsePost####\n\tdata.post = {\n\t\tid: String,\t\t\t// идентификатор поста\n\t\tblogName: String,\t// название блога, в котором опубликован пост\n\t\tblogUrl: String,\t// url блога, в котором опубликован пост\n\t\ttitle: String,\t\t// название поста\n\t\turl: String,\t\t// url самого поста\n\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\tusername: String,\t// отображаемое имя автора\n\t\tpubdate: String,\t// дата публикации поста. Строка, как на турбофильме\n\t\tvotes: Number,\t\t// рейтинг поста\n\t\ttext: String,\n\t\tcomments: Array\t// то же самое, что и parseComments\n\t}\n\n###parseComments####\n\tdata.comments = [\n\t\t{\n\t\t\tlevel: Number,\t\t// уровень вложенности в треде (от 0 до 7) \n\t\t\tid: String,\t\t\t// идентификатор комментария в формате /comm\\d+/\n\t\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\t\tusername: String,\t// отображаемое имя автора\n\t\t\tpubdate: String,\t// дата публикации комментария. Строка, как на турбофильме\n\t\t\tvotes: Number,\t\t// рейтинг комментария\n\t\t\ttext: String\n\t\t},\n\t\t...\n\t]\n\n###parseOnpageSeries###\n\tdata.series = [\n\t\t{\n\t\t\timg: String,\t\t\t// url на превью сериала, как на сайте\n\t\t\talt: String,\t\t\t// alt-аттрибут картинки, соответствует канонiчному названию сериала на сайте\n\t\t\tru:  String,\t\t\t// название сериала на русском языке\n\t\t\ten:  String,\t\t\t// название сериала на английском языке\n\t\t\turl: String\t\t\t\t// url на страницу сериала\n\t\t},\n\t\t...\n\t]\n\n###parseCommentDate###\n\tdata.comments = [\n\t\t{\n\t\t\tpubdate: Date\t\t\t// Парсит дату публикации в объект Data\n\t\t}\n\t]\n\nmiddleware\n----------\n\nmiddleware представляет собой обычную функцию-коллбэк, которая может выглядеть примерно так:\n\n\tturbofilm.use (\".*\", function (data, callback) {\n\t\t// некий код\n\t\tcallback ();\n\t});\n\nmiddleware должен вызвать функцию callback в конце своей работы, иначе другие коллбэки просто не смогут отработать.\n\nможно передавать несколько обработчиков\n\n\tturbofilm.use (\".*\", turbofilm.middleware.$, turbofilm.parseOnPageSeries);\n\nкроме того, вместо регекспа можно передавать строку-идентификатор:\n\n\tturbofilm.use ('post', ...);\n\ndata.match\n----------\n\nвнимательный читатель наверняка уже догадался, что в него просто передается результат вычисления url.match (regexp), больше тут добавить нечего\n\nчего нет и что есть, но не работает\n--------------------------------------------\n\n1. на данный момент, нет повторной авторизации при ошибках авторизации, и, соответственно не работает .auth-метод\n2. также, нет возможности оставлять посты и комментарии с помощью .create.(post|comment|reply)\n3. нет никакой поддержки скачивания сериалов\n\nпример\n------\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\tturbofilm.config.ias_id = '0h2048hg08hg8h294gh92h4g8';\n\tturbofilm.use ('.*', turbofilm.middleware.$);\n\tturbofilm.use ('.*', turbofilm.middleware.links);\n\tturbofilm.use ('[BT]log(?!=\\/Posts\\/)', turbofilm.middleware.parseBlog);\n\tturbofilm.use ('[BT]log(?=\\/Posts\\/)', turbofilm.middleware.parsePost);\n\t\n\tturbofilm.use ('.*', function (data, callback) {\n\t\tcallback ();\n\t});\n\t\n\tturbofilm ('/Tlog');\n\t\n\tturbofilm ('/Tlog/Posts/31537');","readmeFilename":"README.md","description":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it","_id":"turbofilm-community-api@0.2.2","dist":{"shasum":"dbad2840346ca2d9983a95e837225efe5d9018eb","tarball":"https://registry.npmjs.org/turbofilm-community-api/-/turbofilm-community-api-0.2.2.tgz","integrity":"sha512-qzXoIX0kC9ty8BnXsE0/38qLr/QQDQppykHipAYsfMUf0xNDTR+ym+L59F8FXq7/subFO2W62vqoom3KQlvo+w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCchkxkSPGs+QCf8Ylvvsx79O+DfDA/fny44jgciUBLfgIhAKUNeORpzF6Wldjxae03VqH/lwtjLOx7tR8Y9qr+iz+P"}]},"_from":".","_npmVersion":"1.3.2","_npmUser":{"name":"ambilight","email":"apsmav@gmail.com"},"maintainers":[{"name":"ambilight","email":"apsmav@gmail.com"}]},"0.2.3":{"name":"turbofilm-community-api","version":"0.2.3","main":"index.js","scripts":{"test":"node test.js"},"author":{"name":"Ambilight"},"license":"BSD","dependencies":{"request":"~2.21.0","cheerio":"~0.12.0","redis":"*","async":"*"},"readme":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it\n\nturbofilm-community-api\n=======================\n\nкаркас для парсеров сайта turbofilm.tv\n\n*предназначен только для внутреннего использования продвинутыми пользователями сайта turbofilm.tv*\n\n*для того, чтобы пользоваться пакетом, нужно иметь регистрацию*\n\nархитектуру модуля можно описать двумя словами: connect наоборот — вы пишите middleware, и делаете исходящий запрос, а middleware делает всю остальную работу\n\nустановка\n---------\n\nвам потребуется node.js и npm\n\nв консоли:\n\n\t$npm install turbofilm-community-api\n\nв текстовом редакторе:\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\nиспользование\n-------------\n\nдля начала, вам нужно узнать у своего браузера значение куки под именем `IAS_ID`, без него ничего работать не будет\n\nпередать `IAS_ID` внутрь скрипта можно целыми двумя способами: напрямую, как в примере ниже, и через переменную окружения `TF_IAS_ID` (это может понадобиться для запуска в облаке)\n\n\tturbofilm.config.ias_id = \"<ваш IAS_ID>\"\n\tturbofilm ('/', function (err, data) {\n\t\tconsole.log (data.url) // -> \"/\"\n\t\tconsole.log (data.response) // -> http.ClientResponse\n\t\tconsole.log (data.body) // -> String – текст страницы\n\t\tconsole.log (data.config) // -> Object – настройки модуля\n\t\tconsole.log (data.match) // -> String.match () – далее\n\t});\n\nво фрагменте выше объект data – это то, чем оперируют middleware. на данный момент не один middleware не был подключен, давайте сделаем это\n\n\t\n\tturbofilm.use (\".*\", turbofilm.middleware.$);\n\nсразу же видно две особенности:\n\n1. в одноименном свойстве находятся несколько встроенных middleware (ниже)\n2. в отличии от connect-а, пути пишутся обычными регекспами (именно для этого нужно data.match), что больше похоже на роутер django\n\nтеперь, стало доступно свойство data.$\n\n\tturbofilm (\"/\", function (err, data) {\n\t\tconsole.log (data.$); // -> cheerio.load (data.body)\n\t});\n\t\nвсе middleware выполняются последовательно в порядке вызова .use\n\t\nвстроенные middleware\n---------------------\n###$###\nэкспортирует в data.$ cheerio-дерево документа\n\n###links####\nэкспортирует в data.links массив `$(a[href])`, требует, чтобы $ было включено раньше\n\n###parseBlog###\nэкспортирует в data.posts массив постов со страницы (о парсерах ниже), требует $\n\n###parsePost####\nэкспортирует в data.post пост со страницы (без комментариев!), требует $\n\n###parseComments####\nэкспортирует в data.comments массив комментариев со страницы, требует $\n\n###parseOnpageSeries###\nна каждой странице вверху есть список сериалов, этот парсер парсит именно их\nэкспортирует в data.series массив сериалов со страницы, требует $\n\n###экспериментальные###\nнужны для работы с базой данных redis\n\nдля того, чтобы включить экспериментальные middleware нужно в middleware.js в самом верху заменить строчку:\n\n\tvar ENABLE_REDIS = true;\n\nсразу же потребуется установить пакеты для работы с редисом\n\n\t$npm install hiredis redis\n\nвстроенные парсеры\n------------------\n\nкак несложно догадаться, parseX middleware – это некие парсеры, которые выдирают из cheerio-дерева некие данные. Ниже описаны форматы данных, экспортируемые встроенными парсерами, на некотором json-like псевдокоде\n\n###parseBlog###\n\tdata.posts = [\n\t\t{\t\t\t\t\t\t// то же самое, что и parseComments, плюс:\n\t\t\toffset: Number\t\t// номер поста в блоге\n\t\t}\n\t\t...\n\t]\n\n###parsePost####\n\tdata.post = {\n\t\tid: String,\t\t\t// идентификатор поста\n\t\tblogName: String,\t// название блога, в котором опубликован пост\n\t\tblogUrl: String,\t// url блога, в котором опубликован пост\n\t\ttitle: String,\t\t// название поста\n\t\turl: String,\t\t// url самого поста\n\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\tusername: String,\t// отображаемое имя автора\n\t\tpubdate: String,\t// дата публикации поста. Строка, как на турбофильме\n\t\tvotes: Number,\t\t// рейтинг поста\n\t\ttext: String,\n\t\tcomments: Array\t// то же самое, что и parseComments\n\t}\n\n###parseComments####\n\tdata.comments = [\n\t\t{\n\t\t\tlevel: Number,\t\t// уровень вложенности в треде (от 0 до 7) \n\t\t\tid: String,\t\t\t// идентификатор комментария в формате /comm\\d+/\n\t\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\t\tusername: String,\t// отображаемое имя автора\n\t\t\tpubdate: String,\t// дата публикации комментария. Строка, как на турбофильме\n\t\t\tvotes: Number,\t\t// рейтинг комментария\n\t\t\ttext: String\n\t\t},\n\t\t...\n\t]\n\n###parseOnpageSeries###\n\tdata.series = [\n\t\t{\n\t\t\timg: String,\t\t\t// url на превью сериала, как на сайте\n\t\t\talt: String,\t\t\t// alt-аттрибут картинки, соответствует канонiчному названию сериала на сайте\n\t\t\tru:  String,\t\t\t// название сериала на русском языке\n\t\t\ten:  String,\t\t\t// название сериала на английском языке\n\t\t\turl: String\t\t\t\t// url на страницу сериала\n\t\t},\n\t\t...\n\t]\n\n###parseCommentDate###\n\tdata.comments = [\n\t\t{\n\t\t\tpubdate: Date\t\t\t// Парсит дату публикации в объект Data\n\t\t}\n\t]\n\nmiddleware\n----------\n\nmiddleware представляет собой обычную функцию-коллбэк, которая может выглядеть примерно так:\n\n\tturbofilm.use (\".*\", function (data, callback) {\n\t\t// некий код\n\t\tcallback ();\n\t});\n\nmiddleware должен вызвать функцию callback в конце своей работы, иначе другие коллбэки просто не смогут отработать.\n\nможно передавать несколько обработчиков\n\n\tturbofilm.use (\".*\", turbofilm.middleware.$, turbofilm.parseOnPageSeries);\n\nкроме того, вместо регекспа можно передавать строку-идентификатор:\n\n\tturbofilm.use ('post', ...);\n\ndata.match\n----------\n\nвнимательный читатель наверняка уже догадался, что в него просто передается результат вычисления url.match (regexp), больше тут добавить нечего\n\nчего нет и что есть, но не работает\n--------------------------------------------\n\n1. на данный момент, нет повторной авторизации при ошибках авторизации, и, соответственно не работает .auth-метод\n2. также, нет возможности оставлять посты и комментарии с помощью .create.(post|comment|reply)\n3. нет никакой поддержки скачивания сериалов\n\nпример\n------\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\tturbofilm.config.ias_id = '0h2048hg08hg8h294gh92h4g8';\n\tturbofilm.use ('.*', turbofilm.middleware.$);\n\tturbofilm.use ('.*', turbofilm.middleware.links);\n\tturbofilm.use ('[BT]log(?!=\\/Posts\\/)', turbofilm.middleware.parseBlog);\n\tturbofilm.use ('[BT]log(?=\\/Posts\\/)', turbofilm.middleware.parsePost);\n\t\n\tturbofilm.use ('.*', function (data, callback) {\n\t\tcallback ();\n\t});\n\t\n\tturbofilm ('/Tlog');\n\t\n\tturbofilm ('/Tlog/Posts/31537');","readmeFilename":"README.md","description":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it","_id":"turbofilm-community-api@0.2.3","dist":{"shasum":"b7095ecb610dc14e12e1e4a5b779d942a65f7189","tarball":"https://registry.npmjs.org/turbofilm-community-api/-/turbofilm-community-api-0.2.3.tgz","integrity":"sha512-WkXaQ+Cplqw5vwhYJv6N8hs/cZk0Ic0IcT9ByLIcY/xjDO5PuC3MkhkxvfQjmGyFszzqCELNQspk7HI/BQ34Yg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHqoyHCWdrEnep6bZ8JFlix+vn1EZIGyggtiRiOdD/4aAiEAtYQSY3QTP+mxApOzh5OwtfdDir1VcN6MuP32WJGImNc="}]},"_from":".","_npmVersion":"1.3.2","_npmUser":{"name":"ambilight","email":"apsmav@gmail.com"},"maintainers":[{"name":"ambilight","email":"apsmav@gmail.com"}]},"0.2.4":{"name":"turbofilm-community-api","version":"0.2.4","main":"index.js","scripts":{"test":"node test.js"},"author":{"name":"Ambilight"},"license":"BSD","dependencies":{"request":"~2.21.0","cheerio":"~0.12.0","redis":"*","async":"*"},"readme":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it\n\nturbofilm-community-api\n=======================\n\nкаркас для парсеров сайта turbofilm.tv\n\n*предназначен только для внутреннего использования продвинутыми пользователями сайта turbofilm.tv*\n\n*для того, чтобы пользоваться пакетом, нужно иметь регистрацию*\n\nархитектуру модуля можно описать двумя словами: connect наоборот — вы пишите middleware, и делаете исходящий запрос, а middleware делает всю остальную работу\n\nустановка\n---------\n\nвам потребуется node.js и npm\n\nв консоли:\n\n\t$npm install turbofilm-community-api\n\nв текстовом редакторе:\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\nиспользование\n-------------\n\nдля начала, вам нужно узнать у своего браузера значение куки под именем `IAS_ID`, без него ничего работать не будет\n\nпередать `IAS_ID` внутрь скрипта можно целыми двумя способами: напрямую, как в примере ниже, и через переменную окружения `TF_IAS_ID` (это может понадобиться для запуска в облаке)\n\n\tturbofilm.config.ias_id = \"<ваш IAS_ID>\"\n\tturbofilm ('/', function (err, data) {\n\t\tconsole.log (data.url) // -> \"/\"\n\t\tconsole.log (data.response) // -> http.ClientResponse\n\t\tconsole.log (data.body) // -> String – текст страницы\n\t\tconsole.log (data.config) // -> Object – настройки модуля\n\t\tconsole.log (data.match) // -> String.match () – далее\n\t});\n\nво фрагменте выше объект data – это то, чем оперируют middleware. на данный момент не один middleware не был подключен, давайте сделаем это\n\n\t\n\tturbofilm.use (\".*\", turbofilm.middleware.$);\n\nсразу же видно две особенности:\n\n1. в одноименном свойстве находятся несколько встроенных middleware (ниже)\n2. в отличии от connect-а, пути пишутся обычными регекспами (именно для этого нужно data.match), что больше похоже на роутер django\n\nтеперь, стало доступно свойство data.$\n\n\tturbofilm (\"/\", function (err, data) {\n\t\tconsole.log (data.$); // -> cheerio.load (data.body)\n\t});\n\t\nвсе middleware выполняются последовательно в порядке вызова .use\n\t\nвстроенные middleware\n---------------------\n###$###\nэкспортирует в data.$ cheerio-дерево документа\n\n###links####\nэкспортирует в data.links массив `$(a[href])`, требует, чтобы $ было включено раньше\n\n###parseBlog###\nэкспортирует в data.posts массив постов со страницы (о парсерах ниже), требует $\n\n###parsePost####\nэкспортирует в data.post пост со страницы (без комментариев!), требует $\n\n###parseComments####\nэкспортирует в data.comments массив комментариев со страницы, требует $\n\n###parseOnpageSeries###\nна каждой странице вверху есть список сериалов, этот парсер парсит именно их\nэкспортирует в data.series массив сериалов со страницы, требует $\n\n###экспериментальные###\nнужны для работы с базой данных redis\n\nдля того, чтобы включить экспериментальные middleware нужно в middleware.js в самом верху заменить строчку:\n\n\tvar ENABLE_REDIS = true;\n\nсразу же потребуется установить пакеты для работы с редисом\n\n\t$npm install hiredis redis\n\nвстроенные парсеры\n------------------\n\nкак несложно догадаться, parseX middleware – это некие парсеры, которые выдирают из cheerio-дерева некие данные. Ниже описаны форматы данных, экспортируемые встроенными парсерами, на некотором json-like псевдокоде\n\n###parseBlog###\n\tdata.posts = [\n\t\t{\t\t\t\t\t\t// то же самое, что и parseComments, плюс:\n\t\t\toffset: Number\t\t// номер поста в блоге\n\t\t}\n\t\t...\n\t]\n\n###parsePost####\n\tdata.post = {\n\t\tid: String,\t\t\t// идентификатор поста\n\t\tblogName: String,\t// название блога, в котором опубликован пост\n\t\tblogUrl: String,\t// url блога, в котором опубликован пост\n\t\ttitle: String,\t\t// название поста\n\t\turl: String,\t\t// url самого поста\n\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\tusername: String,\t// отображаемое имя автора\n\t\tpubdate: String,\t// дата публикации поста. Строка, как на турбофильме\n\t\tvotes: Number,\t\t// рейтинг поста\n\t\ttext: String,\n\t\tcomments: Array\t// то же самое, что и parseComments\n\t}\n\n###parseComments####\n\tdata.comments = [\n\t\t{\n\t\t\tlevel: Number,\t\t// уровень вложенности в треде (от 0 до 7) \n\t\t\tid: String,\t\t\t// идентификатор комментария в формате /comm\\d+/\n\t\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\t\tusername: String,\t// отображаемое имя автора\n\t\t\tpubdate: String,\t// дата публикации комментария. Строка, как на турбофильме\n\t\t\tvotes: Number,\t\t// рейтинг комментария\n\t\t\ttext: String\n\t\t},\n\t\t...\n\t]\n\n###parseOnpageSeries###\n\tdata.series = [\n\t\t{\n\t\t\timg: String,\t\t\t// url на превью сериала, как на сайте\n\t\t\talt: String,\t\t\t// alt-аттрибут картинки, соответствует канонiчному названию сериала на сайте\n\t\t\tru:  String,\t\t\t// название сериала на русском языке\n\t\t\ten:  String,\t\t\t// название сериала на английском языке\n\t\t\turl: String\t\t\t\t// url на страницу сериала\n\t\t},\n\t\t...\n\t]\n\n###parseCommentDate###\n\tdata.comments = [\n\t\t{\n\t\t\tpubdate: Date\t\t\t// Парсит дату публикации в объект Data\n\t\t}\n\t]\n\nmiddleware\n----------\n\nmiddleware представляет собой обычную функцию-коллбэк, которая может выглядеть примерно так:\n\n\tturbofilm.use (\".*\", function (data, callback) {\n\t\t// некий код\n\t\tcallback ();\n\t});\n\nmiddleware должен вызвать функцию callback в конце своей работы, иначе другие коллбэки просто не смогут отработать.\n\nможно передавать несколько обработчиков\n\n\tturbofilm.use (\".*\", turbofilm.middleware.$, turbofilm.parseOnPageSeries);\n\nкроме того, вместо регекспа можно передавать строку-идентификатор:\n\n\tturbofilm.use ('post', ...);\n\ndata.match\n----------\n\nвнимательный читатель наверняка уже догадался, что в него просто передается результат вычисления url.match (regexp), больше тут добавить нечего\n\nчего нет и что есть, но не работает\n--------------------------------------------\n\n1. на данный момент, нет повторной авторизации при ошибках авторизации, и, соответственно не работает .auth-метод\n2. также, нет возможности оставлять посты и комментарии с помощью .create.(post|comment|reply)\n3. нет никакой поддержки скачивания сериалов\n\nпример\n------\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\tturbofilm.config.ias_id = '0h2048hg08hg8h294gh92h4g8';\n\tturbofilm.use ('.*', turbofilm.middleware.$);\n\tturbofilm.use ('.*', turbofilm.middleware.links);\n\tturbofilm.use ('[BT]log(?!=\\/Posts\\/)', turbofilm.middleware.parseBlog);\n\tturbofilm.use ('[BT]log(?=\\/Posts\\/)', turbofilm.middleware.parsePost);\n\t\n\tturbofilm.use ('.*', function (data, callback) {\n\t\tcallback ();\n\t});\n\t\n\tturbofilm ('/Tlog');\n\t\n\tturbofilm ('/Tlog/Posts/31537');","readmeFilename":"README.md","description":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it","_id":"turbofilm-community-api@0.2.4","dist":{"shasum":"67d96918db657de6cdbb6c332ead57e9bd6e5f53","tarball":"https://registry.npmjs.org/turbofilm-community-api/-/turbofilm-community-api-0.2.4.tgz","integrity":"sha512-ayoM6WTgP7hQTkx7Npq93k6NoUK1ZkqRHIx9dBqOOVgx5w/VcMnsz1pcH7mblZg+QXMMFsUvgOQZXcx/Sy82NA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXbGPNqQhIsRbBXgwpbmyAYolCj7mzSNmQEE8+DOJmCgIhAKmO4jRTD9N/44RIALMnTThXv7l3Oc9omlhi+0/bgVU4"}]},"_from":".","_npmVersion":"1.3.2","_npmUser":{"name":"ambilight","email":"apsmav@gmail.com"},"maintainers":[{"name":"ambilight","email":"apsmav@gmail.com"}]},"0.2.5":{"name":"turbofilm-community-api","version":"0.2.5","main":"index.js","scripts":{"test":"node test.js"},"author":{"name":"Ambilight"},"license":"BSD","dependencies":{"request":"~2.21.0","cheerio":"~0.12.0","redis":"*","async":"*"},"readme":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it\n\nturbofilm-community-api\n=======================\n\nкаркас для парсеров сайта turbofilm.tv\n\n*предназначен только для внутреннего использования продвинутыми пользователями сайта turbofilm.tv*\n\n*для того, чтобы пользоваться пакетом, нужно иметь регистрацию*\n\nархитектуру модуля можно описать двумя словами: connect наоборот — вы пишите middleware, и делаете исходящий запрос, а middleware делает всю остальную работу\n\nустановка\n---------\n\nвам потребуется node.js и npm\n\nв консоли:\n\n\t$npm install turbofilm-community-api\n\nв текстовом редакторе:\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\nиспользование\n-------------\n\nдля начала, вам нужно узнать у своего браузера значение куки под именем `IAS_ID`, без него ничего работать не будет\n\nпередать `IAS_ID` внутрь скрипта можно целыми двумя способами: напрямую, как в примере ниже, и через переменную окружения `TF_IAS_ID` (это может понадобиться для запуска в облаке)\n\n\tturbofilm.config.ias_id = \"<ваш IAS_ID>\"\n\tturbofilm ('/', function (err, data) {\n\t\tconsole.log (data.url) // -> \"/\"\n\t\tconsole.log (data.response) // -> http.ClientResponse\n\t\tconsole.log (data.body) // -> String – текст страницы\n\t\tconsole.log (data.config) // -> Object – настройки модуля\n\t\tconsole.log (data.match) // -> String.match () – далее\n\t});\n\nво фрагменте выше объект data – это то, чем оперируют middleware. на данный момент не один middleware не был подключен, давайте сделаем это\n\n\t\n\tturbofilm.use (\".*\", turbofilm.middleware.$);\n\nсразу же видно две особенности:\n\n1. в одноименном свойстве находятся несколько встроенных middleware (ниже)\n2. в отличии от connect-а, пути пишутся обычными регекспами (именно для этого нужно data.match), что больше похоже на роутер django\n\nтеперь, стало доступно свойство data.$\n\n\tturbofilm (\"/\", function (err, data) {\n\t\tconsole.log (data.$); // -> cheerio.load (data.body)\n\t});\n\t\nвсе middleware выполняются последовательно в порядке вызова .use\n\t\nвстроенные middleware\n---------------------\n###$###\nэкспортирует в data.$ cheerio-дерево документа\n\n###links####\nэкспортирует в data.links массив `$(a[href])`, требует, чтобы $ было включено раньше\n\n###parseBlog###\nэкспортирует в data.posts массив постов со страницы (о парсерах ниже), требует $\n\n###parsePost####\nэкспортирует в data.post пост со страницы (без комментариев!), требует $\n\n###parseComments####\nэкспортирует в data.comments массив комментариев со страницы, требует $\n\n###parseOnpageSeries###\nна каждой странице вверху есть список сериалов, этот парсер парсит именно их\nэкспортирует в data.series массив сериалов со страницы, требует $\n\n###экспериментальные###\nнужны для работы с базой данных redis\n\nдля того, чтобы включить экспериментальные middleware нужно в middleware.js в самом верху заменить строчку:\n\n\tvar ENABLE_REDIS = true;\n\nсразу же потребуется установить пакеты для работы с редисом\n\n\t$npm install hiredis redis\n\nвстроенные парсеры\n------------------\n\nкак несложно догадаться, parseX middleware – это некие парсеры, которые выдирают из cheerio-дерева некие данные. Ниже описаны форматы данных, экспортируемые встроенными парсерами, на некотором json-like псевдокоде\n\n###parseBlog###\n\tdata.posts = [\n\t\t{\t\t\t\t\t\t// то же самое, что и parseComments, плюс:\n\t\t\toffset: Number\t\t// номер поста в блоге\n\t\t}\n\t\t...\n\t]\n\n###parsePost####\n\tdata.post = {\n\t\tid: String,\t\t\t// идентификатор поста\n\t\tblogName: String,\t// название блога, в котором опубликован пост\n\t\tblogUrl: String,\t// url блога, в котором опубликован пост\n\t\ttitle: String,\t\t// название поста\n\t\turl: String,\t\t// url самого поста\n\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\tusername: String,\t// отображаемое имя автора\n\t\tpubdate: String,\t// дата публикации поста. Строка, как на турбофильме\n\t\tvotes: Number,\t\t// рейтинг поста\n\t\ttext: String,\n\t\tcomments: Array\t// то же самое, что и parseComments\n\t}\n\n###parseComments####\n\tdata.comments = [\n\t\t{\n\t\t\tlevel: Number,\t\t// уровень вложенности в треде (от 0 до 7) \n\t\t\tid: String,\t\t\t// идентификатор комментария в формате /comm\\d+/\n\t\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\t\tusername: String,\t// отображаемое имя автора\n\t\t\tpubdate: String,\t// дата публикации комментария. Строка, как на турбофильме\n\t\t\tvotes: Number,\t\t// рейтинг комментария\n\t\t\ttext: String\n\t\t},\n\t\t...\n\t]\n\n###parseOnpageSeries###\n\tdata.series = [\n\t\t{\n\t\t\timg: String,\t\t\t// url на превью сериала, как на сайте\n\t\t\talt: String,\t\t\t// alt-аттрибут картинки, соответствует канонiчному названию сериала на сайте\n\t\t\tru:  String,\t\t\t// название сериала на русском языке\n\t\t\ten:  String,\t\t\t// название сериала на английском языке\n\t\t\turl: String\t\t\t\t// url на страницу сериала\n\t\t},\n\t\t...\n\t]\n\n###parseCommentDate###\n\tdata.comments = [\n\t\t{\n\t\t\tpubdate: Date\t\t\t// Парсит дату публикации в объект Data\n\t\t}\n\t]\n\nmiddleware\n----------\n\nmiddleware представляет собой обычную функцию-коллбэк, которая может выглядеть примерно так:\n\n\tturbofilm.use (\".*\", function (data, callback) {\n\t\t// некий код\n\t\tcallback ();\n\t});\n\nmiddleware должен вызвать функцию callback в конце своей работы, иначе другие коллбэки просто не смогут отработать.\n\nможно передавать несколько обработчиков\n\n\tturbofilm.use (\".*\", turbofilm.middleware.$, turbofilm.parseOnPageSeries);\n\nкроме того, вместо регекспа можно передавать строку-идентификатор:\n\n\tturbofilm.use ('post', ...);\n\ndata.match\n----------\n\nвнимательный читатель наверняка уже догадался, что в него просто передается результат вычисления url.match (regexp), больше тут добавить нечего\n\nчего нет и что есть, но не работает\n--------------------------------------------\n\n1. на данный момент, нет повторной авторизации при ошибках авторизации, и, соответственно не работает .auth-метод\n2. также, нет возможности оставлять посты и комментарии с помощью .create.(post|comment|reply)\n3. нет никакой поддержки скачивания сериалов\n\nпример\n------\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\tturbofilm.config.ias_id = '0h2048hg08hg8h294gh92h4g8';\n\tturbofilm.use ('.*', turbofilm.middleware.$);\n\tturbofilm.use ('.*', turbofilm.middleware.links);\n\tturbofilm.use ('[BT]log(?!=\\/Posts\\/)', turbofilm.middleware.parseBlog);\n\tturbofilm.use ('[BT]log(?=\\/Posts\\/)', turbofilm.middleware.parsePost);\n\t\n\tturbofilm.use ('.*', function (data, callback) {\n\t\tcallback ();\n\t});\n\t\n\tturbofilm ('/Tlog');\n\t\n\tturbofilm ('/Tlog/Posts/31537');","readmeFilename":"README.md","description":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it","_id":"turbofilm-community-api@0.2.5","dist":{"shasum":"60ae3619fb0711d52ddf41c082612f090b3cc632","tarball":"https://registry.npmjs.org/turbofilm-community-api/-/turbofilm-community-api-0.2.5.tgz","integrity":"sha512-gED398nCNha+kyEiLEIcNBoL6fM0p6TEnlVkfEhO7RmbOOCJvcdLENp4FXQMs4yRoCgqk58DruV8M1bXecs5QA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDRgdzagWKZ+1Z5pF/SIyLF0EUrx/QXC6Xf/gcWfddt5QIhAO3L7f8kG56I11/e/PbgJoG/1XWBfGna4P4odJwkS4w7"}]},"_from":".","_npmVersion":"1.3.2","_npmUser":{"name":"ambilight","email":"apsmav@gmail.com"},"maintainers":[{"name":"ambilight","email":"apsmav@gmail.com"}]},"0.2.6":{"name":"turbofilm-community-api","version":"0.2.6","main":"index.js","scripts":{"test":"node test.js"},"author":{"name":"Ambilight"},"license":"BSD","dependencies":{"request":"~2.21.0","cheerio":"~0.12.0","redis":"*","async":"*"},"readme":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it\n\nturbofilm-community-api\n=======================\n\nкаркас для парсеров сайта turbofilm.tv\n\n*предназначен только для внутреннего использования продвинутыми пользователями сайта turbofilm.tv*\n\n*для того, чтобы пользоваться пакетом, нужно иметь регистрацию*\n\nархитектуру модуля можно описать двумя словами: connect наоборот — вы пишите middleware, и делаете исходящий запрос, а middleware делает всю остальную работу\n\nустановка\n---------\n\nвам потребуется node.js и npm\n\nв консоли:\n\n\t$npm install turbofilm-community-api\n\nв текстовом редакторе:\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\nиспользование\n-------------\n\nдля начала, вам нужно узнать у своего браузера значение куки под именем `IAS_ID`, без него ничего работать не будет\n\nпередать `IAS_ID` внутрь скрипта можно целыми двумя способами: напрямую, как в примере ниже, и через переменную окружения `TF_IAS_ID` (это может понадобиться для запуска в облаке)\n\n\tturbofilm.config.ias_id = \"<ваш IAS_ID>\"\n\tturbofilm ('/', function (err, data) {\n\t\tconsole.log (data.url) // -> \"/\"\n\t\tconsole.log (data.response) // -> http.ClientResponse\n\t\tconsole.log (data.body) // -> String – текст страницы\n\t\tconsole.log (data.config) // -> Object – настройки модуля\n\t\tconsole.log (data.match) // -> String.match () – далее\n\t});\n\nво фрагменте выше объект data – это то, чем оперируют middleware. на данный момент не один middleware не был подключен, давайте сделаем это\n\n\t\n\tturbofilm.use (\".*\", turbofilm.middleware.$);\n\nсразу же видно две особенности:\n\n1. в одноименном свойстве находятся несколько встроенных middleware (ниже)\n2. в отличии от connect-а, пути пишутся обычными регекспами (именно для этого нужно data.match), что больше похоже на роутер django\n\nтеперь, стало доступно свойство data.$\n\n\tturbofilm (\"/\", function (err, data) {\n\t\tconsole.log (data.$); // -> cheerio.load (data.body)\n\t});\n\t\nвсе middleware выполняются последовательно в порядке вызова .use\n\t\nвстроенные middleware\n---------------------\n###$###\nэкспортирует в data.$ cheerio-дерево документа\n\n###links####\nэкспортирует в data.links массив `$(a[href])`, требует, чтобы $ было включено раньше\n\n###parseBlog###\nэкспортирует в data.posts массив постов со страницы (о парсерах ниже), требует $\n\n###parsePost####\nэкспортирует в data.post пост со страницы (без комментариев!), требует $\n\n###parseComments####\nэкспортирует в data.comments массив комментариев со страницы, требует $\n\n###parseOnpageSeries###\nна каждой странице вверху есть список сериалов, этот парсер парсит именно их\nэкспортирует в data.series массив сериалов со страницы, требует $\n\n###экспериментальные###\nнужны для работы с базой данных redis\n\nдля того, чтобы включить экспериментальные middleware нужно в middleware.js в самом верху заменить строчку:\n\n\tvar ENABLE_REDIS = true;\n\nсразу же потребуется установить пакеты для работы с редисом\n\n\t$npm install hiredis redis\n\nвстроенные парсеры\n------------------\n\nкак несложно догадаться, parseX middleware – это некие парсеры, которые выдирают из cheerio-дерева некие данные. Ниже описаны форматы данных, экспортируемые встроенными парсерами, на некотором json-like псевдокоде\n\n###parseBlog###\n\tdata.posts = [\n\t\t{\t\t\t\t\t\t// то же самое, что и parseComments, плюс:\n\t\t\toffset: Number\t\t// номер поста в блоге\n\t\t}\n\t\t...\n\t]\n\n###parsePost####\n\tdata.post = {\n\t\tid: String,\t\t\t// идентификатор поста\n\t\tblogName: String,\t// название блога, в котором опубликован пост\n\t\tblogUrl: String,\t// url блога, в котором опубликован пост\n\t\ttitle: String,\t\t// название поста\n\t\turl: String,\t\t// url самого поста\n\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\tusername: String,\t// отображаемое имя автора\n\t\tpubdate: String,\t// дата публикации поста. Строка, как на турбофильме\n\t\tvotes: Number,\t\t// рейтинг поста\n\t\ttext: String,\n\t\tcomments: Array\t// то же самое, что и parseComments\n\t}\n\n###parseComments####\n\tdata.comments = [\n\t\t{\n\t\t\tlevel: Number,\t\t// уровень вложенности в треде (от 0 до 7) \n\t\t\tid: String,\t\t\t// идентификатор комментария в формате /comm\\d+/\n\t\t\tauthor: String,\t\t// url на страницу профиля автора\n\t\t\tusername: String,\t// отображаемое имя автора\n\t\t\tpubdate: String,\t// дата публикации комментария. Строка, как на турбофильме\n\t\t\tvotes: Number,\t\t// рейтинг комментария\n\t\t\ttext: String\n\t\t},\n\t\t...\n\t]\n\n###parseOnpageSeries###\n\tdata.series = [\n\t\t{\n\t\t\timg: String,\t\t\t// url на превью сериала, как на сайте\n\t\t\talt: String,\t\t\t// alt-аттрибут картинки, соответствует канонiчному названию сериала на сайте\n\t\t\tru:  String,\t\t\t// название сериала на русском языке\n\t\t\ten:  String,\t\t\t// название сериала на английском языке\n\t\t\turl: String\t\t\t\t// url на страницу сериала\n\t\t},\n\t\t...\n\t]\n\n###parseCommentDate###\n\tdata.comments = [\n\t\t{\n\t\t\tpubdate: Date\t\t\t// Парсит дату публикации в объект Data\n\t\t}\n\t]\n\nmiddleware\n----------\n\nmiddleware представляет собой обычную функцию-коллбэк, которая может выглядеть примерно так:\n\n\tturbofilm.use (\".*\", function (data, callback) {\n\t\t// некий код\n\t\tcallback ();\n\t});\n\nmiddleware должен вызвать функцию callback в конце своей работы, иначе другие коллбэки просто не смогут отработать.\n\nможно передавать несколько обработчиков\n\n\tturbofilm.use (\".*\", turbofilm.middleware.$, turbofilm.parseOnPageSeries);\n\nкроме того, вместо регекспа можно передавать строку-идентификатор:\n\n\tturbofilm.use ('post', ...);\n\ndata.match\n----------\n\nвнимательный читатель наверняка уже догадался, что в него просто передается результат вычисления url.match (regexp), больше тут добавить нечего\n\nчего нет и что есть, но не работает\n--------------------------------------------\n\n1. на данный момент, нет повторной авторизации при ошибках авторизации, и, соответственно не работает .auth-метод\n2. также, нет возможности оставлять посты и комментарии с помощью .create.(post|comment|reply)\n3. нет никакой поддержки скачивания сериалов\n\nпример\n------\n\n\tvar turbofilm = require ('turbofilm-community-api');\n\tturbofilm.config.ias_id = '0h2048hg08hg8h294gh92h4g8';\n\tturbofilm.use ('.*', turbofilm.middleware.$);\n\tturbofilm.use ('.*', turbofilm.middleware.links);\n\tturbofilm.use ('[BT]log(?!=\\/Posts\\/)', turbofilm.middleware.parseBlog);\n\tturbofilm.use ('[BT]log(?=\\/Posts\\/)', turbofilm.middleware.parsePost);\n\t\n\tturbofilm.use ('.*', function (data, callback) {\n\t\tcallback ();\n\t});\n\t\n\tturbofilm ('/Tlog');\n\t\n\tturbofilm ('/Tlog/Posts/31537');","readmeFilename":"README.md","description":"if you are not have account on russian web-site turbofilm.tv, this package won't help you anything. please do not install it","_id":"turbofilm-community-api@0.2.6","dist":{"shasum":"a572ea4d1a25b894eb5340be86ab9e1c5e62fe37","tarball":"https://registry.npmjs.org/turbofilm-community-api/-/turbofilm-community-api-0.2.6.tgz","integrity":"sha512-KE7QcLJMXq1hCnRfoR2mnffevz5M4p8F58PcF1wzzCQWXDRaA5/q9tNpPm/H79+OFq69p2cUK2pcAiZdEbqiEg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCnOkSZUF87ZanBa9mVQkrIDGlvsANU0IQrL0h3yh7NVwIhAPryZoygY++2CZtpq05A3/7t0u+BpmbXU9HTGET2Y/Nh"}]},"_from":".","_npmVersion":"1.3.2","_npmUser":{"name":"ambilight","email":"apsmav@gmail.com"},"maintainers":[{"name":"ambilight","email":"apsmav@gmail.com"}]}},"readme":"turbofilm-community-api\n=======================\n\nзагляните вначале в run.sh, затем, в turbofilm.sh.\n\nпосле этого, можете посмотреть на index.js, download.js\n\nпарсеры хранятся в /parser\n\nюсейдж:\n-------\n\n```bash\n$ ./turbofilm.sh /Tlog\n$ ./turbofilm.sh /Tlog/Posts/22390\n```\n\n```javascript\nrequire ('turbofilm-community-api') (\"/Tlog/Posts/22390\", function (err, result) {\n\t\n})\n```","maintainers":[{"name":"ambilight","email":"apsmav@gmail.com"}],"time":{"modified":"2022-06-27T23:25:49.336Z","created":"2013-06-12T12:45:49.990Z","0.0.1":"2013-06-12T12:45:52.367Z","0.0.2":"2013-06-12T13:10:44.101Z","0.0.3":"2013-06-13T13:18:31.105Z","0.0.4":"2013-06-15T21:23:39.862Z","0.0.5":"2013-06-15T21:30:00.460Z","0.1.0":"2013-06-30T20:14:32.889Z","0.1.1":"2013-06-30T20:16:18.542Z","0.1.2":"2013-07-01T09:00:39.304Z","0.1.4":"2013-07-01T09:07:42.813Z","0.1.5":"2013-07-01T09:22:39.355Z","0.1.6":"2013-07-01T09:30:25.494Z","0.1.7":"2013-07-01T09:35:33.005Z","0.1.8":"2013-07-01T09:44:01.218Z","0.1.9":"2013-07-01T16:44:30.272Z","0.2.0":"2013-07-03T12:44:47.313Z","0.2.1":"2013-07-03T13:11:25.913Z","0.2.2":"2013-07-29T14:56:54.271Z","0.2.3":"2013-07-29T15:15:25.257Z","0.2.4":"2013-07-31T08:55:14.845Z","0.2.5":"2013-07-31T08:56:01.175Z","0.2.6":"2013-09-03T21:11:45.603Z"},"author":{"name":"Ambilight"}}