#!/usr/bin/perl # This file is released with the GPL license # # This file has 2 main operations: "ppv.pl 1" will delete all the listings # in channels 100 - 199. "ppv.pl 2" will update the PPV listings $categories[1] = "Movies"; $categories[5] = "Sports"; $categories[6] = "Interests"; $categories[7] = "Lifestyles"; $categories[8] = "News"; $categories[9] = "Themes"; $categories[10] = "Show Types"; $categories[11] = "Age Appropriate"; $categories[12] = "Audio & Video"; $categories[13] = "Content Advisories"; $categories[14] = "Languages"; $categories[32] = "AC"; $categories[34] = "AL"; $categories[368] = "Action/Adventure"; $categories[259] = "Adult"; $categories[133] = "All Day Ticket"; $categories[272] = "Animals"; $categories[369] = "Animation"; $categories[273] = "Archeology"; $categories[274] = "Art"; $categories[120] = "Audio Only"; $categories[320] = "Auto"; $categories[275] = "Aviation"; $categories[416] = "Award Ceremony"; $categories[36] = "BN"; $categories[276] = "Ballet"; $categories[321] = "Baseball"; $categories[322] = "Basketball"; $categories[304] = "Beauty"; $categories[323] = "Bicycle"; $categories[324] = "Billiards/Pool"; $categories[370] = "Biography"; $categories[104] = "Black & White"; $categories[325] = "Boat"; $categories[326] = "Bodybuilding"; $categories[327] = "Bowling"; $categories[328] = "Boxing"; $categories[277] = "Business/Financial"; $categories[105] = "CC"; $categories[278] = "Celebrity"; $categories[257] = "Children"; $categories[145] = "Chinese"; $categories[329] = "Climbing"; $categories[305] = "Collectibles"; $categories[371] = "Comedy"; $categories[279] = "Computers"; $categories[280] = "Concert"; $categories[306] = "Cooking"; $categories[330] = "Cricket"; $categories[372] = "Current Affairs"; $categories[281] = "Dance"; $categories[134] = "Delayed"; $categories[112] = "Descriptive Video Service"; $categories[331] = "Diving"; $categories[373] = "Docudrama"; $categories[374] = "Documentary"; $categories[113] = "Dolby Digital"; $categories[114] = "Dolby Surround"; $categories[375] = "Drama"; $categories[282] = "Educational"; $categories[283] = "Electronics"; $categories[115] = "English"; $categories[121] = "Event"; $categories[307] = "Exercise/Fitness"; $categories[258] = "Family"; $categories[376] = "Fantasy"; $categories[308] = "Fashion/Style"; $categories[135] = "Finale"; $categories[136] = "First Run"; $categories[332] = "Fishing"; $categories[333] = "Football"; $categories[117] = "French"; $categories[284] = "Fundraiser"; $categories[35] = "GL"; $categories[41] = "GV"; $categories[417] = "Game Show"; $categories[118] = "German"; $categories[334] = "Golf"; $categories[335] = "Gymnastics"; $categories[309] = "Health/Medicine"; $categories[285] = "History"; $categories[336] = "Hockey"; $categories[286] = "Holiday"; $categories[310] = "Home Repair"; $categories[377] = "Horror"; $categories[337] = "Horse"; $categories[311] = "House/Garden"; $categories[312] = "How-To"; $categories[338] = "Hunting"; $categories[119] = "Italian"; $categories[143] = "Japanese"; $categories[144] = "Korean"; $categories[107] = "Letterbox"; $categories[137] = "Live"; $categories[287] = "Local"; $categories[39] = "MV"; $categories[339] = "Martial Arts"; $categories[288] = "Military/War"; $categories[122] = "Mini-Series"; $categories[340] = "Motorcycle"; $categories[378] = "Music"; $categories[379] = "Musical"; $categories[380] = "Mystery/Crime"; $categories[37] = "N"; $categories[381] = "Nature"; $categories[289] = "Opera"; $categories[290] = "Outdoors"; $categories[167] = "PPV"; $categories[138] = "Premiere"; $categories[110] = "Primary Audio"; $categories[291] = "Product Info"; $categories[38] = "RP"; $categories[341] = "Racing"; $categories[382] = "Reality-based"; $categories[313] = "Religion"; $categories[139] = "Repeat"; $categories[342] = "Rodeo"; $categories[383] = "Romance"; $categories[343] = "Rugby"; $categories[344] = "Running"; $categories[33] = "SC"; $categories[384] = "Science Fiction"; $categories[140] = "Season Finale"; $categories[141] = "Season Premiere"; $categories[111] = "Secondary Audio"; $categories[124] = "Series"; $categories[314] = "Shopping"; $categories[292] = "Show Business"; $categories[345] = "Skating"; $categories[346] = "Skiing"; $categories[418] = "Soap Opera"; $categories[347] = "Soccer"; $categories[293] = "Space Exploration"; $categories[116] = "Spanish"; $categories[125] = "Special"; $categories[108] = "Sub-Titled"; $categories[385] = "Suspense"; $categories[348] = "Swimming"; $categories[419] = "Talk"; $categories[349] = "Tennis"; $categories[350] = "Track/Field"; $categories[296] = "Travel"; $categories[386] = "True Crime"; $categories[40] = "V"; $categories[351] = "Volleyball"; $categories[294] = "Weather"; $categories[387] = "Western"; $categories[109] = "Widescreen"; $categories[295] = "Woodworking"; $categories[352] = "Wrestling"; package main; # Load required stuffs use HTTP::Request; use LWP::UserAgent; use POSIX qw(strftime); use DBI; if(@ARGV[0] != 1 && @ARGV[0] != 2){printf("Please use either \"1\" (delete) or \"2\" (update)\n");exit();} if(@ARGV[0] == 1){ printf("Deleting all PPV Database entries..."); my $dbh = DBI->connect("dbi:mysql:mythconverg:127.0.0.1", root, gatech, { RaiseError => 1, AutoCommit => 0 }); my $sqldel = $dbh->prepare( q{ DELETE FROM program WHERE chanid > 1100 AND chanid < 1200 }); $sqldel->execute(); $dbh->commit; $dbh->disconnect; printf("done.\n"); exit(); } my $dbh = DBI->connect("dbi:mysql:mythconverg:127.0.0.1", root, gatech, { RaiseError => 1, AutoCommit => 0 }); # Get the webpage (note: webpage is hardcoded) printf("Downloading PPV information..."); my $ua = new LWP::UserAgent; my $request = new HTTP::Request(GET => 'http://www.geocities.com/paglierani/showlist.jpg'); my $response = $ua->request($request); printf("done.\n"); printf("Updating database with PPV information..."); # For each line, look to see if it begins sections; process sections accordingly # Sections are: channels (has channels) ; shows (has shows) foreach (split /\n/, $response->content()) { if ($_ eq "proc addChannels { } {") { $addchans = 1; } elsif ($_ eq "proc addPrograms { } {") { $addprogs = 1; } if ($addchans == 1 && $_ ne "proc addChannels { } {" and $_ ne "}") { $_ =~ s/^\S+\s+//; $channum = substr($_, 3); $channum =~ s/\s+$//; } elsif ($addprogs == 1 && $_ ne "proc addPrograms { } {" && $_ ne "}") { ($foo1, $ProgramID, $foo3, $SingTitle, $foo5) = split ' ', $_; (@ProgramArray) = split '{', $_; (@MiscArray) = split '"', $_; ($ProgramTitle, $ProgramDescription) = @ProgramArray[1,-1]; if (index($SingTitle, '{') == -1) { $ProgramTitle = $SingTitle; } else{ ($ProgramTitle) = split '}', $ProgramTitle; } ($ProgramDescription) = split '}', $ProgramDescription; (@ProgramGenre) = split ' ', $MiscArray[1]; $ProgramStars = $MiscArray[7]; $ProgramYear = $MiscArray[3]; $ProgramID = substr($ProgramID,2); @progtit[$ProgramID] = $ProgramTitle; @progdesc[$ProgramID] = $ProgramDescription; if ($ProgramGenre[0] == 1) { $ProgramGenre[0] = $ProgramGenre[1]; } @proggen[$ProgramID] = $categories[$ProgramGenre[0]]; @progstar[$ProgramID] = "0"; if ($ProgramStars) { @progstar[$ProgramID] = ($ProgramStars / 4); } @progyear[$ProgramID] = "0"; if ($ProgramStars) { @progyear[$ProgramID] = $ProgramYear; } } #Turn off section designations, which stops processing the section. if ($_ eq "}" && $addchans == 1 ) { $addchans = 0; } elsif ($_ eq "}" && $addprogs == 1 ) { $addprogs = 0; } } foreach (split /\n/, $response->content()) { if ($_ eq "proc addPrograms { } {") { $addprogs = 1; } if (index($_, 'ads ') != -1 && $addprogs != 1) { (@RawPrograms) = split ' ', $_; ($ChannelNum, $ProgDate, $ProgStart, $ProgDur, $ProgPoint) = @RawPrograms[2,3,4,5,6]; $ProgPoint = substr($ProgPoint, 2); $ChannelNum = substr($ChannelNum, 3) + 1000; $ProgStart = $ProgDate * 86400 + $ProgStart; $ProgStop = $ProgStart + $ProgDur; $StartTime = strftime ("%Y%m%d%H%M%S %Z", localtime($ProgStart)); $StopTime = strftime ("%Y%m%d%H%M%S %Z", localtime($ProgStop)); my $sqladd = $dbh->prepare( q{ INSERT INTO program (chanid,starttime,endtime,title,description,subtitle,category,stars,airdate) VALUES (?,?,?,?,?,?,"",?,?) }); $sqladd->execute($ChannelNum,$StartTime,$StopTime,@progtit[$ProgPoint],@progdesc[$ProgPoint],$proggen[$ProgPoint],$progstar[$ProgPoint],$progyear[$ProgPoint]); $dbh->commit; } } $dbh->disconnect; printf("done.\n");