Exemplo n.º 1
0
    def lyric(self, url):
        lyric = self.httpRequest(url, method='GET', headers=self.lyricHeader)

        with ignored():
            lyric = lyric.split('[offset:0]')[1]
            lyric = re.sub(r'<\d*?>', '', lyric)
            return lyric

        with ignored():
            loadingLyric = {}
            lyricTimes = []
            for i in lyric.split('\n'):
                oneLyric = re.findall(r'[0-9:\.]+', i)
                if not oneLyric or oneLyric == [':']:
                    continue
                else:
                    for x in oneLyric:
                        i = i.replace('[{}]'.format(x), '')
                    for x in oneLyric:
                        loadingLyric[x] = i
                    lyricTimes.extend(oneLyric)

            return '\n'.join([
                '[{time}]{content}'.format(time=x, content=loadingLyric.get(x))
                for x in sorted(lyricTimes)
            ])

        return False
Exemplo n.º 2
0
    def lyric(self, url):
        lyric = self.httpRequest(url, method='GET', headers=self.lyricHeader)

        with ignored():
            lyric = lyric.split('[offset:0]')[1]
            lyric = re.sub(r'<\d*?>', '', lyric)
            return lyric

        with ignored():
            loadingLyric = {}
            lyricTimes = []
            for i in lyric.split('\n'):
                oneLyric = re.findall(r'[0-9:\.]+', i)
                if not oneLyric or oneLyric == [':']:
                    continue
                else:
                    for x in oneLyric:
                        i = i.replace('[{}]'.format(x), '')
                    for x in oneLyric:
                        loadingLyric[x] = i
                    lyricTimes.extend(oneLyric)

            return '\n'.join(['[{time}]{content}'.format(time=x, content=loadingLyric.get(x)) for x in sorted(lyricTimes)])

        return False
Exemplo n.º 3
0
    def search(self, key):
        url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&'+\
                   'new_json=1&remoteplace=txt.yqq.center&searchid=43541888870417375&t=0&aggr=1'+\
                   '&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=50&'+\
                   'w={0}'.format(urllib.parse.quote(key))+\
                   '&g_tk=5381&jsonpCallback=searchCallbacksong6064&loginUin=0&hostUin=0&'+\
                   'format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0'

        response = self.httpRequest(url, method='GET')

        with ignored():
            data = json.loads(response[len('searchCallbacksong6064('):-len(')')])
            
            data = data['data']['song']

            newDatas = {}
            newDatas['songCount'] = data['curnum'] - 1
            songs = []
            for i in data['list']:
                songs.append({ 'name': i['name'],
                                                  'ar': [{'name': ';'.join([x['name'] for x in i['singer']])}],
                                                  'al': {'picUrl': self._getImgUrl(i['album']['mid'])},
                                                  'dt': i['interval'] * 1000,
                                                  'id': i['id'],
                                                  # 当然这里不是mp3,为了统一接口这样写。
                                                  'mp3Url': self._getSongUrl(i['mid']),
                                                  'lyric': 'qq'
                    })

            newDatas['songs'] = songs
            
            return newDatas 

        return False
Exemplo n.º 4
0
    def _getSongUrlVkey(self, mid):
        # 获取得到QQ音乐歌曲地址所需的vkey。
        # 返回的是vkey。

        vkey_url = 'https://c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg'
        params = {
            'g_tk': '5381',
            'jsonpCallback': 'MusicJsonCallback8571665793949388',
            'loginUin': '0',
            'hostUin': '0',
            'format': 'json',
            'inCharset': 'utf8',
            'outCharset': 'utf-8',
            'notice': '0',
            'platform': 'yqq',
            'needNewCode': '0',
            'cid': '205361747',
            'callback': 'MusicJsonCallback8571665793949388',
            'uin': '0',
            'songmid': mid,
            'filename': 'C400' + mid + '.m4a',
            'guid': '{}'.format(self.guid)
        }

        response = self.httpRequest(vkey_url, method="GET", headers=self.headers, params=params)

        with ignored():
            data = json.loads(response[response.find("{"):-1])

            return data['data']['items'][0]['vkey']

        return False
Exemplo n.º 5
0
    def getPlaylist(self, ids):
        url = 'https://shc.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&json=1&utf8=1&onlysong=0'+\
        '&disstid={0}&format=jsonp&g_tk=5381&jsonpCallback=playlistinfoCallback&loginUin=0&hostUin=0&'.format(ids)+\
        'format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0'
        
        response = self.httpRequest(url, method='GET', headers=self.playlistHeaders)
        with ignored():
            data = json.loads(response[len('playlistinfoCallback('):-len(')')])
            data = data['cdlist'][0]

            newDatas = {}
            newDatas['trackCount'] = data['total_song_num']
            newDatas['name'] = data['dissname']
            newDatas['creator'] = {'nickname': data['nick']}
            newDatas['description'] = data['desc']
            songs = data['songlist']

            # imgUrl = 'https://y.gtimg.cn/music/photo_new/'

            for i in songs:
                i['name'] = i['songname']
                i['artists'] = [{'name': ';'.join([x['name'] for x in i['singer']])}]
                i['duration'] = int(i['interval']) * 1000
                # i['album'] = {'blurPicUrl': imgUrl + 'T002R300x300M000' + i['albummid'] + '.jpg'}
                i['album'] = {'blurPicUrl': self._getImgUrl(i['albummid'])}
                # i['mp3Url'] = '{0}C400{1}.m4a?vkey={2}&guid={3}'.format(self.sip, i['songmid'], self.key, self.guid)
                i['mp3Url'] = self._getSongUrl(i['songmid'])
                i['lyric'] = 'qq'

            newDatas['tracks'] = songs

            return newDatas

        return False
