Skip to content

Commit

Permalink
Adding searching and cron
Browse files Browse the repository at this point in the history
  • Loading branch information
cocide committed Nov 10, 2012
1 parent 3460380 commit e35a705
Show file tree
Hide file tree
Showing 7 changed files with 815 additions and 347 deletions.
3 changes: 2 additions & 1 deletion .htaccess
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
RewriteEngine On

RewriteRule ^admin/*$ admin.php
RewriteRule ^install/*$ install.php
RewriteRule ^install/*$ install.php
RewriteRule ^cron/*$ cron.php
21 changes: 15 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,27 @@ Browsing to admin.php will let you upload new file lists. They must be in a .txt

Things that Need to Eventually Happen
-------------------------------------
* Add searching.
* Things like genre, rating, actor, studio, producer, runtime, budget, box, resolution, year, rating
* Make a cron based update script to update the ratings weekly
* Maybe also background the first pull of data rather than have the page just sit 'loading'
* Add advanced search (perhaps)
* Improve security
* Add a graphical edit for each movie (to spot-fix bugs)
* Improve the regex matching for video quality
* Get better title info (probably from TMDb)
* Fix sorting of unknown quality movies (currently they mix with SD)
* Make the form look better.


The Log of Change
-----------------
* Nov 10 2012 - v0.2.0
* Removed " 3D" from the titles
* Changed the year to not be based off of year in theaters (RT updates that to most recent)
* NOTE: This will require a DB upgrade, run install to upgrade.
* NOTE: It is a good idea to just flush the info_rt table, it will get better year info.
* Changed how the IMDB numbers are compared with TMDb and RT
* NOTE: This will require a DB upgrade, run install to upgrade.
* Added searching.
* The regex video quality now matches nearly perfectly for 1080, 720, DvD, R5/6 (no Cam/Screener/TS support)
* Added a cron job to be ran nightly, it will update up to 150 movies which are at least 15 days old starting with the oldest.
* NOTE: You will need to add a wget (or similar) for cron.php to be ran nightly.
* Made the clean URLs able to direct to / instead of /index.php
* Nov 04 2012 - v0.1.1
* Added icons for quality and rating on the collapsed view
* Removed the tagline from the collapsed view
Expand Down
152 changes: 23 additions & 129 deletions admin.php
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?php
require_once("functions.php");
ob_start();
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
Expand All @@ -11,7 +12,7 @@

if (!file_exists("conf.php")) {
ob_end_clean();
header("Location: install");
header("Location: $base_dir/install");
exit;
}
include("conf.php");
Expand Down Expand Up @@ -58,6 +59,13 @@
# only if its not a torrent file
if (end(explode(".", $fileName)) != "torrent" && end(explode(".", $fileName)) != "idx") {
$imdb_number = substr(preg_replace("/[^\[]*\[[0-9]{4}-([0-9]{7}).*/", "$1", $fileName), 0, 7);
$query = "SELECT * FROM id_asoc WHERE imdb_number='".mysql_real_escape_string($imdb_number)."'";
$result = mysql_query($query);
# and only if its not in the
if (mysql_num_rows($result) == 0) {
$query = "INSERT INTO id_asoc SET imdb_number=".mysql_real_escape_string($imdb_number);
mysql_query($query);
}
$query = "SELECT * FROM files WHERE filename='".mysql_real_escape_string($fileName)."'";
$result = mysql_query($query);
# and only if its not in the
Expand All @@ -71,14 +79,16 @@
} else {
# find and add the resolution of the file
$resolution = array();
preg_match('/^[^\]]+\][a-zA-Z]*\.*(([0-9]{3,4}[ip]+)|(DvD))/', $fileName, $resolution);
if ($resolution[1] == "DvD") {
preg_match('/[^\[]*\[[0-9]{4}-[0-9]{7}.*((720[ip]*)|(1080[ip]*)|(D[vV]D)|(R[56]))/', $fileName, $resolution);
if ($resolution[1] == "DvD" || $resolution[1] == "DVD") {
$resolution[1] = "SD";
}
} elseif ($resolution[1] == "R5" || $resolution[1] == "R6") {
$resolution[1] = "CAM";
}
if (count($resolution) > 1) {
$query = "UPDATE files SET resolution='".$resolution[1]."' WHERE filename='".mysql_real_escape_string($fileName)."'";
mysql_query($query);
}
mysql_query($query);
}
}
}
Expand All @@ -87,147 +97,31 @@
}
}
if (isset($_FILES['file'])) {
$query = "SELECT * FROM files WHERE rt_number IS NULL";
$query = "SELECT * FROM files, id_asoc WHERE files.imdb_number = id_asoc.imdb_number AND id_asoc.rt_number IS NULL";
$blank_rt = mysql_query($query);
while($row = mysql_fetch_array($blank_rt, MYSQL_ASSOC)) {
$imdb_number = $row['imdb_number'];
$info[$imdb_number] = json_response("http://api.rottentomatoes.com/api/public/v1.0/movie_alias.json?type=imdb&id=".str_pad($imdb_number, 7, "0", STR_PAD_LEFT)."&apikey=".RT_API);
if (isset($info[$imdb_number]['title'])) {

# if that RT number is not in the DB add it
$query = "SELECT * FROM info_rt WHERE imdb_number=".$imdb_number;
$result = mysql_query($query);
if (mysql_num_rows($result) == 0) {
mysql_query ("INSERT INTO info_rt SET ".
"imdb_number=".$imdb_number.", ".
"title='".mysql_real_escape_string($info[$imdb_number]['title'])."', ".
"mpaa='".mysql_real_escape_string($info[$imdb_number]['mpaa_rating'])."', ".
"runtime=".mysql_real_escape_string($info[$imdb_number]['runtime']).", ".
"release_theater='".mysql_real_escape_string($info[$imdb_number]['release_dates']['theater'])."', ".
"release_dvd='".mysql_real_escape_string($info[$imdb_number]['release_dates']['dvd'])."', ".
"consensus='".mysql_real_escape_string($info[$imdb_number]['critics_consensus'])."', ".
"rating_critics=".mysql_real_escape_string($info[$imdb_number]['ratings']['critics_score']).", ".
"rating_audience=".mysql_real_escape_string($info[$imdb_number]['ratings']['audience_score']).", ".
"studio='".mysql_real_escape_string($info[$imdb_number]['studio'])."', ".
"rt_link='".mysql_real_escape_string($info[$imdb_number]['links']['alternate'])."'");
}

# if we do not have any genre for that RT number add it
foreach ($info[$imdb_number]['genres'] as $genre) {
$query = "SELECT * FROM genre WHERE imdb_number=".$imdb_number." AND name='".mysql_real_escape_string($genre)."'";
$result = mysql_query($query);
if (mysql_num_rows($result) == 0) {
mysql_query ("INSERT INTO genre SET imdb_number=".$imdb_number.", name='".mysql_real_escape_string($genre)."'");
}
}


# if we do not have any director for that RT number add it
foreach ($info[$imdb_number]['abridged_directors'] as $director) {
$query = "SELECT * FROM director WHERE imdb_number=".$imdb_number." AND name='".mysql_real_escape_string($director['name'])."'";
$result = mysql_query($query);
if (mysql_num_rows($result) == 0) {
mysql_query ("INSERT INTO director SET imdb_number=".$imdb_number.", name='".mysql_real_escape_string($director['name'])."'");
}
}

# if we do not have any cast for that RT number add it
foreach ($info[$imdb_number]['abridged_cast'] as $person) {
foreach ($person['characters'] as $character) {
$query = "SELECT * FROM cast WHERE imdb_number=".$imdb_number." AND rt_celeb_number='".mysql_real_escape_string($person['id'])."' AND role='".mysql_real_escape_string($character)."'";
$result = mysql_query($query);
if (mysql_num_rows($result) == 0) {
mysql_query ("INSERT INTO cast SET imdb_number=".$imdb_number.", name='".mysql_real_escape_string($person['name'])."', role='".mysql_real_escape_string($character)."', rt_celeb_number=".mysql_real_escape_string($person['id']));
}
}
}

# now that we have all the data update the table
mysql_query ("UPDATE files SET rt_number=".mysql_real_escape_string($info[$imdb_number]['id'])." WHERE imdb_number=".$imdb_number);

usleep(150000); // sleep .15 seconds to not go over our 10 requests per second limit
}
rt_getData($row['imdb_number']);
}

$query = "SELECT * FROM files WHERE tmdb_number IS NULL";
$query = "SELECT * FROM files, id_asoc WHERE files.imdb_number = id_asoc.imdb_number AND id_asoc.tmdb_number IS NULL";
$blank_tmdb = mysql_query($query);
while($row = mysql_fetch_array($blank_tmdb, MYSQL_ASSOC)) {
$imdb_number = $row['imdb_number'];

$imdbLookupURL="http://api.themoviedb.org/2.1/Movie.imdbLookup/en/json/";
$infoURL="http://api.themoviedb.org/2.1/Movie.getInfo/en/json/";
$tmdb_data = json_response($imdbLookupURL.TMDb_API."/tt".str_pad($imdb_number, 7, "0", STR_PAD_LEFT));


if (isset($tmdb_data[0]['id'])) {
if (isset($tmdb_data[0]['id'])) {
$tmdb_number = $tmdb_data[0]['id'];
$tmdb_info = json_response($infoURL.TMDb_API."/".$tmdb_number);

if (isset($tmdb_info[0])) {

# if that TMDb number is not in the DB add it
$query = "SELECT * FROM info_tmdb WHERE imdb_number=".$imdb_number;
$result = mysql_query($query);
if (mysql_num_rows($result) == 0) {
mysql_query ("INSERT INTO info_tmdb SET ".
"imdb_number=".$imdb_number.", ".
"tagline='".mysql_real_escape_string($tmdb_info[0]['tagline'])."', ".
"overview='".mysql_real_escape_string($tmdb_info[0]['overview'])."', ".
"budget=".mysql_real_escape_string($tmdb_info[0]['budget']).", ".
"revenue=".mysql_real_escape_string($tmdb_info[0]['revenue']));
}

# if we do not have any countries for that TMDb number add it
foreach ($tmdb_info[0]['countries'] as $country) {
$query = "SELECT * FROM country WHERE imdb_number=".$imdb_number." AND name='".mysql_real_escape_string($country['name'])."'";
$result = mysql_query($query);
if (mysql_num_rows($result) == 0) {
mysql_query ("INSERT INTO country SET imdb_number=".$imdb_number.", name='".mysql_real_escape_string($country['name'])."'");
}
}

# if we do not have any producers for that TMDb number add it
foreach ($tmdb_info[0]['cast'] as $person) {
if ($person['job'] == "Producer") {
$query = "SELECT * FROM producer WHERE imdb_number=".$imdb_number." AND name='".mysql_real_escape_string($person['name'])."'";
$result = mysql_query($query);
if (mysql_num_rows($result) == 0) {
mysql_query ("INSERT INTO producer SET imdb_number=".$imdb_number.", name='".mysql_real_escape_string($person['name'])."'");
}
}
}


# now that we have all the data update the table
mysql_query ("UPDATE files SET tmdb_number=".mysql_real_escape_string($tmdb_number)." WHERE imdb_number=".$imdb_number);
}
# now that we have all the data update the table
mysql_query ("UPDATE id_asoc SET tmdb_number=".mysql_real_escape_string($tmdb_number)." WHERE imdb_number=".$imdb_number);
tmdb_getData($tmdb_number, $imdb_number);
}
}
ob_end_clean();
header("Location: index.php");
header("Location: $base_dir");
exit;
}

function json_response($url) {
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $url);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_HEADER, 1);
$response = curl_exec($curl_handle);
curl_close($curl_handle);
list($header, $json) = explode("\r\n\r\n", $response, 2);
$data = json_decode($json, TRUE);
$header_array= explode("\r\n", $header);
foreach ($header_array as $header_element) {
$header_clean = array();
$header_clean = explode(": ", $header_element);
if (count($header_clean) == 2) {
$data['header'][$header_clean[0]] = $header_clean[1];
}
}
return $data;
}
mysql_close($db);
ob_end_flush();
?>
Expand Down
55 changes: 55 additions & 0 deletions cron.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
<?php
if (!file_exists("conf.php")) {
ob_end_clean();
header("Location: $base_dir/install");
exit;
}
include("conf.php");
ini_set('display_errors', '0');
$db = mysql_connect(DB_HOST, DB_USER, DB_PASS);

