Tagesaktuelle mp3 mit IPS downloaden

Hallo,

ich hatte in einem anderen Thread (http://www.ip-symcon.de/forum/f52/onlinezeit-kinder-14151/) versucht, die Daten der Kindersicherung bei meiner FB7390 auszulesen. Hatte da auch Unterstützung von Ralf - leider am Ende doch ohne Erfolg.

Nun hatte ich die Idee (als Steffi-Fan) die Webseite von NDR2 (Frühstück bei Stefanie - die Folgen zum Download | NDR.de - NDR 2 - Programm - Sendungen - Der NDR 2 Morgen) auf mp3 zu durchsuchen und neue Files downzuloaden. Dann schwebt mir vor, diese dann erstmal in unserem „Intranet“ zu Hause anzuzeigen. Später soll dieses Abspielen mit dem ISDN-Modul realisiert werden. Aber da muss ich erstmal wieder eine Umwandlung in wav vornehmen.

Ist Curl da eine Möglichkeit (bin durch die Kindersicherung s.o. draufgekommen)? Hab da keine Erfahrungen. Oder wie kann ich die Sache am besten machen?

Hallo,

leider hat sich bisher niemand für einen Lösungsvorschlag „beworben“. Nach ein wenig Try’n’Error habe ich mir eine halbautomatische Lösung erarbeitet:

<?
$remotefile = "http://www.ndr.de/ndr2/podcast2956.xml";
$localfile = IPS_GetKernelDir()."\\scripts\\steffi.xml";

//Downloaden
$content = @file_get_contents($remotefile);
if((strpos($http_response_header[0], "200") === false))
 {
 return;
}

//Speichern
file_put_contents( $localfile, $content );

$xml = simplexml_load_file('steffi.xml');
//$anzahl = count($xml);
$anzahl =250;
//Alle Kategorien ausgeben
//for($i=0,$size=count($Kategorien);$i<$size;$i++)
for($i=0;$i<$anzahl;$i++)

	{
	echo $xml->channel->item[$i]->title."
";
	echo $xml->channel->item[$i]->description."
";
	echo $xml->channel->item[$i]->link."

";
   }

?>

Dennoch:

  1. Wie kann ich die Anzahl der ITEM-Einträge in der XML zählen, um die Zahl in der Scheife einzubinden (bisher manuell)

  2. Wie steht es mit Umlauten? Im XML sieht noch alles gut aus - in php dann nicht mehr. Ergebnis hier:

Rumspucken
Nach dem letzten Testspiel unserer Fußballfrauen steht fest: Es gibt nur noch einen klitzekleinen Unterschied zu Jogis Jungs.
http://media.ndr.de/download/podcasts/podcast2956/AU-20110616-1615-2601.mp3
  1. Gibt es eine andere, elegantere Möglichkeit, die XML-Nodes anzusprechen?

Hallo,

nachdem zwar viele meinen Thread geklickt hatten, jedoch niemand einen Beitrag geschrieben hatte, bin ich u.a. mit Hilfe anderer Foren zu einem Ergebnis gekommen, das ich hier vorstellen möchte. Zunächst die Antworten auf meine eigenen Fragen:

  1. Wie kann ich die Anzahl der ITEM-Einträge in der XML zählen, um die Zahl in der Scheife einzubinden (bisher manuell)

Antwort:

$items = $xmlDoc->getElementsByTagName("item");

$data = array();
for ($i = 0; $i < $items->length; $i++)
  1. Gibt es eine andere, elegantere Möglichkeit, die XML-Nodes anzusprechen?

Antwort:

$item = $items->item($i);
   $data[] = array(
         'pubdate' => $item->getElementsByTagName('pubDate')->item(0)->textContent,
			'title' => $item->getElementsByTagName('title')->item(0)->textContent,
			'description' => $item->getElementsByTagName('description')->item(0)->textContent,
			'link' => $item->getElementsByTagName('link')->item(0)->textContent);
  1. Wie steht es mit Umlauten? Im XML sieht noch alles gut aus - in php dann nicht mehr. Ergebnis hier:

Antwort:

	// Datum erst in ISO-Zeichensatz wandeln, dann zu einem Timestamp, dann zu JJJJ-MM-TT formatieren
   $datum = date("Y-m-d",strtotime(utf8_decode($data[$i]['pubdate'])));
	// mysql_real_escape_string: Filtern bzw. Ersetzen von Sonderzeichen in der Variablen, damit es beim Schreiben in die DB zu keinem Fehler kommt
	$titel = mysql_real_escape_string(utf8_decode($data[$i]['title']));
	$beschreibung = mysql_real_escape_string(utf8_decode($data[$i]['description']));
	$link = utf8_decode($data[$i]['link']);

Und hier des gesamte Inhalt des Scriptes:

<?
include ("db_conn_ips.inc.php");

// Aufbauen einer Verbindung zur Datenbank
$db_connection_id = db_connect();

// Zunächst wird die Webseite downgeloaded und in einem File gespeichert
$remotefile = "http://www.ndr.de/ndr2/podcast2956.xml";
$localfile = IPS_GetKernelDir()."\\scripts\\steffi.xml";

// Downloaden
$content = @file_get_contents($remotefile);
if((strpos($http_response_header[0], "200") === false))
 {
 return;
}

// Speichern
file_put_contents( $localfile, $content );




$xmlfile= "steffi.xml";
$xmlDoc = new DOMDocument();
$xmlDoc->load($xmlfile);
$link = $xmlDoc->getElementsByTagName("link");
$num = $link->length;


$items = $xmlDoc->getElementsByTagName("item");

$data = array();
for ($i = 0; $i < $items->length; $i++)
	{
   $item = $items->item($i);
   $data[] = array(
         'pubdate' => $item->getElementsByTagName('pubDate')->item(0)->textContent,
			'title' => $item->getElementsByTagName('title')->item(0)->textContent,
			'description' => $item->getElementsByTagName('description')->item(0)->textContent,
			'link' => $item->getElementsByTagName('link')->item(0)->textContent);

	// Datum erst in ISO-Zeichensatz wandeln, dann zu einem Timestamp, dann zu JJJJ-MM-TT formatieren
   $datum = date("Y-m-d",strtotime(utf8_decode($data[$i]['pubdate'])));
	// mysql_real_escape_string: Filtern bzw. Ersetzen von Sonderzeichen in der Variablen, damit es beim Schreiben in die DB zu keinem Fehler kommt
	$titel = mysql_real_escape_string(utf8_decode($data[$i]['title']));
	$beschreibung = mysql_real_escape_string(utf8_decode($data[$i]['description']));
	$link = utf8_decode($data[$i]['link']);
	$timestamp = time();

/*
	// Zum Testen und Anzeigen in der IPS-Console
	
   echo $datum."
";
   echo $titel."
";
	echo $beschreibung."
";
	echo $link."
";
	echo "
";
*/

	$sql = "SELECT count(*) AS anzahl FROM ips.steffi WHERE titel = '$titel'";
	$query = mysql_query($sql);
	$row = mysql_fetch_object($query);
	if($row->anzahl > 0)
		echo "Dieser Eintrag existiert bereits!!!!";
	else
      {
		// SQL-Befehl festlegen
		$sql = "INSERT INTO ips.steffi (timestamp, datum, titel, beschreibung, url) VALUES (CURRENT_TIMESTAMP, '$datum', '$titel', '$beschreibung', '$link')";
      // SQL-Befehl ausführen
		mysql_query($sql,$db_connection_id) or die (mysql_error());
		}
}

// Verbindung zur DB schließen
mysql_close($db_connection_id);

?>

Hinweis: in der db_conn_ips.inc.php versteckt sich die Funktion db_connect().

Wenn es Anregungen zur Verbesseung gerade bei der Syntax gibt, bitte ich um Zuschriften. Danke.

bin ich u.a. mit Hilfe anderer Foren zu einem Ergebnis gekommen

Dann bist Du nicht in der Lage die Suchfunktion dieses Forums zubedienen. :wink:

Wenn ich in die Suche xml oder rss eingebe, werde ich mit Ergebnissen erschlagen welche zum Teil genau deine Probleme behandeln und lösen.

Hier nur mal ein Beispiel. Hier wird sogar aus xml ein array abgebildet.

@RWN:

Wenn ich am Ende weiß, womit ich das erledigt habe, kann ich auch qualifizierter mit der Suche arbeiten. Ausserdem hatte ich nichts mit „DOMDocument“ oder „getElementsByTagName“ gefunden. Zumal ich auch die anfängliche Idee mit der html-Seite hatte.

Die Sache mit simplexml hatte nicht so funktionert, wie ich erhoffte, deshalb der „Umstieg“ auf DOM nach Google-Recherchen. Damit läuft es jetzt stabil - bisher.