Example #1
0
def start():
    song = Song()
    song = test_song_search_resolver(song)
    song = test_song_url_resolver(song)
    song = test_song_lyric_resolver(song)
    song = test_song_detail_resolver(song)
    print(song.to_string())
Example #2
0
 def song(keyword, song=Song()):
     """
     song service
         获取音乐
         https://github.com/hanhuoer/Musicoo/wiki/web-api#5-%E8%8E%B7%E5%8F%96%E9%9F%B3%E4%B9%90
     :param keyword: 关键字
     :param song: [optional]
     :return:
     """
     search_results = MusicooService.songs_search(keyword, 0, 10)
     if search_results.get('count') > 0:
         song = Song.dict_to_object(search_results.get('data')[0], Song())
         song = MusicooService.song_url(song.get_id(), song)
         song = MusicooService.song_lyric(song.get_id(), song)
         song = MusicooService.song_detail(song.get_id(), song)
     else:
         pass
     return song
Example #3
0
 def song_detail(song_id, song=Song()):
     """
     song detail service
         获取音乐信息
         https://github.com/hanhuoer/Musicoo/wiki/web-api#4-%E9%9F%B3%E4%B9%90%E6%90%9C%E7%B4%A2
     :param song_id:
     :param song: [optional]
     :return:
     """
     netease = NetEase()
     result = netease.songs_detail(song_id)
     song = NeteaseResolver.song_detail_resolver(song, result)
     return song
Example #4
0
 def song_search(keyword, song=Song()):
     """
     song search service
         搜索音乐
         https://github.com/hanhuoer/Musicoo/wiki/web-api#3-%E9%9F%B3%E4%B9%90%E8%AF%A6%E6%83%85
     :param keyword:
     :param song:
     :return:
     """
     netease = NetEase()
     result = netease.songs_search(keyword)
     song = NeteaseResolver.song_search_resolver(song, result)
     return song
Example #5
0
 def song_url(song_id, song=Song()):
     """
     song url service
         获取音乐链接
         https://github.com/hanhuoer/Musicoo/wiki/web-api#1-%E8%8E%B7%E5%8F%96%E9%9F%B3%E4%B9%90%E9%93%BE%E6%8E%A5
     :param song_id:
     :param song:
     :return:
     """
     netease = NetEase()
     result = netease.songs_url(str(song_id))
     song = NeteaseResolver.song_url_resolver(song, result)
     return song
Example #6
0
 def song_lyric(song_id, song=Song()):
     """
     song lyric service
         获取歌词
         https://github.com/hanhuoer/Musicoo/wiki/web-api#2-%E6%AD%8C%E8%AF%8D
     :param song_id:
     :param song:
     :return:
     """
     netease = NetEase()
     result = netease.songs_lyric(str(song_id))
     song = NeteaseResolver.song_lyric_resolver(song, result)
     song.set_id(song_id)
     return song
Example #7
0
    def songs_search_resolver(json={}):
        """
        解析音乐的搜索结果
            重点拿到 id 就好了,其余的交给 detail 去解析
        :param song:
        :param json:
        :return:
        """
        result = {'data': [], 'count': 0}

        try:
            if json.get('code') is 200:
                songs = json.get('result').get('songs')
                count = json.get('result').get('songCount')
                result['count'] = count

                for item in songs:
                    song = Song()
                    song.set_id(item.get('id'))
                    song.set_name(item.get('name'))
                    song.set_picture_url(item.get('al').get('picUrl'))
                    song.set_duration(item.get('dt'))
                    name = ''
                    ars = item.get('ar')
                    for ar in ars:
                        if len(ars) - 1 is ars.index(ar):
                            name += ar.get('name')
                        else:
                            name += ar.get('name') + '/'
                    song.set_artist(name)

                    album = Album()
                    album.set_id(item.get('al').get('id'))
                    album.set_name(item.get('al').get('name'))
                    album.set_picture_url(item.get('al').get('picUrl'))

                    song.set_album(album)

                    privilege = Privilege.dict_to_object(
                        item.get('privilege'), Privilege())
                    song.set_privilege(privilege)

                    result.get('data').append(song.to_json())

        except Exception as e:
            raise NeteaseResolverException(
                'resolver exception; json: {}'.format(json))
        finally:
            return result
