yt_live.lua-Mod

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • yt_live.lua-Mod

      Da ich ab und zu den 24 Sdt / 7 Tage Woche Youtube-Livestream des schweizer Senders Star TV
      star_tv_screenshot.png
      nutze der aber leider in unregelmäsigen Abständen die Youtube-Adresse wechselt habe ich nach einen Weg geschaut wie ich das Problem umgehen kann.
      Zwei mögliche Lösungswege sind mir eingefallen.

      1.) Lösungsweg :
      Auf der Seite ..

      Quellcode

      1. http://www.startv.ch/livestream

      im Quelltext ..

      Quellcode

      1. <div class="youtube">
      2. <div class="flexvideo">
      3. <iframe width="560" height="315" allowfullscreen="" src="https://www.youtube.com/embed/_hEsgp8Dwog" frameborder="0" ></iframe>

      nachschauen und dass gefundene dann weiter verwenden oder der ..

      2.) Lösungsweg
      in dem ich den Youtube-Username als Konstante Abfagequelle missbrauche

      Quellcode

      1. https://www.youtube.com/user/startv


      auf dieser Seite finde ich im Quelltext z.B. dass ...

      Quellcode

      1. feature=c4-live-promo" href="/watch?v=_hEsgp8Dwog">Star TV Switzerland - Livestream 24/7</a>

      und dies lässt sich auch weiter auswerten.

      Nach dem ich festgestellt habe das bei mehreren Youtube Usern die einen Livestream anbieten der gleiche Syntax verwendet wird habe ich den zweiten Lösungsweg für mein Problem genommen und für mich einen Mod. des "yt_live.lua" Plugins erzeugt der dies realisiert.

      yt_user.lua :

      Quellcode

      1. -- yt_user.lua -> Für Youtube-Livestream Abruf via Youtube-Username
      2. json = require "json"
      3. if #arg < 1 then return nil end
      4. local _url = arg[1]
      5. local ret = {}
      6. local Curl = nil
      7. function getdata(Url)
      8. if Url == nil then return nil end
      9. if Curl == nil then
      10. Curl = curl.new()
      11. end
      12. local ret, data = Curl:download{ url=Url, A="Mozilla/5.0"}
      13. if ret == CURL.OK then
      14. return data
      15. else
      16. return nil
      17. end
      18. end
      19. function getVideoData(url)
      20. if url == nil then return 0 end
      21. local youtube_user = getdata(url)
      22. if youtube_user then
      23. local youtube_live_url = youtube_user:match('feature=c4%-live%-promo" href="(.-)">')
      24. local data = getdata('https://www.youtube.com'..youtube_live_url,nil)
      25. local m3u_url = data:match('hlsvp.:.(https:\\.-m3u8)')
      26. local newname = data:match('<title>(.-)</title>')
      27. if m3u_url == nil then return 0 end
      28. m3u_url = m3u_url:gsub("\\", "")
      29. local videodata = getdata(m3u_url)
      30. local url = ""
      31. local band = ""
      32. local res1 = ""
      33. local res2 = ""
      34. local count = 0
      35. for band, res1, res2, url in videodata:gmatch('#EXT.X.STREAM.INF.BANDWIDTH=(%d+).-RESOLUTION=(%d+)x(%d+).-(http.-)\n') do
      36. if url ~= nil then
      37. entry = {}
      38. entry['url'] = url
      39. entry['band'] = band
      40. entry['res1'] = res1
      41. entry['res2'] = res2
      42. entry['name'] = ""
      43. if newname then
      44. entry['name'] = newname
      45. end
      46. count = count + 1
      47. ret[count] = {}
      48. ret[count] = entry
      49. end
      50. end
      51. return count
      52. end
      53. return 0
      54. end
      55. if (getVideoData(_url) > 0) then
      56. return json:encode(ret)
      57. end
      58. return ""
      Alles anzeigen


      Muster.xml mit Abfrageadressen

      XML-Quellcode

      1. <?xml version="1.0"?>
      2. <webtvs name="[Youtube-Livestreams]">
      3. <webtv title="Star TV Switzerland" url="https://www.youtube.com/user/startv " description="Youtube Livestream" script="yt_user.lua" />
      4. <webtv title="Bloomberg" url="https://www.youtube.com/user/Bloomberg" description="Youtube Livestream" script="yt_user.lua" />
      5. <webtv title="Sky News" url="https://www.youtube.com/user/skynews" description="Youtube Livestream" script="yt_user.lua" />
      6. <webtv title="Newsmax TV" url="https://www.youtube.com/user/NewsmaxTV" description="Youtube Livestream" script="yt_user.lua" />
      7. <webtv title="Al Jazeera English" url="https://www.youtube.com/user/AlJazeeraEnglish" description="Youtube Livestream" script="yt_user.lua" />
      8. <webtv title="fashion TV" url="https://www.youtube.com/user/fashiontvFMEN" description="Youtube Livestream" script="yt_user.lua" />
      9. <webtv title="ChillYourMind Radio" url="https://www.youtube.com/user/ChillYourMind" description="Youtube Livestream" script="yt_user.lua" />
      10. <webtv title="The Good Life Radio" url="https://www.youtube.com/user/SensualMusique1" description="Youtube Livestream" script="yt_user.lua" />
      11. <webtv title="TOP CALCIO 24" url="https://www.youtube.com/user/TelelombardiaWeb" description="Youtube Livestream" script="yt_user.lua" />
      12. </webtvs>
      Alles anzeigen


      Wers brauchen kann der darf sich gerne daran vergreifen, ich gebe keinerlei Gewähr dass mein Mod. der nur die in der xml eingetragen Youtube-Username Seiten abfragt keine Nebenwirkungen hat auch wenn ich selbst keine festgestellt habe.

      Das angehangene Archiv beinhaltet die lua und xml-Datei

      ps.: Dies ist kein Ersatz für die im Git befindliche Datei sondern nur eine persönliche Alternative die eine andere Abfragemöglichkeit anbietet die das andere Plugin nicht hat.
      Dateien
      • yt_user.zip

        (1,22 kB, 84 mal heruntergeladen, zuletzt: )
      ~ abyssus abyssum invocat ~

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von bazi98 () aus folgendem Grund: 3x typo

    • Habe die yt_user.lua-Datei nach var/tuxbox/plugins/webtv und die yt_user.xml-Datei nach media/sda1/plugins per ftp verschoben , dann mit Einstellungen/Multimedia/Webtv und die XML-Datei hinzufügen gearbeitet , sowie bei Sender-Erscheinung mit blauer Taste Kanal Favoriten hinzufügen ihn in meiner Favoriten-Liste eingefügt und kann so auch aufnehmen , siehe Fotos von Youtube-Livestreams ... ( Tim + Struppi auf dem Schweizer Sender Star TV )

      klappt alles super , danke bazi98 :thumbsup:

      Grüsse - imi8mm
      Dateien
      CST Trinity V1 NI-Image 3.50 - Nightly Builds + LCD-SPF-75h :thumbup:

      CST Zee²Twin NI-Image 3.50 - Nightly Builds (root0) , Keywelt CS V3.10 Mai 2016 (root1) + LCD-SPF-75h
      CST Neo²Twin NI-Image 3.50 - Nightly Builds
    • Habe das noch etwas überarbeitet weil mich dass ..

      gestört hat und mit der Änderung sieht es nun so ..

      aus.


      Quellcode

      1. -- yt_user.lua -> Für Youtube-Livestream Abruf via Youtube-Username
      2. json = require "json"
      3. if #arg < 1 then return nil end
      4. local _url = arg[1]
      5. local ret = {}
      6. local Curl = nil
      7. function getdata(Url)
      8. if Url == nil then return nil end
      9. if Curl == nil then
      10. Curl = curl.new()
      11. end
      12. local ret, data = Curl:download{ url=Url, A="Mozilla/5.0"}
      13. if ret == CURL.OK then
      14. return data
      15. else
      16. return nil
      17. end
      18. end
      19. -- Umlaute umwandeln / convertir trémas
      20. function uml_str(_string)
      21. if _string == nil then return _string end
      22. _string = string.gsub(_string,''','’');
      23. _string = string.gsub(_string,'<','');
      24. _string = string.gsub(_string,'&','&');
      25. _string = string.gsub(_string,'"','"');
      26. _string = string.gsub(_string,'- YouTube','');
      27. return _string
      28. end
      29. function getVideoData(url)
      30. if url == nil then return 0 end
      31. local youtube_user = getdata(url)
      32. if youtube_user then
      33. local youtube_live_url = youtube_user:match('feature=c4.-href="(/watch.-)">')
      34. -- local youtube_live_url = youtube_user:match('feature=c4%-live%-promo" href="(.-)">')
      35. local data = getdata('https://www.youtube.com'..youtube_live_url,nil)
      36. local m3u_url = data:match('hlsvp.:.(https:\\.-m3u8)')
      37. local newname = data:match('<title>(.-)</title>')
      38. local newname = uml_str(newname)
      39. if m3u_url == nil then return 0 end
      40. m3u_url = m3u_url:gsub("\\", "")
      41. local videodata = getdata(m3u_url)
      42. local url = ""
      43. local band = ""
      44. local res1 = ""
      45. local res2 = ""
      46. local count = 0
      47. for band, res1, res2, url in videodata:gmatch('#EXT.X.STREAM.INF.BANDWIDTH=(%d+).-RESOLUTION=(%d+)x(%d+).-(http.-)\n') do
      48. if url ~= nil then
      49. entry = {}
      50. entry['url'] = url
      51. entry['band'] = band
      52. entry['res1'] = res1
      53. entry['res2'] = res2
      54. entry['name'] = ""
      55. if newname then
      56. entry['name'] = uml_str(newname)
      57. end
      58. count = count + 1
      59. ret[count] = {}
      60. ret[count] = entry
      61. end
      62. end
      63. return count
      64. end
      65. return 0
      66. end
      67. if (getVideoData(_url) > 0) then
      68. return json:encode(ret)
      69. end
      70. return ""
      Alles anzeigen
      Youtube verwendet bei manchen Livestream-Titeln Sonderzeichen und die mussten halt noch übersetzt werden damit sie richtig angezeigt werden und mich hat der "blöde" Schriftzug mit " - Youtube" am Ende gestört so dass ich ihm gleich mit weg gemacht habe.

      Keine Ahnung ob es was für SatBabys-yutube-lua im Git ist, aber wer es will kann es in seinen lokalen lua-File ähnlich umsetzen.

      Jeder kann auch andere evtl. noch fehlende Sonderzeichnungsumschreibungen in diesen Bereich

      Quellcode

      1. function uml_str(_string)
      2. if _string == nil then return _string end
      3. _string = string.gsub(_string,''','’');
      4. _string = string.gsub(_string,'<','');
      5. _string = string.gsub(_string,'&','&');
      6. _string = string.gsub(_string,'"','"');
      7. _string = string.gsub(_string,'- YouTube','');
      8. return _string
      9. end
      einfach mit aufnehmen oder sonstige Ersetzungen dort plazieren.
      ~ abyssus abyssum invocat ~