![]() |
|
![]() |
#1 |
Senior Member
Регистрация: 12.06.2011
Адрес: Киев
Сообщений: 1,933
|
![]()
Кто-то из участников данного форума как-то написал, что Kodi API настолько ужасен, что все пишут для него свои обертки.
![]() SimplePlugin напоминает xbmcswift2, но использует несколько другой, более простой в реализации метод маршрутизации вызовов плагинов. Саму библиотеку и документацию к ней можно найти на Гитхабе: https://github.com/romanvm/script.module.simpleplugin Пример использования (фактически референсную реализацию) можно посмотреть в заброшенном в связи со смертью ресурса плагине ex.ua.alternative. На форуме нашлись люди, которые используют данную библиотеку, поэтому открываю данную тему, чтобы было где обсудить специфику.
__________________
Координатор русского перевода Kodi: https://www.transifex.com/projects/p/kodi-main/ ------------------------------ Raspberry PI 2 + LibreELEC 8 (Kodi 17) Samsung Galaxy Tab A 10.1 + Kodi 17 for Android ------------------------------ Читаем и пополняем Википедию форума: http://xbmc.ru/wiki ------------------------------ На любые личные сообщения, не связанные с переводом Kodi, не отвечаю. Для обсуждений и советов есть форум. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Регистрация: 18.10.2015
Адрес: Donetsk, Russia
Сообщений: 1,076
|
![]()
Продолжим беседу здесь....
Можно модифицировать функцию get_url(), чтоб список параметров можно было передавать через словарь? Сейчас у меня есть ряд параметров, которые не обязательные. Я в параметрах задаю им имя, начинающееся с символа "_". Т.к. заведомо я не знаю, какие из параметров ко мне пришли, а все варианты перечислять не охота, то при формировании ссылки с помощью get_url() я их добавляю в конец строки вручную. Получается что-то типа этого: Код:
url = plugin.get_url(action='list_videos') url = url + '&' + urlencode(ext_params) Код:
params['_page'] = params.get('_page', 1) + 1 url = plugin.get_url(ext_params=params) |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Регистрация: 12.06.2011
Адрес: Киев
Сообщений: 1,933
|
![]() Цитата:
Код:
def bar(a, ham=''): print(a) print(ham) foo = {'ham': 'spam'} bar('b', **foo)
__________________
Координатор русского перевода Kodi: https://www.transifex.com/projects/p/kodi-main/ ------------------------------ Raspberry PI 2 + LibreELEC 8 (Kodi 17) Samsung Galaxy Tab A 10.1 + Kodi 17 for Android ------------------------------ Читаем и пополняем Википедию форума: http://xbmc.ru/wiki ------------------------------ На любые личные сообщения, не связанные с переводом Kodi, не отвечаю. Для обсуждений и советов есть форум. |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Регистрация: 18.10.2015
Адрес: Donetsk, Russia
Сообщений: 1,076
|
![]() Цитата:
Все тот же пример: Код:
def list_videos( params ): params['_page'] = int(params.get('_page', 1)) + 1 url = plugin.get_url(action='list_videos') del params['action'] url = url + '&' + urlencode(params) Код:
plugin://plugin.video.video.az/?action=list_videos&_page=2&_category=0&<остальные параметры из params> Код:
def list_videos( params ): params['_page'] = int(params.get('_page', 1)) + 1 url = plugin.get_url(**params) Последний раз редактировалось vl.maksime; 17.03.2017 в 10:51. |
|
![]() |
![]() |
![]() |
#5 | |
Senior Member
Регистрация: 12.06.2011
Адрес: Киев
Сообщений: 1,933
|
![]() Цитата:
Повторюсь, это стандартный синтаксис Питона. Рекомендую почитать что-нибудь о передаче произвольного набора параметров в функцию через *args и **kwargs. И вообще, "под капотом" в Питоне все неименованные параметры передаются в функцию через тупл, а все именованные - через словарь.
__________________
Координатор русского перевода Kodi: https://www.transifex.com/projects/p/kodi-main/ ------------------------------ Raspberry PI 2 + LibreELEC 8 (Kodi 17) Samsung Galaxy Tab A 10.1 + Kodi 17 for Android ------------------------------ Читаем и пополняем Википедию форума: http://xbmc.ru/wiki ------------------------------ На любые личные сообщения, не связанные с переводом Kodi, не отвечаю. Для обсуждений и советов есть форум. |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Регистрация: 12.06.2011
Адрес: Киев
Сообщений: 1,933
|
![]()
Кстати, хотел посоветоваться насчет механизма маршрутизации вызовов плагина. В свое время для ex.ua.alternative я использовал библиотеку xbmcswift2, в которой использовалась маршрутизация с красивыми путями, позаимствованная у веб-фреймворка Flask. Потом xbmcswift2 забросили, и я стал пилить свою реализацию с блэкджеком и прочими.
Нынешний механизм маршрутизации через action и параметры вызова плагина я выбрал чисто потому, что он проще в реализации и теоретически быстрее. Однако периодически возникает желание добавить такую-же маршрутизацию, как в xbmcsfitw2/Flask. Поэтому хотел спросить: есть ли смысл заморачиваться? Или и так хорошо?
__________________
Координатор русского перевода Kodi: https://www.transifex.com/projects/p/kodi-main/ ------------------------------ Raspberry PI 2 + LibreELEC 8 (Kodi 17) Samsung Galaxy Tab A 10.1 + Kodi 17 for Android ------------------------------ Читаем и пополняем Википедию форума: http://xbmc.ru/wiki ------------------------------ На любые личные сообщения, не связанные с переводом Kodi, не отвечаю. Для обсуждений и советов есть форум. |
![]() |
![]() |
![]() |
#7 |
Senior Member
Регистрация: 12.12.2012
Сообщений: 1,674
|
![]() |
![]() |
![]() |
![]() |
#8 |
Senior Member
Регистрация: 12.06.2011
Адрес: Киев
Сообщений: 1,933
|
![]()
Я согласен, что в веб-приложениях, красивые УРЛ-ы удобны для пользователей и полезны для СЕО. Но в Коди их никто не видит, кроме тех, кто додумается заглянуть в лог.
__________________
Координатор русского перевода Kodi: https://www.transifex.com/projects/p/kodi-main/ ------------------------------ Raspberry PI 2 + LibreELEC 8 (Kodi 17) Samsung Galaxy Tab A 10.1 + Kodi 17 for Android ------------------------------ Читаем и пополняем Википедию форума: http://xbmc.ru/wiki ------------------------------ На любые личные сообщения, не связанные с переводом Kodi, не отвечаю. Для обсуждений и советов есть форум. |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Регистрация: 18.10.2015
Адрес: Donetsk, Russia
Сообщений: 1,076
|
![]()
Меня и в таком виде устраивает. Как по мне, так даже удобней, здесь по именам параметров четко видно, какое значение за что отвечает.
Цитата:
Но я здесь вижу большую проблему в обратной совместимости. Для того, чтоб обеспечить загрузку сохраненных в закладках или *.strm ссылок, параметры придется вставлять только в конец. На приведенном примере, для ссылки "plugin://script.plugin/play/1/2/", все новые параметры придется писать в конец, и не известно насколько она будет красивей после всех добавлений. А если мы добавим какой-то параметр между play и 1, то вся логика дополнения сломается. А учитывая, что я в своих дополнениях могу пропускать необязательные параметры, то мне такой способ в корне не подходит. |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Регистрация: 15.03.2012
Сообщений: 1,094
|
![]()
Добавлю свои 5 копеек в размышления о роутинге в плагинах. Я тоже столкнулся с этой дилеммой, когда писал свою обертку (кстати, это я ворчал 5 лет назад про ужасный XBMC API
![]() На самом деле, абсолютно безразлично как будут выглядеть пути. Действительно, кроме Kodi их никто не видит. В своей обертке я вообще все упаковываю в JSON и уже его передаю в путь. И единственная проблема, которую я обнаружил (но так и забил на нее) – это то, что Kodi запоминает настройки сортировки, вида отображения (список, иконки и т.д.) и тому подобное на основе пути. Поэтому, если меняется расположение параметров в пути после "?", то для Kodi это новая страница и пользователю нужно заново выставлять вид отображения (например). Если использовать не параметрический URL, а ЧПУ, то проблема никуда не девается. Поэтому, повторюсь, абсолютно плевать как выглядит путь в Kodi. И еще – сокращение нескольких байт в STRM – это экономия на спичках. Как бы поступил я, если бы свою балалайку начинал писал сегодня? Я бы разделил роутинг на 2 части. Одна - перманентная. ЧПУ-вида (а можно и с параметрами). По ней я бы вызывал нужный класс-обработчик. Вторая – переменная. В ней бы я передавал все те параметры, которые не меняли бы класс-обработчик (например – номер страницы при листании большого списка). Эти переменные не нужно совать в путь. Тогда, например, при перелистывании страниц все настройки отображения не собьются – ведь Kodi будет думать, что это одна и та же страница (в пути будет только первая часть роутинга). Как передавать эти переменные параметры (если не через путь)? Да любым способом. Я об этом плотно не думал, но можно например через сохранения их во временный файл. Как-то так...
__________________
RuTracker: http://xbmc.ru/forum/showthread.php?t=2243 Ruhunt.Pulsar: http://xbmc.ru/forum/showthread.php?t=6759 Last.VK: http://xbmc.ru/forum/showthread.php?t=3709 Lovi.fm: http://xbmc.ru/forum/showthread.php?t=6758 |
![]() |
![]() |
![]() |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | |
Опции просмотра | |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
script.module.torrent2http - движок стримминга торрентов. | -=Vd=- | Помощь по плагинам | 203 | 08.02.2023 16:09 |
[All] script.module.antizapret - Обход блокировок для плагинов | nightik | Помощь по плагинам | 43 | 13.11.2020 22:26 |
PyXBMCt - фреймворк для создания интерфейса плагинов | Roman_V_M | Поддержка локальной разработки модулей | 22 | 28.03.2017 09:01 |
script.module.remote-pdb: удаленный консольный отладчик для плагинов | Roman_V_M | Поддержка локальной разработки модулей | 18 | 06.10.2016 14:42 |
Библиотека для фото | runkov | Подсказки, описания и FAQ по XBMC | 5 | 22.10.2010 11:29 |