json/getschedules startime and endtime (1 Viewer)

rasmu

New Member
November 14, 2014
3
0
44
Home Country
Albania Albania
Hello,

I'm making a python script to power on my HTPC from my raspberry in the case there is a recording to start.

I succeeded to get back the schedules :
Code:
import urllib2, base64, traceback, sys, json
from wakeonlan import wol
from datetime import datetime, date, time

username = ''
password = ''
result = ''
power = False

datenow = datetime.now()

try:
        request = urllib2.Request("http://192.168.0.32:4322/MPExtended/TVAccessService/json/GetSchedules")
        base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
        request.add_header("Authorization", "Basic %s" % base64string)
        result = urllib2.urlopen(request)
        records = json.loads(result.read())
        print records

        for record in records:
                #/json/GetScheduleById
                print record['Title']
                print record['StartTime']
                print record['EndTime']

                print "\n"

        power = False

        if power == True:
                wol.send_magic_packet('ec.a8.6b.ff.1b.33')
                print 'powerup'
   
except Exception, e:
        print e
        sys.exit(0)



raw_input()

Here's the ouput :
[{u'Title': u'Tennis (Masters ATP 2014)', u'PreRecordInterval': 0, u'IsChanged': False, u'MaxAirings': 2147483647, u'Priority': 0, u'BitRateMode': 3, u'KeepMethod': 3, u'PostRecordInterval': 0, u'ScheduleType': 0, u'EndTime': u'/Date(1416002400000+0100)/', u'ChannelId': 24, u'ParentScheduleId': -1, u'DoesUseEpisodeManagement': False, u'IsManual': False, u'Directory': u'', u'RecommendedCard': -1, u'Series': False, u'Canceled': u'/Date(946681200000+0100)/', u'StartTime': u'/Date(1415994300000+0100)/', u'KeepDate': u'/Date(1447530300000+0100)/', u'QualityType': 7, u'Quality': 73, u'Id': 3}]
Tennis (Masters ATP 2014)
/Date(1415994300000+0100)/
/Date(1416002400000+0100)/

I want to use get starttime and endtime fields.
How can I convert starttime and endtime in python date ?

edit : ok, I saw from MediaPortal.bundle that he just strip the string with [6:-7].

Thanks in advance.
 
Last edited:

rasmu

New Member
November 14, 2014
3
0
44
Home Country
Albania Albania
Here is the final script :
Code:
# -*- coding: utf-8 -*-

import urllib2, base64, sys, json, logging
from wakeonlan import wol
from datetime import datetime, date, time

#MPExtended credentials
username = ''
password = ''

result = ''
online = False
startrecord = False
records = None
num_records = 0

datenow = datetime.now()
file_recordings = 'recordings.txt'
file_log = 'log.txt'


# Create logger
logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s %(levelname)s %(message)s',
                    filename=file_log,
                    filemode='a')


# Try to get the recordings from Mediaportal
try:
    # Computer is powered on
    request = urllib2.Request("http://192.168.0.32:4322/MPExtended/TVAccessService/json/GetSchedules")
    base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
    request.add_header("Authorization", "Basic %s" % base64string)  
    result = urllib2.urlopen(request, timeout=2)  
   
    f = open(file_recordings, 'w')
    f.write(result.read())
    f.close()

    logging.info("Populate recordings from Mediaportal done")
    online = True
       
except Exception, e:
    # computer is away
    logging.info("Can't connect to computer : " + str(e))
   

# Try to get the recordings from file
try:
    f = open(file_recordings, 'r')
    records = json.loads(f.read())
    f.close()
    num_records = len(records)
    if num_records > 0:
        logging.info(str(num_records) + " recordings found from local file")
    else:
        logging.info("No recording were from local file")
   
except Exception, e:
    logging.info("Can't find recording from local file : " + str(e))


# We found recordings and computer is off
if num_records > 0:
    if online == False:
        for record in records:
            starttime = datetime.fromtimestamp(int(record['StartTime'][6:-7])/1000.0)              
            endtime = datetime.fromtimestamp(int(record['EndTime'][6:-7])/1000.0)

            diff = starttime - datenow
            mindiff = divmod(diff.days * 86400 + diff.seconds, 60)[0]

            # We power on computer if the recording starts in between 1 and 5 minutes
            if mindiff >= 1 and mindiff <= 5:
                startrecord = True
                logging.info("We can power on computer, the recording " + record['Title'] + " " + str(starttime) + "->" + str(endtime) + " will start soon")
                break
            else:
                logging.info("This recording "  + record['Title'] + " " + str(starttime) + "->" + str(endtime) + " won't start soon")

        # We power on computer
        if startrecord == True:      
            wol.send_magic_packet('ec.a8.6b.ff.1b.33')
            logging.info("Powering computer...")
        else:
            logging.info("We found recordings, computer is off but no need to power on")
    else:
        logging.info("We found recordings but computer is already on")
else:
    logging.info("We didn't find recording")

logging.info("End of program\n")
 
Last edited:

mm1352000

Retired Team Member
  • Premium Supporter
  • September 1, 2008
    21,577
    8,224
    Home Country
    New Zealand New Zealand
    Is there a reason why you don't use the TV Server PowerScheduler plugin? It will sleep and wake TV Server automatically for recordings.
     

    rasmu

    New Member
    November 14, 2014
    3
    0
    44
    Home Country
    Albania Albania
    Yes because I want to power on in S5 state not in S3.
    But I can use powerscheduler to go to S5 when the pc is idle.
     
    Last edited:

    Users who are viewing this thread

    Top Bottom