Exemplo n.º 6
0
    def search(self, key):
        url = 'https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&' +\
            'new_json=1&remoteplace=txt.yqq.center&searchid=43541888870417375&t=0&aggr=1' +\
            '&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=50&' +\
            'w={0}'.format(urllib.parse.quote(key)) +\
            '&g_tk=5381&jsonpCallback=searchCallbacksong6064&loginUin=0&hostUin=0&' +\
            'format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0'

        response = self.httpRequest(url, method='GET')

        with ignored():
            data = json.loads(
                response[len('searchCallbacksong6064('):-1])

            data = data['data']['song']

            newDatas = {}
            newDatas['songCount'] = data['curnum'] - 1
            songs = []
            for i in data['list']:
                songs.append({'name': i['name'],
                              'ar': [{'name': ';'.join([x['name'] for x in i['singer']])}],
                              'al': {'picUrl': self._getImgUrl(i['album']['mid'])},
                              'dt': i['interval'] * 1000,
                              'id': i['id'],
                              # 当然这里不是mp3,为了统一接口这样写。
                              'mp3Url': i['mid'],
                              'lyric': 'qq'
                              })
            newDatas['songs'] = songs

            return newDatas

        return False
Exemplo n.º 7
0
    def httpRequest(self, *args, **kwargs):
        html = super(QQApi, self).httpRequest(*args, **kwargs)

        with ignored():
            return html.text

        return ''
Exemplo n.º 8
0
    def lyric(self, url):
        lyric = self.httpRequest(url, method='GET', headers=self.lyricHeader)

        with ignored():
            lyric = lyric.split('[offset:0]')[1]
            lyric = re.sub(r'<\d*?>', '', lyric)
            return lyric
        return False
Exemplo n.º 9
0
 def details_playlist(self, ids):
     """
         歌单详情。
     """
     url = 'http://music.163.com/api/playlist/detail?id={0}'.format(ids)
     html = self.httpRequest(url, method="GET", cookies=self.cookies)
     with ignored():
         return html['result']
     return False
Exemplo n.º 10
0
 def details_playlist(self, ids):
     """
         歌单详情。
     """
     url = 'http://music.163.com/api/playlist/detail?id={0}' .format(ids)
     html = self.httpRequest(url, method="GET", cookies=self.cookies)
     with ignored():
         return html['result']
     return False
Exemplo n.º 11
0
    def httpRequest(self, *args, **kwargs):
        html = super(QQApi, self).httpRequest(*args, **kwargs)

        logger.info("进行QQ Url请求, args: {0}, kwargs: {1}".format(args, kwargs))
        with ignored():
            return html.text

        logger.info("url: {0} 请求失败. Header: {1}".format(args[0], kwargs.get('headers')))
        return ''
Exemplo n.º 12
0
    def playList(self, page=1):
        url = 'http://api.xiami.com/web?v=2.0&app_key=1&_ksTS=1459927525542_91' + \
            '&page={0}&limit=30&callback=jsonp92&r=collect/recommend'.format(page)

        response = self.httpRequest(url, method='GET')

        with ignored():
            response = json.loads(response[len('jsonp92('):-len(')')])
            return response['data']

        return False
Exemplo n.º 13
0
    def playList(self, page=1):
        url = 'http://api.xiami.com/web?v=2.0&app_key=1&_ksTS=1459927525542_91' + \
            '&page={0}&limit=30&callback=jsonp92&r=collect/recommend'.format(page)
        
        response = self.httpRequest(url, method='GET')

        with ignored():
            response = json.loads(response[len('jsonp92('):-len(')')])
            return response['data']
        
        return False
Exemplo n.º 14
0
    def _get_qqtoken(self):
        token_url = 'http://base.music.qq.com/fcgi-bin/fcg_musicexpress.fcg?' + \
            'json=3&guid=3768717388&g_tk=938407465&loginUin=0&hostUin=0&' + \
            'format=jsonp&inCharset=GB2312&outCharset=GB2312&notice=0&' + \
            'platform=yqq&jsonpCallback=jsonCallback&needNewCode=0'
        
        data = self.httpRequest(token_url, method='GET', headers=self.tokenHeaders)
        
        with ignored():
            data = data[len("jsonCallback("):-len(");")]

            return json.loads(data)
        return {'key': '1', 'sip': ['']}
