在v2ex的第一次发帖。
听CRI easyfm的飞鱼秀很多年,一直追求听完整的3个小时,但早上直播的时间经常不方便,所以这些年都下载回放。前些日子该节目改版,只能用easyfm的app听,通过抓包找到了音频的下载地址,但是文件名没什么规律,如:
4月10号的
http://123.56.91.34/Uploads/media/20150410/20150410134301_66025.mp3
4月13号的
http://123.56.91.34/Uploads/media/20150413/20150413140314_46952.mp3
在日期之后接了很多看似无关的数字。
每天的节目都要抓一下包也不是不可以,但是比较麻烦。有高人能看出后面这段数字的规律吗?多谢。
1
abelyao 2015-04-13 23:30:50 +08:00
猜测文件名应该是由 年月日时分秒_毫秒 组成的,属于有规律、但没连续性的,要抓取的话,还是从它的 referer 解析出来吧
|
2
surftheair 2015-04-13 23:34:43 +08:00 1
遍历一遍。
话说用它的app听不就行了么?为什么一定要找到音频地址? |
3
surftheair 2015-04-13 23:37:30 +08:00
另外蜻蜓fm有实时的节目回放录音,你可以去研究下
|
4
surftheair 2015-04-13 23:45:10 +08:00
|
5
yaoppp OP @surftheair 谢谢。
cri的app做得非常只烂,安卓版不支持5.x,iOS版不能拉播放条。蜻蜓只保留前一天的,不过最大的问题是它不会把中间的新闻和广告去掉。11位随机数遍历一遍还是颇有难度的…… |
6
surftheair 2015-04-14 01:38:46 +08:00 via iPhone
@yaoppp 遍历开玩笑的。蜻蜓FM好像有最近30天的回放哦。就算只有前一天的话貌似也够了。
1,你可以做个rss用podcast订阅,每天自动下载到你的播放设备上 2,你可以在你自己的vps上写个脚本每天自动下载到vps上,定期删除,写个rss用podcast订阅,在你的播放设备上随时点播 嗯,我都干过,以前还得自己找各种工具自己录。现在蜻蜓FM是个好东西 |
7
surftheair 2015-04-14 01:40:21 +08:00 via iPhone
再补充一句,蜻蜓FM本身体验就很好的,为何不直接在上面回听?
|
8
Daniel65536 2015-04-14 02:24:57 +08:00 via iPhone 2
既然你都抓包了,为啥没找到那个返回音频文件地址的API呢?
好吧,我直接告诉你它们所有的API,你直接打开这个网页: http://123.56.91.34 上面把API的使用方式都列出来了。 #我果然是找API大师 比如: [视听列表接口] ----------------------------------------------------------------- 接口地址: http://ezfm.china-plus.net/index.php?m=index&a=cat_list&cid=134 传输方式:POST param: cid: 栏目id return: data id: id值(唯一的) cid:所属栏目id title:名称 compere:主持人 lpic:图片 url:链接地址 duration:时长 brief:简介 m_share:分享量 open_status:打开方式 hits:点击量 b_hits:浏览量 c_hits:评论量 d_hits:下载量 update_time:更新日期 f_time:时间描述 size:文件大小 |
9
yaoppp OP @Daniel65536 这个页面我也发现了。可惜我不是专业的,能力不足,根本不知道怎么用。比如win里装个什么命令行一类的软件,然后输入post http://ezfm.china-plus.net什么什么之类的,就会返回每天的下载地址吗?
|
10
yaoppp OP @surftheair 3个小时的节目中间有40多分钟的广告、新闻什么的,这些蜻蜓都没剪掉。
|
12
surftheair 2015-04-14 11:12:54 +08:00
@Daniel65536 这个API貌似不管用啊,返回都是{"sumcount":null,"count":0,"comment":false},飞鱼秀的cid应该是224吧?
{ "id":"3", "classname":"飞鱼秀", "pub_share":"", "list":[ { "id":"224", "classname":"飞鱼秀 最那什么的早间节目", "brief":"小飞、喻舟,周一到周五早8点--11点", "lpic":"http://123.56.91.34/Uploads/image/20150325/20150325200234_27466.jpg", "a_lpic":"http://123.56.91.34/Uploads/image/20150325/20150325200247_35801.jpg", "i_lpic":"http://123.56.91.34/Uploads/image/20150325/20150325200256_95346.jpg", "compere":"", "pub_share":"", "open_status":"1", "pid":"3", "bpath":"0-3-224", "iscollect":"0", "slist":0 } ] }, |
13
surftheair 2015-04-14 11:14:49 +08:00
|
14
Daniel65536 2015-04-14 13:31:52 +08:00
@surftheair cid随便举个栗子而已嘛……API参数都给列出来了剩下还有啥麻烦的,随便写就是嘛。
|
15
surftheair 2015-04-14 13:42:34 +08:00
@Daniel65536 我知道,我用上面的api找到楼主要的节目cid是224,但是这个cat_list一直都是返回错误
|
16
Daniel65536 2015-04-14 13:59:31 +08:00
看,参数表都有了,随便一条命令就能完成全部工作:
$ curl "http://ezfm.china-plus.net/index.php?m=index&a=cat_list&cid=224" -s | jq '.data[]|.title,.url' -r 飞鱼秀-电影催泪 http://123.56.91.34/Uploads/media/20150414/20150414115215_89404.mp3 飞鱼秀-如释重负 http://123.56.91.34/Uploads/media/20150413/20150413140314_46952.mp3 飞鱼秀-桌面背景 http://123.56.91.34/Uploads/media/20150410/20150410134301_66025.mp3 飞鱼秀-等我老了 http://123.56.91.34/Uploads/media/20150409/20150409114612_70668.mp3 飞鱼秀-初恋这件小事 http://123.56.91.34/Uploads/media/20150408/20150408133335_71534.mp3 飞鱼秀-垃圾食品 http://123.56.91.34/Uploads/media/20150407/20150407125619_19902.mp3 飞鱼秀-中国特色 …… 甚至直接生成podcast feed: $ curl "http://ezfm.china-plus.net/index.php?m=index&a=cat_list&cid=224" -s | jq '.data[]|"<item>\n<title>\(.title)</title>\n<link>\(.url)</link>\n<guid>\(.url)</guid></item>"' -r <item> <title>飞鱼秀-电影催泪</title> <link>http://123.56.91.34/Uploads/media/20150414/20150414115215_89404.mp3</link> <guid>http://123.56.91.34/Uploads/media/20150414/20150414115215_89404.mp3</guid></item> <item> <title>飞鱼秀-如释重负</title> <link>http://123.56.91.34/Uploads/media/20150413/20150413140314_46952.mp3</link> <guid>http://123.56.91.34/Uploads/media/20150413/20150413140314_46952.mp3</guid></item> <item> …… 想干啥干啥。 |
17
Daniel65536 2015-04-14 14:01:29 +08:00
@surftheair
我这里cat_list有返回啊: $ curl "http://ezfm.china-plus.net/index.php?m=index&a=cat_list&cid=224" {"data":[{"id":"430","cid":"224","title":"\u98de\u9c7c\u79c0-\u7535\u5f71\u50ac\u6cea","compere":"","lpic":"http:\/\/123.56.91.34\/Uploads\/image\/20150414\/20150414115237_34310.jpg","url":"http:\/\/123.56.91.34\/Uploads\/media\/20150414\/20150414115215_89404.mp3","duration":"","brief":"","m_share":"0","pub_share":"","open_status":"1","hits":"95","b_hits":"322","c_hits":"6","d_hits":"132","update_time":"2015-04-14","f_time":"14\u5c0f\u65f6\u524d","size":"126.18"},{"id":"419","cid":"224","title":"\u98de\u9c7c\ |
18
surftheair 2015-04-14 14:05:49 +08:00
@Daniel65536 应该是我用的工具问题了,我看到要POST,就用的这个在线工具http://hurl.it发送参数的,一直出错。结果浏览器直接GET倒给出结果了。
|
19
rrkelee 2015-04-14 16:08:35 +08:00
规律就是 date('Ymd') . '/' . date('YmdHis') . '_' . mt_rand(10000,9999) , ^_^
|
20
rrkelee 2015-04-14 16:13:57 +08:00
差一个 9 , - -!
|
21
yaoppp OP |
22
lsdnes 2015-04-15 10:50:22 +08:00
请问Daniel65536:
您的指令是用什麽语言执行的,还有unicode要怎麽转换成中文。 谢谢 |
23
lsdnes 2015-04-17 09:18:40 +08:00
搞定(加入WIKI語法,方便增加WIKI的內容)
<?php // 建立CURL連線 $ch = curl_init(); // 設定擷取的URL網址 curl_setopt($ch, CURLOPT_URL, "http://ezfm.china-plus.net/index.php?m=index&a=cat_list&cid=224"); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // 執行 $jsonString =curl_exec($ch); // 關閉CURL連線 curl_close($ch); $cart = json_decode( $jsonString ); echo "EZ Morning 飞鱼秀</BR></BR>"; for ($i = 1; $i < count($cart->data); $i++) { echo "*[<a href=".$cart->data[$i]->url.">".$cart->data[$i]->url."</a> "; echo $cart->data[$i]->title . "-"; echo $cart->data[$i]->update_time; echo " (".$showdate= date("l",strtotime($cart->data[$i]->update_time)).")]</BR>";; } ?> |
24
manoon 2015-04-17 23:57:05 +08:00
好吧,看到这帖,才发现。规矩可能是改掉了。
好多年前,我就在偷偷下载他们的音频了。 |
25
Daniel65536 2015-04-18 00:19:22 +08:00
|
26
lsdnes 2015-04-18 22:14:50 +08:00
@Daniel65536 謝謝,不過我沒有linux,大概無法測試,不過用PHP解決我了下載的問題了。
PS. for ($i = 1; $i < count($cart->data); $i++) { $i初值要設為0才抓得到最新的一筆資料 |
28
lsdnes 2015-04-23 07:07:11 +08:00
@manoon
分析這個網址 http://ezfm.china-plus.net/index.php?m=index&a=cat_list&cid=224 顯示{"data":[{"id":"450","cid":"224","title":"\u98de\u9c7c\u79c0-\u4e22\u4e1c\u897f","compere":"","lpic":"http:\/\/123.56.91.34\/Uploads\/image\/20150422\/20150422122728_33996.jpg","url":"http:\/\/123.56.91.34\/Uploads\/media\/20150422\/20150422123741_52958.mp3","duration":"","brief":"","m_share":"0","pub_share":"","open_status":"1","hits":"104","b_hits":"1853","c_hits":"23","d_hits":"685","update_time":"2015-04-22","f_time":"1\u5929\u524d","size":"126.17"}............... 依JSON是可視為將所有參數存入data[] array中 其他有用的參數官網有說明如: url:链接地址 update_time:更新日期 title 名稱 所以先可以用php的json_decode來反譯 $cart = json_decode( $jsonString ); 因為資料每一筆擷取到的資料是存在data[] array中,見({"data":[{....) 所以你想取得第一筆的mp3網址、更新時間及title 就用 cart->data[0]->url cart->data[0]->update_time cart->data[0]->title 第二筆就是 cart->data[1]->url cart->data[1]->update_time cart->data[1]->title 以此類推 另外說明的是因為每天都會有新資料進來 也就是data[]每天都會變大(每天新的一筆會按序從data[0]開始) 所以for 就終值就設定的為data[]的筆數 PS 我不太熟OPP所以不太會解釋它的用法。 |
29
lsdnes 2015-04-23 22:40:00 +08:00 via Android
|
30
lsdnes 2015-04-23 22:41:03 +08:00 via Android 1
|
31
manoon 2015-04-24 11:31:45 +08:00
@lsdnes 谢谢。
恕我愚钝 我还是没搞明白,如何获取2015-03-25 以前的源呢? 还是说,他这个START就是03-25. 以后只会一直增加,但03-25肯定不会消失? (我原先的理解是,他只输出一定的条数。相当于 cat -20 ./aa.txt, 即使aa.txt内容再长,他也只输出20条) |
32
xiaochong 2015-04-24 21:04:33 +08:00
https://gist.github.com/zhichenghou/df8117264854be82c2b8
https://gist.github.com/zhichenghou/d710dcfca37f970c5489 go版本和python版本,启动从web访问后,就可以看到飞鱼秀的回放地址了。 |
33
lsdnes 2015-04-25 08:03:18 +08:00
http://english.cri.cn/easyfm/easymorning.html
即日起,飞鱼秀节目回放将全部移至轻松调频官方App,敬请搜索“轻松调频”下载收听。 飞鱼秀-2015-04-09 (周四) 等我老了 飞鱼秀-2015-04-08 (周三) 初恋这件小事 原來的網站不提供下載了,只能透過APP 但我們可以透過api取得APP的mp3網址 但這個api只從3/25才開始提供mp3 |
34
lsdnes 2015-05-03 17:49:45 +08:00 via Android
似乎又不能用了
|
35
yaoppp OP @lsdnes 推荐一个下载网页http://stuff.oldhand.org/ezm/ezm.html
|