该工具采用Python开发,因此首先需要安装Python,在此不做赘述。同时,由于采用到第三方Library,因此将需要安装以下依赖:
$ pipenv install cryptography
$ pipenv install pycryptodome
openapi.py中定义基础参数,用来生成请求URL,请根据OpenAPI管理方提供的信息,更新OpenAPI.ini
里的如下变量的值:
OPI_APP_ID = ''
OPI_APP_KEY = ''
OPI_APP_PRIVATE_KEY = ''
device.py用来请求硬件注册或登录,请根据OpenAPI管理方提供的信息,更新OpenAPI.ini
里的如下变量的值:
DEV_AUTH_DEVICE_KEY = ''
DEV_AUTH_SEED_PREFIX = ''
DEV_AUTH_PRI_KEY = ''
DEV_AUTH_PID = ''
DEV_AUTH_SN = ''
合作伙伴可以在硬件注册成功之后,更新OpenAPI.ini
里的变量OPI_DEVICE_ID
和OPI_DEVICE_KEY
,这样可重复使用,不必每次都注册或登录
OPI_DEVICE_ID = ''
OPI_DEVICE_KEY = ''
auth.py用来记录用户登录的参数,即QQ音乐OpenID登录方案,请根据实际取值来更新OpenAPI.ini
里的变量:
QQMUSIC_OPENID_APPID = ''
QQMUSIC_OPENID_USERID = ''
QQMUSIC_ACCESS_TOKEN = ''
如用户登录信息过期,会发现如下信息,此时需要更新OpenAPI.ini
里的QQMUSIC_OPENID_USERID
与QQMUSIC_ACCESS_TOKEN
。
{
"ret": 11108,
"sub_ret": -7,
"msg": "联合登录下,QQ音乐open账号体系校验失败!"
}
如果设备登录信息过期,则会遇到如下信息,此时需要更新OpenAPI.ini
的OPI_DEVICE_ID
与OPI_DEVICE_KEY
,
可以通过"二、硬件接入"来获取。
{"msg":"联合登录下,OPI设备登陆态较验失败!","ret":11105,"sub_ret":1}
进入到目录下,执行如下操作,假定设备还没有register
,则首先执行该动作
$ python -m qqmusic.device.py --cmd=register
即可得到用于注册的URL(以下示例仅供参考,实际执行可能因时效等因素而失败,下同):
实际上,由于多人/多次执行上述动作,而一个设备ID只需要注册一次,因此当访问上述URL,会遇到提示注册失败的提示:
{
"msg" : "设备注册/登录失败! 错误提示: ERR_OPI_DEVICE_REGISTER_ALLCOATE_HAS_EXIST",
"ret" : 101502,
"sub_ret" : 1201
}
上述情况是正常的,因此此时应该执行login
:
$ python -m qqmusic.device.py --cmd=login
可以看到URL信息输出:
访问后,可以得到device_id
和device_key
:
{
"device_id" : 4611692615497320450,
"device_key" : "EC292C6EE52C09919A897D39FBB13ABDC03DB0D369BBEC52F662C6A912998199",
"msg" : "ok",
"ret" : 0,
"sub_ret" : 0
}
进入到目录下,执行如下操作,
$ python -m qqmusic.agent.py
可以看到有帮助信息输出:
usage: agent.py [-h] [--cmd_args [CMD_ARGS [CMD_ARGS ...]]] [--qm_app_id QM_APP_ID] [--qm_user_id QM_USER_ID] [--qm_token QM_TOKEN] [--opi_dev_id OPI_DEV_ID] [--opi_dev_key OPI_DEV_KEY] cmd
在OpenAPI中,有一些接口,除去公共参数,只需要命令字即可,不需要额外参数,此时运行工具比较简单。
例如,请求个人歌单目录,该情况下不需要--cmd_args
:
$ python -m qqmusic.agent.py fcg_music_custom_get_songlist_self.fcg
得到的输出如下:
如果请求"我喜欢"的具体内容,即fcg_music_custom_get_songlist_detail.fcg
,则它需要三个额外的参数dissid
、page
、page_size
。
此时,执行工具是,就需要--cmd_args
,如下:
$ python -m qqmusic.agent.py fcg_music_custom_get_songlist_detail.fcg --cmd_args dissid=1142586426 page=1 page_size=5
得到的输出如下:
OpenAPI中有五十多个接口,每一个接口是否需要用到--cmd_args
,取决于OpenAPI文档的要求。