Skip to content

Instantly share code, notes, and snippets.

@treyhunner
Created May 13, 2014 17:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save treyhunner/3f657e7d4d3a97d55a44 to your computer and use it in GitHub Desktop.
Save treyhunner/3f657e7d4d3a97d55a44 to your computer and use it in GitHub Desktop.
Find Creative Commons Music
#!/usr/bin/env python
"""
Find Creative Commons Music
Provide names of musical artists and the script returns any relevant URLs for
FreeMusicArchive.org, Jamendo.com, and Magnatune.com.
Usage::
$ ./findccmusic.py <artist name>...
Before using:
1. Set your `FreeMusicArchive.org API key`_
2. Set your `Jamendo.com API key`_
3. Download the Magnatune sqlite database and rename it to sqlite_maganatune.db
.. _FreeMusicArchive.org API key: http://freemusicarchive.org/api/agreement
.. _Jamendo.com API key: https://devportal.jamendo.com/
"""
from __future__ import unicode_literals
from __future__ import print_function
import json
import sqlite3
import sys
import requests
FMA_KEY = "YOUR FMA KEY"
JAMENDO_KEY = "YOUR JAMENDO KEY"
magnatune_conn = sqlite3.connect('sqlite_magnatune.db')
def find_on_fma(artist):
"""Return artist URL for FreeMusicArchive.org"""
r = requests.get("http://freemusicarchive.org/api/get/artists.json"
"?api_key={key}&artist_name={artist}"
.format(key=FMA_KEY, artist=artist))
r.raise_for_status()
response = json.loads(r.content)
if response['dataset']:
return response['dataset'][0]['artist_url']
def find_on_magnatune(artist):
"""Return artist URL for Magnatune.com"""
c = magnatune_conn.cursor()
c.execute("SELECT homepage from artists where artist = ?", (artist,))
results = c.fetchone()
if results:
return "http://magnatune.com/artists/{}".format(results[0])
def find_on_jamendo(artist):
"""Return artist URL for Jamendo.com"""
r = requests.get("http://api.jamendo.com/v3.0/artists/"
"?client_id={key}&format=json&name={artist}"
.format(key=JAMENDO_KEY, artist=artist))
r.raise_for_status()
response = json.loads(r.content)
if response['results']:
return response['results'][0]['shareurl']
def print_urls(artist):
urls = {}
urls['Magnatune'] = find_on_magnatune(artist)
urls['FreeMusicArchive'] = find_on_fma(artist)
urls['Jamendo'] = find_on_jamendo(artist)
for site, url in urls.items():
if url:
print("{}: {}".format(site, url))
if __name__ == "__main__":
for artist in sys.argv[1:]:
artist = artist.decode('utf-8')
print_urls(artist)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment