ServiceFork Tizen

Материал из Браузер Fork - Wiki
Перейти к навигации Перейти к поиску


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

Один каталог service/plugins/ и одно ядро service/index.js используются в обеих сборках. Плитки парсеров с home() попадают на домашнюю страницу в секцию Локально.

Версия виджета: локальные парсеры ServiceFork — начиная с 1.3.0 (Tizen .wgt и webOS .ipk). В более старых сборках секция «Локально» без этих плиток.

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

Назначение

  • Локальные парсеры — каталоги, поиск, просмотр: логика на TV (Node.js в background / JS service).
  • Контракт как у веб-портала: title, channels[], глобальные поля — см. модель FXML.
  • Файл service/plugins/<id>.js → URL http://127.0.0.1:8092/<id> (имя без .js).

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

При старте приложение будит ServiceFork и опрашивает http://127.0.0.1:8092/status. В JSON поле services — плитки из home() всех плагинов (homeServices в service/index.js): FXML-channel с source: service, playlist_url, иконкой.

Клиент кладёт их в ch.service стартовой страницы — в UI это блок Локально.

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

Общая архитектура (Tizen и webOS)

Компонент Описание
service/index.js Ядро: HTTP 8092, загрузка плагинов, createApi, маршруты, /status → services.
service/plugins/<id>.js Парсер: routes, home(), опционально matchUrl / handleUrl.
service/plugins/<id>.png Иконка плитки (локальный URL на том же порту).
Fork browser (UI) playlist_url → 127.0.0.1:8092/…, отображение JSON как FXML.

Служебные URL (одинаково на обеих платформах):

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

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

Samsung Tizen

Запуск Background service в config.xml, пакет <packageId>.servicefork, onStart / onRequest в service/index.js.
Проект Tizen Studio, например workspace/Forkbrowser/service/.
Сборка .wgt с приложением и service, см. установка Tizen.
Логи в UI MessagePort servicefork-log (Tizen).

LG webOS

С 1.3.0 webOS использует то же ядро и те же плагины, что Tizen; отличается только обёртка платформы.

Luna service com.forkplayer.tv.service — каталог usr/palm/services/com.forkplayer.tv.service/ в IPK.
Обёртка service/service.js (webos-service): подключает index.js, держит HTTP :8092 через activity / keepAlive (важно на эмуляторе 3.0, иначе процесс завершается и /rezka, /logs дают «connection refused»).
Старт из приложения luna://com.forkplayer.tv.service/start (subscribe) из js/load.js, затем опрос /status → window.servicefork.
Проект ForkPlayer_webOS: UI в корне, service/ — копия Tizen service + services.json, package.json.
Сборка IPK Только через ares-package (app + service в одном пакете). Ручной tar-IPK на эмуляторе 3.0 даёт «Failed to extract package».
Пример файла com.forkplayer.tv_1.3.0_all.ipk — приложение + service в packageinfo.

Структура IPK (упрощённо):

usr/palm/applications/com.forkplayer.tv/     ← UI (Fork browser)
usr/palm/services/com.forkplayer.tv.service/ ← ServiceFork :8092 + plugins
usr/palm/packages/com.forkplayer.tv/         ← packageinfo со списком services[]

Адрес 127.0.0.1:8092 на webOS TV и эмуляторе корректен: запросы идут к JS service на том же устройстве. Если плитки есть, а страница парсера не открывается — сервис уже завершился; обновите виджет ≥ 1.3.0 с исправленным keep-alive.

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

  1. Скопируйте service/plugins/_template.js → myparser.js (файлы _*.js не загружаются).
  2. Задайте name, version, routes; реализуйте home(base) → api.homeTile({…}).
  3. Положите myparser.png рядом с .js.
  4. Соберите виджет ≥ 1.3.0 (Tizen .wgt или webOS .ipk) и установите на TV.
  5. Проверка: http://127.0.0.1:8092/status, плитка в «Локально», вход /myparser.

Плагины правят в Tizen-проекте и синхронизируют в ForkPlayer_webOS/service/plugins/ (или наоборот — ядро общее).

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

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')
        ]));
      }
    }
  };
};

Удалённый портал может ссылаться на http://127.0.0.1:8092/myparser — работает только на устройстве с запущенным ServiceFork.

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

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

Метод Назначение
api.page(title, channels, extra) FXML-страница
api.folder / api.stream / api.htmlChannel Элементы списка
api.homeTile(cfg) Плитка «Локально»
api.cardChannels, api.getTextCached Сетки и HTTP
api.pluginUrl(base, id, route, params) URL маршрута
api.log.info / warn / error Логи → /logs

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

Внешние URL: matchUrl + handleUrl (см. rezka.js, kinogo.js).

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

Отладка

  1. http://127.0.0.1:8092/status — плагины и массив services.
  2. http://127.0.0.1:8092/logs — FXML-логи; ?format=raw, ?clear=1.
  3. Tizen: MessagePort servicefork-log.
  4. webOS: ответ Luna start (поле log в service.js), консоль JS service на TV / эмуляторе.

Связь с FXML

JSON с ServiceFork неотличим от PHP-портала для клиента Fork; парсинг выполняется локально на TV.

Примеры

  • service/plugins/_template.js
  • service/plugins/rezka.js, kinogo.js

Установка

  • Samsung Tizen — Apps2Tizen / .wgt, версия ≥ 1.3.0 для ServiceFork.
  • LG webOS — установка webOS (.ipk через Dev Manager / ares-install), пакет ≥ 1.3.0 с service в составе IPK.