Skip to content

Instantly share code, notes, and snippets.

@b441berith
Created January 29, 2014 11:50
Show Gist options
  • Save b441berith/8686394 to your computer and use it in GitHub Desktop.
Save b441berith/8686394 to your computer and use it in GitHub Desktop.
import ConfigParser
import os
import pylast
import sys
__author__ = 'ashuiskov'
TAG_WEIGHT_THRESHOLD = 50
ARTIST_MATCH_THRESHOLD = 0.5
CONFIG_CREDENTIALS_SECTION = 'Credentials'
config = ConfigParser.RawConfigParser()
config.read(os.path.expanduser('~/lastfm.cfg'))
apiKey = config.get(CONFIG_CREDENTIALS_SECTION, 'api_key')
apiSecret = config.get(CONFIG_CREDENTIALS_SECTION, 'api_secret')
username = config.get(CONFIG_CREDENTIALS_SECTION, 'username')
passwordHash = config.get(CONFIG_CREDENTIALS_SECTION, 'password_hash')
network = pylast.LastFMNetwork(api_key=apiKey, api_secret=apiSecret, username=username, password_hash=passwordHash)
def topArtistsForTag(tagName):
result = []
tag = network.get_tag(tagName)
for entry in tag.get_top_artists():
result.append(entry[0].name)
return result
def topTracksForTag(tagName):
result = []
tag = network.get_tag(tagName)
for entry in tag.get_top_tracks():
result.append(entry[0])
return result
def getTopTagsForArtist(artistName):
result = []
artist = network.get_artist(artistName)
topTags = artist.get_top_tags()
for tag in topTags:
weight = int(tag[1])
if weight >= TAG_WEIGHT_THRESHOLD:
result.append(tag[0])
return result
def getSimilarArtists(artistName):
result = []
artist = network.get_artist(artistName)
similar = artist.get_similar()
for entry in similar:
match = float(entry[1])
if match >= ARTIST_MATCH_THRESHOLD:
result.append(entry[0])
return result
def printArtistsForTag():
list = topArtistsForTag(concatenateArgs())
for entry in list:
print entry
def printTracksForTag():
list = topTracksForTag(concatenateArgs())
for entry in list:
print entry
def printTagsForArtist():
list = getTopTagsForArtist(concatenateArgs())
for entry in list:
print entry
def printSimilarArtist():
list = getSimilarArtists(concatenateArgs())
for entry in list:
print entry
def concatenateArgs():
if sys.argv.__len__() < 3:
print 'No tag name specified'
exit()
concat = ''
for i in range(2, sys.argv.__len__()):
if concat.__len__() > 0:
concat += ' '
concat += sys.argv[i]
return concat
def help():
print 'usage: lastfmtool [command] [args]'
print 'Commands:'
for func in functions:
print "\t" + func
functions = {'fortag': printArtistsForTag,
'tagtracks': printTracksForTag,
'tags': printTagsForArtist,
'similar': printSimilarArtist,
'--help': help}
def main():
if sys.argv.__len__() == 1:
help()
return
try:
func = functions[sys.argv[1]]
func()
except IndexError:
print 'No such method'
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment