make a best-effort guess at a youtube link for tracks

This commit is contained in:
Erin 2018-02-25 16:49:29 -06:00
parent 3a1f3321bf
commit 46719ac9ba
3 changed files with 42 additions and 9 deletions

View file

@ -1,6 +1,11 @@
[np]
class = nowplaying.NowplayingBot
domain = ; FILL IN ;
client_id = ; FILL IN ;
client_secret = ; FILL IN ;
access_token = ; FILL IN ;
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 ;

View file

@ -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)

View file

@ -1,2 +1,3 @@
pylast==2.1.0
ananas==1.0.0b5
ananas==1.0.0b5
requests==2.18.4