Страница 1 из 23
ГлавТВ: добавление нового сервиса
Добавлено: 06 окт 2011, 03:46
consros
Создание сервиса для ГлавТВ
Внимание! Статья написана для экспериментальной версии ГлавТВ, под кодовым названием EasyTT. Поэтому это название будет встречаться в тексте. Речь на самом деле идет о ГлавТВ.
Cодержание:
- Создание скелета сервиса
- Создание обработчика первой страницы
- Разбор полученной страницы
- Форматирование результатов в терминах ГлавТВ
- Страница фильма и открытие видео
Подробности в прикреплённом файле EasyTT-howto.zip или
в этом документе на Google Docs.
Шаги создания - в steps.zip
В результате выполнения описанных выше пяти шагов в ГлавТВ появится новый сервис, показывающий первую страницу сервиса
http://uletno.info и позволяющую запускать оттуда видео.
TVonTop: добавление нового сервиса
Добавлено: 06 окт 2011, 03:54
consros
Вот ещё раз целиком весь код разбора заглавной страницы
http://uletno.net и добавления её как сервиса.
Сложно ли это?
Код: Выделить всё
<?php
#############################################################################
# Author: consros 2011 #
# Author: stalker 2011 #
#############################################################################
require_once 'interfaces/service.inc';
require_once 'interfaces/channel.inc';
require_once 'interfaces/item.inc';
require_once 'interfaces/pager.inc';
require_once 'interfaces/message.inc';
require_once 'tools/http.inc';
require_once 'tools/logger.inc';
require_once 'tools/parser.inc';
require_once 'tools/config.inc';
class UletnoService extends Service {
protected $log;
protected $http;
public function init(&$cfg, &$lang) {
parent::init($cfg, $lang);
$this->log = Logger::getLogger(get_class());
$this->http = new HttpTools();
$this->log->setLevel(5);
$this->log->setFilepath(null);
}
public function startPage() {
$page = $this->getOptionalParam('page', 1);
$url = 'http://uletno.info/page/' . $page . '/';
$html = $this->http->sendGetRequest($url);
# cut off not necessary parts
$html = ParserTools::parseParam($html, "<div id='dle-content'>", '<form method="post"');
# $this->log->debug('HTML: ' . print_r($html, true));
# convert from cp-1251 to utf-8 accepted by us
$html = iconv('Windows-1251', 'UTF-8', $html);
# split on movie describing blocks
$movies = ParserTools::parseTokens($html, 'id="table11"', 'id="table18"');
# $this->log->debug('HTML: ' . print_r($movies, true));
$channel = new Channel('Uletno.info', '', '');
$channel->setSupportedTemplates('wall', 'icon-table', 'detailed-list');
$url = $this->cfg->get('service_url') . '&req=details&id=';
foreach ($movies as $movie) {
$name = ParserTools::parseParam($movie, 'class="roltitle">', ' смотреть');
$thumb = ParserTools::parseParam($movie, '<img src="/uploads/posts', '"');
$descr = ParserTools::parseParam($movie, 'style="display:inline;">', '<a href');
$id = ParserTools::parseParam($movie, 'align: top;"><a href="', '"');
# make absolute path to image
$thumb = 'http://uletno.info/uploads/posts' . $thumb;
# remove html tags from used fields
$name = ParserTools::removeHtmlTags($name);
$descr = ParserTools::removeHtmlTags($descr);
$item = new Item($name, $descr);
$item->set(Item::ID, $id);
$item->set(Item::THUMBNAIL, $thumb);
$item->set(Item::LINK, $url . urlencode($id));
$channel->addItem($item);
}
return $channel;
}
public function details() {
# id = url in our case
# e.g. http://uletno.info/2011/10/05/sent-anzh.html
$url = $this->getRequredParam('id');
$html = $this->http->sendGetRequest($url);
# cut off not necessary parts
$html = ParserTools::parseParam($html,
'Get Adobe Flash player', '<table class="storyfinfo"');
# convert from cp-1251 to utf-8 accepted by us
$html = iconv('Windows-1251', 'UTF-8', $html);
# main params
$name = ParserTools::parseParam($html, '"comment":"', '"');
$video = ParserTools::parseParam($html, '"file":"', '"');
$descr = ParserTools::parseParam($html,
'style="display:inline;">', '</div>');
# remove html tags from used fields
$name = ParserTools::removeHtmlTags($name);
$descr = ParserTools::removeHtmlTags($descr);
$channel = new Channel($name, '', $descr);
# $channel->setSupportedTemplates('media-details');
$channel->setSupportedTemplates('auto-open');
$item = new Item($name, '');
$item->addEnclosure($video, 'video/mp4');
$channel->addItem($item);
return $channel;
}
}
?>
TVonTop: добавление нового сервиса
Добавлено: 06 окт 2011, 21:37
consros
Создание улучшенного сервиса для TVonTop
Cодержание:
- Пейджер
- Передача параметров дочерней странице
- Отображение более полной информации
- Отображение скриншотов
- Поддержка поиска
- Рубрикатор: поддержка жанров (*описание пока отсутствует)
- Быстрые кнопки (*описание пока отсутствует)
Статья про улучшение/усложнение сервиса.
Более сложная и не всегда нужная, но открывающая доступ к многим мощным фичам.
Буду рад ответить на вопросы, если они возникнут.
Re: TVonTop: добавление нового сервиса
Добавлено: 17 ноя 2011, 17:55
wolkus
Пишет что вложенных файлов больше не существует.
Re: TVonTop: добавление нового сервиса
Добавлено: 17 ноя 2011, 18:05
consros
Поправил.
Re: TVonTop: добавление нового сервиса
Добавлено: 18 ноя 2011, 10:52
wolkus
На 2 этапе при просмотре полученной страницы получаю это-
<br />
<b>Fatal error</b>: Class StmediaService contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Service::getServiceName) in <b>/tmp/usbmounts/sda1/scripts/TVonTop/services/stmedia/stmediaService.inc</b> on line <b>17</b><br />
Причем с вашими файлами так же.Что не так?
Re: TVonTop: добавление нового сервиса
Добавлено: 18 ноя 2011, 10:57
consros
Кое-что изменилось по мелочи. Посмотри класс service.inc.
Надо определить два метода
public abstract function getServiceName();
public abstract function startPage();
В описании был только startPage.
Советую взять за основу сервис Sovok, он один из самых компактных.
Re: TVonTop: добавление нового сервиса
Добавлено: 18 ноя 2011, 11:03
wolkus
А можно поподробней.Я в этом не очень разбираюсь.
Но учится не когда не поздно!
Re: TVonTop: добавление нового сервиса
Добавлено: 19 ноя 2011, 02:23
vade
Может глупый вопрос,как проверить сервис?Можно поподробней.Папка easytt где угодно на ПК может быть или только в плеере?
"Посмотрим результат в FireFox с помощью адреса
view-source:http://<путь к easytt>/?srv=uletno"
И когда выйдет 11 и 12 шаги описания?
Re: TVonTop: добавление нового сервиса
Добавлено: 19 ноя 2011, 02:37
consros
Смотря как запускаешь.
Приложение должно быть внутри какого-то веб-сервера с поддержкой php.
Xtreamer - он сам такой веб-сервер, поэтому проще начинать с разработки прямо под ним. Прямо скопировать в параллельный TVonTop каталог.
Шаги 11 и 12 выйдут когда появятся осилившие предыдущие шаги.
Пока что с этим справился только agent_wowa. А если случай единичный - всегда обоим сторонам проще всё устно с примерами обсудить.