ServiceFork Tizen: различия между версиями
Mentos (обсуждение | вклад) FXML all_*: channel overrides global |
Mentos (обсуждение | вклад) FXML all_*: channel overrides global |
||
| (не показана 1 промежуточная версия этого же участника) | |||
| Строка 1: | Строка 1: | ||
{{DISPLAYTITLE:ServiceFork — | {{DISPLAYTITLE:ServiceFork — локальные парсеры (Tizen, webOS)}} | ||
<div class="toccolours" style="width:100%; max-width:920px; padding:12px 16px; line-height:1.55;"> | <div class="toccolours" style="width:100%; max-width:920px; padding:12px 16px; line-height:1.55;"> | ||
'''ServiceFork''' — | '''ServiceFork''' — локальные парсеры в Fork browser на <b>Samsung Tizen</b> и <b>LG webOS</b>: фоновый HTTP на порту '''8092''', внутри '''Node.js''' парсит сайты и отдаёт '''FXML (JSON)''' с <code>http://127.0.0.1:8092/</code> — без PHP на хостинге. | ||
Один каталог <code>service/plugins/</code> и одно ядро <code>service/index.js</code> используются в обеих сборках. Плитки парсеров с <code>home()</code> попадают на домашнюю страницу в секцию '''Локально'''. | |||
'''Версия виджета:''' локальные парсеры ServiceFork — начиная с '''1.3.0''' (Tizen .wgt и webOS .ipk). В более старых сборках секция «Локально» без этих плиток. | |||
См. также: [[FXML|Спецификация FXML]] · [https://appfxml.com/ Репозиторий Fork browser] | См. также: [[FXML|Спецификация FXML]] · [https://appfxml.com/ Репозиторий Fork browser] | ||
| Строка 9: | Строка 13: | ||
== Назначение == | == Назначение == | ||
* | * '''Локальные парсеры''' — каталоги, поиск, просмотр: логика на TV (Node.js в background / JS service). | ||
* | * Контракт как у веб-портала: <code>title</code>, <code>channels[]</code>, глобальные поля — см. [[FXML#3. Термины и модель данных|модель FXML]]. | ||
* Файл <code>service/plugins/<id>.js</code> → URL <code>http://127.0.0.1:8092/<id></code> (имя без <code>.js</code>). | |||
== Домашняя страница: секция «Локально» == | |||
При старте приложение будит ServiceFork и опрашивает <code>http://127.0.0.1:8092/status</code>. В JSON поле '''<code>services</code>''' — плитки из <code>home()</code> всех плагинов (<code>homeServices</code> в <code>service/index.js</code>): FXML-channel с <code>source: service</code>, <code>playlist_url</code>, иконкой. | |||
== | Клиент кладёт их в <code>ch.service</code> стартовой страницы — в UI это блок '''Локально'''. | ||
'''Важно:''' без <code>home()</code> парсер доступен только по прямому URL или через <code>playlist_url</code> в другом портале, на домашний экран не попадёт. | |||
== Общая архитектура (Tizen и webOS) == | |||
{| class="wikitable" style="width:100%;" | {| class="wikitable" style="width:100%;" | ||
! Компонент !! Описание | ! Компонент !! Описание | ||
|- | |- | ||
| <code>service/index.js</code> || Ядро | | <code>service/index.js</code> || Ядро: HTTP '''8092''', загрузка плагинов, <code>createApi</code>, маршруты, <code>/status</code> → <code>services</code>. | ||
|- | |- | ||
| <code>service/plugins/<id>.js</code> || | | <code>service/plugins/<id>.js</code> || Парсер: <code>routes</code>, <code>home()</code>, опционально <code>matchUrl</code> / <code>handleUrl</code>. | ||
|- | |- | ||
| Fork browser (UI) || | | <code>service/plugins/<id>.png</code> || Иконка плитки (локальный URL на том же порту). | ||
|- | |||
| Fork browser (UI) || <code>playlist_url</code> → <code>127.0.0.1:8092/…</code>, отображение JSON как FXML. | |||
|} | |} | ||
''' | '''Служебные URL''' (одинаково на обеих платформах): | ||
{| class="wikitable" | {| class="wikitable" | ||
! Путь !! Ответ | ! Путь !! Ответ | ||
|- | |- | ||
| <code>/</code> || | | <code>/status</code> || JSON: версия, список плагинов, '''<code>services</code>''' для «Локально» | ||
|- | |- | ||
| <code>/ | | <code>/</code>, <code>/plugins</code> || Список парсеров | ||
|- | |- | ||
| <code>/ | | <code>/logs</code> || Логи (FXML-страница) | ||
|} | |||
Зарезервированные id: <code>status</code>, <code>plugins</code>, <code>logs</code>. | |||
== Samsung Tizen == | |||
{| class="wikitable" style="width:100%;" | |||
! !! | |||
|- | |||
| Запуск || Background service в <code>config.xml</code>, пакет <code><packageId>.servicefork</code>, <code>onStart</code> / <code>onRequest</code> в <code>service/index.js</code>. | |||
|- | |||
| Проект || Tizen Studio, например <code>workspace/Forkbrowser/service/</code>. | |||
|- | |||
| Сборка || .wgt с приложением и service, см. [[Браузер Fork - Wiki:Установить браузер Fork#Samsung Smart TV|установка Tizen]]. | |||
|- | |- | ||
| <code> | | Логи в UI || MessagePort <code>servicefork-log</code> (Tizen). | ||
|} | |} | ||
== LG webOS == | |||
С '''1.3.0''' webOS использует то же ядро и те же плагины, что Tizen; отличается только обёртка платформы. | |||
{| class="wikitable" style="width:100%;" | |||
! !! | |||
|- | |||
| Luna service || <code>com.forkplayer.tv.service</code> — каталог <code>usr/palm/services/com.forkplayer.tv.service/</code> в IPK. | |||
|- | |||
| Обёртка || <code>service/service.js</code> (<code>webos-service</code>): подключает <code>index.js</code>, держит HTTP :8092 через activity / keepAlive (важно на эмуляторе 3.0, иначе процесс завершается и <code>/rezka</code>, <code>/logs</code> дают «connection refused»). | |||
|- | |||
| Старт из приложения || <code>luna://com.forkplayer.tv.service/start</code> (subscribe) из <code>js/load.js</code>, затем опрос <code>/status</code> → <code>window.servicefork</code>. | |||
|- | |||
| Проект || <code>ForkPlayer_webOS</code>: UI в корне, <code>service/</code> — копия Tizen service + <code>services.json</code>, <code>package.json</code>. | |||
|- | |||
| Сборка IPK || Только через '''ares-package''' (app + service в одном пакете). Ручной <code>tar</code>-IPK на эмуляторе 3.0 даёт «Failed to extract package». | |||
|- | |||
| Пример файла || <code>com.forkplayer.tv_1.3.0_all.ipk</code> — приложение + service в <code>packageinfo</code>. | |||
|} | |||
'''Структура IPK (упрощённо):''' | |||
<pre>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[]</pre> | |||
Адрес '''127.0.0.1:8092''' на webOS TV и эмуляторе корректен: запросы идут к JS service на том же устройстве. Если плитки есть, а страница парсера не открывается — сервис уже завершился; обновите виджет '''≥ 1.3.0''' с исправленным keep-alive. | |||
'''Минимальный каркас | == Быстрый старт: свой парсер == | ||
# Скопируйте <code>service/plugins/_template.js</code> → <code>myparser.js</code> (файлы <code>_*.js</code> не загружаются). | |||
# Задайте <code>name</code>, <code>version</code>, <code>routes</code>; реализуйте <code>home(base)</code> → <code>api.homeTile({…})</code>. | |||
# Положите <code>myparser.png</code> рядом с .js. | |||
# Соберите виджет '''≥ 1.3.0''' (Tizen .wgt или webOS .ipk) и установите на TV. | |||
# Проверка: <code>http://127.0.0.1:8092/status</code>, плитка в «Локально», вход <code>/myparser</code>. | |||
Плагины правят в Tizen-проекте и синхронизируют в <code>ForkPlayer_webOS/service/plugins/</code> (или наоборот — ядро общее). | |||
'''Минимальный каркас:''' | |||
<pre>module.exports = function (api) { | <pre>module.exports = function (api) { | ||
| Строка 83: | Строка 134: | ||
}; | }; | ||
};</pre> | };</pre> | ||
Удалённый портал может ссылаться на <code>http://127.0.0.1:8092/myparser</code> — работает только на устройстве с запущенным ServiceFork. | |||
== API ядра (кратко) == | == API ядра (кратко) == | ||
Плагин получает | Плагин получает <code>api</code> из <code>createApi</code> (<code>service/index.js</code>). | ||
{| class="wikitable" | {| class="wikitable" | ||
! Метод !! Назначение | ! Метод !! Назначение | ||
|- | |- | ||
| <code>api.page(title, channels, extra)</code> || | | <code>api.page(title, channels, extra)</code> || FXML-страница | ||
|- | |- | ||
| <code>api.stream | | <code>api.folder / api.stream / api.htmlChannel</code> || Элементы списка | ||
|- | |- | ||
| <code>api. | | <code>api.homeTile(cfg)</code> || Плитка «Локально» | ||
|- | |- | ||
| <code>api. | | <code>api.cardChannels</code>, <code>api.getTextCached</code> || Сетки и HTTP | ||
|- | |- | ||
| <code>api. | | <code>api.pluginUrl(base, id, route, params)</code> || URL маршрута | ||
|- | |- | ||
| <code>api.log.info / warn / error</code> || Логи → <code>/logs</code> | |||
| <code>api.log.info / warn / error</code> || Логи → | |||
|} | |} | ||
'''Маршруты | '''Маршруты:''' ключ — путь после <code>/<pluginId>/</code>; <code>cb(err, fxmlObject)</code>. | ||
''' | '''Внешние URL:''' <code>matchUrl</code> + <code>handleUrl</code> (см. <code>rezka.js</code>, <code>kinogo.js</code>). | ||
== Иконки и оформление == | == Иконки и оформление == | ||
* | * <code>service/plugins/<id>.png</code> → <code>http://127.0.0.1:8092/<id>.png</code> | ||
* CSS | * CSS: <code>api.page(..., { css: '...' })</code> | ||
* Шаблоны | * Шаблоны: [[FXML#6. Оформление и вёрстка элементов|§6 FXML]] | ||
== Отладка == | == Отладка == | ||
# | # <code>http://127.0.0.1:8092/status</code> — плагины и массив <code>services</code>. | ||
# <code>http://127.0.0.1:8092/logs</code> — логи | # <code>http://127.0.0.1:8092/logs</code> — FXML-логи; <code>?format=raw</code>, <code>?clear=1</code>. | ||
# | # Tizen: MessagePort <code>servicefork-log</code>. | ||
# | # webOS: ответ Luna <code>start</code> (поле <code>log</code> в <code>service.js</code>), консоль JS service на TV / эмуляторе. | ||
== Связь с FXML == | == Связь с FXML == | ||
JSON с ServiceFork неотличим от PHP-портала для клиента Fork; парсинг выполняется локально на TV. | |||
== Примеры | == Примеры == | ||
* <code>service/plugins/_template.js</code> | * <code>service/plugins/_template.js</code> | ||
* <code>service/plugins/rezka.js</code>, <code>kinogo.js</code> | * <code>service/plugins/rezka.js</code>, <code>kinogo.js</code> | ||
== Установка | == Установка == | ||
* '''Samsung Tizen''' — [[Браузер Fork - Wiki:Установить браузер Fork#Samsung Smart TV|Apps2Tizen / .wgt]], версия '''≥ 1.3.0''' для ServiceFork. | |||
* '''LG webOS''' — [[Браузер Fork - Wiki:Установить браузер Fork|установка webOS]] (.ipk через Dev Manager / ares-install), пакет '''≥ 1.3.0''' с service в составе IPK. | |||
[[Category:FXML]] | [[Category:FXML]] | ||
Текущая версия от 23:24, 28 октября 2026
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.