PlexWatch

From RARForge
Jump to navigation Jump to search

https://github.com/ljunkie/plexWatch/blob/master/README.md[edit]

It's impossible to keep all this info up to day. README above should be the most current.

plexWatch[edit]

Notify and Log Now Playing content from a Plex Media Server


Suported Push Notifications


What it does

  • Checks if a video has been started or stopped - log and notify
  • Notifies via prowl, pushover and/or a log file
  • backed by a sqlite DB (for state and history)
  • cli to view history and stats


Perl Requirements[edit]

  • LWP::UserAgent
  • WWW::Curl::Easy
  • XML::Simple
  • DBI
  • Time::Duration;
  • Time::ParseDate;
  • Pod::Usage; (perl base on rhel/centos)
  • Fcntl qw(:flock); (perl base)
  • Getopt::Long; (perl base)


Install[edit]

1) sudo wget -P /opt/plexWatch/ https://raw.github.com/ljunkie/plexWatch/master/plexWatch.pl

2) sudo chmod 755 /opt/plexWatch/plexWatch.pl

3) sudo nano /opt/plexWatch/plexWatch.pl

Modify Variables as needed: <source lang=perl> $server = 'localhost'; ## IP of PMS - or localhost $port = 32400; ## port of PMS $notify_started = 1; ## notify when a stream is started (first play) $notify_stopped = 1; ## notify when a stream is stopped </source> <source lang=perl>

    1. Give a user a more friendly name. I.E. REAL_USER will now be Frank
    2. OPTIONAL

my $user_display = {'REAL_USER1' => 'Frank',

                   'REAL_USER2' => 'Carrie',

}; </source> <source lang=text> $notify = {...

  • to enable a provider, i.e. file, prowl, pushover
  set 'enabled' => 1, under selected provider
  • Prowl: required you fill in 'apikey'
  • PushOver: required to fill in 'token' and 'user'

</source>


4) Install Perl requirements

  • Debian/Ubuntu - apt-get

<source> sudo apt-get install libwww-perl

sudo apt-get install libwww-curl-perl

sudo apt-get install libxml-simple-perl

sudo apt-get install libtime-duration-perl

sudo apt-get install libtime-modules-perl

sudo apt-get install libdbd-sqlite3-perl

sudo apt-get install perl-doc </source>

  • RHEL/Centos - yum

<source> yum -y install perl\(LWP::UserAgent\) perl\(WWW::Curl::Easy\) perl\(XML::Simple\) \

              perl\(DBI\) perl\(Time::Duration\)  perl\(Time::ParseDate\)

</source>


5) **run** the script manually to verify it works: /opt/plexWatch/plexWatch.pl

 * start video(s)
 * /opt/plexWatch/plexWatch.pl
 * stop video(s)
 * /opt/plexWatch/plexWatch.pl


6) setup cron - /etc/crontab <source>

  • * * * * root cd /opt/plexWatch && /opt/plexWatch/plexWatch.pl

</source>


Using the script[edit]

Sending Notifications[edit]

  • Follow the install guide above, and refer to step #5 and #6


Getting a list of watched shows[edit]

  • This will only work for shows this has already notified on.


list all watched shows - no limit[edit]

<source lang=text> /opt/git/plexWatch/plexWatch.pl --watched

================================== Watched ==================================[edit]

Date Range: Anytime through Now

User: jimbo

Wed Jun 26 15:56:09 2013: jimbo watched: South Park - A Nightmare on FaceTime [duration: 22 minutes, and 15 seconds]
Wed Jun 26 20:18:34 2013: jimbo watched: The Following - Whips and Regret [duration: 46 minutes, and 45 seconds]
Wed Jun 26 20:55:02 2013: jimbo watched: The Following - The Curse [duration: 46 minutes, and 15 seconds]

User: carrie

Wed Jun 24 08:55:02 2013: carrie watched: The Following - The Curse [duration: 46 minutes, and 25 seconds]
Wed Jun 26 20:19:48 2013: carrie watched: Dumb and Dumber [1994] [PG-13] [duration: 1 hour, 7 minutes, and 10 seconds]

</source>


list watched shows - limit by TODAY only[edit]

<source lang=text> /opt/git/plexWatch/plexWatch.pl --watched --start=today --start=tomorrow

================================== Watched ==================================[edit]

Date Range: Fri Jun 28 00:00:00 2013 through Sat Jun 29 00:00:00 2013

User: jimbo

Fri Jun 28 09:18:22 2013: jimbo watched: Married ... with Children - Mr. Empty Pants [duration: 1 hour, 23 minutes, and 20 seconds]

</source>


list watched shows - limit by a start and stop date[edit]

<source lang=text> /opt/git/plexWatch/plexWatch.pl --watched --start="2 days ago" --stop="1 day ago"

================================== Watched ==================================[edit]

Date Range: Fri Jun 26 00:00:00 2013 through Thu Jun 27 00:00:00 2013