Example #8
0
 def song_lyric_resolver(song=Song(), json={}):
     """
     解析 netease 歌词 api 的响应结果
         可以拿到:原生歌词信息
     :param song: 解析结果
     :param json: netease api 响应 json 串
     :return: Song
     """
     try:
         lrc_json = json.get('lrc')
         if json is None or json.get('nolyric') is True:
             song.set_lyric(None)
         else:
             song.set_lyric(lrc_json.get('lyric'))
     except Exception as e:
         raise NeteaseResolverException(
             'resolver exception; song: {}, json: {}'.format(song, json))
     finally:
         return song
Example #9
0
    def song_search_resolver(song=Song(), json={}):
        """
        解析音乐的搜索结果
            重点拿到 id 就好了,其余的交给 detail 去解析
        :param song:
        :param json:
        :return:
        """
        try:
            json = json.get('result')
            json = json.get('songs')
            if isinstance(json, list) and len(json) > 0:
                json = json[0]

            song.set_id(json.get('id'))
        except Exception as e:
            raise NeteaseResolverException(
                'resolver exception; song: {}, json: {}'.format(song, json))
        finally:
            return song
Example #10
0
    def song_detail_resolver(song=Song(), json={}):
        """
        解析歌曲详情
            这里可以拿到:音乐名,音乐id,音乐时长,艺人,专辑名,专辑图片,专辑id
        :param song:
        :param json:
        :return:
        """
        try:
            json = json.get('songs')

            if isinstance(json, list) and len(json) > 0:
                json = json[0]

            album_json = json.get('al')
            artist_json = json.get('ar')
            if isinstance(artist_json, list) and len(artist_json) > 0:
                artist_json = artist_json[0]

            song.set_name(json.get('name'))
            song.set_id(json.get('id'))
            song.set_duration(json.get('dt'))
            song.set_picture_url(album_json.get('picUrl'))
            song.set_artist(artist_json.get('name'))

            album = Album()
            album.set_id(album_json.get('id'))
            album.set_name(album_json.get('name'))
            album.set_artist(artist_json.get('name'))
            album.set_picture_url(album_json.get('picUrl'))
            song.set_album(album)

        except Exception as e:
            raise NeteaseResolverException(
                'resolver exception; song: {}, json: {}'.format(song, json))
        finally:
            return song
Example #11
0
    def song_url_resolver(song=Song(), json={}):
        """
        解析 netease 歌曲 api 的响应结果
            解析目标:音乐 id,音乐 url
        :param song: 解析结果
        :param json: netease api 响应 json 串
        :return: Song
        """
        try:
            json = json.get('data')

            if isinstance(json, list) and len(json) < 1:
                return song

            if isinstance(json, list) and len(json) > 0:
                json = json[0]

            song.set_id(json.get('id'))
            song.set_url(json.get('url'))
        except Exception as e:
            raise NeteaseResolverException(
                'resolver exception; song: {}, json: {}'.format(song, json))
        finally:
            return song
Example #12
0
def test_song_detail_resolver(song=Song()):
    resolver = NeteaseResolver.song_detail_resolver(song, SONG_DETAIL_RESULT)
    print(resolver.to_string())
    return resolver
Example #13
0
def test_song_search_resolver(song=Song()):
    resolver = NeteaseResolver.song_search_resolver(song, SONG_SEARCH_RESULT)
    print(resolver.to_string())
    return resolver
Example #14
0
def test_song_lyric_resolver(song=Song()):
    resolver = NeteaseResolver.song_lyric_resolver(song, SONG_LYRICS_RESULT)
    print(resolver.to_string())
    return resolver
Example #15
0
def test_song_url_resolver(song=Song()):
    resolver = NeteaseResolver.song_url_resolver(song, SONG_URL_RESULT)
    print(resolver.to_string())
    return resolver