ubuntuusers.de

PHPScript zum sortieren von NZB-Dateien

Status: Gelöst | Ubuntu-Version: Ubuntu
Antworten |

zerobyte

Anmeldungsdatum:
18. Januar 2008

Beiträge: Zähle...

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 😉

Antworten |