Stream URL von XML Playlist mittels PHP aktualisieren?

mistergreen

Grünschnabel
Hallo liebe Programmierer,

da ich nicht weiter komme, brauche ich eure Hilfe. Ich habe sehr wenig Kenntnisse über Programmieren (HTML, CSS, JavaScript, usw.) die ich in der Schule gesammelt habe. Es geht um folgendes: mein IPTV provider aus meiner Heimat stellt mir eine XML Playliste zu Verfügung mit Sendern aus meiner Heimat. Da die Playliste sehr viele Sendern hat, habe ich mir eine .m3u8 Playliste mit meine favoriten zusammengestellt. Nun ist es so dass er oft die Stream URLs aktualisiert und ich diese dann immer wieder manuel ändern muss. Daher dachte ich einen PHP script zu basteln der mir die Arbeit übernimmt. Die XML sieht so aus:

XML:
<?xml version="1.0" encoding="UTF-8"?>
  <channels>
  <channel>
  <title>TV Channel 1</title>
  <img>http:/stream.url/channel-logo.png</img>
  <info></info>
  <url>http:/stream.url/channel.m3u8</url>
  </channel>
  <channel>
 <title>TV Channel 2</title>
 <img>http:/stream.url/channel2-logo.png</img>
 <info></info>
 <url>http:/stream.url/channel2.m3u8</url>
 </channel>
 ...
 </channels>

Nach langer Internet Recherche habe ich folgenden PHP script basteln können:

PHP:
<?php
  $html = "";
 
  $mytv = "http.//xml.provider.com/all.php";
 
  $xml=simplexml_load_file($mytv);
 
  for($i = 0; $i < 200; $i++){
    $title = $xml->channel[$i]->title;
   $link = $xml->channel[$i]->url;
   $html .= "<p>$title</p><p>$link</p>";
   }
 echo $html;
 ?>

Der zeigt mir nun den Sendername und drunter die Stream URL. Ich möchte nun jedem Sender Stream URL eine ID aus zwei-drei Ziffern zuweisen damit ich dann in meine Playliste so einen URL habe:

http.//mywebhost.com/myphp?channel=id

Immer wen der stream abgerufen wird, soll der Script die URLs aktualisieren und den gefragten Sender zur Wiedergabe zurückleiten (VLC für PC, KODI & PerfectPlayer für Android gerät) Vielleicht bin ich voll auf dem falschen weg, hoffe jedoch hier einige Tipps zu bekommen und bedanke mich im voraus.
 
Hi

Also die Sendernamen bleiben gleich, die Url ändert sich immer.

Müssen unbedingt Nummern zugewiesen werden? Wäre http.//mywebhost.com/myphp?channel=Sendername auch ok? Wäre nämlich weniger zum Schreiben...

zB. sowas:
PHP:
<?php
$mytv = "http.//xml.provider.com/all.php";

$xml = simplexml_load_file($mytv);
if(!isset($xml->channel)) //Fehler
{
    http_response_code(404);
    exit(0);
}

for($i = 0; $i < count($xml->channel); $i++)
{
    if($xml->channel[$i]->title == $_GET['channel'])
    {
        header('Location: ' . $xml->channel[$i]->url);
        exit(0);
    }
}
http_response_code(404);
exit(0);
Also prinzipiell werden die verfügbaren Namen durchsucht, welcher gleich wie der übergebene Namen ist. Wenn gefunden, wird zur Streamurl umgeleitet. Sonst 404-Fehler (Nicht gefunden).
 
Wäre http.//mywebhost.com/myphp?channel=Sendername auch ok? Wäre nämlich weniger zum Schreiben...

Ja das wäre auch ok, aber die Sendernamen haben leerzeichen, also "Sender TV 3", würde das dan problem beim Link machen?


Also prinzipiell werden die verfügbaren Namen durchsucht, welcher gleich wie der übergebene Namen ist. Wenn gefunden, wird zur Streamurl umgeleitet. Sonst 404-Fehler (Nicht gefunden).

ich versuche mal den script sofort, und berichte. Das sollte es genau machen.

