ServiceFork Tizen

Материал из Браузер Fork - Wiki
Версия от 14:02, 28 октября 2026; Mentos (обсуждение | вклад) (FXML all_*: channel overrides global)
Перейти к навигации Перейти к поиску


На Samsung Tizen Fork browser запускает фоновый HTTP-сервис ServiceFork (порт 8092): в нём Node.js парсит сайты и отдаёт страницы в формате FXML (JSON) с http://127.0.0.1:8092/ — без PHP на хостинге.

Каждый файл-плагин в service/plugins/ — отдельный локальный парсер. Если задана функция home(), плитка парсера появляется на домашней странице Fork browser в секции Локально.

См. также: Спецификация FXML · Репозиторий Fork browser

Назначение

  • Локальные парсеры — каталоги, поиск, просмотр: логика выполняется на TV в Tizen background service (Node.js).
  • Ответ — тот же JSON, что у веб-портала: title, channels[], глобальные поля (css, typeList, icon …) — см. модель FXML.
  • Один файл service/plugins/<id>.js = один парсер с URL http://127.0.0.1:8092/<id>.

Домашняя страница: секция «Локально»

При старте Fork browser (Tizen) запрашивает http://127.0.0.1:8092/status. ServiceFork собирает массив services из функций home() всех загруженных плагинов (homeServices в service/index.js) и отдаёт плитки в формате FXML-channel (source: service, playlist_url, иконка, меню).

Клиент добавляет эти плитки в блок ch.service стартовой страницы — в интерфейсе это секция Локально (рядом с USB, играми и другими локальными пунктами).

Важно: без home() парсер доступен только по прямому URL (/<id> или ссылка playlist_url в другом портале), на домашний экран он не попадёт.

Архитектура

Компонент Описание
service/index.js Ядро ServiceFork: HTTP 8092, загрузка плагинов, createApi, маршрутизация, /status → services.
service/plugins/<id>.js Модуль парсера: routes (страницы FXML), опционально home() (плитка «Локально»), matchUrl / handleUrl для перехвата внешних ссылок.
Fork browser (UI) Открывает playlist_url плитки или любой http://127.0.0.1:8092/… и рисует JSON как обычную FXML-страницу.

Tizen: background service приложения (config.xml, пакет <packageId>.servicefork), точки входа onStart / onRequest в service/index.js.

Служебные URL:

Путь Ответ
/status JSON: ok, версия, список плагинов, services — плитки для секции «Локально»
/, /plugins Список парсеров (FXML или JSON)
/logs Логи service (FXML-страница)

Зарезервированные id: status, plugins, logs.

Быстрый старт: свой парсер

  1. В Tizen Studio (workspace/Forkbrowser/service/plugins/) скопируйте _template.js → myparser.js (файлы с _ в начале имени не загружаются).
  2. Опишите парсер: name, version, маршруты в routes ( — главная, search, list …).
  3. Реализуйте home(base) и верните api.homeTile({…}) — так парсер появится в Локально после установки .wgt.
  4. Соберите виджет и установите на TV. Парсер: http://127.0.0.1:8092/myparser
  5. Иконка: положите service/plugins/myparser.png рядом с .js — подставится в плитку.

Минимальный каркас:

module.exports = function (api) {
  var id = 'myparser';
  return {
    name: 'My Parser',
    version: '1.0.0',
    home: function (base) {
      return api.homeTile({
        id: id,
        base: base,
        title: 'My Parser',
        playlist_url: api.pluginUrl(base, id)
      });
    },
    routes: {
      '': function (ctx, cb) {
        cb(null, api.page('My Parser', [
          api.folder('Раздел', api.pluginUrl(ctx.base, id, 'list'))
        ]));
      },
      list: function (ctx, cb) {
        cb(null, api.page('Список', [
          api.stream('Пример', 'http://example.com/video.m3u8')
        ]));
      }
    }
  };
};

При необходимости парсер можно вызывать и с удалённого портала — укажите в JSON "playlist_url": "http://127.0.0.1:8092/myparser" (актуально только на устройстве, где запущен ServiceFork).

API ядра (кратко)

Плагин получает объект api из createApi (service/index.js).

Метод Назначение
api.page(title, channels, extra) FXML-страница (css, typeList, icon в extra)
api.folder(title, url, opts) Элемент с playlist_url
api.stream(title, url, opts) Элемент с stream_url, опционально parser
api.htmlChannel(cfg) Channel с position: html, шаблон, меню, поиск
api.homeTile(cfg) Плитка для секции «Локально» (source: service)
api.cardChannels(items, base, opts) Сетка карточек
api.getText / api.getTextCached HTTP GET HTML
api.pluginUrl(base, id, route, params) URL маршрута парсера
api.log.info / warn / error Логи → /logs и UI Fork

Маршруты: ключ — путь после /<pluginId>/; обработчик (ctx, cb), cb(err, fxmlObject).

Внешние ссылки: matchUrl + handleUrl — перехват полного http(s)://… в адресной строке Fork (см. rezka.js, kinogo.js).

Иконки и оформление

  • service/plugins/<id>.png (или .jpg) → http://127.0.0.1:8092/<id>.png
  • CSS страницы: api.page(..., { css: '...' })
  • Шаблоны карточек: api.htmlChannel({ template: '...' }) — плейсхолдеры как в §6 FXML

Отладка

  1. http://127.0.0.1:8092/status — версия, список плагинов, массив services (то, что уходит в «Локально»).
  2. http://127.0.0.1:8092/logs — логи; ошибки плагина с префиксом [pluginId].
  3. В Fork логи service также приходят через MessagePort (servicefork-log).

Связь с FXML

PHP-портал ServiceFork (Tizen)
$_PL / $_CH api.page()
json_encode sendJson в HTTP-ответе
Ссылки на свой домен api.pluginUrl → 127.0.0.1:8092

Для пользователя JSON выглядит одинаково; разница только в том, что парсер крутится локально на TV.

Примеры в проекте

  • service/plugins/_template.js — шаблон парсера с home() и routes
  • service/plugins/rezka.js, kinogo.js — полные парсеры (меню, поиск, matchUrl)

Установка приложения с ServiceFork

Сборка .wgt и установка на Samsung Tizen — инструкции по установке (Apps2Tizen, ForkTizenInstall).