Created
January 29, 2014 11:50
-
-
Save b441berith/8686394 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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