{ "cells": [ { "cell_type": "code", "id": "initial_id", "metadata": { "collapsed": true, "ExecuteTime": { "end_time": "2025-10-17T01:13:44.349056Z", "start_time": "2025-10-17T01:13:42.874653Z" } }, "source": [ "import requests\n", "import os\n", "from datetime import datetime\n", "\n", "cookies = {\n", " 'entry-token': '763a7df1bc9644f99150de4800c9480e',\n", " 'siyuan': 'MTc2MDMyMDUxNXxEWDhFQVFMX2dBQUJFQUVRQUFCNF80QUFBUVp6ZEhKcGJtY01CZ0FFWkdGMFlRWnpkSEpwYm1jTVhBQmFleUpYYjNKcmMzQmhZMlZ6SWpwN0lpOXphWGwxWVc0dmQyOXlhM053WVdObEx5STZleUpCWTJObGMzTkJkWFJvUTI5a1pTSTZJbUZpWXpnNE9EZzRPRGc0SWl3aVEyRndkR05vWVNJNkluVm9kMjV4Y0cwaWZYMTl876pIcVgIzgSo4CfVXsKDiNc9S0jNWreut01gspgCQo8=',\n", "}\n", "\n", "headers = {\n", " 'Accept': '*/*',\n", " 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',\n", " 'Connection': 'keep-alive',\n", " 'Content-Type': 'text/plain;charset=UTF-8',\n", " 'Origin': 'https://docker-siyuan.fnos-nas187.fnos.net',\n", " 'Referer': 'https://docker-siyuan.fnos-nas187.fnos.net/stage/build/desktop/?r=1hvycc2',\n", " 'Sec-Fetch-Dest': 'empty',\n", " 'Sec-Fetch-Mode': 'cors',\n", " 'Sec-Fetch-Site': 'same-origin',\n", " 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0',\n", " 'sec-ch-ua': '\"Microsoft Edge\";v=\"141\", \"Not?A_Brand\";v=\"8\", \"Chromium\";v=\"141\"',\n", " 'sec-ch-ua-mobile': '?0',\n", " 'sec-ch-ua-platform': '\"Windows\"',\n", "}\n", "\n", "data = '{}'\n", "\n", "response = requests.post(\n", " 'https://docker-siyuan.fnos-nas187.fnos.net/api/export/exportData',\n", " cookies=cookies,\n", " headers=headers,\n", " data=data,\n", ")\n", "print(response.json())\n", "download_url = \"https://docker-siyuan.fnos-nas187.fnos.net\"+response.json()[\"data\"][\"zip\"]\n", "\n", "download_file = requests.get(download_url)\n", "save_path = \"D:/Idea Project/F6+宜搭+其它(1)/张阳脚本/文件输出/思源笔记\"\n", "\n", "def download_file(url, save_path):\n", " \"\"\"\n", " 从指定URL下载文件并保存到本地路径。\n", "\n", " :param url: 文件的下载链接\n", " :param save_path: 本地保存路径(包含文件名)\n", " \"\"\"\n", " # try:\n", " now_date = datetime.now().strftime(\"%Y%m%d%H%M\")\n", " print(url)\n", " # 发送GET请求,stream=True 表示流式下载,适合大文件\n", " response = requests.get(url,headers = headers, cookies = cookies, stream=True)\n", " # print(response.json())\n", " response.raise_for_status() # 检查请求是否成功(状态码200)\n", "\n", " # 确保保存目录存在\n", " os.makedirs(os.path.dirname(save_path), exist_ok=True)\n", "\n", " # 以二进制写入模式打开文件\n", " with open(save_path+now_date + \".zip\", 'wb') as file:\n", " # 将响应内容写入文件\n", " file.write(response.content)\n", "\n", " print(f\"文件下载成功!已保存至: {save_path+now_date + \".zip\"}\")\n", " #\n", " # except requests.exceptions.RequestException as e:\n", " # print(f\"下载失败: {e}\")\n", " # except IOError as e:\n", " # print(f\"文件保存失败: {e}\")\n", "\n", "download_file(download_url, save_path)" ], "outputs": [ { "ename": "JSONDecodeError", "evalue": "Expecting value: line 1 column 1 (char 0)", "output_type": "error", "traceback": [ "\u001B[31m---------------------------------------------------------------------------\u001B[39m", "\u001B[31mJSONDecodeError\u001B[39m Traceback (most recent call last)", "\u001B[36mFile \u001B[39m\u001B[32mD:\\ProgramTools\\anaconda3\\envs\\f6\\Lib\\site-packages\\requests\\models.py:976\u001B[39m, in \u001B[36mResponse.json\u001B[39m\u001B[34m(self, **kwargs)\u001B[39m\n\u001B[32m 975\u001B[39m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[32m--> \u001B[39m\u001B[32m976\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m complexjson.loads(\u001B[38;5;28mself\u001B[39m.text, **kwargs)\n\u001B[32m 977\u001B[39m \u001B[38;5;28;01mexcept\u001B[39;00m JSONDecodeError \u001B[38;5;28;01mas\u001B[39;00m e:\n\u001B[32m 978\u001B[39m \u001B[38;5;66;03m# Catch JSON-related errors and raise as requests.JSONDecodeError\u001B[39;00m\n\u001B[32m 979\u001B[39m \u001B[38;5;66;03m# This aliases json.JSONDecodeError and simplejson.JSONDecodeError\u001B[39;00m\n", "\u001B[36mFile \u001B[39m\u001B[32mD:\\ProgramTools\\anaconda3\\envs\\f6\\Lib\\json\\__init__.py:346\u001B[39m, in \u001B[36mloads\u001B[39m\u001B[34m(s, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)\u001B[39m\n\u001B[32m 343\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m (\u001B[38;5;28mcls\u001B[39m \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m \u001B[38;5;129;01mand\u001B[39;00m object_hook \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m \u001B[38;5;129;01mand\u001B[39;00m\n\u001B[32m 344\u001B[39m parse_int \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m \u001B[38;5;129;01mand\u001B[39;00m parse_float \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m \u001B[38;5;129;01mand\u001B[39;00m\n\u001B[32m 345\u001B[39m parse_constant \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m \u001B[38;5;129;01mand\u001B[39;00m object_pairs_hook \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m \u001B[38;5;129;01mand\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m kw):\n\u001B[32m--> \u001B[39m\u001B[32m346\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m _default_decoder.decode(s)\n\u001B[32m 347\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28mcls\u001B[39m \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m:\n", "\u001B[36mFile \u001B[39m\u001B[32mD:\\ProgramTools\\anaconda3\\envs\\f6\\Lib\\json\\decoder.py:345\u001B[39m, in \u001B[36mJSONDecoder.decode\u001B[39m\u001B[34m(self, s, _w)\u001B[39m\n\u001B[32m 341\u001B[39m \u001B[38;5;250m\u001B[39m\u001B[33;03m\"\"\"Return the Python representation of ``s`` (a ``str`` instance\u001B[39;00m\n\u001B[32m 342\u001B[39m \u001B[33;03mcontaining a JSON document).\u001B[39;00m\n\u001B[32m 343\u001B[39m \n\u001B[32m 344\u001B[39m \u001B[33;03m\"\"\"\u001B[39;00m\n\u001B[32m--> \u001B[39m\u001B[32m345\u001B[39m obj, end = \u001B[38;5;28mself\u001B[39m.raw_decode(s, idx=_w(s, \u001B[32m0\u001B[39m).end())\n\u001B[32m 346\u001B[39m end = _w(s, end).end()\n", "\u001B[36mFile \u001B[39m\u001B[32mD:\\ProgramTools\\anaconda3\\envs\\f6\\Lib\\json\\decoder.py:363\u001B[39m, in \u001B[36mJSONDecoder.raw_decode\u001B[39m\u001B[34m(self, s, idx)\u001B[39m\n\u001B[32m 362\u001B[39m \u001B[38;5;28;01mexcept\u001B[39;00m \u001B[38;5;167;01mStopIteration\u001B[39;00m \u001B[38;5;28;01mas\u001B[39;00m err:\n\u001B[32m--> \u001B[39m\u001B[32m363\u001B[39m \u001B[38;5;28;01mraise\u001B[39;00m JSONDecodeError(\u001B[33m\"\u001B[39m\u001B[33mExpecting value\u001B[39m\u001B[33m\"\u001B[39m, s, err.value) \u001B[38;5;28;01mfrom\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;28;01mNone\u001B[39;00m\n\u001B[32m 364\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m obj, end\n", "\u001B[31mJSONDecodeError\u001B[39m: Expecting value: line 1 column 1 (char 0)", "\nDuring handling of the above exception, another exception occurred:\n", "\u001B[31mJSONDecodeError\u001B[39m Traceback (most recent call last)", "\u001B[36mCell\u001B[39m\u001B[36m \u001B[39m\u001B[32mIn[1]\u001B[39m\u001B[32m, line 34\u001B[39m\n\u001B[32m 26\u001B[39m data = \u001B[33m'\u001B[39m\u001B[38;5;132;01m{}\u001B[39;00m\u001B[33m'\u001B[39m\n\u001B[32m 28\u001B[39m response = requests.post(\n\u001B[32m 29\u001B[39m \u001B[33m'\u001B[39m\u001B[33mhttps://docker-siyuan.fnos-nas187.fnos.net/api/export/exportData\u001B[39m\u001B[33m'\u001B[39m,\n\u001B[32m 30\u001B[39m cookies=cookies,\n\u001B[32m 31\u001B[39m headers=headers,\n\u001B[32m 32\u001B[39m data=data,\n\u001B[32m 33\u001B[39m )\n\u001B[32m---> \u001B[39m\u001B[32m34\u001B[39m \u001B[38;5;28mprint\u001B[39m(response.json())\n\u001B[32m 35\u001B[39m download_url = \u001B[33m\"\u001B[39m\u001B[33mhttps://docker-siyuan.fnos-nas187.fnos.net\u001B[39m\u001B[33m\"\u001B[39m+response.json()[\u001B[33m\"\u001B[39m\u001B[33mdata\u001B[39m\u001B[33m\"\u001B[39m][\u001B[33m\"\u001B[39m\u001B[33mzip\u001B[39m\u001B[33m\"\u001B[39m]\n\u001B[32m 37\u001B[39m download_file = requests.get(download_url)\n", "\u001B[36mFile \u001B[39m\u001B[32mD:\\ProgramTools\\anaconda3\\envs\\f6\\Lib\\site-packages\\requests\\models.py:980\u001B[39m, in \u001B[36mResponse.json\u001B[39m\u001B[34m(self, **kwargs)\u001B[39m\n\u001B[32m 976\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m complexjson.loads(\u001B[38;5;28mself\u001B[39m.text, **kwargs)\n\u001B[32m 977\u001B[39m \u001B[38;5;28;01mexcept\u001B[39;00m JSONDecodeError \u001B[38;5;28;01mas\u001B[39;00m e:\n\u001B[32m 978\u001B[39m \u001B[38;5;66;03m# Catch JSON-related errors and raise as requests.JSONDecodeError\u001B[39;00m\n\u001B[32m 979\u001B[39m \u001B[38;5;66;03m# This aliases json.JSONDecodeError and simplejson.JSONDecodeError\u001B[39;00m\n\u001B[32m--> \u001B[39m\u001B[32m980\u001B[39m \u001B[38;5;28;01mraise\u001B[39;00m RequestsJSONDecodeError(e.msg, e.doc, e.pos)\n", "\u001B[31mJSONDecodeError\u001B[39m: Expecting value: line 1 column 1 (char 0)" ] } ], "execution_count": 1 } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.6" } }, "nbformat": 4, "nbformat_minor": 5 }