User: Jimbo

Wed Jun 26 15:56:09 2013: rarflix watched: South Park - A Nightmare on FaceTime [duration: 22 minutes, and 15 seconds]
Wed Jun 26 20:18:34 2013: rarflix watched: The Following - Whips and Regret [duration: 46 minutes, and 45 seconds]
Wed Jun 26 20:55:02 2013: rarflix watched: The Following - The Curse [duration: 46 minutes, and 15 seconds]

User: Carrie

Wed Jun 26 20:19:48 2013: Carrie watched: Dumb and Dumber [1994] [PG-13] [duration: 1 hour, 7 minutes, and 10 seconds]

</source>


list watched shows: option -nogrouping vs default[edit]
--nogrouping[edit]

<source lang=text>

      Sun Jun 30 15:12:01 2013: exampleUser watched: Your Highness [2011] [R] [duration: 27 minutes and 54 seconds]
      Sun Jun 30 15:41:02 2013: exampleUser watched: Your Highness [2011] [R] [duration: 4 minutes and 59 seconds]
      Sun Jun 30 15:46:02 2013: exampleUser watched: Star Trek [2009] [PG-13] [duration: 24 minutes and 17 seconds]
      Sun Jun 30 17:48:01 2013: exampleUser watched: Star Trek [2009] [PG-13] [duration: 1 hour, 44 minutes, and 1 second]
      Sun Jun 30 19:45:01 2013: exampleUser watched: Your Highness [2011] [R] [duration: 1 hour and 24 minutes]

</source>


without --nogrouping [default][edit]

<source lang=text>

     Sun Jun 30 15:12:01 2013: exampleUser watched: Your Highness [2011] [R] [duration: 1 hour, 56 minutes, and 53 seconds]
     Sun Jun 30 15:46:02 2013: exampleUser watched: Star Trek [2009] [PG-13] [duration: 2 hours, 8 minutes, and 18 seconds]

</source>


--stats (users total watched time - and per day)[edit]

<source lang=text> ./plexWatch.pl --watched --stats --user frank --start="3 days ago"

  • Limiting results to frank
================================== Watched ==================================[edit]

Date Range: Sat Jun 29 00:00:00 2013 through Now

User: frank

Sat Jun 29 08:19:02 2013: frank watched: Lockout [2012] [PG-13] [duration: 1 hour, 38 minutes, and 59 seconds]
Sat Jun 29 10:02:01 2013: frank watched: Stand Up Guys [2012] [R] [duration: 1 hour and 30 minutes]
Sat Jun 29 11:33:01 2013: frank watched: Brave [2012] [PG] [duration: 1 hour and 24 minutes]
Sat Jun 29 12:58:01 2013: frank watched: The Last Stand [2013] [R] [duration: 1 hour and 39 minutes]
Sat Jun 29 14:38:03 2013: frank watched: Shaquille O'Neal Presents: All Star Comedy Jam: Live from South Beach [2009] [] [duration: 24 minutes and 58 seconds]
Sat Jun 29 15:08:01 2013: frank watched: Dredd [2012] [R] [duration: 1 hour, 29 minutes, and 55 seconds]
Sat Jun 29 16:43:01 2013: frank watched: Billabong Odyssey [2003] [PG] [duration: 1 hour, 15 minutes, and 1 second]
Sat Jun 29 18:00:01 2013: frank watched: The Bridge [2006] [R] [duration: 47 minutes]
Sat Jun 29 18:57:01 2013: frank watched: Snitch [2013] [PG-13] [duration: 2 hours and 27 minutes]
Sat Jun 29 21:26:01 2013: frank watched: The Host [2013] [PG-13] [duration: 2 hours and 8 minutes]
Sat Jun 29 23:35:02 2013: frank watched: Jim Gaffigan: Mr. Universe [2012] [NR] [duration: 57 minutes and 59 seconds]
Sun Jun 30 07:15:02 2013: frank watched: A Good Day to Die Hard [2013] [R] [duration: 1 hour, 31 minutes, and 59 seconds]
Sun Jun 30 15:12:01 2013: frank watched: Your Highness [2011] [R] [duration: 1 hour, 56 minutes, and 53 seconds]
Sun Jun 30 15:46:02 2013: frank watched: Star Trek [2009] [PG-13] [duration: 2 hours, 8 minutes, and 18 seconds]
Sun Jun 30 21:10:01 2013: frank watched: Judge Dredd [1995] [R] [duration: 1 hour, 41 minutes, and 1 second]
Mon Jul  1 20:53:02 2013: frank watched: Sinister [2012] [R] [duration: 1 hour, 44 minutes, and 59 seconds]
Mon Jul  1 22:40:01 2013: frank watched: Surviving the Holidays with Lewis Black [2009] [PG] [duration: 3 minutes]
Mon Jul  1 22:46:01 2013: frank watched: MegaMind [2010] [PG] [duration: 1 hour and 36 minutes]


