From: achbed Date: Wed, 19 Nov 2014 20:48:19 +0000 (-0600) Subject: Added ability to export json data as well as RSS feeds X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=6bcffb63f385d47e09c82e8eeecdc1bc3f761572;p=deefuzzer.git Added ability to export json data as well as RSS feeds Added ability to selectively enable/disable json or RSS output Renamed tag to RSS reads from tag if no tag is present (for backwards compatibility) Signed-off-by: achbed --- diff --git a/deefuzzer/station.py b/deefuzzer/station.py index 6cb020c..b9b1810 100644 --- a/deefuzzer/station.py +++ b/deefuzzer/station.py @@ -72,6 +72,8 @@ class Station(Thread): record_mode = 0 run_mode = 1 station_dir = None + feed_json = 0 + feed_rss = 1 def __init__(self, station, q, logger, m3u): Thread.__init__(self) @@ -145,20 +147,30 @@ class Station(Thread): self.channel_url = self.server_url + self.channel.mount # RSS - if 'rss' in self.station: - if 'mode' in self.station['rss']: - self.rss_mode = int(self.station['rss']['mode']) + rss_options = {} + if 'feed' in self.station: + rss_options['rss'] = self.station['feed'] + elif 'rss' in self.station: + rss_options['rss'] = self.station['rss'] + + self.rss_media_url = self.channel.url + '/media/' + + if 'rss' in rss_options: + if 'mode' in rss_options['rss']: + self.rss_mode = int(rss_options['rss']['mode']) else: self.rss_mode = 0 - self.rss_dir = self.station['rss']['dir'] - self.rss_enclosure = self.station['rss']['enclosure'] - - if 'media_url' in self.station['rss']: - self.rss_media_url = self.station['rss']['media_url'] - if not self.rss_media_url: - self.rss_media_url = self.channel.url + '/media/' - else: - self.rss_media_url = self.channel.url + '/media/' + self.rss_dir = rss_options['rss']['dir'] + self.rss_enclosure = int(rss_options['rss']['enclosure']) + if 'json' in rss_options['rss']: + self.feed_json = int(rss_options['rss']['json']) + if 'rss' in rss_options['rss']: + self.feed_rss = int(rss_options['rss']['rss']) + + if 'media_url' in rss_options['rss']: + self.rss_media_url = rss_options['rss']['media_url'] + if not self.rss_media_url: + self.rss_media_url = self.channel.url + '/media/' self.base_name = self.rss_dir + os.sep + self.short_name + '_' + self.channel.format self.rss_current_file = self.base_name + '_current.xml' @@ -472,8 +484,10 @@ class Station(Thread): _date_now = datetime.datetime.now() date_now = str(_date_now) media_absolute_playtime = _date_now + json_data = [] for media in media_list: + json_item = {} media_stats = os.stat(media.media) media_date = time.localtime(media_stats[8]) media_date = time.strftime("%a, %d %b %Y %H:%M:%S +0200", media_date) @@ -487,6 +501,7 @@ class Station(Thread): if media.metadata[key] != '': media_description += media_description_item % (key.capitalize(), media.metadata[key]) + json_item[key] = media.metadata[key] media_description += '' title = media.metadata['title'] @@ -522,15 +537,26 @@ class Station(Thread): guid = Guid(media_link), pubDate = media_date,) ) + json_data.append(json_item) rss = RSS2(title = channel_subtitle, link = self.channel.url, description = self.channel.description.decode('utf-8'), lastBuildDate = date_now, items = rss_item_list,) - f = open(rss_file, 'w') - rss.write_xml(f, 'utf-8') - f.close() + + if self.feed_rss: + f = open(rss_file, 'w') + rss.write_xml(f, 'utf-8') + f.close() + + if self.feed_json: + path, fn = os.path.split(rss_file) + base, ext = os.path.splitext(fn) + json_file = os.path.join(self.rss_dir, base + '.json') + f = open(json_file, 'w') + f.write(json.dumps(json_data, separators=(',',':'))) + f.close() def update_twitter(self, message): try: