PHP Script zum Erstellen von PLS-Files

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

jahlives

Benutzer
Registriert
19. Aug. 2008
Beiträge
18.275
Reaktionspunkte
4
Punkte
0
Ich bin nicht sicher ob das auch wirklich hier reinpasst, es ist noch keine fertige 3rd Party Anwendung, aber das Teil läuft am besten mit Vollzugriff auf die Verzeichnisse und damit mit root-Rechten :D

Für den Icecast Server auf meiner DS107+ wollte ich Playlists erstellen, damit ich auch mp3 Files von der DS aus am Client abspielen kann. Am einfachsten sind PLS Playlisten und darum habe ich mir mal folgendes Script gezimmert, das die komplette mp3 Sammlung in Playlisten stellt. Dem Script wird das Root Verzeichnis der mp3 Files angegeben (z.B. /volume1/mp3), dann liest das Script alle Verzechnisse der ersten Ebene unter mp3 ein. Für jedes dieser Verzeichnisse der ersten Ebene wird dann rekursiv eine Playlist erstellt.

Also wer's brauchen kann..
PHP:
<?php
//Pfad zu mp3-Root KEINEN ABSCHLIESSENDEN SLASH!!
$path_mp3='/volume1/mp3';
//Pfad zu den Playlisten KEINEN ABSCHLIESSENDEN SLASH!!
$path_pl='/volume1/playlists';
//Für Playlisten auf Servern können keine lokalen Pfade verwendet werden
//es sollten immer komplette Pfade inkl Schema, Port und END-SLASH (/) verwendet werden
//Für lokale Playlisten einfach einen Leerstring '' setzen.
$server='http://deineDomain.tld:8000/';

$folder=array();
//alle Verzeichnissnamen der ersten Ebene unterhalb von mp3-Root auslesen
$dh=opendir($path_mp3);
while(false!==($file=readdir($dh))){
 if($file!='..' && $file!='.'){
  $folder[]=$file;
 }
}
//jedes gefundene Verzeichnis der ersten Ebene rekursiv nach mp3 Dateien
//durchsuchen, Dateipfade bearbeiten und in PLS schreiben
for($i=0;$i<count($folder);$i++){
 $fp=fopen($path_pl.'/'.$folder[$i].'.pls','w');
 $c=1;
 $str='';
 $cmd='find "'.$path_mp3.'/'.$folder[$i].'" -name *.mp3';
 $out=array();
 exec($cmd,$out);
 foreach($out as $wert){
  if($server==''){
   $str .= "File{$c}={$wert}\n";
  }else{
   $str .= "File{$c}=".str_replace(substr($path_mp3,0,strrpos($path_mp3,'/')+1),$server,$wert)."\n";
  }
  $c++;
 }
 $c--;
 fwrite($fp,'[playlist]'."\n".'numberofentries='.$c."\n".trim($str));
 fclose($fp);
}
?>
Wenn es wiedermal heftig regnet oder gar schneit mache ich daraus mal noch eine fertige 3rd Party Applkation ;)
Gruss

tobi
 
Einfach mal notiert für dich: schau dir auch mal die PHP-Funktion scandir() an.

itari
 
Einfach mal notiert für dich: schau dir auch mal die PHP-Funktion scandir() an.

itari
Danke, das hätte natürlich besser gepasst :)
Aber ich benutze gerne die Shell und arbeite mit der Rückgabe in PHP weiter Mit scandir() müsste ich das Ergebnis noch nach mp3 filtern, das geht mit dem find fixer ;)

Gruss

tobi
 
Hier der aktuellste Code, der Playlisten nicht pro Interpret sondern pro Album erstellt.
PHP:
<?php
$path_mp3='/volume1/public/mp3';
$path_pl='/volume1/public/playlists';
$server='http://deineDomain.tld:PORT/';

function readDirLevel($dir){
 $folder=array();
 $dh=opendir($dir);
 while(false!==($file=readdir($dh))){
  if($file!='..' && $file!='.' && is_dir($dir.'/'.$file)){
   $folder[$dir.'/'.$file]=$file;
  }
 }
 return $folder;
}