Exemplo n.º 15
0
    def httpRequest(self, *args, **kwargs):
        data = kwargs.get('data')
        if data:
            kwargs['data'] = encrypted_request(data)

        logger.info("进行网易云Url请求, args: {0}, kwargs: {1}".format(args, kwargs))
        html = super(NetEaseWebApi, self).httpRequest(*args, **kwargs)

        with ignored():
            return json.loads(html.text)

        logger.info("url: {0} 请求失败. Header: {1}".format(
            args[0], kwargs.get('headers')))
        return False
Exemplo n.º 16
0
    def singsUrl(self, ids: list):
        """
        2017/7/14更新。
        返回歌曲的URL。
        """
        data = {'csrf_token': '', 'ids': ids, 'br': 999000}
        url = "http://music.163.com/weapi/song/enhance/player/url"
        html = self.httpRequest(url, method='POST', data=data)
        with ignored():
            return html['data']

        logger.info('歌曲请求失败: ids {0}'.format(ids))

        return False
Exemplo n.º 17
0
    def httpRequest(self, *args, **kwargs):
        data = kwargs.get('data')
        if data:
            kwargs['data'] = encrypted_request(data)

        logger.info("进行网易云Url请求, args: {0}, kwargs: {1}".format(args, kwargs))
        html = super(NetEaseWebApi, self).httpRequest(*args, **kwargs)

        with ignored():
            return json.loads(html.text)

        logger.info("url: {0} 请求失败. Header: {1}".format(
            args[0], kwargs.get('headers')))
        return False
Exemplo n.º 18
0
    def singsUrl(self, ids: list):
        """
        2017/7/14更新。
        返回歌曲的URL。
        """

        data = {'csrf_token': '', 'ids': ids, 'br': 999000}
        url = "http://music.163.com/weapi/song/enhance/player/url"
        html = self.httpRequest(url, method='POST', data=data)
        with ignored():
            return html['data']

        logger.info('歌曲请求失败: ids {0}'.format(ids))

        return False
Exemplo n.º 19
0
    def playList(self, ein=29):
        """
        ein控制返回的歌单。
        29, 59, 89....
        """
        url = 'https://c.y.qq.com/splcloud/fcgi-bin/'+\
        'fcg_get_diss_by_tag.fcg?rnd=0.5136307078685405&g_tk=5381&'+\
        'jsonpCallback=getPlaylist&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8'+\
        '&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0&categoryId=10000000&'+\
        'sortId=5&sin=30&ein={0}'.format(ein)

        response = self.httpRequest(url, method='GET', headers=self.headers)

        with ignored():
            data = json.loads(response[len('getPlaylist('):-len(')')])
        
            return data['data']['list']
        
        return False
Exemplo n.º 20
0
    def playList(self, ein=29):
        """
        ein控制返回的歌单。
        29, 59, 89....
        """
        url = 'https://c.y.qq.com/splcloud/fcgi-bin/' +\
            'fcg_get_diss_by_tag.fcg?rnd=0.5136307078685405&g_tk=5381&' +\
            'jsonpCallback=getPlaylist&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8' +\
            '&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0&categoryId=10000000&' +\
            'sortId=5&sin=30&ein={0}'.format(ein)

        response = self.httpRequest(url, method='GET', headers=self.headers)

        with ignored():
            data = json.loads(response[len('getPlaylist('):-1])

            return data['data']['list']

        return False
Exemplo n.º 21
0
    def getPlaylist(self, ids):
        url = 'http://api.xiami.com/web?v=2.0&app_key=1&id={0}'.format(ids) + \
        '&_ksTS=1459928471147_121&callback=jsonp122&r=collect/detail'
        response = self.httpRequest(url, 'GET')

        with ignored():
            response = json.loads(response[len('jsonp122('):-len(')')])
            # 修改下返回的信息,与之前的网易云对应,这样就不用修改太多即可做扩展。
            data = response['data']
            data['name'] = data['collect_name']
            data['creator'] = {'nickname': data['user_name']}
            data['description'] = ''
            data['trackCount'] = data['songs_count']
            songs = data['songs']
            for i in songs:
                i['name'] = i['song_name']
                i['artists'] = [{'name': i['singers']}]
                i['duration'] = int(i['length']) * 1000
                i['album'] = {'blurPicUrl': i['album_logo']}

            data['tracks'] = songs
            return response['data']

        return False
Exemplo n.º 22
0
    def getPlaylist(self, ids):
        url = 'http://api.xiami.com/web?v=2.0&app_key=1&id={0}'.format(ids) + \
        '&_ksTS=1459928471147_121&callback=jsonp122&r=collect/detail'
        response = self.httpRequest(url, 'GET')

        with ignored():
            response = json.loads(response[len('jsonp122('):-len(')')])
            # 修改下返回的信息,与之前的网易云对应,这样就不用修改太多即可做扩展。
            data = response['data']
            data['name'] = data['collect_name']
            data['creator'] = {'nickname': data['user_name']}
            data['description'] = ''
            data['trackCount'] = data['songs_count']
            songs = data['songs']
            for i in songs:
                i['name'] = i['song_name']
                i['artists'] = [{'name':i['singers']}]
                i['duration'] = int(i['length'])*1000
                i['album'] = {'blurPicUrl': i['album_logo']}

            data['tracks'] = songs
            return response['data']

        return False