Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

Overview


Variables

VariableDescriptionDetails
passadmin passwordbase64encoded and then urlencoded
baseURL
base URL
http://xxx.xxx.xxx.xxx:8080


Two factor authentication will work with these scripts if:

baseURL=http://localhost:8080





Scripts

showrss.php

Code Block
languagephp
titleshowrss.php
<?php

$pass="xxx";
$baseURL="http://xxx.xxx.xxx.xxx:8080";
$SHOWRSS_FEED="http://showrss.info/user/xxx.rss?magnets=true&namespaces=true&name=clean&quality=hd&re=null";

$EMAIL_TO="j****@yahoo.com";
$EMAIL_FROM="j****@yahoo.com";
$EMAIL_SUBJECT="TORRENT STARTED [NAS] - ";
$EMAIL_SUBJECT_FAILED="FAILED TO DOWNLOAD [NAS0] - ";



$DB_FILE_NAME="db_showrss.json";
$TEMP_FOLDER="tv/tmp";
$DEST_FOLDER="tv/incoming";


//login to NAS0
$sid = loginToQnap();

//get showRSS Feed
$xml = file_get_contents($SHOWRSS_FEED);
//echo $xml;

//process xml
$xml = simplexml_load_file($SHOWRSS_FEED);

$showArray = array();

$showdb = json_decode(file_get_contents($DB_FILE_NAME), true);
if($showdb==null){
  $showdb = array();
}


// loop through 
foreach ($xml->channel->item as $item) {
    $title =  $item->title;
	$link = $item->link;

    //echo "title=" . $title ."\n";

	//$pattern = "/S(\d{1,2})E(\d{1,2})/";
	$pattern = "/(\d{1,2})x(\d{1,2})/";
	preg_match($pattern, $title, $matches);
    if(sizeof($matches)>=3){
	  $season=intval($matches[1]);
      $episode=intval($matches[2]);	
 	  $show = trim(substr($title,0,strrpos($title,$matches[0])));	
 	  $showAndEpisode=sprintf("%s %02dx%02d", $show,$season,$episode);
	}else{
	  $show=(string)$title;
	  $showAndEpisode=(string)$title;
	  $season=0;
	  $episode=0;
    }

	//echo "SHOW: " . $show . "\n";
	//echo "SEASON: " . $season . "\n";
	//echo "EPISODE: " . $episode . "\n";
        
    $showInfo=array($showAndEpisode, $show, $season, $episode, $link);
	array_push($showArray, $showInfo);	
}

//echo "\n\n";

sort($showArray);
//print_r($showArray);

foreach ($showArray as $show) {

  //echo "show: " .  $show[0] . "\n";
  //add torrent

  $found =false;
  foreach($showdb as &$showEntry){
    $showName = $showEntry[0];

    if($showName==$show[1]){
      $found=true;
      //echo "Found " . $show[1] . " in showdb \n";
      $newSeason=$show[2];
      $newEpisode=$show[3];
      $lastSeason=$showEntry[1];   
      $lastEpisode=$showEntry[2]; 
      //echo "--- " . $lastSeason . "x" . $lastEpisode . " -> " .  $newSeason . "x" . $newEpisode ."\n";

      if($lastSeason == $newSeason && $newEpisode > $lastEpisode){
        if(downloadShow($show)){
  	  $showEntry[2]= $newEpisode;
          echo "U " . $showEntry[0] . " " . $showEntry[1] . "x" . $showEntry[2] . "\n";
        }else{
          echo "F " . $showEntry[0] . " " . $showEntry[1] . "x" . $showEntry[2] . "\n";
        }
      }elseif ($newSeason > $lastSeason ){
        if(downloadShow($show)){
	  $showEntry[1]= $newSeason;
	  $showEntry[2]= $newEpisode;
          echo "U+ " . $showEntry[0] . " " . $showEntry[1] . "x" . $showEntry[2] . "\n";
	}else{
	  echo "F+ " . $showEntry[0] . " " . $showEntry[1] . "x" . $showEntry[2] . "\n";
	}
      }else{
        // echo "WTF " . $lastSeason . "x" . $lastEpisode . " -> " .  $newSeason . "x" . $newEpisode ."\n";
      }
      break; 
    }
  }
 
  //set latest season/episode
  if ($found==false) {

    if(downloadShow($show)){
      echo "A " . $show[1] .  " " . $show[2] . "x" . $show[3] . "\n" ;
      $showDetails=array($show[1], $show[2], $show[3]);
      array_push($showdb, $showDetails);
    }else{
      echo "F " . $show[1] .  " " . $show[2] . "x" . $show[3] . "\n" ;

    }
  }
  
}

