Jump to content

Автоматизация скачивания/кастомизации/раздачи плейлиста для noxbit


Recommended Posts

 

Есть огромная надежда что в скором времени стартанет и заработает сборка noxbit для MIPSel -> http://mytalks.ru/index.php?topic=6459.0

Описываю полный процес автоматизации использования noxbit движка на обычном бытовом роутере с Entware3x на борту... Кое что сам наваял, кое-что раньше успел создать Alex(c) для малинки и я "маленько" адаптировал  :D

opkg install crone lighttpd lighttpd-mod-alias lighttpd-mod-compress curl

1) crone - используем для выполнения скрипта "заливки" плейлиста из своего рабочего кабинета раз в сутки, чаще просто нету смысла, например каждые 5.00 утра (в contab - 01 5 * * * root /opt/bin/run-parts /opt/etc/cron.daily) ... В  crone.daily  создаем файлик noxbit_ttv права 755 !
 

#!/opt/bin/sh
prefix="/opt"
PATH=${prefix}/bin:${prefix}/sbin:/sbin:/bin:/usr/sbin:/usr/bin

M3U_DIR="$prefix/home/ttv-list"
NOX_M3U="$M3U_DIR/NoxLive-TTV.m3u"

NOX_DIR="$prefix/tmp"
NOX_FILE="$NOX_DIR/ttv-m3u/noxbit.m3u"
NOX_FILE_GZ="$NOX_FILE.gz"

## Ссылка из вашего личного кабинета на "Скачать в виде полноценного статичного файла" 
## В настройках плейлиста ОБЯЗАТЕЛЬНО поставить гапочку напротив "Категории каналов тегами #EXTGRP в m3u"  
NOX_LIST_URL="http://asproxy.net/n/blablablabla"

## IP Вашего роутера или устройства на котором установлен noxbit 
URL_IP="192.168.1.1" 

STAT_OLD=

if [ -z "$NOX_LIST_URL" ]; then
  echo "Error! Unknown playlist address Noxbit."
  exit
fi

mkdir -p $NOX_DIR/ttv-m3u

if [ -f "$NOX_FILE_GZ" ]; then
  STAT_OLD=`stat $NOX_FILE_GZ | grep 'Modify:'`
fi

curl -s --connect-timeout 5 --max-time 20 -R -z "$NOX_FILE_GZ"-o "$NOX_FILE_GZ" -H "Accept-Encoding: gzip" "$NOX_LIST_URL"

if [ ! -f "$NOX_FILE_GZ" ]; then
  echo "Error! Could not load Noxbit playlist."
  exit
fi

STAT_NEW=`stat $NOX_FILE_GZ | grep 'Modify:'`
if [ "$STAT_OLD" == "$STAT_NEW" ]; then
  echo "Done! You already actual playlist."
  exit
fi

gunzip -c "$NOX_FILE_GZ" > "$NOX_FILE"
mkdir -p $M3U_DIR

echo '#EXTM3U url-tvg="http://1ttvapi.top/ttv.xmltv.xml.gz"' > $NOX_M3U
cat $NOX_FILE |
  while read -r LINE ; do
    echo $LINE | grep '^#EXTINF' > /dev/null 2>&1
    if [ $? -eq 0 ]; then
      CH_LOGO=`echo $LINE | awk '{print $2}' | sed 's/,.*//; s/tvg-logo=//; s/[ \t]*$//'`
      CH_NAME=`echo $LINE | awk -F\\, '{print $2}' | sed 's/(на модерации)//; s/^[ \t]*//; s/[ \t]*$//'`
      CH_CAT=
      CH_CID=
      continue
    fi

    echo $LINE | grep '^#EXTGRP' > /dev/null 2>&1
    if [ $? -eq 0 ]; then
      CH_CAT=`echo $LINE | awk -F\\: '{print $2}' | sed 's/^[ \t]*//; s/[ \t]*$//'`
      CH_CID=
      continue
    fi

    echo $LINE | grep '^http' > /dev/null 2>&1
    if [ $? -eq 0 ]; then
      CH_CID=`echo $LINE | awk -F\\= '{print $2}' | sed 's/^[ \t]*//; s/[ \t]*$//'`
    fi

    if [ -n "$CH_LOGO" -a -n "$CH_NAME" -a -n "$CH_CAT" -a -n "$CH_CID" ]; then
      echo "#EXTINF:-1 group-title=\"$CH_CAT\" tvg-name=\"$CH_NAME\" tvg-logo=$CH_LOGO,$CH_NAME" >> $NOX_M3U
      echo "http://${URL_IP}:6689/stream?cid=${CH_CID}" >> $NOX_M3U
      CH_LOGO=
      CH_NAME=
      CH_CAT=
      CH_CID=
    fi
  done

