本帖最后由 W@LTER 于 2023-12-2 15:17 编辑
缘由:
1. 受下面大佬帖子启发打算做一个用小爱同学语音控制来播放本地nas的电影版本,为什么不要小雅,因为不稳定,而且有些资源不能播了,故还是自己本地的好处理,不用担心。
https://bbs.hassbian.com/thread-23398-1-1.html
2. 需要先按照原贴教程做好了,最后才可以用本贴的节点替换原来的Python节点。下面教程基本原理跟上面大佬原贴一样,主要改动的地方是从小雅的电影源改为自己的nas电影源,所以,教程里面只要替换原来的流里面的Python节点的代码内容,重新改写搜索逻辑。
3. 另外,虽然电影源从小雅改为自己nas的电影,但是,还是需要将自己nas的电影挂载到alist,我们用alist来做资源管理,理论上,无论自己nas还是非nas,能挂载都能播放,而且,电影和音乐同理。下面,我详细说说在alist上面需要的一些处理和前提条件,才可以让流顺利执行。
3.1. 电影的文件名,需要有中文名称, 因为你跟小爱说中文, 然后,对中文的电影名称进行搜索电影,英文好的可以直接跟小爱说英文,不知道识别准确率怎么样。建议为电影添加中文名称。
3.2. nas的电影,最好需要用 本地存储 的方式来挂载到alist,其他方式不建议。这种方式应该是最流畅。具体操作步骤可以百度一下。另外, 挂载的时候关掉 显示隐藏,不要显示和不搜索到那些隐藏的文件和文件夹。
3.3. alist管理页面里面,设置-全局-签名所有 关掉,说明看这里https://alist.nn.ci/zh/config/gl ... D%E6%89%80%E6%9C%89
3.4. alist管理页面里面,开启索引功能。说明看这里https://alist.nn.ci/zh/guide/advanced/search.html, 我们播放的内容就是在搜索的内容里面找,如果可以想控制播放的内容,可以先限制搜索的内容,因此等构建好索引后, 自己尝试的搜索,看看搜索的结果是否预期中,如果不是,就要找问题了。
4. 我提供的流只是其中python代码节点,里面要改的东西跟原贴基本一致,另外,还需要提供一个alist的账号密码,为了来获取执行api search的post的headers令牌,说明看这里:https://alist.nn.ci/zh/guide/api ... n%E8%8E%B7%E5%8F%96 和 https://alist.nn.ci/zh/guide/api ... 7%E4%BB%B6%E5%A4%B9, 如果谁有更好的办法可以交流一下。
感谢原贴大佬@silas3082的支持,才能有这个,谢谢。
[
{
"id": "4c07a07b87513251",
"type": "template",
"z": "74176f609151451e",
"name": "python NAS加token电影脚本",
"field": "payload",
"fieldType": "msg",
"format": "python",
"syntax": "mustache",
"template": "import requests\nimport json\n\n# 获取Authorization\nauth_url = "http://192.168.1.247:5244/api/auth/login"\nauth_payload = {\n "username": "你的账号",\n "password": "你的密码"\n}\n\nauth_response = requests.post(auth_url, json=auth_payload)\n\n# 检查获取Authorization的响应状态码\nif auth_response.status_code == 200:\n try:\n auth_data = auth_response.json()\n token = auth_data["data"]["token"]\n \n # 使用获取到的Authorization进行请求\n url = "http://192.168.1.247:5244/api/fs/search"\n payload = {\n "keywords": "{{payload}}",\n "page": 1,\n "parrent": "/",\n "password": "",\n "per_page": 100,\n "scope": 0\n }\n \n headers = {\n "Authorization": token\n }\n \n response = requests.post(url, json=payload, headers=headers)\n # 检查响应状态码\n if response.status_code == 200:\n try:\n # 解析响应数据\n data = response.json()\n\n # 获取type等于2的结果,并提取parent和name合并为url\n urls = ["http://192.168.1.247:5244/d" + item["parent"] + "/" + item["name"] for item in data["data"]["content"] if item["type"] == 2]\n if urls:\n # 获取第一个URL的结果\n first_url_result = urls[0]\n\n print(first_url_result)\n\n # 保存第一个URL的结果到本地文件\n\n else:\n print("没有找到包含满足条件的电影。")\n except json.JSONDecodeError:\n print("url响应数据格式不正确,无法解析 JSON 数据。")\n else:\n print(f"请求失败,状态码: {response.status_code}")\n \n except json.JSONDecodeError:\n print("令牌响应数据格式不正确,无法解析 JSON 数据。")\nelse:\n print(f"获取令牌失败,状态码: {auth_response.status_code}")",
"output": "str",
"x": 200,
"y": 360,
"wires": [
[
"ce7ae6436c0af95a"
]
]
}
]
|