Aktuelles
Digital Eliteboard - Das Digitale Technik Forum

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Laberthread - Autoscript Vavoo auf e2 oder TvHeadend

Wie laufen bei euch die Einzeiler

  • Stream + Picon + EPG funktioniert

    Stimmen: 36 45,6%
  • Stream + EPG funktioniert

    Stimmen: 12 15,2%
  • Stream + Picon funktioniert

    Stimmen: 3 3,8%
  • Nur Stream funktioniert

    Stimmen: 21 26,6%
  • Streams gehen garnicht

    Stimmen: 7 8,9%

  • Umfrageteilnehmer
    79
  • Umfrage geschlossen .
root@dm900:~# cat -v /home/vavoosid.sh | head
cat: invalid option -- 'v'
BusyBox v1.24.1 (2018-02-09 14:20:00 UTC) multi-call binary.

Usage: cat [FILE]...

Concatenate FILEs and print them to stdout
root@dm900:~#
 
sed -n '1,10p' /home/vavoosid.sh | sed -n l

Auf was ich raus will:
Hast du das Script im Unix Format gespeichert oder Windows?
 
Das war mein altes, bis vor kurzem funktionierendes Script. Ich benutze zum Editieren immer Notepad++ also wird es im UNIX Format abgespeichert.
 
anstatt dass hier mal einer ein fertiges script postet....

es ist immer dasselbe die die danach fragen sind die bösen oder gar faulen und wollen alles für umme haben.....

und ihr und clever seid die guten

dabei ist es besser für alle wenn es sowas nicht mehr geben würde..
ich lach mich weg
... oder jenige, welche nicht lesen wollen, oder können
und stattdessen nen "MENÜ" per onehit unter TELETEXT tafel 512 geliefert bekommen möchten.. °..°
ja. einige sind die cleveren und die anderen die guten und widerum andere pöbeln, weils nich auf anhieb lübbt°!°
zum lachen find ich das nicht,
eher traurig, was DU hier den anderen "BOARDBRÜDERN" von deinem unmut mitteilst!
lass doch lieber mal gemeinsam schmunzeln, oder falls es nicht passt:
... delete account °,°
 
Zuletzt bearbeitet:
ich habe niemanden gekickt, ich hab den ganzen server abgeschalten da unnötig, aber egal passt hier nicht her
 
was habe ixh bzw was haben wir alle davon wenn wir den schrott wieder zuum laufen bekommen und nach zehn Minuten das Bild wieder stehen bleinbt?

Halt mich für alles mögliche aber gewiss nichtfür dumm...

aber mir gehtts tierisch aufen Sack dass hier seit Jahren Jahrzehnten manche denken sie wären was besseres und müssten einem über die Gosch eins hauen

ich bin immer noch dabei auch wenn ich so dumm b in nicht ??

...
dein gepöbel in allen ehren, aber dann erstelle dir doch was eigenes.
ich habe von dir bisher nichts kontruktives lesen können,
was anderen boardbrüdern geholfen hat!!!!!
.. und wenn es DIR HIER aufm sack geht, dass es hier leute gibt,
welche, wie du schreibst, dir seit jahrzehnten aufm sack gehen,
dann mach es bitte besser oder sei bitte teil der community,
anstatt nen abgreifendes schaaaf zu sein!!!"

.. wenn man sich mal anschaur´t, was du so hinterlassen hast, dann
sein doch bitte nen n´bischen geschmeidiger mit nem MÄH aus deiner MUH!*

boardbrüderlichen &
ganz lieben gruß
:coffee:

### nachtrag ###
ich habe niemanden gekickt,
.. schade, dass wunderbares eingestampft wird!!!
kids sektion war supi
lieben gruß von maya & michl, soll ich bestellen und fragen,
ob das mal wieder kommt, wegen ner folge von, ... keine ahnung, konnt ich mir nicht merken!° :giggle:
 
Zuletzt bearbeitet:
das mit den emotionen muss manchmal raus und das ist auch gut so!!! (y) (y) (y)
jedoch wird es nur den ersten momment befriedigen
und letztendlich nicht zum gewünschten erfolg der zufriedenheit führen,
auch nicht nach 20+ jahren der eigenen frustration!!!