rm -rf $NOX_FILE

echo "Done! Playlist created."
exit


Итог "сей песни" плейлист в формате m3u со всякими "плюшками" в /opt/home/ttv-list/NoxLive-TTV.m3u
В скрипте есть поддержка хедеров If-Modified-Since и Last-Modified , которые пока что не поддерживаются для ссылки на плейлист noxbit в личном кабинете TTV.... И это в корне НЕВЕРНО, думаю что соответствующий департамент по "шурику" подправит.... чтобы не "задалбывать" скачивая одно и то же до "посинения" ... Просто уверен что многие поставят скачивание не раз в сутки .. а каждую минуту для надежности ))) и попадут в БАН ! ;) .... А вот если добавить поддержку If-Modified-Since и Last-Modified .... то долбите дятлы ! ДЛОБИТЕ !!!! 
+ Если соответствующий "департамент" поднатужится и все таки включит JSON формат для плейлистов noxbit , то в скрипте можно будет использовать утилитку jq и "разгребаться" будет за несколько секунд, а так "ковыряем" текстовый файл ... время обработки сек 30-40 .... ;)

2) lighttpd - будем использовать как "маленький и шустрый" локальный вебсерверок для раздачи плейлиста всем устройствам домашней сети + можно соседу, дабы окупить затраты на электричество потребляемое роутером. Редактируем lighttpd.conf вот так (я постарался максимально прокомментировать по тексту конфига что для чего)

#Перечисляем модули, которые будет пожгружать при старте lighttpd
server.modules += (
       "mod_compress",
       "mod_alias",
)

#Документ рут по умолчанию
server.document-root        = "/opt/home/www"
server.upload-dirs          = ( "/opt/var/cache/lighttpd/compress/uploads" )

alias.url += (
  "/playlist" => "/opt/home/ttv-list",
)

#Описываем лог файл куда будут писаться ошибки
server.errorlog             = "/opt/var/log/lighttpd/error.log"

#Файл для записи обработанных запросов mod_accesslog
#accesslog.filename          = "/opt/var/log/lighttpd/access.log"
#accesslog.format            = "%h %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""

#PID файл
server.pid-file             = "/opt/var/run/lighttpd.pid"
#Пользователь и группа от имени которых работает lightttpd
#server.username             = "http"
#server.groupname            = "www-data"

#Метод обработки запросов
#server.event-handler        = "freebsd-kqueue"

#Имена файлов, которые будут отдаваться по умолчанию, если имя файла не задано в запросе
index-file.names            = ( "index.php", "index.html",
                                "index.htm", "default.htm",
                                "index.lighttpd.html" )

#Расширения файлов которые надо отдавать на обработку FastCGI процессам
#static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )

#Запрещенные для отдачи имена файлов mod_access
#url.access-deny             = ( "~", ".inc" )

# mod_compres
compress.cache-dir          = "/opt/var/cache/lighttpd/compress/"
compress.allowed-encodings  = ("bzip2", "gzip", "deflate")
compress.filetype           = ("application/javascript", "audio/mpegurl",
                               "text/css", "text/html", "text/plain" )

### Options that are useful but not always necessary:
#server.chroot               = "/"
#Принимаем запросы на заданном порту
server.port                 = 81
#IP адрес на котором принимаем запросы
server.bind                 = "192.168.1.1"
#Идентификатор сервера
server.tag                  = "lighttpd"
#server.errorlog-use-syslog  = "enable"
#server.network-backend      = "write"

