1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
#! /usr/bin/env python
#
# Retrieving an artist's relations to other artists and URLs.
#
# Usage:
# python getrelations.py artist-id
#
# Interesting Artist IDs for testing:
# http://musicbrainz.org/artist/ea4dfa26-f633-4da6-a52a-f49ea4897b58
# http://musicbrainz.org/artist/172e1f1a-504d-4488-b053-6344ba63e6d0
# http://musicbrainz.org/artist/c0b2500e-0cef-4130-869d-732b23ed9df5
#
# $Id: getrelations.py 201 2006-03-27 14:43:13Z matt $
#
import sys
import logging
import musicbrainz2.webservice as ws
import musicbrainz2.model as m
logging.basicConfig()
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
if len(sys.argv) < 2:
print "Usage: getrelations.py artist-id"
sys.exit(1)
q = ws.Query()
try:
# The result should include all relations to other artists and also
# relations to URLs.
#
inc = ws.ArtistIncludes(artistRelations=True, urlRelations=True)
artist = q.getArtistById(sys.argv[1], inc)
except ws.WebServiceError, e:
print 'Error:', e
sys.exit(1)
print "Id :", artist.id
print "Name :", artist.name
print
#
# Get the artist's relations to URLs (m.Relation.TO_URL) having the relation
# type 'http://musicbrainz.org/ns/rel-1.0#Wikipedia'. Note that there could
# be more than one relation per type. We just print the first one.
#
rels = artist.getRelations(m.Relation.TO_URL, m.NS_REL_1+'Wikipedia')
if len(rels) > 0:
print 'Wikipedia:', rels[0].targetId
print
#
# List discography pages for an artist.
#
for rel in artist.getRelations(m.Relation.TO_URL, m.NS_REL_1+'Discography'):
print 'Discography:', rel.targetId
print
#
# If the artist is a group, list all members.
#
if artist.type == m.Artist.TYPE_GROUP:
allMembers = artist.getRelations(m.Relation.TO_ARTIST,
m.NS_REL_1+'MemberOfBand')
uri = m.NS_REL_1+'Additional'
coreMembers = [r for r in allMembers if uri not in r.attributes]
additionalMembers = [r for r in allMembers if uri in r.attributes]
print 'Group members:'
for rel in coreMembers:
start = rel.beginDate or 'foundation'
end = rel.endDate or 'end'
print '\t%s (%s to %s)' % (rel.target.name, start, end)
print
print 'Additional members:'
for rel in additionalMembers:
print '\t', rel.target.name
# EOF
|