ServiceFork Tizen
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→ URLhttp://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.
Быстрый старт: свой парсер
- Скопируйте
service/plugins/_template.js→myparser.js(файлы_*.jsне загружаются). - Задайте
name,version,routes; реализуйтеhome(base)→api.homeTile({…}). - Положите
myparser.pngрядом с .js. - Соберите виджет ≥ 1.3.0 (Tizen .wgt или webOS .ipk) и установите на TV.
- Проверка:
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).
Иконки и оформление
service/plugins/<id>.png→http://127.0.0.1:8092/<id>.png- CSS:
api.page(..., { css: '...' }) - Шаблоны: §6 FXML
Отладка
http://127.0.0.1:8092/status— плагины и массивservices.http://127.0.0.1:8092/logs— FXML-логи;?format=raw,?clear=1.- Tizen: MessagePort
servicefork-log. - webOS: ответ Luna
start(полеlogвservice.js), консоль JS service на TV / эмуляторе.
Связь с FXML
JSON с ServiceFork неотличим от PHP-портала для клиента Fork; парсинг выполняется локально на TV.
Примеры
service/plugins/_template.jsservice/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.