From 46719ac9babc7414f1cb927131284f70b0303d78 Mon Sep 17 00:00:00 2001 From: Erin Date: Sun, 25 Feb 2018 16:49:29 -0600 Subject: [PATCH] make a best-effort guess at a youtube link for tracks --- config.cfg.example | 13 +++++++++---- nowplaying.py | 35 +++++++++++++++++++++++++++++++---- requirements.txt | 3 ++- 3 files changed, 42 insertions(+), 9 deletions(-) diff --git a/config.cfg.example b/config.cfg.example index 2813740..e6c3620 100644 --- a/config.cfg.example +++ b/config.cfg.example @@ -1,6 +1,11 @@ [np] class = nowplaying.NowplayingBot -domain = ; FILL IN ; -client_id = ; FILL IN ; -client_secret = ; FILL IN ; -access_token = ; FILL IN ; \ No newline at end of file +domain = ; fill in ; +client_id = ; fill in ; +client_secret = ; fill in ; +access_token = ; fill in ; +lastfm_api_key = ; fill in ; +lastfm_api_secret = ; fill in ; +lastfm_username = ; fill in ; +lastfm_password_hash = ; fill in ; +youtube_key = ; fill in ; diff --git a/nowplaying.py b/nowplaying.py index 22e07b1..8c7d1e2 100644 --- a/nowplaying.py +++ b/nowplaying.py @@ -1,12 +1,29 @@ +import requests from pylast import LastFMNetwork from ananas import PineappleBot, ConfigurationError, interval +def search_youtube(q, max_results=1, key=None): + if not key: + raise ValueError('search_youtube() requires a key to authorize with the Youtube v3 API') + + r = requests.get('https://www.googleapis.com/youtube/v3/search', + params={'q': q, 'type': 'video', 'maxResults': max_results, + 'part': 'snippet', 'key': key}) + + print(r.json()) + + items = [] + for item in r.json()['items']: + items.append({'id': item['id']['videoId'], 'title': item['snippet']['title']}) + + return items + class NowplayingBot(PineappleBot): def init(self): self.last_posted_track = None def start(self): - for k in ['lastfm_api_key', 'lastfm_api_secret', 'lastfm_username', 'lastfm_password_hash']: + for k in ['lastfm_api_key', 'lastfm_api_secret', 'lastfm_username', 'lastfm_password_hash', 'youtube_key']: if k not in self.config: raise ConfigurationError(f"NowplayingBot requires a '{k}'") @@ -27,9 +44,19 @@ class NowplayingBot(PineappleBot): return else: self.last_posted_track = currently_playing.__hash__() + + # make a best-effort guess at the youtube link for this track + yt_search = search_youtube(str(currently_playing), key=self.config.youtube_key) + yt_link = f"https://www.youtube.com/watch?v={yt_search[0]['id']}" - post = '''\ -#np #nowplaying {artist} - {track}'''.format(artist=currently_playing.get_artist().get_name(properly_capitalized=True), - track=currently_playing.get_title()) + # template the post + post_template = '''\ +#np #nowplaying #fediplay {artist} - {track} +{yt_link}''' + + post = post_template.format(artist=currently_playing.get_artist().get_name(properly_capitalized=True), + track=currently_playing.get_title(), yt_link=yt_link) + + # do the thing self.mastodon.toot(post) diff --git a/requirements.txt b/requirements.txt index 153d072..79bec8c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ pylast==2.1.0 -ananas==1.0.0b5 \ No newline at end of file +ananas==1.0.0b5 +requests==2.18.4 \ No newline at end of file