114网址导航豆瓣fm登陆
最热豆瓣fm登陆推荐
最新豆瓣fm登陆推荐
豆瓣fm登陆最热节目精选
大家还在听听了几年的豆瓣FM了,一直在尝试申请一个属于自己的小兆赫,但是每次都是拒绝,希望有经验人士能提供帮助,谢谢!
申请豆瓣个人兆赫 CV 不靠谱指南
by 白姑娘PLEASE NOTICE:
-你在豆瓣音乐的历史马克记录与评论记录是否丰沛;
-你在豆瓣 FM 的收听记录是否够证明你是一个有自己主见的音乐爱好者,行为是否较为主动(垃圾桶,红心,bypass等等);
-你是否是豆瓣音乐人,或者你是红人吗。题主要在现在申请,应该没当初那么简单了吧。虽然以上三条没有任何官方说法,豆瓣文案一向外表亲民内在高冷,但根据常识,这是是否开放给普通用户资源最简单的维度标尺。我只略略满足前两条,粉丝不足一百,收听记录一年不到也就一万多,但也信誓旦旦上了,写了真挚的 CV ,格式如下。第一段,中心句阐述自己是音乐咖。第二句用收听记录数据和马数据以及趋势表明自己是活跃用户,不是一时兴起;第二段,给你的兆赫起个名字,阐述你所偏爱的音乐流派,我选择写了个百字故事,请自行发挥。第三段,请描述申请初衷。鉴于豆瓣是产品上最了解『先打了江山再说』的互联网公司简直不能有之一,请把你的版图和热情井喷一下,题材风格文体字数不限。最后,说一声谢谢。-----十几个小时后不靠谱的白姑娘有了自己的电台。,在紫金港的床上跳起来差点撞天花板。其实写多少都不重要,一份简要的计划书只要能看出你的目的和可行性即可。最最决定性的除了 notice 里的第三条先天优势,前两条具有较高决定性。
做什么都不是一日之功啊,经营本身和决心有很大差别。
说到这里,我该去给我的电台拔草了。←_←Hope this would help you.最后的最后,请音乐组不要吐槽我,我爱你们。
楼主只是听了很多年的FM,不知道是否在音乐方面有了一定的感悟?&br&&br&比如在豆瓣音乐上是否写了一定量的乐评,是否有形成自己对音乐独特的品味?&br&&br&如果只是想建一个自己想听的歌曲频道,那红心兆赫还不能满足楼主么?&br&&br&如果还是想建一个兆赫和大家分享,楼上说得很好,可以讲一个你和音乐的故事,另外跟管理员明确的说明你要创建的兆赫的风格和特点, 会通过的,豆瓣鼓励这种分享
楼主只是听了很多年的FM,不知道是否在音乐方面有了一定的感悟? 比如在豆瓣音乐上是否写了一定量的乐评,是否有形成自己对音乐独特的品味? 如果只是想建一个自己想听的歌曲频道,那红心兆赫还不能满足楼主么? 如果还是想建一个兆赫和大家分享,楼上说得…
&p&写这个***的时候感觉自己很愧对于豆瓣。我的fm好荒凉啊…… 回到正题,来分享一下我的经验,就是讲故事,讲你和音乐的故事。当然你的故事首先要是真实的,这样才会打动人家。
写这个***的时候感觉自己很愧对于豆瓣。我的fm好荒凉啊…… 回到正题,来分享一下我的经验,就是讲故事,讲你和音乐的故事。当然你的故事首先要是真实的,这样才会打动人家。
已有帐号?
无法登录?
社交帐号登录
Self-actualized.2568人阅读
Python(40)
豆瓣并没有开放 douban.fm 的API
以下的分析只是通过抓包,并结合网上前人的研究,猜测参数的作用
通过python的requests模块来测试
根据Arguments构造传入参数结构体,发送http请求
获取到的是json数据,用json.loads()转成字典进行操作
使用 douban.fm 并不需要使用豆瓣的 OAuth 认证,只需要简单地把用户名密码 POST 过去,并保存 Token 和 Expire 即可。
Method: POST
Arguments:
app_name: radio_desktop_win
version: 100
email: 用户帐号
password: 明文密码
Header: Content-Type: application/x-www-form-urlencoded
Response ( application/json )
测试使用(发送http请求,获取对应url):
- 根据Arguments构造参数结构体,以Method的方式发送请求到URL
- 返回结果的text中存放着登录参数
#-*- coding: utf-8 -*-
import requests
import urllib
import json
# 构造Arguments中的传入参数结构体
login_data = {
'app_name': 'radio_desktop_win',
'version': '100',
'email': '',
'password': 'xxxxxxxx'
# 这里的Method是Post,则将结构体传入,按照Post方式发送
user_data = requests.post('/j/app/login',login_data)
udata = json.loads(user_data.text)
user_id = udata['user_id']
expire = udata['expire']
token = udata['token']
# 定义获取歌曲列表结构体
song_list = {
'app_name': 'radio_desktop_win',
'version': '100',
'user_id' : user_id,
'expire' : expire,
'token': token,
'type' : 'n',
'channel' : 0,
# 获取歌曲列表
url = '/j/app/radio/people?' + urllib.urlencode(song_list)
song = requests.get(url)
s = json.loads(song.text)
print s['song'][0]
print s['song'][0]['title']
登录成功(r的值为0)
"user_id": "&user_id&",
"err": "ok",
"token": "&token_string&",
"expire": "&expire_time_in_millisecond&",
"user_name": "xxx",
"email": "&user_account&"
登录失败(r为1,err会给出错误原因)
"err": "wrong_password"
在获得user_id,token和expire后,保存起来,在使用获取歌曲列表、红心等API时,把它们放到请求参数中即可
获取频道列表
这个接口获取的频道列表是一个比较固定的列表,并非douban.fm网页版上那么多样的列表。网页版的频道列表是直接服务器生成在HTML里面的,无法直接获得(可使用爬虫),但它的channel_id可以用,如有兴趣可把这些channel_id收集起来。
Method: GET
Arguments: None
Response ( application/json ):
"channels": [
"name": "私人兆赫",
"seq_id": 0,
"abbr_en": "My",
"channel_id": 0,
"name_en": "Personal Radio"
"name": "华语",
"seq_id": 1,
"abbr_en": "CH",
"channel_id": 1,
"name_en": "Chinese"
"name": "欧美",
"seq_id": 2,
"abbr_en": "EN",
"channel_id": 2,
"name_en": "Euro-American"
如上可看出,有频道名,有channel_id,这个id用于请求相应的歌曲列表。seq_id只是一个简单的列表排序index,可忽略
获取歌曲列表
歌曲列表的获取最为复杂,其参数也比较多
Method: GET
Arguments:..
Response ( application/json ):
所有的这些都会返回一个json字符串,其中都会包括歌曲列表(上面得到的歌曲URL,只会在一定时间内有效,过期之后就不能再访问了,因此猜测每次访问都返回一些歌曲就是想更新一下后面的曲库,因为当前这首不能播了,很可能后面的也不能播)。
r若为1即出错,err里面会写上出错原因,而r为0即调用成功。
其中的歌曲列表格式是
"version_max": 100,
"album": "/subject/5952615/",
"picture": "/mpic/s4616653.jpg",
"ssid": "e1b2",
"artist": "Bruno Mars / B.o.B",
"url": "//4a3de2e821ec76e6a2f35d/view/song/small/p1562725.mp3",
"company": "EMI",
"title": "Nothin' On You",
"rating_avg": 4.04017,
"length": 267,
"subtype": "",
"public_time": "2011",
"sid": "1562725",
"aid": "5952615",
"sha256": "611ac238e3bb0d5d69f17473",
"kbps": "64",
"albumtitle": "2011 Grammy Nominees",
参数都可以直接从名字看出其意义
- album 专辑跳转地址
- picture 专辑图片地址
- ssid 未知
- artist 艺术家
- url 歌曲的URL
- company 唱片公司
- title 歌曲名
- rating_avg 平均分数
- length 长度
- subtype 子类型(有些广告的字类型会是T)
- public_time 出版年份
- sid 歌曲id
- aid 专辑id
- kbps 码率
- albumtitle 专辑名
- like 是否已喜欢,0为false,1为true
获取歌曲URL后调用相应播放器播放,如mplayer
import requests
import urllib
import json
import subprocess
login_data = {
'app_name': 'radio_desktop_win',
'version': '100',
'email': '',
'password': 'xxxxxxx'
user_data = requests.post('/j/app/login',login_data)
udata = json.loads(user_data.text)
user_id = udata['user_id']
expire = udata['expire']
token = udata['token']
song_list = {
'app_name': 'radio_desktop_win',
'version': '100',
'user_id' : user_id,
'expire' : expire,
'token': token,
'type' : 'n',
'channel' : 0,
url = '/j/app/radio/people?' + urllib.urlencode(song_list)
song = requests.get(url)
songlist = json.loads(song.text)
for sdata in songlist['song']:
surl = sdata['url']
subprocess.call(["mplayer",surl], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:146331次
积分:2881
积分:2881
排名:第8660名
原创:126篇
转载:20篇
评论:54条
文章:20篇
阅读:34456
(4)(2)(1)(3)(5)(1)(1)(5)(5)(3)(22)(2)(6)(6)(17)(23)(1)(1)(1)(11)(14)(12)