Exemple #1
0
def _artistMatchFromTokens(tokens):
    m = mbw.mbrainzWrapper()
    pops = []
    entries = []

    for t in tokens:
        pops.append((t,wordUseCount(t,'artist',m)))
    tokens_s = sorted(pops, key = lambda x: x[1])
    for i in range(len(tokens_s)):
        word = tokens_s[i][0]
        if i == 0:
            m.query("""
create temporary table matched_artists as
select artist.id as art_id, artist.name as art_name, artist.gid as gid
from artist, artistwords, wordlist
where artistwords.artistid = artist.id
and artistwords.wordid = wordlist.id
and wordlist.word = %(word)s;
""",
                    {"word":word})
        else:
            m.query("""
delete
from matched_artists
using
(select count( wordid ), art_name
from
  ( 
  select *
  from 
  matched_artists 
  LEFT OUTER JOIN 
      (select * 
           from artistwords RIGHT JOIN wordlist
                          ON ( artistwords.wordid = wordlist.id)  
                          where word = %(word)s ) as firstjoin
   
   ON ( art_id = artistid )
  ) as joined
group by art_name) as counted
where counted.count = 0
and counted.art_name = matched_artists.art_name
""",
                    {'word':word})

    d = m.queryToDict("select * from matched_artists")  
    m.close()
    entries.extend(d)   
    return entries
Exemple #2
0
def matchArtistString(artist):
    
    matchType= 'fast'
    if matchType == 'fast':
        tokens = tokenize(artist)
        matches = _artistMatchFromTokens(tokens)
    elif matchType == 'trgm':
        m = mbw.mbrainzWrapper()
        match_limit = .4     
        d = m.queryToDict("""
select set_limit( .6 );
select gid, id, name
from artist
where name %% %(artist_name)s;
""",{'match_limit':match_limit,'artist_name':artist})
        m.close()
        matches = d
    
    return matches
Exemple #3
0
    def addmeta(self):
        mdb = swrap.sqliteWrapper(qc.query('music_dbfile'))
        tracks = mdb.queryToDict("""
SELECT gid, id from tracklist
""")
        mbw = mbwrap.mbrainzWrapper()
        #meta fields:
        #list, gid, name, number, length, album, artist
        out =[]
        for t in tracks:


#METADATA GATHERING LOOP!

            d = mbw.queryToDict("""
SELECT 
 track.name as track_name,
 track.length as track_length,
 albumjoin.sequence as track_number,
 artist.name as artist_name,
 album.name as album_name,
 artist.gid as artist_gid,
 album.gid as album_gid
FROM
 album, artist, track, albumjoin
WHERE
 track.artist=artist.id AND
 albumjoin.track=track.id AND
 albumjoin.album=album.id AND
 track.gid= %(track_gid)s
LIMIT 1;
"""
                                , params={'track_gid':t['gid']} )
            r = d[0]


            mdb.query('INSERT OR IGNORE INTO artist(name,gid) values( :artist_name, :artist_gid);',params = {'artist_name':r['artist_name'],
                                 'artist_gid':r['artist_gid']})


            ans=mdb.queryToDict('select id from artist where gid= :artist_gid;' ,params = {'artist_gid':r['artist_gid']})
            artist_id = ans[0]['id']


            mdb.query('INSERT OR IGNORE INTO album(name,gid,artist) values( :album_name, :album_gid,:artist_id);'
                      ,params = {'album_name':r['album_name'],
                                 'artist_id':artist_id,
                                 'album_gid':r['album_gid']})

            album_id = mdb.queryToDict('SELECT id FROM album WHERE gid = :album_gid',params = {'album_gid':r['album_gid']})[0]['id']

            artist_id = mdb.queryToDict('''
SELECT id 
FROM artist 
WHERE gid = :artist_gid''',params = {'artist_gid':r['artist_gid']})[0]['id']

            mdb.query("""
INSERT OR IGNORE INTO 
 track(listing, gid, name, number, length, album, artist) 
 values(:track_id, :track_gid,:track_name, :track_number, :track_length, :album_id, :artist_id)"""
                      ,params={'album_id':album_id,
                                'artist_id':artist_id,
                                'track_number':r['track_number'],
                                'track_length':r['track_length'],
                                'track_name':r['track_name'],
                                'track_gid':t['gid'],
                                'track_id':t['id']})
                      
            
            mdb.query("""
INSERT OR IGNORE INTO 
albumjoin(track, album, artist)
values(:track_id, :album_id, :artist_id)
""",
                      params = {'album_id':album_id,
                                'artist_id':artist_id,
                                'track_id':t['id']})
            
        mdb.commit()
        d = mdb.queryToDict("SELECT name FROM artist")
        mdb.close()
        mbw.close()
        strout = ''
        for i in d:
            strout = strout + i['name']
        return sjson.dumps(strout)