{"id":95,"date":"2024-08-06T21:19:22","date_gmt":"2024-08-06T13:19:22","guid":{"rendered":"https:\/\/taupis.com\/?p=95"},"modified":"2026-08-06T21:27:35","modified_gmt":"2026-08-06T13:27:35","slug":"python%e7%94%a8%e5%bf%ab%e9%80%92%e7%89%a9%e6%b5%81api%e6%89%b9%e9%87%8f%e6%9f%a5%e8%af%a2%e5%bf%ab%e9%80%92%e5%8d%95%e5%8f%b7%e7%89%a9%e6%b5%81-11-4%e6%9b%b4%e6%96%b0","status":"publish","type":"post","link":"https:\/\/taupis.com\/?p=95","title":{"rendered":"Python\u7528\u5feb\u9012\u7269\u6d41api\u6279\u91cf\u67e5\u8be2\u5feb\u9012\u5355\u53f7\u7269\u6d41 11.4\u66f4\u65b0"},"content":{"rendered":"<h2 id=\"listree-list0\" class=\"listree-list\">\u6765\u6e90\uff1a<a href=\"https:\/\/market.aliyun.com\/products\/57002002\/cmapi010996.html?spm=5176.2020520132.101.3.26d47218Hj2xnN#sku=yuncode4996000022\" target=\"_blank\" rel=\"noopener\">\u3010\u4e07\u7ef4\u6613\u6e90\u3011\u5feb\u9012\u7269\u6d41\u67e5\u8be2-\u5355\u53f7\u81ea\u52a8\u8bc6\u522b-\u5feb\u9012\u63a5\u53e3\u67e5\u8be2-\u5feb\u9012\u5355\u53f7\u67e5\u8be2-\u7269\u6d41\u8f68\u8ff9\u8ffd\u8e2a-\u652f\u6301\u987a\u4e30\u5feb\u9012\u67e5\u8be2<\/a><\/h2>\n<h2 id=\"listree-list1\" class=\"listree-list\">\u4ecb\u7ecd:<\/h2>\n<h2 id=\"listree-list2\" class=\"listree-list\">\u7535\u5546\u4eba\u5fc5\u5907\uff0c\u53ef\u4ee5\u6279\u91cf\u67e5\u8be2\u5feb\u9012\u5355\u53f7\uff0c\u57fa\u4e8e\u4e07\u7ef4\u6613\u6e90\u63d0\u4f9b\u7684\u8c03\u7528\u793a\u4f8b\u8fdb\u884c\u6539\u52a8\uff0c\u5176\u4ed6\u7684api\u4e0d\u786e\u4fdd\u80fd\u7528<\/h2>\n<p><mark data-color=\"#111827\">2024-8-15\u66f4\u65b0\u65e5\u5fd7<\/mark><\/p>\n<p>\u53bb\u9664\u65b0\u5efa\u8868\u683c\u529f\u80fd<\/p>\n<p>\u65b0\u589e\u66f4\u65b0\u7269\u6d41\u65f6\u95f4<\/p>\n<p>\u65b0\u589e\u76f4\u63a5\u8986\u76d6\u539f\u8868\u683c\u6587\u4ef6\u4fdd\u7559\u539f\u6709\u6837\u5f0f\u5927\u5c0f<\/p>\n<p><mark data-color=\"#111827\">2024-11-4\u66f4\u65b0\u65e5\u5fd7<\/mark><\/p>\n<p>\u56e0\u4e3a\u90e8\u5206\u5355\u53f7\u9700\u8981\u7528\u5230\u624b\u673a\u53f7\u540e\u56db\u4f4d\u6240\u4ee5\u65b0\u589e\u4e86\u8fd9\u4e2a\u529f\u80fd\uff0c\u73b0\u5728\u4e2d\u901a\u4e5f\u9700\u8981\u4e86\uff0c\u6240\u4ee5\u6211\u5c31\u6dfb\u52a0\u4e86<\/p>\n<h2 id=\"listree-list3\" class=\"listree-list\">\u4ee3\u7801\uff1a<\/h2>\n<h3 id=\"listree-list4\" class=\"listree-list\">\u539f\u4ee3\u7801<\/h3>\n<pre><code class=\"language-python\">#\u9700\u8981\u5b89\u88c5\uff1a  pip install requests\r\nimport requests\r\n#\u4ee5\u4e0b\u9700\u8981\u4fee\u6539\r\nappcode=\"xxxxx\"\r\nreq_data = {\r\n    'com': 'yuantong',\r\n    'nu': 'YT4620020577123',\r\n    'receiverPhone': '',\r\n    'senderPhone': ''\r\n}\r\n#\u4fee\u6539\u7ed3\u675f\r\n\r\nurl=\"http:\/\/ali-deliver.showapi.com\/showapi_expInfo\"\r\nheaders = {\r\n    'Authorization':'APPCODE ' + appcode\r\n}\r\n\r\ntry:\r\n    html = requests.get(url, headers=headers,data=req_data)\r\nexcept :\r\n    print(\"URL\u9519\u8bef\")\r\n    exit()\r\nprint(\"---------response status is:-------------\")\r\nprint(html.status_code )\r\nprint(\"---------response headers are:-------------\")\r\nprint(html.headers)\r\nmsg = html.headers.get('X-Ca-Error-Message')\r\nstatus=html.status_code\r\n\r\nif status == 200 :\r\n    print(\"status\u4e3a200\uff0c\u8bf7\u6c42\u6210\u529f\uff0c\u8ba1\u8d391\u6b21\u3002\uff08status\u975e200\u65f6\u90fd\u4e0d\u8ba1\u8d39\uff09\")\r\nelse:\r\n    if(status == 400 and msg == 'Invalid AppCode'):\r\n            print(\"AppCode\u4e0d\u6b63\u786e\uff0c\u8bf7\u5230\u7528\u6237\u540e\u53f0\u83b7\u53d6\u6b63\u786e\u7684AppCode\uff1a https:\/\/market.console.aliyun.com\/imageconsole\/index.htm\")\r\n    elif(status == 400 and msg == 'Invalid Path or Method'):\r\n            print(\"url\u5730\u5740\u6216\u8bf7\u6c42\u7684'GET'|'POST'\u65b9\u5f0f\u4e0d\u5bf9\")\r\n    elif(status == 403 and msg == 'Unauthorized'):\r\n            print(\"\u670d\u52a1\u672a\u88ab\u6388\u6743,\u8bf7\u68c0\u67e5\u662f\u5426\u8d2d\u4e70\")\r\n    elif(status == 403 and msg == 'Quota Exhausted'):\r\n            print(\"\u5957\u9910\u8d44\u6e90\u5305\u6b21\u6570\u5df2\u7528\u5b8c\")\r\n    elif(status == 500 ):\r\n            print(\"API\u7f51\u5173\u9519\u8bef\")\r\n    else:\r\n            print(\"\u53c2\u6570\u540d\u9519\u8bef\u6216\u5176\u4ed6\u9519\u8bef\")\r\n            print(status)\r\n            print(msg)\r\n\r\nprint(\"---------response body is:-------------\")\r\nprint(html.text)<\/code><\/pre>\n<h3 id=\"listree-list5\" class=\"listree-list\">\u6539\u5b8c\u4ee3\u7801<\/h3>\n<pre><code class=\"language-python\">import tkinter as tk\r\nfrom tkinter import filedialog, messagebox, Entry, Button, Label, Text, Scrollbar\r\nimport pandas as pd\r\nimport requests\r\nfrom openpyxl import load_workbook\r\n\r\n# \u8bf7\u6c42URL\uff08\u8bf7\u66ff\u6362\u4e3a\u6709\u6548\u7684API URL\uff09\r\nurl = \"http:\/\/ali-deliver.showapi.com\/showapi_expInfo\" \r\n\r\n# \u521d\u59cb\u5316headers\r\nheaders = {}\r\n\r\n# \u9ed8\u8ba4\u5feb\u9012\u516c\u53f8\u4ee3\u7801\r\ndefault_company_code = \"zhongtong\"\r\n\r\n# \u51fd\u6570\u5b9a\u4e49\r\ndef build_request_data(number):\r\n    company_code_value = company_code_entry.get().strip()\r\n    if not company_code_value:\r\n        company_code_value = default_company_code\r\n    sender_phone_value = sender_phone_entry.get().strip()\r\n    req_data = {\r\n        'com': company_code_value,\r\n        'nu': number\r\n    }\r\n    if sender_phone_value:\r\n        req_data['senderPhone'] = sender_phone_value\r\n    return req_data\r\n\r\ndef process_response(response):\r\n    try:\r\n        json_response = response.json()\r\n        if json_response.get('showapi_res_code') != 0:\r\n            return None, 'Error'\r\n        data = json_response.get('showapi_res_body', {}).get('data', [])\r\n        if not data:\r\n            return None, 'No Result'\r\n        latest_update = data[0].get('context', 'No Update Info')\r\n        update_time = data[0].get('time', 'Time Info Missing')\r\n        return latest_update, update_time\r\n    except Exception as e:\r\n        return None, str(e)\r\n\r\ndef save_config():\r\n    global appcode\r\n    appcode = appcode_entry.get().strip()\r\n    if appcode:\r\n        headers['Authorization'] = f'APPCODE {appcode}'\r\n        messagebox.showinfo(\"\u4fdd\u5b58\", \"\u914d\u7f6e\u5df2\u4fdd\u5b58\")\r\n    else:\r\n        messagebox.showwarning(\"\u8b66\u544a\", \"\u8bf7\u586b\u5199AppCode\")\r\n\r\ndef on_query_clicked():\r\n    input_path = filedialog.askopenfilename(\r\n        title=\"\u9009\u62e9\u5305\u542b\u5feb\u9012\u5355\u53f7\u7684Excel\u6587\u4ef6\",\r\n        filetypes=[(\"Excel files\", \"*.xlsx\")]\r\n    )\r\n    if not input_path:\r\n        return\r\n    column = column_entry.get().strip()\r\n    if not column:\r\n        messagebox.showerror(\"\u9519\u8bef\", \"\u8bf7\u63d0\u4f9b\u5217\u540d\")\r\n        return\r\n    try:\r\n        query_express_numbers(input_path, column)\r\n    except Exception as e:\r\n        messagebox.showerror(\"\u9519\u8bef\", f\"\u67e5\u8be2\u8fc7\u7a0b\u4e2d\u53d1\u751f\u9519\u8bef\uff1a{e}\")\r\n\r\ndef query_express_numbers(input_path, column_name):\r\n    log_text.insert(\"end\", \"\u5f00\u59cb\u5904\u7406\u8868\u683c...\\n\")\r\n    log_text.see(\"end\")\r\n    \r\n    try:\r\n        book = load_workbook(filename=input_path)\r\n        sheet = book.active\r\n        df = pd.read_excel(input_path)\r\n\r\n        if column_name not in df.columns:\r\n            messagebox.showerror(\"\u9519\u8bef\", f\"\u5217\u540d'{column_name}'\u4e0d\u5b58\u5728\u4e8e\u8868\u683c\u4e2d\")\r\n            return\r\n\r\n        column_index = df.columns.get_loc(column_name) + 1\r\n\r\n        for row in sheet.iter_rows(min_row=2, max_col=sheet.max_column, max_row=sheet.max_row):\r\n            number = row[column_index - 1].value\r\n            if not number:\r\n                continue\r\n\r\n            last_update_cell = sheet.cell(row=row[0].row, column=2)\r\n            update_time_cell = sheet.cell(row=row[0].row, column=3)\r\n\r\n            if not (last_update_cell.value or update_time_cell.value):\r\n                log_text.insert(\"end\", f\"\u6b63\u5728\u67e5\u8be2\u5feb\u9012\u5355\u53f7\uff1a{number}\\n\")\r\n                req_data = build_request_data(number)\r\n                response = requests.get(url, headers=headers, params=req_data)\r\n                response.raise_for_status()\r\n                context_value, update_time = process_response(response)\r\n                \r\n                if context_value is None:\r\n                    log_text.insert(\"end\", \"\u67e5\u8be2\u5931\u8d25\uff0c\u5df2\u8bb0\u5f55\u3002\\n\")\r\n                else:\r\n                    last_update_cell.value = context_value\r\n                    update_time_cell.value = update_time\r\n                    log_text.insert(\"end\", f\"\u5355\u53f7 {number} \u67e5\u8be2\u6210\u529f\u3002\\n\")\r\n        \r\n        book.save(filename=input_path)\r\n        log_text.insert(\"end\", \"\u4fdd\u5b58\u5b8c\u6210\u3002\\n\")\r\n    \r\n    except Exception as e:\r\n        log_text.insert(\"end\", f\"\u4fdd\u5b58\u5931\u8d25\uff1a{e}\\n\")\r\n\r\n# \u521b\u5efa\u4e3b\u7a97\u53e3\r\nroot = tk.Tk()\r\nroot.title(\"\u5feb\u9012\u5355\u53f7\u67e5\u8be2\")\r\n\r\n# \u521b\u5efa\u6388\u6743\u7801AppCode\u8f93\u5165\u6846\r\nappcode_label = Label(root, text=\"\u6388\u6743\u7801AppCode:\")\r\nappcode_label.grid(row=0, column=0, padx=5, pady=5)\r\nappcode_entry = Entry(root, width=50)\r\nappcode_entry.grid(row=0, column=1, padx=5, pady=5)\r\n\r\n# \u521b\u5efa\u5feb\u9012\u516c\u53f8\u4ee3\u7801\u8f93\u5165\u6846\r\ncompany_code_label = Label(root, text=\"\u5feb\u9012\u516c\u53f8\u4ee3\u7801:\")\r\ncompany_code_label.grid(row=1, column=0, padx=5, pady=5)\r\ncompany_code_entry = Entry(root, width=50)\r\ncompany_code_entry.grid(row=1, column=1, padx=5, pady=5)\r\ncompany_code_entry.insert(0, default_company_code)\r\n\r\n# \u521b\u5efa\u53d1\u4ef6\u4eba\u7535\u8bdd\u540e\u56db\u4f4d\u8f93\u5165\u6846\uff08\u975e\u5fc5\u586b\uff09\r\nsender_phone_label = Label(root, text=\"\u53d1\u4ef6\u4eba\u7535\u8bdd\uff08\u53ef\u9009\uff09:\")\r\nsender_phone_label.grid(row=2, column=0, padx=5, pady=5)\r\nsender_phone_entry = Entry(root, width=30)\r\nsender_phone_entry.grid(row=2, column=1, padx=5, pady=5)\r\n\r\n# \u521b\u5efa\u5feb\u9012\u5355\u53f7\u5217\u540d\u8f93\u5165\u6846\r\ncolumn_label = Label(root, text=\"\u5feb\u9012\u5355\u53f7\u5217\u540d:\")\r\ncolumn_label.grid(row=3, column=0, padx=5, pady=5)\r\ncolumn_entry = Entry(root, width=30)\r\ncolumn_entry.grid(row=3, column=1, padx=5, pady=5)\r\n\r\n# \u521b\u5efa\u4fdd\u5b58\u914d\u7f6e\u6309\u94ae\r\nsave_button = Button(root, text=\"\u4fdd\u5b58\u914d\u7f6e\", command=save_config)\r\nsave_button.grid(row=4, columnspan=2, sticky='nsew', padx=5, pady=5)\r\n\r\n# \u521b\u5efa\u67e5\u8be2\u6309\u94ae\r\nquery_button = Button(root, text=\"\u67e5\u8be2\u5feb\u9012\u5355\u53f7\", command=on_query_clicked)\r\nquery_button.grid(row=5, columnspan=2, sticky='nsew', padx=5, pady=5)\r\n\r\n# \u521b\u5efa\u65e5\u5fd7\u663e\u793a\u6846\r\nlog_label = Label(root, text=\"\u5904\u7406\u4fe1\u606f:\")\r\nlog_label.grid(row=6, columnspan=2, sticky='nsew', padx=5, pady=5)\r\n\r\nlog_text = Text(root, height=10, width=50, wrap='word')\r\nlog_text.grid(row=7, columnspan=2, sticky='nsew')\r\n\r\nscrollbar = Scrollbar(root, command=log_text.yview)\r\nscrollbar.grid(row=7, column=2, sticky='ns')\r\nlog_text.config(yscrollcommand=scrollbar.set)\r\n\r\n# \u8fd0\u884c\u4e3b\u5faa\u73af\r\nroot.mainloop()<\/code><\/pre>\n<h2 id=\"listree-list6\" class=\"listree-list current\">\u529f\u80fd\uff1a<\/h2>\n<p>\u6dfb\u52a0\u4e86gui\u754c\u9762\u628a\u6240\u6709\u64cd\u4f5c\u90fd\u4fbf\u6377\u5316\uff0c\u4e0d\u65b9\u4fbf\u90e8\u7f72python\u73af\u5883\u7684\u6211\u4f1a\u628a\u5e94\u7528\u6253\u5305\u51fa\u6765\u653e\u5728\u5e95\u90e8<\/p>\n<h2 id=\"listree-list7\" class=\"listree-list\">\u6f14\u793a\uff1a<\/h2>\n<div style=\"width: 1800px;\" class=\"wp-video\"><video class=\"wp-video-shortcode\" id=\"video-95-1\" width=\"1800\" height=\"1080\" preload=\"metadata\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/taupis.com\/wp-content\/uploads\/2026\/08\/20260806132719981018.mp4?_=1\" \/><a href=\"https:\/\/taupis.com\/wp-content\/uploads\/2026\/08\/20260806132719981018.mp4\">https:\/\/taupis.com\/wp-content\/uploads\/2026\/08\/20260806132719981018.mp4<\/a><\/video><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u6765\u6e90\uff1a\u3010\u4e07\u7ef4\u6613\u6e90\u3011\u5feb\u9012\u7269\u6d41\u67e5\u8be2-\u5355\u53f7\u81ea\u52a8\u8bc6\u522b-\u5feb\u9012\u63a5\u53e3\u67e5\u8be2-\u5feb\u9012\u5355\u53f7\u67e5\u8be2-\u7269\u6d41\u8f68\u8ff9\u8ffd\u8e2a-\u652f\u6301\u987a\u4e30\u5feb\u9012\u67e5\u8be2 \u4ecb\u7ecd [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":87,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[13],"class_list":["post-95","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python","tag-python"],"_links":{"self":[{"href":"https:\/\/taupis.com\/index.php?rest_route=\/wp\/v2\/posts\/95","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/taupis.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/taupis.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/taupis.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/taupis.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=95"}],"version-history":[{"count":2,"href":"https:\/\/taupis.com\/index.php?rest_route=\/wp\/v2\/posts\/95\/revisions"}],"predecessor-version":[{"id":98,"href":"https:\/\/taupis.com\/index.php?rest_route=\/wp\/v2\/posts\/95\/revisions\/98"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/taupis.com\/index.php?rest_route=\/wp\/v2\/media\/87"}],"wp:attachment":[{"href":"https:\/\/taupis.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=95"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/taupis.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=95"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/taupis.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=95"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}