EDIT: klappt nicht, bekomme fehlermeldung :(
 
Zuletzt bearbeitet:
Wenn ich über den Player den stream aufrufe also so http.//mywebhost.com/myphp?channel=Sender%20TV%203, spuckt VLC Fehler aus, genau wie PerfectPlayer in Android.
Und wenn ich den link ohne "?channel=Sender%20TV%203" über dem browser aufrufe, kommt auch fehler

Hier original link ohne ?channel=Sender%20TV%203 -> CLICK
Hier original link bsp. mit ?channel=Sender%20TV%203 -> CLICK 1, CLICK 2, CLICK 3

habe ich was falsch gemacht?
 
%20 , nicht 20%
Aber gefunden wirds trotzdem nicht... gibts die Namen wirklich?

Mach einmal
PHP:
<?php
$mytv = "http.//xml.provider.com/all.php";
 
$xml = simplexml_load_file($mytv);
if(!isset($xml->channel)) //Fehler
{
    http_response_code(404);
    exit(0);
}
 
for($i = 0; $i < count($xml->channel); $i++)
{
    if($xml->channel[$i]->title == $_GET['channel'])
    {
        header('Location: ' . $xml->channel[$i]->url);
        exit(0);
    }
}

http_response_code(404);
for($i = 0; $i < count($xml->channel); $i++)
{
    echo $xml->channel[$i]->title . '<br>\n';
}
exit(0);
 
ok habe es geändert auf %20, und der beim CLICK 1 gibt es kein %20, sondern ein -

ich bekommen jetzt en fehler Parse error: syntax error, unexpected '$xml' (T_VARIABLE) in /home/vhosts/****.*****.com/test1.php on line 4

ja die Namen gibt es wirklich, also im XML ist dann channels->channel (titel: Alsat-M, url:****), channel (titel: TV SHenja, url:****), channel (titel: ERA, url:***), usw. (die namen sind so wie im vorherigem post CLICK 1, 2, 3

Ich habe mein anliegen auch in einem anderen Forum (english) gepostet, aber der eine der mir bis jetzt antwortetet, waren immer retzelhafte antworten für mich. Dort wurde mir vrogeschlagen die XML in eine datenbank zu exportieren und dann die Sendername als Primäreschlüssel machen (allein das hat mir tag gekostet), und sollen nur die Links durch den script aktualisiert werden. Nach langem recherche habe ich es endlich geschafft den script zum laufen zum bringen, und zwar stellt der Script verbindung zum MySQL auf, logt sich ein, lädt die XML und exportiet die daten in der datenbank. Dann hatte ich das problem das jedes mal ich den Script aufrufte, die daten doppelt, dreifach, vierfach, usw.. erstellt wurden. Also habe ich das problem dort gepostet samt script, und als antwort erhalten ich soll PDO nutzten. Da ich kein ahnung habe was dass ist, hieß es wieder einmal tante google fragen. Die haben netterweise eine script halbwegs gepostet, aber ich kann damit kein verbindung zu meine Datenbank erstellen, bekommen fehler
 
Zuletzt bearbeitet:
Also, ich sehe ehrlich gesagt keinen sinnvollen Grund, da eine DB ins Spiel zu bringen, außer für Caching ggf.

Zum Parse-Error, irgendwie musst du das Script wohl falsch in die PHP-Datei kopiert haben (weil vorher hat es ordentlich 404 geliefert). Vielleicht die Datei einmal hier raufladen (also nicht reinkopieren, sondern als Anhang).

Und noch was ist mir grad aufgefallen:
http.//xml.provider.com/all.php
=>
http://xml.provider.com/all.php
(Im ersten Beitrag hier schon falsch, und so übernommen...)
 
Was das DB betrifft habe ich keine ahnung von der materie. Mich nervst nur dass ich täglich überprüfun muss ob die Stream URLs noch aktuell sind. Also, welcher weg mir dieser arbeit übernimmt ist mir im grunde egal, hauptsache einfach zu verstehen, falls notwendig ist den script zu aktualiseren in zukunft.

Jap den Link habe ich gerade korrigiert, aber trotzdem fehler :(

Die PHP datei im Anhang (habe einige updates gemacht)

EDIT:

habe gerade dein ersten Script genommen, und ich habe mich mit dem Channel=Namen vertan, nun klappt die weiterleitung.
Ein anderer Problem taucht auf: Bei den 3 test sender die ich ausgewählt habe, beim 1. braucht es lange zum laden und bricht ab, beim 2. und 3. braucht das laden etwas kürzer, jedoch der stream ist total komisch (von ton her kaum verständlich, und Bild als würde man VHS vorspulen)

(die Original Links, sowie meine Links sind in der .zip datei)

und noch was, meine Playliste wird von 3 android geräten verwendet (TvBox, Tablet, Smartphone), kann es zu problemen kommen wenn alle 3 gleichzeitig streamen und den script ausführen?
 

Anhänge

  • test1.zip
    561 Bytes · Aufrufe: 7
Zuletzt bearbeitet:
kann es zu problemen kommen wenn alle 3 gleichzeitig streamen und den script ausführen?

Nein, dem Script hier ist das egal.

jedoch der stream ist total komisch (von ton her kaum verständlich, und Bild als würde man VHS vorspulen) ... usw.
Das kann eigentlich nicht am Script liegen. Funktioniert es, wenn die abgefragte Streamurl direkt im Player geöffnet wird? (wäre irgendwie seltsam)
 
Zurück