//save showdb to file
//print_r($showdb);

file_put_contents($DB_FILE_NAME,json_encode($showdb));

exit;

//***************************************
// downloadShow
//***************************************
function downloadShow($show){
    global $baseURL;

    $showAndEpisode =  $show[1] .  " " . $show[2] . "x" . $show[3];
    //echo "D: " . $showAndEpisode . "\n";
    //echo "L: " . $show[4] . "\n\n";

    $temp=$GLOBALS['TEMP_FOLDER'];
    $dest=$GLOBALS['DEST_FOLDER'] . "/" . $show[1]; 
    
    $realDest = "/share/" . $dest;
    if (!file_exists($realDest)) {
      mkdir($realDest, 0777, true);
    }

    if($show[2]>0){ 
      $dest=$dest . "/Season " . $show[2]; 
    }
    //echo "Dest: " . $dest . "\n";

    $realDest = "/share/" . $dest;
    if (!file_exists($realDest)) {
      mkdir($realDest, 0777, true);
    }

    $url = $baseURL . '/downloadstation/V4/Task/AddUrl?sid=' . $GLOBALS['sid']  . '&temp=' . urlencode($temp) . '&move=' . urlencode($dest) . '&url=' . urlencode($show[4]); 
    //echo "URL: " . $url . "\n";
    $resp=file_get_contents($url);
    //echo $resp;
    if($resp=='{"error":0}'){
      //sendNotification($showAndEpisode,true);
      return true;
    }else{
      sendNotification($showAndEpisode,fail);
      return false;
    }
}

//***************************************
// sendNotification
//***************************************
function sendNotification($showAndEpisode,$success){
    if(success == true){
      $subject= "\"" . $GLOBALS['EMAIL_SUBJECT'] . $showAndEpisode . "\"";
    }else{
      $subject= "\"" . $GLOBALS['EMAIL_SUBJECT_FAILED'] . $showAndEpisode . "\"";
    }
    $cmd= getCwd() . "/sendEmail.sh " . $subject  . " " . $GLOBALS['EMAIL_FROM'] . " " . $GLOBALS['EMAIL_TO'] . " " . $subject;
    //echo "cmd=" . $cmd . "\n";
    shell_exec($cmd);

}

//***************************************
// endsWith
//***************************************
function endsWith($haystack, $needle)
{
    $length = strlen($needle);
    if ($length == 0) {
        return true;
    }

    return (substr($haystack, -$length) === $needle);
}

//***************************************
// getSid
//***************************************
function getSid($xml){

    $parser = xml_parser_create();
    xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
    xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
    xml_parse_into_struct($parser, $xml, $values, $tags);
    xml_parser_free($parser);
    //print_r($values);
 
    // loop through the structures
    foreach ($values as $val) {
      $tag=$val['tag'];
      $value=$val['value'];
      if($tag=="authSid"){
        return $value;
      } 
      //echo "tag=" . $tag . ", value=" . $value . "\n";
    }

}

//***************************************
// loginToQnap
//***************************************
function loginToQnap(){
  global $baseURL, $pass;

  $resp = file_get_contents($baseURL . '/cgi-bin/authLogin.cgi?user=admin&pwd=' . $pass );
  //echo $resp;

  $sid=getSid($resp);
  //echo "sid='" . $sid . "'\n";

  $resp=file_get_contents($baseURL . '/downloadstation/V4/Misc/Login?sid=' . $sid);

  return $sid;
}

?>

...