if (!$db) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db(DATABASE);

require_once("functions.php");

// blank entries we have nothing on
$query = "SELECT * FROM id_asoc WHERE rt_number IS NULL";
$blank_rt = mysql_query($query);
while($row = mysql_fetch_array($blank_rt, MYSQL_ASSOC)) {
$imdb_number = $row['imdb_number'];
rt_getData($imdb_number);
}

$query = "SELECT * FROM id_asoc WHERE tmdb_number IS NULL";
$blank_tmdb = mysql_query($query);
while($row = mysql_fetch_array($blank_tmdb, MYSQL_ASSOC)) {
$imdb_number = $row['imdb_number'];
$imdbLookupURL="http://api.themoviedb.org/2.1/Movie.imdbLookup/en/json/";
$tmdb_data = json_response($imdbLookupURL.TMDb_API."/tt".str_pad($imdb_number, 7, "0", STR_PAD_LEFT));

if (isset($tmdb_data[0]['id'])) {
$tmdb_number = $tmdb_data[0]['id'];
# now that we have all the data update the table
mysql_query ("UPDATE id_asoc SET tmdb_number=".mysql_real_escape_string($tmdb_number)." WHERE imdb_number=".$imdb_number);
tmdb_getData($tmdb_number, $imdb_number);
}

}

// out of date entries
$query = "SELECT * FROM info_rt, id_asoc WHERE info_rt.imdb_number = id_asoc.imdb_number AND info_rt.date_updated < DATE(DATE_SUB(NOW(),INTERVAL 15 DAY)) ORDER BY date_updated ASC LIMIT 150";
$blank_rt = mysql_query($query);
while($row = mysql_fetch_array($blank_rt, MYSQL_ASSOC)) {
rt_getData($row['imdb_number']);
}

$query = "SELECT * FROM info_tmdb, id_asoc WHERE info_tmdb.imdb_number = id_asoc.imdb_number AND info_tmdb.date_updated < DATE(DATE_SUB(NOW(),INTERVAL 15 DAY)) ORDER BY date_updated ASC LIMIT 150";
$blank_tmdb = mysql_query($query);
while($row = mysql_fetch_array($blank_tmdb, MYSQL_ASSOC)) {
tmdb_getData($row['tmdb_number'], $row['imdb_number']);
}
echo "done";
?>
Loading

0 comments on commit e35a705

Please sign in to comment.