================================== Stats ==================================[edit]

user: frank's total duration 1 day, 2 hours, 24 minutes, and 2 seconds

Sat Jun 29 2013: frank 15 hours, 41 minutes, and 52 seconds
Sun Jun 30 2013: frank 7 hours, 18 minutes, and 11 seconds
Mon Jul  1 2013: frank 3 hours, 23 minutes, and 59 seconds

</source>

--user ( limit output to one user )[edit]

  • works with --watched.

<source lang=text> ./plexWatch.pl --watched --stats --user frank --start="3 days ago" </source>


Help[edit]

<source lang=text> /opt/plexWatch/plexWatch.pl --help </source> <source lang=text> PLEXWATCH(1) User Contributed Perl Documentation PLEXWATCH(1)


NAME

      plexWatch.pl - Notify and Log ’Now Playing’ content from a Plex Media Server

SYNOPSIS

      plexWatch.pl [options]
        Options:
         -notify=...        Notify any content watched and or stopped [this is default with NO options given]
         -watched=...       print watched content
              -start=...         limit watched status output to content started AFTER/ON said date/time
              -stop=...          limit watched status output to content started BEFORE/ON said date/time
              -nogrouping        will show same title multiple times if user has watched/resumed title on the same day
         -watching=...      print content being watched
         -show_xml=...      show xml result from api query
         -debug=...         hit and miss - not very useful

OPTIONS

      -notify        This will send you a notification through prowl and/or pushover. It will also log the event to a file and to the database.  
                     This is the default if no options are given.
      -watched       Print a list of watched content from all users.
      -start         * only works with -watched
                     limit watched status output to content started AFTER said date/time
                     Valid options: dates, times and even fuzzy human times. Make sure you quote an values with spaces.
                        -start=2013-06-29
                        -start="2013-06-29 8:00pm"
                        -start="today"
                        -start="today at 8:30pm"
                        -start="last week"
                        -start=... give it a try and see what you can use :)
      -stop          * only works with -watched
                     limit watched status output to content started BEFORE said date/time
                     Valid options: dates, times and even fuzzy human times. Make sure you quote an values with spaces.
                        -stop=2013-06-29
                        -stop="2013-06-29 8:00pm"
                        -stop="today"
                        -stop="today at 8:30pm"
                        -stop="last week"
                        -stop=... give it a try and see what you can use :)
      -nogrouping    * only works with -watched
                     will show same title multiple times if user has watched/resumed title on the same day
                     with --nogrouping
                      Sun Jun 30 15:12:01 2013: exampleUser watched: Your Highness [2011] [R] [duration: 27 minutes and 54 seconds]
                      Sun Jun 30 15:41:02 2013: exampleUser watched: Your Highness [2011] [R] [duration: 4 minutes and 59 seconds]
                      Sun Jun 30 15:46:02 2013: exampleUser watched: Star Trek [2009] [PG-13] [duration: 24 minutes and 17 seconds]
                      Sun Jun 30 17:48:01 2013: exampleUser watched: Star Trek [2009] [PG-13] [duration: 1 hour, 44 minutes, and 1 second]
                      Sun Jun 30 19:45:01 2013: exampleUser watched: Your Highness [2011] [R] [duration: 1 hour and 24 minutes]
                     without --nogrouping [default]
                      Sun Jun 30 15:12:01 2013: exampleUser watched: Your Highness [2011] [R] [duration: 1 hour, 56 minutes, and 53 seconds]
                      Sun Jun 30 15:46:02 2013: exampleUser watched: Star Trek [2009] [PG-13] [duration: 2 hours, 8 minutes, and 18 seconds]
      -watching      Print a list of content currently being watched
      -show_xml      Print the XML result from query to the PMS server in regards to what is being watched. Could be useful for troubleshooting..
      -debug         This can be used. I have not fully set everything for debugging.. so it’s not very useful

DESCRIPTION

      This program will Notify and Log ’Now Playing’ content from a Plex
      Media Server

HELP

      nothing to see here.


perl v5.10.1 2013-06-28 PLEXWATCH(1) </source>


FAQ[edit]

when i run the script it says nothing has ever been watched[edit]

A: The script only works ongoing. I.E. Plex (as of now) does not keep a history of watched content. Keeping history one of the functions plexWatch does.
You will first have to start a video, then every minute via cron (install step #6) or other means, plexWatch will notice and log the start of a video. Now the video is logged as 'watching' or 'now playing'. Once the video is stopped and plexWatch runs again, it will pick up the show as 'stopped' - in turn this means you now have a 'watched' video.


Idea, thanks to https://github.com/vwieczorek/plexMon. I initially had a really horrible script used to parse the log files... http://IP:PORT/status/sessions is much more useful. This was whipped up in an hour or two.. I am sure it could use some more work.