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())
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
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
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
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
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
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
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
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
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
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
def test_song_detail_resolver(song=Song()): resolver = NeteaseResolver.song_detail_resolver(song, SONG_DETAIL_RESULT) print(resolver.to_string()) return resolver
def test_song_search_resolver(song=Song()): resolver = NeteaseResolver.song_search_resolver(song, SONG_SEARCH_RESULT) print(resolver.to_string()) return resolver
def test_song_lyric_resolver(song=Song()): resolver = NeteaseResolver.song_lyric_resolver(song, SONG_LYRICS_RESULT) print(resolver.to_string()) return resolver
def test_song_url_resolver(song=Song()): resolver = NeteaseResolver.song_url_resolver(song, SONG_URL_RESULT) print(resolver.to_string()) return resolver