From d16a266539469f09604c3ab4766033b935c6363d Mon Sep 17 00:00:00 2001 From: Fergal Moran Date: Mon, 12 Oct 2015 22:04:00 +0100 Subject: [PATCH] Added twitter feed --- ice_relay.py | 17 ++++++++++++++++- requirements.txt | 1 + server.py | 5 +++++ util/__init__.py | 0 util/social.py | 19 +++++++++++++++++++ 5 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 util/__init__.py create mode 100644 util/social.py diff --git a/ice_relay.py b/ice_relay.py index 539c4a8..8a5bb65 100644 --- a/ice_relay.py +++ b/ice_relay.py @@ -5,6 +5,7 @@ import urllib import shout import urllib2 import requests +from util.social import Twitter BUF_LEN = 4096 @@ -37,6 +38,12 @@ class IceRelay(Thread): self.channel.port = int(options['ice_port']) self.channel.user = options['ice_user'] self.channel.password = options['ice_password'] + + self.twitter_consumer_key = options['twitter_consumer_key'] + self.twitter_consumer_secret = options['twitter_consumer_secret'] + self.twitter_access_token = options['twitter_access_token'] + self.twitter_access_token_secret = options['twitter_access_token_secret'] + self.channel.public = 1 if self.channel.format == 'mp3': self.channel.audio_info = { @@ -142,6 +149,15 @@ class IceRelay(Thread): logging.debug("Playing: {}".format(item['description'])) self.stream = self.file_read_remote(item['url']) + if self.twitter_access_token and self.twitter_access_token_secret and \ + self.twitter_consumer_secret and self.twitter_consumer_key: + try: + tw = Twitter(key=self.twitter_consumer_key, secret=self.twitter_consumer_secret, + access_key=self.twitter_access_token, access_secret=self.twitter_access_token_secret) + tw.post("Now playing on DSS Radio - {}\nhttp://deepsouthsounds.com/".format(item['description'])) + except Exception as ex: + logging.error("Unable to post to twitter: {}".format(ex)) + self._ended = False return True except Exception as ex: @@ -155,7 +171,6 @@ class IceRelay(Thread): now_playing = self.get_next_play_item() if now_playing is not None: - for self.chunk in self.stream: try: self.channel.send(self.chunk) diff --git a/requirements.txt b/requirements.txt index 40ee6c4..af7a2e3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ +python-twitter twisted cython requests diff --git a/server.py b/server.py index 739bc7e..19ae517 100755 --- a/server.py +++ b/server.py @@ -71,6 +71,11 @@ define("ice_format", default='mp3', help="Format of the icecast server (mp3, vor define("ice_protocol", default='http', help="Protocol (currently only http)") define("api_host", default='api.deepsouthsounds.com', help="API Host for serving audio") +define("twitter_consumer_key", default='', help="Key for posting to twitter") +define("twitter_consumer_secret", default='', help="Secret for posting to twitter") +define("twitter_access_token", default='', help="Key for posting to twitter") +define("twitter_access_token_secret", default='', help="Secret for posting to twitter") + #tornado.options.parse_command_line() tornado.options.parse_config_file("dss.radio.conf") relay = IceRelay(options=options) diff --git a/util/__init__.py b/util/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/util/social.py b/util/social.py new file mode 100644 index 0000000..2d35b62 --- /dev/null +++ b/util/social.py @@ -0,0 +1,19 @@ +import twitter +import logging + + +class Twitter: + def __init__(self, key, secret, access_key, access_secret): + self.consumer_key = key + self.consumer_secret = secret + self.access_token_key = access_key + self.access_token_secret = access_secret + self.api = twitter.Api(consumer_key=self.consumer_key, + consumer_secret=self.consumer_secret, + access_token_key=self.access_token_key, + access_token_secret=self.access_token_secret) + creds = self.api.VerifyCredentials() + logging.debug(creds) + + def post(self, message): + self.api.PostUpdate(message)