sintonia/python_apps/show-recorder/testrecordscript.py

132 lines
2.9 KiB
Python

#!/usr/local/bin/python
import urllib
import logging
import json
import time
import datetime
import os
from eci import *
from configobj import ConfigObj
from poster.encode import multipart_encode
from poster.streaminghttp import register_openers
import urllib2
# loading config file
try:
config = ConfigObj('config.cfg')
except Exception, e:
print 'Error loading config file: ', e
sys.exit()
shows_to_record = {}
def record_show(filelength, filename, filetype="mp3"):
length = str(filelength)+".0"
filename = filename.replace(" ", "-")
filepath = "%s%s.%s" % (config["base_recorded_files"], filename, filetype)
e = ECI()
e("cs-add play_chainsetup")
e("c-add 1st_chain")
e("ai-add alsa")
e("ao-add "+filepath)
e("cs-set-length "+length)
e("cop-select 1")
e("cs-connect")
e("start")
while 1:
time.sleep(1)
if e("engine-status") != "running":
break
e("stop")
e("cs-disconnect")
return filepath
def getDateTimeObj(time):
timeinfo = time.split(" ")
date = timeinfo[0].split("-")
time = timeinfo[1].split(":")
return datetime.datetime(int(date[0]), int(date[1]), int(date[2]), int(time[0]), int(time[1]), int(time[2]))
def process_shows(shows):
for show in shows:
show_starts = getDateTimeObj(show[u'starts'])
show_end = getDateTimeObj(show[u'ends'])
time_delta = show_end - show_starts
shows_to_record[show[u'starts']] = time_delta
def check_record():
tnow = datetime.datetime.now()
sorted_show_keys = sorted(shows_to_record.keys())
start_time = sorted_show_keys[0]
next_show = getDateTimeObj(start_time)
delta = next_show - tnow
if delta <= datetime.timedelta(seconds=60):
time.sleep(delta.seconds)
show_length = shows_to_record[start_time]
filepath = record_show(show_length.seconds, start_time)
upload_file(filepath)
def get_shows():
url = config["base_url"] + config["show_schedule_url"]
response = urllib.urlopen(url)
data = response.read()
response_json = json.loads(data)
shows = response_json[u'shows']
print shows
if len(shows):
process_shows(shows)
check_record()
def upload_file(filepath):
filename = os.path.split(filepath)[1]
# Register the streaming http handlers with urllib2
register_openers()
# headers contains the necessary Content-Type and Content-Length
# datagen is a generator object that yields the encoded parameters
datagen, headers = multipart_encode({"file": open(filepath, "rb"), 'name': filename})
url = config["base_url"] + config["upload_file_url"]
req = urllib2.Request(url, datagen, headers)
response = urllib2.urlopen(req).read().strip()
print response
if __name__ == '__main__':
while True:
get_shows()
time.sleep(30)