记一次墨迹天气的音频提取

之前就想在音乐闹钟上加上定时天气预报, 说到底, 我懒. 每天定时播报也是极好的. 看上墨迹天气的语音预报, 然后想想如果提取出接口后做成一个api, 立马行动, 只不过..没想到比我想象的简单得多.

(English version translate by GPT-3.5)

说在最前

这个只是记录下折腾的过程, 不能保证接口能维持多久, 也不能保证这个方法能有效多久, 所以在看之前先注意下文章发布日期.

先上Charles进行抓包

二话不说直接Charles抓包看下, 在iPad上配置好后, 打开墨迹天气, 然后点击语音播报, Charles显示如下的信息

charles-total-detail

去掉无用的请求后, 如下

charles-detail

我去, 这太容易了吧, 需要的东西一目了然…竟然还是http接口…

再试听下音频

这些mp3内容如下

file content
good_afternoon_zh_1.mp3 下午好
bg_rainy_heavy.mp3 带雷声的背景音乐
day2night_zh_1.mp3 今天白天到夜间
23_zh_1.mp3 二十三
temperature_zh_1.mp3 温度
today_zh_1.mp3 今天

完整的语音应该是:

1
下午好, 墨迹天气为您播报, 杭州, 今天白天到夜间, 大雨转小雨, 温度 20-23摄氏度, 东风3-4级, 今天不限行

原来墨迹天气用的是分段音频, 其中很多音频合并播放, bg_rainy作为背景音乐, 因为api极少, 直接看最有价值的http://v1.weather.moji.com/weather/pb/detail

最后得到音频

detail的内容如图所示, 看到重要的内容了

charles-detail-content

但是人家的黑色的乱码是啥情况, 我还是没有弄出来…但是中间的mp3, 格外醒目, 可以看到基本上要的东西都在了, 听一遍, 这些内容是:

fileName content
bg_rainy_heavy.mp3 带雨声的音乐
bg_end.mp3 音乐的结尾部分
blank_new.mp3 空白2秒
{bless}_zh_1.mp3 下午好, bless被good_morning, afternoon,evening替换
now_is_zh_1.mp3 现在是
{time}# 未知
hello_moji_zh_1.mp3 墨迹天气为您播报
city_143_zh_2.mp3 杭州
day2night_zh_1.mp3 今天白天到夜间
heavy_rain_zh_1.mp3 大雨
transfer_zh_1.mp3
light_rain_zh_1.mp3 小雨
temperature_zh_1.mp3 温度
20_zh_1.mp3 二十
to_zh_1.mp3
23_zh_1.mp3 二十三
centigrade_zh_1.mp3 摄氏度
e_zh_1.mp3 东风
3_zh_1.mp3
to_zh_1.mp3
4_zh_1.mp3
level_zh_1.mp3
today_zh_1.mp3 今天
no_limit_zh_1.mp3 不限行

完美了, 剩下就是搞定这个detail就行了, 直接说结论吧…其实…里面的token和identifier压根没用的…直接去掉就能请求到…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
最后请求结果: 

POST: http://v1.weather.moji.com/weather/pb/detail
{
"common": {
"mcc": "xxx",
"app_version": "app版本",
"width": 0,
"net": "wifi",
"mnc": "XXX",
"platform": "iPad",
"language": "CN",
"height": 0,
"os_version": "系统版本",
"pid": "9000",
"device": "iPad型号"
},
"params": {
"city": [
{
"id": 143,
"ts": "此刻时间",
"avatarId": "2",
"cr": 1
}
],
"lang": "CN",
"tu": "c",
"wu": "beau",
"sst": 0
}
}

我想法是通过匹配或截取, 然后得到要下载的列表, 下载这些文件到本地, 然后调用ffmpeg -i “concat:xxxx”的方式合并成单个文件, 然后混合背景音乐, 最后输出最终文件.

最后的效果是

结尾

其实我压根没想到会那么快, 很轻松就做好了, 希望这个接口能抗久一点吧, 我要把它放到到我的每日天气预报了, 每天上午上班前播放一次.

备份下曾经下载过来的所有音频文件

其中city开头的是一堆地名,基本上包含了几乎所有的音频了,哪怕做一个自用的语音播报都不在话下,但是这个应该是有版权的,自己研究学习,别用做商业应该没啥问题。

mojiAudio_2020.zip - 备份下载