Jeder des sich ab und zu mal ein Video aus dem Usenet zieht, kennt das Problem wahrscheinlich.
Man möchte den Film ansehen, bevor er komplett unten ist. Also versucht man halt z.B. mit
unrar x -kb -vp *01.rar die Datei zu entpacken, und was passiert? Es geht mal wieder nicht,
weil die NZB-Datei nicht sortier ist und der Usenet-Client bei *.35.rar anfängt 👿 . Deswegen hier
für alle leidgeplagten ein kleines Konsolen-PHPScript von mir.
#!/usr/bin/php5 <?php //Klasse zum sortieren einer NZB-Datei class nzbsort{ //Methode gibt sortiertes XML als String zurück function output(){ if($this->xmlnew){ return $this->xmlnew->asXML(); } } //Methode speichert sortiertes XML als Datei //Wenn kein Dateiname angegeben wurde, //dann überschreibe Ausgangsdatei. function save($filename = 0){ if($this->xmlnew){ if(!$filename)$filename = $this->filename; $this->xmlnew->asXML($filename); } } //Konstruktor //Sortiert die NZB-Datei function nzbsort($file){ $this->filename = $file; if (file_exists($file)) { $xml = simplexml_load_file($file); $xmlnew = simplexml_load_file($file); $filestr = array(); $filepos = array(); $i=0; foreach($xml->file as $cfile){ $subj = strtolower($cfile[subject]); $pos = count($filestr); $filestr[$pos] = $subj; $filepos[$subj] = $i; $i++; } $i=0; natsort($filestr); $finarray = array(); foreach($filestr as $cfile){ $xmlnew->file[$i][poster] = $xml->file[$filepos[$cfile]][poster]; $xmlnew->file[$i][date] = $xml->file[$filepos[$cfile]][date]; $xmlnew->file[$i][subject] = $xml->file[$filepos[$cfile]][subject]; $xmlnew->file[$i]->segments = $xml->file[$filepos[$cfile]]->segments; $xmlnew->file[$i]->segments->segment = $xml->file[$filepos[$cfile]]->segments->segment; $x=0; while(true){ if(!$xml->file[$filepos[$cfile]]->segments->segment[$x])break; $xmlnew->file[$i]->segments->segment[$x] = $xml->file[$filepos[$cfile]]->segments->segment[$x]; foreach($xml->file[$filepos[$cfile]]->segments->segment[$x]->attributes() as $a => $b) { $xmlnew->file[$i]->segments->segment[$x]->addAttribute($a,$b); } $x++; } $i++; } $this->xmlnew = $xmlnew; } } } //--> Klasse Ende if($argv[1]){ $sortedxml = new nzbsort($argv[1]); if(!$sortedxml->output()){ fwrite(STDERR, "Fehler: \"".$argv[1]."\" wurde nicht gefunden\n"); }else{ //unlink($argv[1]); echo $sortedxml->save(); }; }else{ fwrite(STDOUT, "Bitte XML-Datei angeben...\n"); } ?>
Einfach den Code in eine Datei speichern (z.B nzbsort) und mit chmod a+x ausführbar machen.
Wenn man es bequem haben möchte, dann einfach das Script nach ~/bin kopieren
Script kann man dann folgendermaßen aufruf: nzbsort deine.nzb
Übrigens kann man die Klasse auch in einem PHPScript auf einem Webserver verwenden.
So, ich hoffe, dass das jemand von euch brauchen kann.
lg 😉