吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6212|回复: 19
收起左侧

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

  [复制链接]
突突兔 发表于 2016-7-28 11:18
本帖最后由 突突兔 于 2016-7-28 11:26 编辑

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

我看酷我不错,就它了。

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

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

最后追踪到了这个链接。
http://antiserver.kuwo.cn/anti.s?rid=MUSIC_1034671&format=aac|mp3&response=url&type=convert_urlrid=MUSIC_要下载的歌曲IDformat=要下载的歌曲的格式
由于设计上是MP3所以要让format=mp3http://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  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  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/

免费评分

参与人数 6吾爱币 +3 热心值 +6 收起 理由
TBCCC + 1 + 1 谢谢@Thanks!
luoky7 + 1 + 1 我很赞同!
九度 + 1 + 1 有时间研究一下,谢楼主分享
q1928900702 + 1 不可打广告
北鱼何为 + 1 热心回复!
chen920117yong + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 突突兔 发表于 2016-7-31 18:59
testcrack 发表于 2016-7-28 15:23
print "Exit, please press Ctrl + Alt keys."

看到这样的打印函数,我就知道是python2.X的码,可惜我已 ...

是的python2.X的。
testcrack 发表于 2016-7-28 15:23
print "Exit, please press Ctrl + Alt keys."

看到这样的打印函数,我就知道是python2.X的码,可惜我已经全面转向python3.x了。
KaQqi 发表于 2016-7-28 11:29
我来看看看 发表于 2016-7-28 11:29
感谢分享
secflow 发表于 2016-7-28 11:42
非常感谢,谢谢楼主
夜引墨 发表于 2016-7-28 13:00
谢谢楼主的分享,拿去 研究
sumile 发表于 2016-7-28 15:21
不错不错,谢谢分享
Luck888 发表于 2016-7-28 16:46
向大神学习是我的福分,谢谢
新源易水 发表于 2016-7-28 18:05
我最近也在学python 有一个实例真是太好了
liubo961117 发表于 2016-7-28 18:25 来自手机
我表示没看懂
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 08:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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