function createPLS($folder){
 foreach($folder as $key=>$wert){
  $t = preg_split('/\//',$key,null,PREG_SPLIT_NO_EMPTY);
  $fp=fopen($GLOBALS['path_pl'].'/'.$t[count($t)-2].'-'.$wert.'.pls','w');
  $c=1;
  $str='';
  $cmd='find "'.$key.'" -name *.mp3';
  $out=array();
  exec($cmd,$out);
  foreach($out as $wert){
   if($GLOBALS['server']==''){
    $str .= "File{$c}={$wert}\n";
   }else{
    $str .= "File{$c}=".str_replace(substr($GLOBALS['path_mp3'],0,strrpos($GLOBALS['path_mp3'],'/')+1),$GLOBALS['server'],$wert)."\n";
   }
   $c++;
  }
  $c--;
  fwrite($fp,'[playlist]'."\n".'numberofentries='.$c."\n".trim($str));
  fclose($fp);
 }
}
function showPLSFileContent(){
 echo '<pre>';
 foreach(glob($GLOBALS['path_pl'].'/*.pls') as $wert){
  echo '<strong>'.$wert."</strong>\n".file_get_contents($wert)."\n\n";
 }
 echo '</pre>';
}

$folderToSearch=array();
$folder=readDirLevel($path_mp3);
foreach($folder as $key=>$wert){
 $temp = readDirLevel($key);
 if(!empty($temp)){
  $folderToSearch=array_merge($folderToSearch,$temp);
 }else{
  $folderToSearch=array_merge($folderToSearch,array($key=>$wert));
 }
}
createPLS($folderToSearch);
showPLSFileContent();
?>
 
braeuchte ne kurze anleitung, wie ich das implementieren muss.
oda natuerlich ein spk-paket ;)


gruss, maltin
 
braeuchte ne kurze anleitung, wie ich das implementieren muss.
oda natuerlich ein spk-paket ;)


gruss, maltin
Das ganze ist ein PHP Script und sollte unter dem Root Apache laufen, damit auf das ganze Filesystem zugeriffen werden kann. Installieren lässt es sich wie jede andere 3rd Party Application (du findest hier im Forum genug Tipps wie man diese installieren muss)
Danach rufst du im Browser einfach diese Seite auf und das Script erstellt die Playlists nach den Vorgaben in den Konfigurationsvariabeln
PHP:
//Pfad wo die mp3 Files liegen
$path_mp3='/volume1/public/mp3';
//Pfad wo die Playlists gespeichert werden sollen
$path_pl='/volume1/public/playlists';
//Wenn diese Variable einen Wert hat, dann wird dieser Wert
//allen Pfadangaben vorangestellt. Damit kann man Playlisten
//erstellen welche für Clients aus dem Internet abspielbar sind
//wenn nur eine lokale Playlist (für die DS) erstellt werden soll, 
//dann einfach einen leeren String --> '' angeben
$server='http://deineDomain.tld:PORT/';
 
tut mir leid aba ich checks net.
ich hatte heute mal wieder etwas zeit mich um das thema zu kuemmern. ich muss mir eingestehen, dass ich das so schnell wohl net erlernen werde. bei mir scheiterts schon daran zu finden, wo denn die ganzen dateien liegen. wie komme ich dahin? keine ahnung.
nach dem suchen im wiki etc. ueber 3rd party apps verschwommen mir langsam die buchstaben vor augen.

@ die, die es checken// is ne .spk drin? ich weiss das is die faule variante oda kannst mir echt nochmal jmd stecken, wie das geht? itari und jahlives fallen mir da spontan ein. ;)

gruss und gn8, maltin
 
hi Maltin,

leider bin ich der völlig Falsche, wenn es um Downloads usw. geht. Da ich sowas nicht mache, hab ich auch keinen Draht in diese Welt.

Itari
 
Sorry - Playlists ... ist für mich dasselbe :D

Keine Ahnung von sowas

Itari
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat