Beispiel #1
0
 def test_update_music(self):
     title = 'music_title'
     artist = 'music_artist'
     album = 'music_album'
     company = 'music_company'
     public_time = '2013'
     kbps = '64'
     uuid = 'douban-uuid'
     music = add_music(title, artist, album, company,
                       public_time, kbps, self.cover, self.audio, uuid)
     self.cover.seek(0)
     self.audio.seek(0)
     music = get_music()[0]
     # exchange cover & audio
     update_music(music, title='new_title', artist='new_artist',
                  album='new_album', company='new_company', public_time='2014',
                  kbps='128', cover=self.audio, audio=self.cover, uuid='new_douban-uuid')
     music = get_music()[0]
     assert music.title == 'new_title'
     assert music.artist == 'new_artist'
     assert music.album == 'new_album'
     assert music.company == 'new_company'
     assert music.public_time == '2014'
     assert music.kbps == '128'
     self.cover.seek(0)
     self.audio.seek(0)
     assert music.cover.read() == self.audio.read()
     assert music.audio.read() == self.cover.read()
     assert music.uuid == 'new_douban-uuid'
Beispiel #2
0
 def test_add_music(self):
     title = 'music_title'
     artist = 'music_artist'
     album = 'music_album'
     company = 'music_company'
     public_time = '2013'
     kbps = '64'
     uuid = 'douban-uuid'
     music = add_music(title, artist, album, company,
                       public_time, kbps, self.cover, self.audio, uuid)
     try:
         add_music(title, artist, album, company,
                   public_time, kbps, self.cover, self.audio, uuid)
     except mongoengine.errors.NotUniqueError:
         pass
     assert len(get_music(key=music.key)) == 1
     music = get_music()[0]
     assert music.title == 'music_title'
     assert music.artist == 'music_artist'
     assert music.album == 'music_album'
     assert music.company == 'music_company'
     assert music.public_time == '2013'
     assert music.kbps == '64'
     self.cover.seek(0)
     self.audio.seek(0)
     assert music.cover.read() == self.cover.read()
     assert music.audio.read() == self.audio.read()
     assert music.uuid == 'douban-uuid'
Beispiel #3
0
 def test_delete(self):
     self.login_as_admin()
     music = add_music('title', 'artist', 'album', 'company',
                       '2001', '64', self.cover, self.audio, 'uuid')
     music_key = music.key
     assert len(get_music(key=music_key)) == 1
     self.app.delete('/api/music/%s/' % (music_key))
     assert len(get_music(key=music_key)) == 0
Beispiel #4
0
 def test_update_music_by_channel(self):
     assert login(), 'check the DOUBAN_USER_NAME, DOUBAN_USER_PASSWORD in config.py'
     assert len(update_channel_list()) > 0
     assert len(get_music()) == 0
     channel = get_channel()[0]
     music_list = update_music_by_channel(channel, 1)
     assert len(music_list) == 1
     assert len(get_music()) == 1
     channel = get_channel()[0]
     assert len(channel.music_list) == 1
Beispiel #5
0
 def test_delete_music(self):
     title = 'music_title'
     artist = 'music_artist'
     album = 'music_album'
     company = 'music_company'
     public_time = '2013'
     kbps = '64'
     uuid = 'douban-uuid'
     music = add_music(title, artist, album, company,
                       public_time, kbps, self.cover, self.audio, uuid)
     assert len(get_music()) == 1
     music = get_music()[0]
     delete_music(music)
     assert len(get_music()) == 0
Beispiel #6
0
def get_user_favor(user, start, end):
    """return music info
    """
    favors = user.favor[start:end]
    new_favors = []
    for favor in favors:
        music = get_music(key=favor)[0]
        new_favors.append(music)
    return new_favors
Beispiel #7
0
def get_user_favor(user, start, end):
    '''return music info
    '''
    favors = user.favor[start: end]
    new_favors = []
    for favor in favors:
        music = get_music(key=favor)[0]
        new_favors.append(music)
    return new_favors
Beispiel #8
0
 def test_get_music(self):
     title = 'music_title'
     artist = 'music_artist'
     album = 'music_album'
     company = 'music_company'
     public_time = '2013'
     kbps = '64'
     uuid = 'douban-uuid'
     for i in range(10):
         add_music(title, artist, album, company, public_time,
                   kbps, self.cover, self.audio, uuid + str(i))
     assert len(get_music(start=0, end=5)) == 5
Beispiel #9
0
def get_user_history(user, start, end):
    """return as: date, op, music_key, music_title, music_cover
    """
    historys = user.history[start:end]
    new_historys = []
    for history in historys:
        music = get_music(key=history[2])[0]
        history.append(music.title)
        history.append(music.cover)
        new_historys.append(
            {"date": history[0], "op": history[1], "key": history[2], "title": history[3], "cover": history[4]}
        )
    return new_historys