.. da hilft nur ignorieren, mitwirken oder selbst basteln!
boardbrüderlichen lieben gruß
 
Zuletzt bearbeitet:
Mir fehlen die Worte, wird immer schlimmer hier... Pissig wenn's nicht läuft und dann sind die anderen schuld, haha

@heavenware bis heute nicht verkraftet das ich cs eingestellt habe, komm mal mit deinem Leben klar


edit: E2 gelöscht
Schade wegen E2. Trotzdem danke für deine Mühe. Mache Dir nichts daraus. Diese Art von Leuten warten nur auf das Silbertablet und davon gibt es leider sehr viele. Vielleicht verkauft dieser Kollege dein Script weiter und jetzt sind seine Kunden verärgert.
 
Zuletzt bearbeitet:
Ich will mal nicht so sein.
Hier ein Python Proxy für lokal.
Starten.
Laufen lassen.
M3U nutzen. (wird im Scriptverzeichnis gespeichert)
Ich geb da keinen Support und werde das auch nicht weiter ausbauen. (ich brauche den Kram nicht)
Das ist euer Part. ;)

Python:
###############################################################
PORT = 4323

LANGUAGE = "de"
REGION = "DE"

###############################################################

import json
import gzip
import requests
from io import BytesIO
import uuid
from flask import Flask, request, Response, abort
import time
import os
import socket

GEOIP_URL = "https://www.vavoo.tv/geoip"
PING_URL = "https://www.vavoo.tv/api/app/ping"
CATALOG_URL = "https://vavoo.to/mediahubmx-catalog.json"
RESOLVE_URL = "https://vavoo.to/mediahubmx-resolve.json"

HEADERS = {
    "accept": "*/*",
    "user-agent": "electron-fetch/1.0 electron (+https://github.com/arantes555/electron-fetch)",
    "Accept-Language": LANGUAGE,
    "Accept-Encoding": "gzip, deflate",
    "Connection": "close",
}

def decode_response(resp):
    if resp.content[:2] == b'\x1f\x8b':
        return json.loads(gzip.decompress(resp.content))
    else:
        return resp.json()

session = requests.Session()
session.headers.update(HEADERS)

r_geo = session.get(GEOIP_URL)
r_geo.raise_for_status()
geo_data = decode_response(r_geo)

unique_id = str(uuid.uuid4())

current_timestamp = int(time.time() * 1000)

initial_payload = {
    "reason": "app-focus",
    "locale": LANGUAGE,
    "theme": "dark",
    "metadata": {
        "device": {"type": "desktop", "uniqueId": unique_id},
        "os": {"name": "win32", "version": "Windows 10 Pro", "abis": ["x64"], "host": "Lenovo"},
        "app": {"platform": "electron"},
        "version": {"package": "tv.vavoo.app", "binary": "3.1.8", "js": "3.1.8"},
    },
    "appFocusTime": 0,
    "playerActive": False,
    "playDuration": 0,
    "devMode": False,
    "hasAddon": True,
    "castConnected": False,
    "package": "tv.vavoo.app",
    "version": "3.1.8",
    "process": "app",
    "firstAppStart": current_timestamp,
    "lastAppStart": current_timestamp,
    "ipLocation": None,
    "adblockEnabled": True,
    "proxy": {"supported": ["ss"], "engine": "Mu", "enabled": False, "autoServer": True},
    "iap": {"supported": False},
}

r1 = session.post(PING_URL, json=initial_payload)
r1.raise_for_status()
data1 = decode_response(r1)

initial_token = data1.get("token")
initial_addon_sig = data1.get("addonSig")

#print(f"[+] Initial token received: {initial_token}")
#print(f"[+] Initial addonSig received: {initial_addon_sig}")

catalog_headers = {
    "content-type": "application/json; charset=utf-8",
    "mediahubmx-signature": initial_addon_sig,
    "user-agent": "MediaHubMX/2",
    "accept": "*/*",
    "Accept-Language": LANGUAGE,
    "Accept-Encoding": "gzip, deflate",
    "Connection": "close",
}

