Страница 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. А если случай единичный - всегда обоим сторонам проще всё устно с примерами обсудить.