### Use IPv6 if available
#include_shell "/opt/share/lighttpd/use-ipv6.pl"

dir-listing.encoding        = "utf-8"
server.dir-listing          = "enable"

include       "/opt/etc/lighttpd/mime.conf"
include_shell "cat /opt/etc/lighttpd/conf.d/*.conf"

Тут кое-что "выключено"-заREMлено... если Вам надо снимите '#' нужных вам "фичах"  

Итог "сей песни" ... работающий web-серверок который по ссылке http://192.168.1.1:81/playlist/NoxLive-TTV.m3u будет отдавать вам плейлист для всех ваших девайсов дома :)

Поскольку в lighttpd я включил поддержку компресии ... то в crone.daily нужно добавить еще один скриптик, который будет подчищать за lighttpd . В crone.daily создаем файлик lighttpd_clean права 755!
 

#!/opt/bin/sh
prefix="/opt"
PATH=${prefix}/bin:${prefix}/sbin:/sbin:/bin:/usr/sbin:/usr/bin

cache=/opt/var/cache/lighttpd
if test -d "$cache/compress"; then
    find $cache/compress -depth -type f -atime +0 -print0 | xargs -0 -r rm
fi
if test -d "$cache/uploads"; then
    find $cache/uploads -depth -type f -atime +0 -print0 | xargs -0 -r rm
fi

Перегружаем роутер ... ну или стартуем "руцями" crone и lighttpd и наслаждаемся  ::) При желании lighttpd.conf можно дополнить и "припудрить" паролированием доступа, геолокацией, и т.д. как говориться книга Вам в помощь -> https://redmine.lighttpd.net/projects/lighttpd


p.s. Дання "лабораторка" тестировалась и прекрасно фунциклирует на Zyxel Keenetic Ultra II c Entware3x .... Критику и дополнения - ПРИЕМЛЮ ) 

Edited by Dorik1972
  • Thanks 3
Link to comment
Share on other sites

Еще раз объясняю - NOXBIT никакого отношения к Entware не имеет. От слова СОВСЕМ.

Своими заголовками Вы только путаете других. То, что Вы изложили - это автоматизация скачивания файла (в данном случае плейлиста) по расписанию и его "раздача" через web сервер.

Link to comment
Share on other sites

3 минуты назад, zyxmon сказал:

Еще раз объясняю - NOXBIT никакого отношения к Entware не имеет. От слова СОВСЕМ.

Своими заголовками Вы только путаете других. То, что Вы изложили - это автоматизация скачивания файла (в данном случае плейлиста) по расписанию и его "раздача" через web сервер.

Спс за замечание .... заголовок заменю ... на "Автоматизация раздачи плейлиста для noxbit по расписанию" ?  или предложите название темы. Думаю она представляет интерес "как готовое решение" 

Edited by Dorik1972
Link to comment
Share on other sites

Только что, zyxmon сказал:

Название сами придумайте. Наверняка можно таким образом и от edem, и от ottclub плейлисты раздавать.

легко ... думаю "страждущие" и "нуждающиеся" сам под себя "подковыряют" готовое решение. Все же проще чем "с нуля" самому писать ... или ?

Link to comment
Share on other sites

3 минуты назад, Dorik1972 сказал:

Все же проще чем "с нуля" самому писать ... или ?

У всех плейлистов есть URL в интернете. Смысл в редактировании, перед сохранением?

Link to comment
Share on other sites

42 минуты назад, zyxmon сказал:

У всех плейлистов есть URL в интернете. Смысл в редактировании, перед сохранением?

Если речь идет о edem, ott и т.д. - ДА там ссылка уже готовая.... В данном конкретном случае и в случае с acestream engine, для которого. тоже скриптик имеется, необходимо "формирование" плейлиста по шаблону под себя ;)  . Но это уже "разговор" из другой темы и не данного форума. 

Жму руку! 

p.s. Тут такое ... если пользователям сия инфа бесполезна .... УДАЛЮ ТЕМУ .... через недельку ! ОК? А вот если будут "Like"-и ... оставлю. 

  • Thanks 3
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...