from clarifai.client import ClarifaiApi
from IPython.display import Image
import requests
import json
from rauth import OAuth2Service
import time
from random import choice as rc
from random import sample as rs
import re
from pprint import pprint
import webbrowser
# GENIUS_CLIENT_ID =
# GENIUS_CLIENT_SECRET =
# genius = OAuth2Service(
# client_id=GENIUS_CLIENT_ID,
# client_secret=GENIUS_CLIENT_SECRET,
# name='genius',
# authorize_url='https://api.genius.com/oauth/authorize',
# access_token_url='https://api.genius.com/oauth/token',
# base_url='https://api.genius.com'
# )
# redirect_uri = 'http://lexography.org'
# params = {
# 'client_id': GENIUS_CLIENT_ID,
# 'redirect_uri': redirect_uri,
# 'scope': 'me',
# 'state': str(time.time()),
# 'response_type': 'code'
# }
# auth_url = genius.get_authorize_url(**params)
# print auth_url
# genius_code =
# data = {
# "code": genius_code,
# "client_id": GENIUS_CLIENT_ID,
# "client_secret": GENIUS_CLIENT_SECRET,
# "redirect_uri": redirect_uri,
# "response_type": genius_access_token,
# "grant_type": "authorization_code"
# }
# # genius_session = genius.get_auth_session(data=data)
# response = requests.post('https://api.genius.com/oauth/token', data=data)
# genius_access_token = response.json()['access_token']
genius_access_token = 'ACCESS_TOKEN_GOES_HERE'
clarifai_api = ClarifaiApi()
def get_tag_conf(fp):
fileObj = open(fp)
result = clarifai_api.tag_images(fileObj)
resultObj = result['results'][0]
tags = resultObj['result']['tag']['classes']
confs = resultObj['result']['tag']['probs']
print zip(tags, confs)
return tags
def genius_search(tags):
access_token = genius_access_token
payload = {
'q': ' '.join(tags),
'access_token': access_token
}
endpt = 'http://api.genius.com/search'
response = requests.get(endpt, params=payload)
results = response.json()
hits = results['response']['hits']
artists_titles = []
for h in hits:
hit_result = h['result']
if hit_result['url'].endswith('lyrics'):
artists_titles.append(
(hit_result['primary_artist']['name'], hit_result['title'])
)
return artists_titles
def spotify_search(query):
endpt = "https://api.spotify.com/v1/search"
payload = {
'q': query,
'type': 'track'
}
response = requests.get(endpt, params=payload)
result = response.json()
result_zero = result['tracks']['items'][0]
return result_zero['external_urls']['spotify']
def chunks(l, n):
"""Yield successive n-sized chunks from l."""
for i in xrange(0, len(l), n):
yield l[i:i+n]
def img_to_spotify(fn):
tags = get_tag_conf(fn)
for tag_chunk in chunks(tags,3):
print tag_chunk
artists_titles = genius_search(tag_chunk)
for artist, title in artists_titles:
print artist, title
try:
result_url = spotify_search(artist+' '+title)
except IndexError:
pass
else:
return result_url
def main(fn):
tgt_url = img_to_spotify(fn)
print tgt_url
webbrowser.open(tgt_url)
main('putin.jpg')
Image('putin.jpg')
main('cat.jpg')
Image('cat.jpg')
main('landscape.jpg')
Image('landscape.jpg')
main('street.jpg')
Image('street.jpg')