diff options
author | James Meyer <james.meyer@operamail.com> | 2010-10-23 18:17:40 (GMT) |
---|---|---|
committer | James Meyer <james.meyer@operamail.com> | 2010-10-23 18:19:39 (GMT) |
commit | adbcf19958300e9b6598990184c8815b945ba0ee (patch) | |
tree | f4283c850ac0ac202c17e78a637ee7ca8147621b /abs/mv-core/MythVantage-system/imdb-bulk-update.pl | |
parent | 61a68250df10d29b624650948484898334ff22d0 (diff) | |
download | linhes_pkgbuild-adbcf19958300e9b6598990184c8815b945ba0ee.zip linhes_pkgbuild-adbcf19958300e9b6598990184c8815b945ba0ee.tar.gz linhes_pkgbuild-adbcf19958300e9b6598990184c8815b945ba0ee.tar.bz2 |
Removed old core and extra from repo. Renamed -testing to core/extra. This will setup the base for the testing branch.
Diffstat (limited to 'abs/mv-core/MythVantage-system/imdb-bulk-update.pl')
-rw-r--r-- | abs/mv-core/MythVantage-system/imdb-bulk-update.pl | 720 |
1 files changed, 0 insertions, 720 deletions
diff --git a/abs/mv-core/MythVantage-system/imdb-bulk-update.pl b/abs/mv-core/MythVantage-system/imdb-bulk-update.pl deleted file mode 100644 index 87a9668..0000000 --- a/abs/mv-core/MythVantage-system/imdb-bulk-update.pl +++ /dev/null @@ -1,720 +0,0 @@ -#!/usr/bin/perl -################################################################################ -# Wrapper for imdb.pl tool for bulk movie metadata updates for mythdora # -# # -# 08/28/2007 # -# Ryan Pisani <mythdora@thepisanis.com> # -################################################################################ -#Parts of this were adopted from imdbbatchupdater.pl which in turn uses much # -#of the original imdb.pl. This is a simpler wrapper to maintain and it utilizes# -#the standard imdb.pl shipped with mythvideo. # -################################################################################ -#version: 1.0 : Initial roll-out works with imdb.pl 1.3 # -#version: 1.1 : Added some further error checking # -#version: 1.2 : Added -Manual flag for manual entering of IMDBIDs # -#version: 1.3 : Added -fileup metadata update for newly added/removed movies # -#version: 1.4 : Duplicate menu will default to first entry in the returned # -# list. # -# Added -Exclude flag to mark any items with non-imdb match with # -# a bogus imdb number to be skipped in later searches. # -# Added -help for extended examples in usage # -#version: 1.5 : Added -Folder flag to overide videopath for new video search # -# Fixed hash sort of new files so that entries with more than 1 # -# entry in the DB will not be "true" in new check. # -# Fixed a bug in the newvideo find where multiples were added # -# Fixed a bug in the newvideo find where multiples were added # -#version:1.5.1: Added showlevel fix in -Fileup to fix incorrect default showlvl# -#version: 1.6 : Found bug in -Title lookups where title was updated blank # -################################################################################ -use strict; -use DBI; -use Getopt::Long; -use File::Find; -use File::Basename; -use Sys::Hostname; - -#Set Global Path For Execution -$ENV{PATH}="/bin:/usr/sbin:/usr/bin:/sbin"; - -#Defaults & global declarations here -my $dbhost = '127.0.0.1'; -my $db = 'mythconverg'; -my $dbuser = 'mythtv'; -my $dbpass = 'mythtv'; -my $imdbnum; #imdbnum set from imdb.pl -my $movie; #movie title set from query -my $intid; #incremental id for videometadata table -my @FAILEDLOOKUP; #array to store failed lookups -my $imdb= '/usr/local/share/mythtv/mythvideo/scripts/imdb.pl'; -my $posters; #coverart directory -my $new; #-N flag -my $all; #-A flag -my $sqlstat; #used to store sql statments -my $stitle; #grabbed from input for title search -my $dup; #set if dupskip is on -my $manual; #set if manual is on -my $host = hostname; #the executing hosts machine name -my $fileup; #set if fileup is on -my $exclude; #set if exclude is on -my $currentimdb; #dbs current imdb number before lookup is set -my $help; #pass to usage if help flag i set for extended -my $folder; #set if -Folder is set to overide DB for Videopath -my $title; #Global Title to carry - - -GetOptions("Posters=s"=>\$posters, - "A"=>\$all, - "N"=>\$new, - "Fileup"=>\$fileup, - "help"=>\$help, - "Exclude"=>\$exclude, - "Manual"=>\$manual, - "Dupskip"=>\$dup, - "Title=s"=>\$stitle, - "Folder=s"=>\$folder, - "Host=s"=>\$dbhost, - "User=s"=>\$dbuser, - "Imdb=s"=>\$imdb, - "Password=s"=>\$dbpass); - - -if ( $help eq '1' ) { - - #Show extended usage - usage($help); - -} - -#One quick sanity check here for anyone looking to -A and -Exclude together - -if ( $exclude eq '1' && $all eq '1' ) { - -print <<STOP; - -**********************************Warning*************************************** - - -Exclude and -A are not recommended to be used together. If they are - used together you may find yourself seriously pissed off. - - -Exclude and -A will override any you may have previously entered in - manually because IMDB lookup may have failed. Furthermore the files - will go back to no-data and excluded from future searches. - - It is in your best interest to use -Exclude only with -N - - You have been warned. - -**********************************Warning*************************************** - -Hit [Enter] to exit, or type 'go' to continue with -Exclude and -A: -STOP - -chomp(my $choice=<STDIN>); - - if ( "$choice" ne "go" ) { - - exit; - - } - -} - - -#if the file update flag is set we'll update the db videometadata before continuing -if ( $fileup eq '1' ) { - - findnewvids($folder); - -} - -#Now parse sql options in an order that we care about -if ( $stitle ne "" ) { - - $sqlstat = "select inetref, filename, intid from videometadata where title like \"%$stitle%\""; - -} - -elsif ( $all eq '1') { - - $sqlstat = "select inetref, filename, intId from videometadata order by title"; - -} - -elsif ( $new eq '1' ) { - - $sqlstat = "select inetref, filename, intId, title from videometadata where inetref=\"00000000\" order by title"; - -} - -else { - - usage(); - -} - - -#Check to see if posters have been defined if not grab from db -if ( $posters eq "" ) { - - $posters=getposter(); - -} - -#Check for the posters directory & perms -if ( ! -d "$posters" || ! -w "$posters" ) { - - die "\nError: $posters doesn't exist or is not writable\n\n"; - -} - - -#Check for imdb.pl script or the one defined -if ( ! -x "$imdb" ) { - - die "Error: $imdb.pl is not executable\n"; - -} - - -#print "$sqlstat\n"; - -#Prepare the sql connection -my $dbh = DBI->connect("dbi:mysql:$db:$dbhost","$dbuser","$dbpass"); - -my $sth = $dbh->prepare($sqlstat); - -$sth->execute || die "SQL statement failed"; - -while (my @row=$sth->fetchrow_array) { - - #Grab current imdb number in DB - chomp($currentimdb = "$row[0]"); - - #Grab incremental id in DB for rewrite - chomp($intid = "$row[2]"); - - lc($movie = `basename "$row[1]"`); - - #Grab file id in DB for search - chomp($movie); - - #Grab title data - chomp(my $title= "$row[3]"); - - sep(); - - #print "current:$currentimdb , intid:$intid, movie: $movie, title: $title\n"; - #check to see if -Manual flag is set - if ( $manual ne '1' ) { - - print "Searching for IMDB movieID for $movie\n"; - chomp(($imdbnum)=(split /:/, `$imdb -M "$movie"`) [0] ); - - } - else { - - print "Enter the IMDB movieID for $movie\n"; - print "Enter the corresponding imdb number([Enter] to skip):"; - chomp($imdbnum=<STDIN>); - } - - #We'll check the imdb ids here. If they're longer than expected we assume - #it to be more than one return - if (length($imdbnum) > '8') { - - #Check the multiple entries and skip if flag is set - if ($dup ne '1') { - - my @TITLES=`$imdb -M "$movie"`; - - print "More than one match for $movie exists at IMDB\n"; - - for (my $i=0;$i<=$#TITLES;$i++) { - - print "$i) $TITLES[$i]"; - - } - - print "Select a title ([0] Default, [x] to skip, [m] manual imdb number):"; - chomp(my $choice=<STDIN>); - - #print "my choice $choice\n"; - if ($choice eq "") { - - $choice="0"; - chomp($imdbnum=(split /:/, $TITLES[$choice]) [0]); - } - - elsif ($choice eq "x") { - - $imdbnum=""; - push(@FAILEDLOOKUP, "$movie"); - - - } - - elsif ($choice =~ /[0-9]/) { - - chomp($imdbnum=(split /:/, $TITLES[$choice]) [0]); - #print $imdbnum; - - } - - elsif ($choice eq "m") { - - print "Enter IMDB number: "; - chomp($imdbnum=<STDIN>); - } - - else { - - die "Not a valid selection\n"; - - } - } - else { - - $imdbnum=""; - push(@FAILEDLOOKUP, "$movie"); - } - - } - - #Else check for failed lookups and -Exclude flag - elsif ( "$imdbnum" eq "" && "$exclude" eq "1" && "$currentimdb" eq "00000000" ) { - - #We set a new bogus one to be ignored in later -N searches - $imdbnum="99999999"; - - push(@FAILEDLOOKUP, "$movie"); - - } - - - #Log the failed lookups here for later - elsif ( "$imdbnum" eq "" ) { - - push(@FAILEDLOOKUP, "$movie"); - - #print $#FAILEDLOOKUP; - - } - - - - #now check for imdbnumber from query - if ( "$imdbnum" ne "" ) { - - my $coverfile; - my $year; - my $director; - my $plot; - my $userrating; - my $rating; - my $time; - - #If bogus is set do this first - if ("$imdbnum" eq "99999999") { - - $coverfile="No Cover"; - $year="1895"; - $director="Unknown"; - $plot="Unknown"; - $userrating="0"; - $rating="NR"; - $time="0"; - } - - else { - - #Now lets fine the cover image - #print "Going to use $imdb -P $imdbnum\n"; - chomp(my $cover=`$imdb -P "$imdbnum"`); - #print "$cover"; - - if ($cover =~ /jpg/) { - - $coverfile="$posters/$imdbnum.jpg"; - print "Retrieving $cover\n"; - system("wget $cover -O $coverfile >/dev/null 2>&1"); - - } - else { - - $coverfile="No Cover"; - - } - - - #Now get the rest of the imdb data - undef my @TEMPDATA; - @TEMPDATA=`$imdb -D $imdbnum`; - chomp(($title)=(split /Title:/, $TEMPDATA[0])[1]); - $title=~s/"//g; - chomp(($year)=(split /Year:/, $TEMPDATA[1])[1]); - chomp(($director)=(split /Director:/, $TEMPDATA[2])[1]); - chomp(($plot)=(split /Plot:/, $TEMPDATA[3])[1]); - $plot=~s/"//g; - chomp(($userrating)=(split /UserRating:/, $TEMPDATA[4])[1]); - chomp(($rating)=(split /MovieRating:/, $TEMPDATA[5])[1]); - chomp(($time)=(split /Runtime:/, $TEMPDATA[6])[1]); - - #print $#TEMPDATA; - #print "$title\n $year\n $director\n $plot\n $userrating\n $rating\n $time\n"; - } - - - - #Now let's write that data into the db - print "Updating videometadata with new information\n"; - my $sqlstat="update videometadata set title=\"$title\", year=\"$year\", director=\"$director\", plot=\"$plot\", userrating=\"$userrating\", coverfile=\"$coverfile\", rating=\"$rating\", length=\"$time\", inetref=\"$imdbnum\" where intid=\"$intid\""; - - - my $sth = $dbh->prepare($sqlstat); - - $sth->execute || die "SQL statement failed\n"; - - - } - -} - -if ( $#FAILEDLOOKUP >= 0 ) { - -print "\n\nThe following videos had imdb lookup errors:\n @FAILEDLOOKUP\n"; - -} - - -sub usage { - - my $help=$_[0]; - my $comm=basename($0); - -print <<STOP; - -usage: $comm -[Required] -[Optional] -[Host] parameters - - Required parameters: - -A Get IMDB data for ALL movies in database - -N Get IMDB data for movies with no IMDBID in database - -Title Get IMDB data for movie(s) matching a quoted pattern - - Optional parameters: - -Exclude Mark entries with no result with imdb placeholder (DEFAULT: OFF) - -Fileup Search for new/removed videos and update database (DEFAULT: OFF) - -Manual Query for manual IMDB number for each title (DEFAULT: OFF) - -Dupskip Ignore the videos that find multiple imdb results (DEFAULT: OFF) - - Host parameters: - -Host Specify a database host (DEFAULT:$dbhost) - -User Specify a database user (DEFAULT:$dbuser) - -Password Specify a database password (DEFAULT:$dbpass) - -Imdb Specify path to a working imdb.pl (DEFAULT:$imdb) - -Posters Specify a cover art directory if different from entry in DB - -Folder Specify a video folder to search if differs from entry in DB - - Example: - $comm -N -Host myhostname -User mythuser -Password mythpass - - Use $comm -help for extended examples -STOP - -if ( $help eq '1' ) { -print <<STOP; - - New file check with IMDB lookup and non-local DB: - $comm -N -Fileup -Host 192.168.1.50 - - New file check with IMDB lookup and future exclusion for non-match: - $comm -N -Fileup -Exclude - - New file check, IMDB lookup for ALL movies, skipping multiple IMDB returns: - $comm -A -Fileup -Dupskip - - Title search with Manual IMDB entry - $comm -Title "Austin Powers" -Manual -STOP -} -exit; -} - - -#Get Posters directory from host if possible out of settings -sub getposter { - - my $sqlstat="select data from settings where hostname=\'$host\' and value=\'VideoArtworkDir\'"; - - my $dbh = DBI->connect("dbi:mysql:$db:$dbhost","$dbuser","$dbpass") || die usage(); - - my $sth = $dbh->prepare($sqlstat); - - $sth->execute || die "SQL statement failed"; - - chomp(my $posters=$sth->fetchrow_array); - - return($posters); - -} - -#Routine to locate new & removed videos and update videometadata accordingly -sub findnewvids { - - my $folder=$_[0]; - my $videopath; - - sep(); - - - if ( $folder eq "" ) { - - print "Retrieving Video Path for this $host from $db.settings\n"; - - #First get video directory path from settings database for exectuting host - my $sqlstat="select data from settings where hostname=\'$host\' and value=\'VideoStartupDir\'"; - - my $dbh = DBI->connect("dbi:mysql:$db:$dbhost","$dbuser","$dbpass"); - - my $sth = $dbh->prepare($sqlstat); - - $sth->execute || die "SQL statement failed"; - - chomp($videopath=$sth->fetchrow_array); - - } - else { - print "Setting Video Path with manual override to $folder\n"; - chomp($videopath="$folder"); - - } - sep(1); - - #Now let's get the ignored file types so that we can truly ignore any overrides - print "Retrieving ignored files extensions from $db.videometadata\n"; - - $sqlstat = "select extension from videotypes where f_ignore=\"1\" order by extension"; - - my $dbh = DBI->connect("dbi:mysql:$db:$dbhost","$dbuser","$dbpass"); - - my $sth = $dbh->prepare($sqlstat); - - $sth->execute || die "SQL statement failed"; - - my @ITYPES; - #put the ignored extensions found in the DB into an array - while (my @row=$sth->fetchrow_array) { - - push(@ITYPES,"@row"); - - } - - sep(1); - #Now look at allowed extensions and create an array to use when finding files - #We'll append these to a list of pre-defined ones below - - print "Retrieving allowable file extensions from $db.videometadata\n"; - - $sqlstat = "select extension from videotypes where f_ignore=\"0\" order by extension"; - - my $dbh = DBI->connect("dbi:mysql:$db:$dbhost","$dbuser","$dbpass"); - - my $sth = $dbh->prepare($sqlstat); - - $sth->execute || die "SQL statement failed"; - - - #Array of commonly allowed video extensions - my @TYPES=(".wmv",".avi",".vob",".iso",".bin",".mpeg",".mpg",".mp4",".mov"); - - #put the extensions found in the DB into an array - while (my @row=$sth->fetchrow_array) { - - if ( "@TYPES" !~ /@row/ ) { - - push(@TYPES,".@row"); - - } - - - } - - my @FTYPES; - - #Pull any ignored extensions out of final file type search string - foreach (@TYPES) { - - if ( "@ITYPES" !~ /$_/ ) { - - push(@FTYPES,"($_)\\Z|"); - - } - - - } - - my $types=join"",@FTYPES; - - #Take the last | off of the search string - chop($types); - - sep(1); - - #Search for all files that match our allow file extension patterns as defined in $types - my @FILES; - find (sub{ - - my $file=$File::Find::name ; - if ( $file =~ /$types/i) { - push(@FILES,"$file"); - #print "$file\n"; - } - - }, "$videopath"); - - @FILES=sort(@FILES); - - my $totalfiles="$#FILES" + 1; - - if ($totalfiles gt '1') { - - print "Found $totalfiles total videos in $videopath\n"; - sep(1); - - } - else { - - die "No video files were found in $videopath\n"; - - - } - - #Now lets see what's in videometadata - print "Retrieving a list of known videos from $db.videometadata\n"; - - sep(1); - - $sqlstat = "select filename from videometadata where filename like \"%$videopath%\" order by filename"; - - my $dbh = DBI->connect("dbi:mysql:$db:$dbhost","$dbuser","$dbpass"); - - my $sth = $dbh->prepare($sqlstat); - - $sth->execute || die "SQL statement failed"; - - #put those extensions found in the DB into an array - - my @LISTINDB; - while (my @row=$sth->fetchrow_array) { - - push(@LISTINDB,"@row"); - - } - - print "Scrubbing the database for any videos that no longer exist in $videopath\n"; - - my @FILESINDB; #Database entries with an actual file associated - #Now scrub database entries for any files that are no longer present - foreach (@LISTINDB) { - - if (! -e "$_") { - - print "\nRemoving entry for $_ from database\n"; - - $sqlstat = "delete from videometadata where filename=\"$_\""; - - my $dbh = DBI->connect("dbi:mysql:$db:$dbhost","$dbuser","$dbpass"); - - my $sth = $dbh->prepare($sqlstat); - - $sth->execute || die "SQL statement failed"; - - } - else { - - #Add to new scrubbed list - push(@FILESINDB, "$_"); - - } - - - - } - - sep(); - - - my %count =(); - - my @FILESDIFF; - #Now well check to see what files differ between DB entries the Data - foreach my $element (@FILESINDB, @FILES) { - - $count{$element}++; - - } - foreach my $element (keys %count) { - - if ( $count{$element} < 2 ) { - - push(@FILESDIFF, $element); - print "$element\n"; - - } - } - - #Now we tell the user how many updates to be made - my $totaldiff="$#FILESDIFF" + 1; - - if ($totaldiff gt '0') { - - print "Found a total of $totaldiff to be added to database\n"; - sep (1); - - } - else { - - print "Found no new videos to be added to database\n"; - - } - - #Now we need to grab just a title and populate the db with - foreach (@FILESDIFF) { - - my $title=basename($_,@TYPES); - - print "\nAdding entry for $_ to $db.videometadata\n"; - - $sqlstat = "insert into videometadata (title,director,rating,inetref,coverfile,filename,showlevel) values(\"$title\",\"Unknown\",\"NR\",\"00000000\",\"No Cover\",\"$_\",\"1\");"; - - my $dbh = DBI->connect("dbi:mysql:$db:$dbhost","$dbuser","$dbpass"); - - my $sth = $dbh->prepare($sqlstat); - - $sth->execute || die "SQL statement failed"; - - } - - #print "@FILESDIFF\n"; - - - -} - - - - -#Prints a easy on the eye separator -sub sep { - - if (defined $_[0]) { - - print "=============================================================================\n"; - sleep $_[0]; - } - else { - - print "=============================================================================\n"; - - } - -} |