Beispiel #10
0
def get_user_history(user, start, end):
    '''return as: date, op, music_key, music_title, music_cover
    '''
    historys = user.history[start: end]
    new_historys = []
    for history in historys:
        music = get_music(key=history[2])[0]
        history.append(music.title)
        history.append(music.cover)
        new_historys.append({'date': history[0],
                             'op': history[1],
                             'key': history[2],
                             'title': history[3],
                             'cover': history[4]})
    return new_historys
Beispiel #11
0
 def get(self):
     args = MusicQueryArgs().args
     if args == {}:
         return marshal(get_music_status(), music_status_fields)
     return marshal(get_music(**args), music_fields)
Beispiel #12
0
 def delete(self, key):
     music = get_music(key=key)[0]
     delete_music(music)
Beispiel #13
0
def get_music_by_channel(channel, num):
    num = min(len(channel.music_list), num)
    music_list = random.sample(channel.music_list, num)
    return [get_music(key=each)[0] for each in music_list]
Beispiel #14
0
def _update_channel_once(channel, max_num=10):
    '''update music in channel. max is the max number it will update
    return updated music
    please login before this function'''
    global _user_id, _token, _expire
    # TODO
    # maybe need a better method to assert and get cid
    assert channel.uuid.startswith(DOUBAN_CHANNEL_UUID_FORMAT.split('-')[0])
    cid = int(channel.uuid.split('-')[1])
    if channel.music_list == []:
        payload = {'app_name': DOUBAN_SPIDER_NAME,
                   'version': DOUBAN_SPIDER_VERSION,
                   'user_id': _user_id,
                   'expire': _expire,
                   'token': _token,
                   'channel': cid,
                   'type': 'n'}
    else:
        uuid = get_music(key=random.choice(channel.music_list))[0].uuid
        sid = uuid.split('-')[2]
        payload = {'app_name': DOUBAN_SPIDER_NAME,
                   'version': DOUBAN_SPIDER_VERSION,
                   'user_id': _user_id,
                   'expire': _expire,
                   'token': _token,
                   'channel': cid,
                   'type': 'p',
                   'sid': sid}

        # # mark as listened
        # mark_payload = {'app_name': DOUBAN_SPIDER_NAME,
        #                 'version': DOUBAN_SPIDER_VERSION,
        #                 'user_id': _user_id,
        #                 'expire': _expire,
        #                 'token': _token,
        #                 'channel': cid,
        #                 'type': 'e',
        #                 'sid': sid}
        # try:
        #     requests.get("http://www.douban.com/j/app/radio/people", params=mark_payload, timeout=5)
        # except:
        #     pass

        # # don't play again
        # mark_payload = {'app_name': DOUBAN_SPIDER_NAME,
        #                 'version': DOUBAN_SPIDER_VERSION,
        #                 'user_id': _user_id,
        #                 'expire': _expire,
        #                 'token': _token,
        #                 'channel': cid,
        #                 'type': 'b',
        #                 'sid': sid}
        # try:
        #     requests.get("http://www.douban.com/j/app/radio/people", params=mark_payload, timeout=5)
        # except:
        #     pass
    try:
        print 'getting list'
        r = requests.get("http://www.douban.com/j/app/radio/people", params=payload, timeout=5)
    except requests.exceptions.ConnectionError:
        traceback.print_exc()
        return []
    except requests.exceptions.Timeout:
        traceback.print_exc()
        return []
    r = json.loads(r.text)
    assert r['r'] == 0
    update_music = []
    #channel_music_list = channel.music_list
    for song in r['song']:
        try:
            uuid = DOUBAN_MUSIC_UUID_FORMAT % (int(song['aid']), int(song['sid']))
        except:
            # ads
            continue
        print uuid
        music = None
        if len(get_music(uuid=uuid)) == 0:
            try:
                print 'getting song'
                cover_fd = requests.get(song['picture'], stream=True, timeout=5).raw
                audio_fd = requests.get(song['url'], stream=True, timeout=5).raw
            except requests.exceptions.ConnectionError:
                traceback.print_exc()
                continue
            except requests.exceptions.Timeout:
                traceback.print_exc()
                continue
            music = add_music(song['title'], song['artist'], song['albumtitle'],
                              song['company'], song['public_time'], song['kbps'],
                              cover_fd, audio_fd, uuid)
        else:
            music = get_music(uuid=uuid)[0]
        if music and music.key not in channel.music_list:
            channel_music_list = channel.music_list
            channel_music_list.append(music.key)
            update_channel(channel, music_list=channel_music_list)
            update_music.append(music)
            if len(update_music) >= max_num:
                break
    return update_music
Beispiel #15
0
def MusicKey(key):
    try:
        assert get_music(key=key)[0]
    except:
        raise ValueError("Invalid Music Key")
    return key
Beispiel #16
0
 def patch(self, key):
     args = MusicPatchArgs().args
     music = get_music(key=key)[0]
     update_music(music, **args)
     music = get_music(key=key)[0]
     return music
Beispiel #17
0
def MusicKey(key):
    try:
        assert get_music(key=key)[0]
    except:
        raise ValueError("Invalid Music Key")
    return key