uploading show description, show name in filename, tags ready to be uploaded for creator need to figure out what to upload.
165 lines
4.3 KiB
Python
165 lines
4.3 KiB
Python
#!/usr/local/bin/python
|
|
import urllib
|
|
import logging
|
|
import logging.config
|
|
import json
|
|
import time
|
|
import datetime
|
|
import os
|
|
import sys
|
|
|
|
from configobj import ConfigObj
|
|
|
|
from poster.encode import multipart_encode
|
|
from poster.streaminghttp import register_openers
|
|
import urllib2
|
|
|
|
from subprocess import call
|
|
from threading import Thread
|
|
|
|
# For RabbitMQ
|
|
from kombu.connection import BrokerConnection
|
|
from kombu.messaging import Exchange, Queue, Consumer, Producer
|
|
|
|
from api_clients import api_client
|
|
|
|
# configure logging
|
|
try:
|
|
logging.config.fileConfig("logging.cfg")
|
|
except Exception, e:
|
|
print 'Error configuring logging: ', e
|
|
sys.exit()
|
|
|
|
# loading config file
|
|
try:
|
|
config = ConfigObj('config.cfg')
|
|
except Exception, e:
|
|
print 'Error loading config file: ', e
|
|
sys.exit()
|
|
|
|
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]))
|
|
|
|
class ShowRecorder(Thread):
|
|
|
|
def __init__ (self, show_instance, filelength, filename, filetype):
|
|
Thread.__init__(self)
|
|
self.api_client = api_client.api_client_factory(config)
|
|
self.filelength = filelength
|
|
self.filename = filename
|
|
self.filetype = filetype
|
|
self.show_instance = show_instance
|
|
|
|
def record_show(self):
|
|
|
|
length = str(self.filelength)+".0"
|
|
filename = self.filename.replace(" ", "-")
|
|
filepath = "%s%s.%s" % (config["base_recorded_files"], filename, self.filetype)
|
|
|
|
command = "ecasound -i alsa -o %s -t:%s" % (filepath, length)
|
|
args = command.split(" ")
|
|
|
|
print "starting record"
|
|
|
|
code = call(args)
|
|
|
|
print "finishing record, return code %s" % (code)
|
|
|
|
return code, filepath
|
|
|
|
def upload_file(self, 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, 'show_instance': self.show_instance})
|
|
|
|
self.api_client.upload_recorded_show(datagen, headers)
|
|
|
|
def run(self):
|
|
code, filepath = self.record_show()
|
|
|
|
if code == 0:
|
|
self.upload_file(filepath)
|
|
else:
|
|
print "problem recording show"
|
|
|
|
|
|
class Record():
|
|
|
|
def __init__(self):
|
|
self.api_client = api_client.api_client_factory(config)
|
|
self.shows_to_record = {}
|
|
|
|
def process_shows(self, shows):
|
|
|
|
self.shows_to_record = {}
|
|
|
|
for show in shows:
|
|
show_starts = getDateTimeObj(show[u'starts'])
|
|
show_end = getDateTimeObj(show[u'ends'])
|
|
time_delta = show_end - show_starts
|
|
|
|
self.shows_to_record[show[u'starts']] = [time_delta, show[u'instance_id'], show[u'name']]
|
|
|
|
|
|
def check_record(self):
|
|
|
|
tnow = datetime.datetime.now()
|
|
sorted_show_keys = sorted(self.shows_to_record.keys())
|
|
|
|
start_time = sorted_show_keys[0]
|
|
next_show = getDateTimeObj(start_time)
|
|
|
|
print next_show
|
|
print tnow
|
|
|
|
delta = next_show - tnow
|
|
min_delta = datetime.timedelta(seconds=60)
|
|
|
|
if delta <= min_delta:
|
|
print "sleeping %s seconds until show" % (delta.seconds)
|
|
time.sleep(delta.seconds)
|
|
|
|
show_length = self.shows_to_record[start_time][0]
|
|
show_instance = self.shows_to_record[start_time][1]
|
|
show_name = self.shows_to_record[start_time][2]
|
|
filename = show_name+"-"+start_time
|
|
|
|
show = ShowRecorder(show_instance, show_length.seconds, filename, filetype="mp3")
|
|
show.start()
|
|
|
|
#remove show from shows to record.
|
|
del self.shows_to_record[start_time]
|
|
|
|
|
|
def get_shows(self):
|
|
|
|
shows = self.api_client.get_shows_to_record()
|
|
|
|
if len(shows):
|
|
self.process_shows(shows)
|
|
self.check_record()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
recorder = Record()
|
|
|
|
while True:
|
|
recorder.get_shows()
|
|
time.sleep(5)
|
|
|
|
|
|
|
|
|
|
|