请选择 进入手机版 | 继续访问电脑版

SSS安全论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

产品
产品
团队
团队
版规
版规
查看: 762|回复: 11

[原创文章] 用Python来实现一个简易的MP3播放器(采用酷我接口,包含接口分析)

[复制链接]
  • TA的每日心情
    无聊
    2016-3-18 20:51
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2016-7-28 11:24:30 | 显示全部楼层 |阅读模式
    本帖最后由 突突兔 于 2016-7-28 11:27 编辑

    首先要找个下载音乐的地方

    我看酷我不错,就它了。

                                   
    登录/注册后可看大图




                                   
    登录/注册后可看大图


    http://sou.kuwo.cn/ws/NSearch?type=all&catalog=yueku2016&key=晚期拖延症患者
    key要等于搜索的内容,
    http://www.kuwo.cn/bang/content? ... 5%9b%bdTOP%e6%a6%9c
    这个是top榜单。
    写个渣渣正则处理下
    <a href="http://www.kuwo.cn/yinyue/.*?/" title=".*?" target="_blank">

                                   
    登录/注册后可看大图

    可以看到他不知道从那里得到这个下载连接的。

                                   
    登录/注册后可看大图

    最后追踪到了这个链接。
    http://antiserver.kuwo.cn/anti.s?rid=MUSIC_1034671&format=aac|mp3&response=url&type=convert_url
    rid=MUSIC_要下载的歌曲ID

    format=要下载的歌曲的格式

    由于设计上是MP3

    所以要让
    format=mp3



    http://antiserver.kuwo.cn/anti.s?rid=MUSIC_音乐ID&format=mp3&response=url&type=convert_url


                                   
    登录/注册后可看大图


    成功获取到下载链接。

    大概原理就是这个。

    代码如下:
    [Python] 纯文本查看 复制代码
    #!/usr/bin/env python
    #coding:utf8
    from __future__ import division
    import os
    import urllib
    import urllib2
    import re
    import sys
    reload(sys)
    sys.setdefaultencoding('utf8')
    wenjian = os.path.exists(os.getcwd() + "\\temp\\")
    if wenjian == False:
        os.mkdir(os.getcwd() + "\\temp\\")
    a = raw_input(
        "Please enter the operation instructions: \r\n1. Search music \r\n2. View music charts \r\n")
    
    def baofang(ID):
        gqurl = urllib2.urlopen("http://antiserver.kuwo.cn/anti.s?rid=MUSIC_" + ID
                                + "&format=mp3&response=url&type=convert_url")
        url = gqurl.read()
        urllib.urlretrieve(url, os.getcwd() + '\\temp\\' + ID + '.mp3')
        filename = os.getcwd() + '\\temp\\' + str(ID) + '.mp3'
        print "Download to : " + filename
        print "Exit, please press Ctrl + Alt keys."
        playMP3(filename)
    
    def playMP3(name):
        import pymedia.audio.acodec as acodec
        import pymedia.muxer as muxer
        import pymedia.audio.sound as sound
        import time, wave, string, os
    
        name1 = str.split(name, '.')
        # Open demuxer first
        dm = muxer.Demuxer(name1[-1].lower())
        dec = None
        snd = None
        s = " "
        f = open(name, 'rb')
        while len(s):
            s = f.read(20000)
            if len(s):
                frames = dm.parse(s)
                for fr in frames:
                    if dec == None:
                        # Open decoder
                        dec = acodec.Decoder(dm.streams[0])
                    r = dec.decode(fr[1])
                    if r and r.data:
                        if snd == None:
                            snd = sound.Output(r.sample_rate, r.channels,
                                               sound.AFMT_S16_LE)
    
                        snd.play(r.data)
    
        if type(snd) == 'pymedia.audio.sound.Output':
            while snd.isPlaying():
                time.sleep(0.05)
    
    def search():
        search = raw_input("Enter the song you want to search for:\r\n")
        qwe = search.decode('gbk', 'replace')
        url = "http://sou.kuwo.cn/ws/NSearch?type=all&catalog=yueku2016&key=" + urllib.quote(
            qwe.encode('utf-8', 'replace'))
        response = urllib2.urlopen(url)
        data = response.read()
        pattern = re.compile(
            '''<a href="http://www.kuwo.cn/yinyue/.*?/" title=".*?" target="_blank">''',
            re.S)
        text = re.findall(pattern, data)
        for element in text:
            print(element.encode('cp936'))
        ID = str(raw_input("Please enter the music you need to play ID:\r\n"))
        baofang(ID)
        return data
    
    def catlist():
        response = urllib2.urlopen(
            "http://www.kuwo.cn/bang/content?name=%e4%b8%ad%e5%9b%bdTOP%e6%a6%9c")
        data = response.read()
        pattern = re.compile(
            '''<a href="http://www.kuwo.cn/yinyue/.*?/?catalog=yueku2016" target="_blank">.*?</a>''',
            re.S)
        text = re.findall(pattern, data)
        for element in text:
            print(element.encode('cp936'))
        ID = str(raw_input("Please enter the music you need to play ID:\r\n"))
        baofang(ID)
        return data
    
    switch = {'1': search, '2': catlist}
    
    def f(a):
        switch.get(a)()
    
    f(a)

    EXE版本下载地址:https://yunpan.cn/c6QsNFJmiI58B (提取码:c949)
    PY脚本下载地址:https://yunpan.cn/c6QsC9NsCgPFV (提取码:884a)
    如果转载请标明来源:http://ttt.sssie.com/post-25.html
    PS:在造这个播放器的时候最坑的就是编码问题了。py版的要装pymedia。
    顺便打个广告:本人博客新开张。欢迎访问和交换友情链接。
    地址:http://ttt.sssie.com/
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    前天 16:56
  • 签到天数: 185 天

    [LV.7]常住居民III

    发表于 2016-7-28 11:48:55 | 显示全部楼层
    可以,很强势,不过我说的是域名
  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 203 天

    [LV.7]常住居民III

    发表于 2016-7-28 12:21:32 | 显示全部楼层
    黑客一定是黑客。。。。。。。
  • TA的每日心情
    奋斗
    2017-1-21 20:52
  • 签到天数: 45 天

    [LV.5]常住居民I

    发表于 2016-7-28 13:32:53 | 显示全部楼层
    可以,这一波很基础
  • TA的每日心情
    擦汗
    15 小时前
  • 签到天数: 317 天

    [LV.8]以坛为家I

    发表于 2016-7-28 13:33:23 | 显示全部楼层
    看这域名我就知道你是黑阔
  • TA的每日心情
    开心
    4 天前
  • 签到天数: 244 天

    [LV.8]以坛为家I

    发表于 2016-7-28 16:04:47 | 显示全部楼层
    交换友链  加下Qq 1263615468
  • TA的每日心情
    开心
    2017-2-13 10:16
  • 签到天数: 231 天

    [LV.7]常住居民III

    发表于 2016-7-28 16:44:13 | 显示全部楼层
    老司机真会玩,,,
  • TA的每日心情
    奋斗
    2017-1-21 20:52
  • 签到天数: 45 天

    [LV.5]常住居民I

    发表于 2016-7-29 09:18:31 | 显示全部楼层
    学习一下
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2017-2-5 10:50
  • 签到天数: 158 天

    [LV.7]常住居民III

    发表于 2016-7-29 09:56:27 | 显示全部楼层
    黑客,  一定是黑客。
  • TA的每日心情
    奋斗
    2017-1-21 20:52
  • 签到天数: 45 天

    [LV.5]常住居民I

    发表于 2016-7-30 09:56:56 | 显示全部楼层
    学习一下
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    关注微信赢邀请码

    QQ|Archiver|手机版|网站地图|网页地图|SSS安全论坛 ( 黔ICP备15010987号  

    GMT+8, 2017-2-23 17:35 , Processed in 0.546485 second(s), 31 queries .

    Powered by SSS团队 X3.2

    © 2014-2015 Comsenz Inc.

    快速回复 返回顶部 返回列表