all_filtered_items = []
cursor = None
while True:
    catalog_payload = {
        "language": LANGUAGE,
        "region": REGION,
        "catalogId": "iptv",
        "id": "iptv",
        "adult": False,
        "search": "",
        "sort": "",
        "filter": {},
        "cursor": cursor,
        "clientVersion": "3.0.2"
    }
 
    r_catalog = session.post(CATALOG_URL, json=catalog_payload, headers=catalog_headers)
    r_catalog.raise_for_status()
    catalog_data = decode_response(r_catalog)
 
    for item in catalog_data.get("items", []):
        if item.get("type") == "iptv":
            filtered_item = {
                "id": item["ids"]["id"],
                "url": item["url"],
                "name": item["name"],
                "group": item["group"],
                "logo": item["logo"]
            }
            all_filtered_items.append(filtered_item)
 
    cursor = catalog_data.get("nextCursor")
    if cursor is None:
        break

def save_m3u_file():
    hostname = socket.gethostname()
    local_ip = socket.gethostbyname(hostname)
    if local_ip.startswith("127."):
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        try:
            s.connect(("8.8.8.8", 80))
            local_ip = s.getsockname()[0]
        except Exception:
            local_ip = "127.0.0.1"
        finally:
            s.close()
 
    m3u_content = "#EXTM3U\n"
    for item in all_filtered_items:
        m3u_content += f'#EXTINF:-1 tvg-id="{item["id"]}" tvg-name="{item["name"]}" tvg-logo="{item["logo"]}" group-title="{item["group"]}",{item["name"]}\n'
        m3u_content += f'http://{local_ip}:{PORT}/vavoo?channel={item["id"]}\n'
 
    with open("vavoo_playlist.m3u", "w", encoding="utf-8") as f:
        f.write(m3u_content)
 
    print("[✓] Local M3U playlist saved to vavoo_playlist.m3u")

save_m3u_file()

app = Flask(__name__)

@app.route('/vavoo')
def stream_proxy():
    channel_id = request.args.get('channel')
    if not channel_id:
        abort(400)
 
    channel = next((item for item in all_filtered_items if item["id"] == channel_id), None)
    if not channel:
        abort(404)
 
    resolve_headers = {
        "content-type": "application/json; charset=utf-8",
        "mediahubmx-signature": initial_addon_sig,
        "user-agent": "MediaHubMX/2",
        "accept": "*/*",
        "Accept-Language": LANGUAGE,
        "Accept-Encoding": "gzip, deflate",
        "Connection": "close",
    }
 
    resolve_payload = {
        "language": LANGUAGE,
        "region": REGION,
        "url": channel["url"],
        "clientVersion": "3.0.2"
    }
 
    r_resolve = session.post(RESOLVE_URL, json=resolve_payload, headers=resolve_headers)
    r_resolve.raise_for_status()
    resolve_result = decode_response(r_resolve)
 
    if resolve_result and len(resolve_result) > 0:
        stream_url = resolve_result[0]["url"]
        return Response(status=302, headers={"Location": stream_url})
    else:
        abort(404)

@app.route('/playlist.m3u')
def playlist():
    hostname = socket.gethostname()
    local_ip = socket.gethostbyname(hostname)
    if local_ip.startswith("127."):
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        try:
            s.connect(("8.8.8.8", 80))
            local_ip = s.getsockname()[0]
        except Exception:
            local_ip = "127.0.0.1"
        finally:
            s.close()
 
    m3u_content = "#EXTM3U\n"
    for item in all_filtered_items:
        m3u_content += f'#EXTINF:-1 tvg-id="{item["id"]}" tvg-name="{item["name"]}" tvg-logo="{item["logo"]}" group-title="{item["group"]}",{item["name"]}\n'
        m3u_content += f'http://{local_ip}:{PORT}/vavoo?channel={item["id"]}\n'
 
    return Response(m3u_content, mimetype='application/x-mpegURL')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=PORT)

requests==2.31.0
flask==2.3.3

Für eure E2 Kisten müsst ihr das halt umbauen.
 
Zurück
Oben