{ "cells": [ { "cell_type": "code", "id": "initial_id", "metadata": { "collapsed": true, "ExecuteTime": { "end_time": "2025-08-30T09:17:28.308616Z", "start_time": "2025-08-30T09:15:09.923403Z" } }, "source": [ "import time\n", "\n", "import requests\n", "import pandas as pd\n", "from collections import defaultdict\n", "from IPython.display import display\n", "from tqdm import tqdm\n", "\n", "cookies = {\n", " 'marketingSESSIONID': 'f25482cc-e70f-40e6-a17a-1e1ec31960c0',\n", " 'erpLanguage': 'zh-CN',\n", " 'prodOrg': '15983224677615038465',\n", " 'unp': '15983224680525881432',\n", " 'un': '15983224680525881432',\n", " '_up': '-NillNN-qyBEJ--t3vnSknvoOF52xfKPsskD23s6WOJVXvDFpJvQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqEfURqoMh1wcK-fdRv-ZNHu3M-GTc15CyF3WsqOVVjOkfmF7COhBtrEj97Rrnq7u4ZTQ.',\n", " 'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2215983224680525881432%22%2C%22first_id%22%3A%22198a89fdaa54f-0a897244f8104b8-4c657b58-2073600-198a89fdaa61b71%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%22198a89fdaa54f-0a897244f8104b8-4c657b58-2073600-198a89fdaa61b71%22%7D',\n", " 'tmall': 'false',\n", " 'Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1756257166,1756352022,1756431231,1756538308',\n", " 'Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1756538308',\n", " 'HMACCOUNT': '55F2182717FD6AE6',\n", "}\n", "\n", "headers = {\n", " 'accept': 'application/json, text/plain, */*',\n", " 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',\n", " 'priority': 'u=1, i',\n", " 'referer': 'https://yunxiu.f6car.cn/erp/view/index.html',\n", " 'sec-ch-ua': '\"Not;A=Brand\";v=\"99\", \"Microsoft Edge\";v=\"139\", \"Chromium\";v=\"139\"',\n", " 'sec-ch-ua-mobile': '?0',\n", " 'sec-ch-ua-platform': '\"Windows\"',\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/139.0.0.0 Safari/537.36 Edg/139.0.0.0',\n", " # 'cookie': 'marketingSESSIONID=f25482cc-e70f-40e6-a17a-1e1ec31960c0; erpLanguage=zh-CN; prodOrg=15983224677615038465; unp=15983224680525881432; un=15983224680525881432; _up=-NillNN-qyBEJ--t3vnSknvoOF52xfKPsskD23s6WOJVXvDFpJvQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqEfURqoMh1wcK-fdRv-ZNHu3M-GTc15CyF3WsqOVVjOkfmF7COhBtrEj97Rrnq7u4ZTQ.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215983224680525881432%22%2C%22first_id%22%3A%22198a89fdaa54f-0a897244f8104b8-4c657b58-2073600-198a89fdaa61b71%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%22198a89fdaa54f-0a897244f8104b8-4c657b58-2073600-198a89fdaa61b71%22%7D; tmall=false; Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1756257166,1756352022,1756431231,1756538308; Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1756538308; HMACCOUNT=55F2182717FD6AE6',\n", "}\n", "\n", "\n", "# 1. 数据转换函数\n", "def convert_coupon_response_to_request(response_data, new_start_time, new_end_time):\n", " \"\"\"将API响应转换为请求格式\"\"\"\n", " template_info = response_data.get('couponTemplateInfo', {})\n", "\n", " request_data = {\n", " 'orgId': template_info.get('orgId'),\n", " 'couponName': template_info.get('couponName'),\n", " 'couponDesc': template_info.get('couponDesc'),\n", " 'totalStock': str(template_info.get('totalStock', 0)),\n", " 'takeQuota': str(template_info.get('takeQuota', 0)),\n", " 'conditionType': template_info.get('conditionType', 0),\n", " 'validityType': template_info.get('validityType', 0),\n", " 'validityBegin': new_start_time,\n", " 'validityEnd': new_end_time,\n", " 'orgRangeType': template_info.get('orgRangeType', 0),\n", " 'goodsRangeType': template_info.get('goodsRangeType', 0),\n", " }\n", "\n", " # 处理数值字段\n", " try:\n", " request_data['couponValue'] = str(float(template_info.get('couponValue', \"0.0\")))\n", " except (ValueError, TypeError):\n", " request_data['couponValue'] = \"0\"\n", "\n", " # 处理可选字段\n", " for field in ['conditionValue', 'validityDays']:\n", " value = template_info.get(field)\n", " request_data[field] = str(value) if value is not None else None\n", "\n", " # 处理列表字段\n", " list_mappings = {\n", " 'channelList': ('channelList', 'channelCode'),\n", " 'useSceneCodeList': ('useSceneList', 'sceneCode'),\n", " 'orgList': ('orgList', 'orgId') if template_info.get('orgRangeType', 0) == 0 else (None, None)\n", " }\n", "\n", " for key, (source, attr) in list_mappings.items():\n", " request_data[key] = [item.get(attr) for item in response_data.get(source, [])] if source else []\n", "\n", " # 处理商品数据\n", " if template_info.get('goodsRangeType', 0) == 0:\n", " for list_type in ['partCategoryList', 'partBrandList']:\n", " request_data[list_type] = [\n", " {k: v for k, v in item.items() if v is not None}\n", " for item in response_data.get(list_type, [])\n", " ]\n", " else:\n", " request_data.update({'partCategoryList': [], 'partBrandList': []})\n", "\n", " return request_data\n", "\n", "\n", "# 2. 主流程\n", "# 读取Excel数据\n", "input_path = r\"C:\\Users\\zy187\\Desktop\\钉钉文件\\正式发券V2 0830-1632.xlsx\"\n", "df = pd.read_excel(input_path, sheet_name='Sheet1')\n", "display(df.head(2)) # 预览数据\n", "\n", "# 获取所有现有优惠券\n", "print(\"正在获取现有优惠券列表...\")\n", "all_coupon_list = []\n", "params = {\n", " 'couponName': '',\n", " 'statusList': '',\n", " 'orgIdList': '',\n", " 'pageNo': '1',\n", " 'pageSize': '100',\n", " 'isDeleted': '0',\n", " 'sorts': '',\n", "}\n", "\n", "response = requests.get(\n", " 'https://yunxiu.f6car.cn/marketing/couponTemplate/paging',\n", " params=params,\n", " cookies=cookies,\n", " headers=headers,\n", ")\n", "total = int(response.json()['data']['total'])\n", "total_page = (total // 100) + 1\n", "\n", "for i in range(1, total_page + 1):\n", " params['pageNo'] = str(i)\n", " response = requests.get(\n", " 'https://yunxiu.f6car.cn/marketing/couponTemplate/paging',\n", " params=params,\n", " cookies=cookies,\n", " headers=headers,\n", " )\n", " all_coupon_list.extend([\n", " (c.get('id'), c.get('couponName'))\n", " for c in response.json()['data'].get(\"data\", [])\n", " ])\n", "\n", "# 分类统计优惠券\n", "print(\"正在分类优惠券...\")\n", "coupon_stats = pd.DataFrame(all_coupon_list, columns=['coupon_id', 'coupon_name'])\n", "coupon_counts = coupon_stats['coupon_name'].value_counts().to_dict()\n", "\n", "# 创建分类DataFrame\n", "df['出现次数'] = df['优惠券名称'].map(coupon_counts).fillna(0)\n", "create_coupon_df = df[df['出现次数'] == 1].copy()\n", "not_found_df = df[df['出现次数'] == 0].copy()\n", "duplicate_df = df[df['出现次数'] > 1].copy()\n", "\n", "# 添加ID映射\n", "id_mapping = coupon_stats.drop_duplicates('coupon_name', keep=False).set_index('coupon_name')['coupon_id']\n", "create_coupon_df['coupon_id'] = create_coupon_df['优惠券名称'].map(id_mapping)\n", "\n", "# 保存分类结果\n", "output_path = r\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\"\n", "not_found_df.to_excel(f\"{output_path}/未找到优惠券.xlsx\", index=False)\n", "duplicate_df.to_excel(f\"{output_path}/重复优惠券.xlsx\", index=False)\n", "\n", "# 处理时间字段\n", "print(\"正在处理时间字段...\")\n", "create_coupon_df[\"新开始时间\"] = create_coupon_df[\"新开始时间\"].astype('int64') // 10 ** 6\n", "create_coupon_df[\"新结束时间\"] = create_coupon_df[\"新结束时间\"].astype('int64') // 10 ** 6\n", "\n", "# 创建新优惠券\n", "print(\"开始创建新优惠券...\")\n", "df_multi_unique = create_coupon_df.drop_duplicates(subset=['优惠券名称', '新开始时间', \"新结束时间\", \"门店id\"]) # 去重\n", "new_id_mapping = {}\n", "results = []\n", "for _, row in df_multi_unique.iterrows():\n", " try:\n", " # 获取模板详情\n", " detail_url = f\"https://yunxiu.f6car.cn/marketing/couponTemplate/detail/{row['coupon_id']}\"\n", " detail_resp = requests.get(detail_url, cookies=cookies, headers=headers)\n", "\n", " # 转换并创建\n", " json_data = convert_coupon_response_to_request(\n", " detail_resp.json()['data'],\n", " row['新开始时间'],\n", " row['新结束时间']\n", " )\n", " create_resp = requests.post(\n", " 'https://yunxiu.f6car.cn/marketing/couponTemplate/add',\n", " cookies=cookies,\n", " headers=headers,\n", " json=json_data\n", " )\n", " new_id = create_resp.json().get('data')\n", " # 将新ID添加到映射中\n", " unique_key = (row['优惠券名称'], row['新开始时间'], row['新结束时间'], row['门店id'])\n", " new_id_mapping[unique_key] = new_id\n", "\n", " # 启用优惠券\n", " if new_id:\n", " enable_resp = requests.put(\n", " 'https://yunxiu.f6car.cn/marketing/couponTemplate/status',\n", " cookies=cookies,\n", " headers=headers,\n", " json={'id': new_id, 'status': 1}\n", " )\n", " status = '成功' if enable_resp.status_code == 200 else '启用失败'\n", " else:\n", " status = '创建失败'\n", "\n", " results.append({\n", " '原名称': row['优惠券名称'],\n", " '原ID': row['coupon_id'],\n", " '新ID': new_id,\n", " '状态': status,\n", " '开始时间': pd.to_datetime(row['新开始时间'], unit='ms'),\n", " '结束时间': pd.to_datetime(row['新结束时间'], unit='ms')\n", " })\n", "\n", " except Exception as e:\n", " results.append({\n", " '原名称': row['优惠券名称'],\n", " '原ID': row['coupon_id'],\n", " '新ID': None,\n", " '状态': f'错误: {str(e)}',\n", " '开始时间': None,\n", " '结束时间': None\n", " })\n", "\n", "\n", "# 将新ID回写到create_coupon_df中 - 使用唯一标识进行映射\n", "def get_new_id(row):\n", " unique_key = (row['优惠券名称'], row['新开始时间'], row['新结束时间'], row['门店id'])\n", " return new_id_mapping.get(unique_key)\n", "\n", "\n", "create_coupon_df['new_id'] = create_coupon_df.apply(get_new_id, axis=1)\n", "create_coupon_df.to_excel(f\"{output_path}/已创建优惠券.xlsx\", index=False)\n", "\n", "print(\"正在获取客户列表...\")\n", "params = {\n", " 'pageSize': '100',\n", " 'pageNo': '1',\n", "}\n", "\n", "response = requests.get(\n", " 'https://yunxiu.f6car.cn/member/customer/listForPermission',\n", " params=params,\n", " cookies=cookies,\n", " headers=headers,\n", ")\n", "\n", "customer_list = []\n", "total = response.json()['data']['total']\n", "total = int(total)\n", "total_page = total // 100 + 1\n", "# for i in tqdm(range(1, total_page + 1), desc=\"获取客户列表\"):\n", "# params['pageNo'] = i\n", "# response = requests.get(\n", "# 'https://yunxiu.f6car.cn/member/customer/listForPermission',\n", "# params=params,\n", "# cookies=cookies,\n", "# headers=headers,\n", "# )\n", "# data_list = response.json()['data'][\"data\"]\n", "# for item in data_list:\n", "# customer_list.append({\n", "# 'name': item['name'],\n", "# 'idCustomer': item['idCustomer'],\n", "# 'cellPhone': item['cellPhone'],\n", "# })\n", "\n", "#\n", "# def create_coupon_distribution_request(customer_list, create_coupon_df):\n", "# # 定义手机号清洗函数 - 确保正确处理各种格式\n", "# def standardize_phone(phone):\n", "# if pd.isna(phone):\n", "# return None\n", "# phone = str(phone).strip().replace(\" \", \"\").replace(\"-\", \"\")\n", "# # 处理科学计数法问题(如1.75828e+10)\n", "# if 'e+' in phone.lower():\n", "# try:\n", "# phone = \"{:.0f}\".format(float(phone))\n", "# except:\n", "# return None\n", "# # 只保留数字\n", "# phone = ''.join(c for c in phone if c.isdigit())\n", "# # 处理86开头的情况\n", "# if len(phone) > 11 and phone.startswith('86'):\n", "# phone = phone[2:]\n", "# return phone if len(phone) == 11 else None\n", "#\n", "# # 预处理数据\n", "# create_coupon_df['clean_phone'] = create_coupon_df['手机号'].apply(standardize_phone)\n", "# clean_customer_list = []\n", "# for customer in customer_list:\n", "# phone = standardize_phone(customer['cellPhone'])\n", "# if phone:\n", "# clean_customer_list.append({\n", "# **customer,\n", "# 'clean_phone': phone\n", "# })\n", "#\n", "# # 调试:打印预处理后的数据\n", "# print(\"\\n预处理后的手机号示例:\")\n", "# print(\"Excel中的手机号:\", create_coupon_df['clean_phone'].head().tolist())\n", "# print(\"客户列表手机号:\", [c['clean_phone'] for c in clean_customer_list[:5]])\n", "#\n", "# # 按手机号和门店ID分组优惠券\n", "# phone_org_to_coupons = defaultdict(list)\n", "#\n", "# for _, row in create_coupon_df.iterrows():\n", "# phone = row['clean_phone']\n", "# org_id = row['门店id']\n", "# if pd.notna(phone) and pd.notna(org_id) and pd.notna(row['new_id']):\n", "# key = (str(phone), str(org_id)) # 确保都是字符串类型\n", "# phone_org_to_coupons[key].append({\n", "# 'coupon_name': row['优惠券名称'],\n", "# 'coupon_id': str(row['new_id']),\n", "# 'counts': int(row['客户发券数量']) if pd.notna(row['客户发券数量']) else 1\n", "# })\n", "#\n", "# # 调试:打印分组结果\n", "# print(\"\\n分组结果(前5个):\")\n", "# for (phone, org_id), coupons in list(phone_org_to_coupons.items())[:5]:\n", "# print(f\"手机号: {phone}, 门店ID: {org_id}\")\n", "# for coupon in coupons:\n", "# print(f\" - {coupon['coupon_name']} (ID: {coupon['coupon_id']}, 数量: {coupon['counts']})\")\n", "#\n", "# # 创建请求体\n", "# request_bodies = []\n", "# matched_count = 0\n", "#\n", "# # 构建手机号到客户的映射\n", "# phone_to_customers = defaultdict(list)\n", "# for customer in clean_customer_list:\n", "# phone_to_customers[customer['clean_phone']].append(customer)\n", "#\n", "# # 匹配逻辑\n", "# for (phone, org_id), coupons in phone_org_to_coupons.items():\n", "# if phone in phone_to_customers:\n", "# matched_count += 1\n", "# customers = phone_to_customers[phone]\n", "#\n", "# # 为每个匹配的客户创建请求\n", "# for customer in customers:\n", "# request_body = {\n", "# \"takeCouponMemo\": \"\",\n", "# \"remark\": \",\".join(f\"{c['coupon_name']}(x{c['counts']})\" for c in coupons),\n", "# \"orgId\": \"15983224677615038465\",\n", "# \"couponTakeRequiredTemplateParamList\": [\n", "# {\"couponTemplateId\": c['coupon_id'], \"quantity\": c['counts']}\n", "# for c in coupons\n", "# ],\n", "# \"operationParam\": {\n", "# \"couponTemplateIdList\": list({c['coupon_id'] for c in coupons})\n", "# },\n", "# \"batchOperateTaskDataList\": [{\n", "# \"dataId\": customer['idCustomer'],\n", "# \"dataName\": customer['name'],\n", "# \"dataInfo\": customer['cellPhone']\n", "# }]\n", "# }\n", "# request_bodies.append(request_body)\n", "#\n", "# print(f\"\\n匹配统计:\")\n", "# print(f\"唯一客户手机号数量: {len(phone_to_customers)}\")\n", "# print(f\"匹配到的优惠券组数: {len(phone_org_to_coupons)}\")\n", "# print(f\"成功匹配组数: {matched_count}\")\n", "# print(f\"生成的请求数量: {len(request_bodies)}\")\n", "#\n", "# return request_bodies\n", "#\n", "#\n", "# # 生成请求体\n", "# request_bodies = create_coupon_distribution_request(customer_list, create_coupon_df)\n", "#\n", "# # 发送请求\n", "# if request_bodies:\n", "# print(\"\\n开始发放优惠券...\")\n", "# success_count = 0\n", "# for i, body in enumerate(tqdm(request_bodies, desc=\"发放进度\")):\n", "# print(body)\n", "# try:\n", "# resp = requests.post(\n", "# 'https://yunxiu.f6car.cn/macan/batch/operate/singleSend/coupon/from/customer',\n", "# cookies=cookies,\n", "# headers=headers,\n", "# json=body,\n", "# timeout=10\n", "# )\n", "# print(resp.text)\n", "# if resp.status_code == 200:\n", "# success_count += 1\n", "# else:\n", "# print(f\"请求失败 (状态码 {resp.status_code}): {resp.text}\")\n", "# except Exception as e:\n", "# print(f\"请求异常: {str(e)}\")\n", "#\n", "# print(f\"\\n发放完成:成功 {success_count}/{len(request_bodies)}\")\n", "# else:\n", "# print(\"\\n没有需要发放的优惠券\")\n", "\n", "# print(\"删除无用优惠券...\")\n", "# delete_list = []\n", "# for index, item in create_coupon_df.iterrows():\n", "# delete_list.append(item['new_id'])\n", "# set(delete_list)\n", "# for item in set(delete_list):\n", "# response = requests.delete(f'https://yunxiu.f6car.cn/marketing/couponTemplate/delete/{item}', cookies=cookies,\n", "# headers=headers)\n", "\n", "# 显示处理结果\n", "result_df = pd.DataFrame(results)\n", "result_df.to_excel(f\"{output_path}/处理结果.xlsx\", index=False)\n", "print(\"处理完成!结果如下:\")\n", "display(result_df)\n", "print(\"\\n检查优惠券创建结果:\")\n", "print(create_coupon_df[['优惠券名称', 'new_id', '门店id', 'clean_phone']].head())\n", "print(\"new_id 为空的数量:\", create_coupon_df['new_id'].isna().sum())\n", "print(\"\\n检查门店ID:\")\n", "print(\"门店ID类型:\", create_coupon_df['门店id'].apply(type).unique())\n", "print(\"门店ID示例:\", create_coupon_df['门店id'].head().tolist())\n", "# 检查哪些行因条件过滤被丢弃\n", "filtered_rows = create_coupon_df[\n", " (create_coupon_df['clean_phone'].isna()) |\n", " (create_coupon_df['门店id'].isna()) |\n", " (create_coupon_df['new_id'].isna())\n", " ]\n", "print(\"\\n被过滤的行数:\", len(filtered_rows))\n", "if not filtered_rows.empty:\n", " print(filtered_rows[['优惠券名称', 'clean_phone', '门店id', 'new_id']].head())\n", "# 显示各类统计\n", "print(\"\\n分类统计:\")\n", "stats = {\n", " '唯一优惠券': len(create_coupon_df),\n", " '未找到优惠券': len(not_found_df),\n", " '重复优惠券': len(duplicate_df),\n", " '成功创建': sum(result_df['状态'] == '成功'),\n", " '创建失败': len(result_df) - sum(result_df['状态'] == '成功')\n", "}\n", "\n", "display(pd.DataFrame.from_dict(stats, orient='index', columns=['数量']))" ], "outputs": [ { "data": { "text/plain": [ " 优惠券名称 新开始时间 新结束时间 手机号 客户发券数量 门店id\n", "0 亲友保养卡 2025-08-30 2030-08-30 20000000000 1 1000001\n", "1 亲友保养卡 2025-08-30 2030-08-30 20000000000 1 1000001" ], "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
优惠券名称新开始时间新结束时间手机号客户发券数量门店id
0亲友保养卡2025-08-302030-08-302000000000011000001
1亲友保养卡2025-08-302030-08-302000000000011000001
\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "正在获取现有优惠券列表...\n", "正在分类优惠券...\n", "正在处理时间字段...\n", "开始创建新优惠券...\n", "正在获取客户列表...\n", "处理完成!结果如下:\n" ] }, { "data": { "text/plain": [ " 原名称 原ID 新ID 状态 开始时间 结束时间\n", "0 亲友保养卡 186171 186920 成功 2025-08-30 2030-08-30\n", "1 合成技术1L 186172 186921 成功 2025-08-30 2031-08-30\n", "2 中泓半合成机油1L 186173 186922 成功 2025-08-30 2031-08-30\n", "3 中泓刹车油 186174 186923 成功 2025-08-30 2031-08-30\n", "4 中泓一个面喷漆A 186175 186924 成功 2025-08-30 2030-08-30\n", ".. ... ... ... .. ... ...\n", "281 鑫通半合成机油1L 186185 187201 成功 2025-08-30 2025-09-09\n", "282 鑫通刹车油 186186 187202 成功 2025-08-30 2025-09-09\n", "283 空调管道清洗一次 186201 187203 成功 2025-08-30 2026-10-09\n", "284 一个面喷漆B 186254 187204 成功 2025-08-30 2026-12-06\n", "285 全合成机油1L 186253 187205 成功 2025-08-30 2026-12-06\n", "\n", "[286 rows x 6 columns]" ], "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
原名称原ID新ID状态开始时间结束时间
0亲友保养卡186171186920成功2025-08-302030-08-30
1合成技术1L186172186921成功2025-08-302031-08-30
2中泓半合成机油1L186173186922成功2025-08-302031-08-30
3中泓刹车油186174186923成功2025-08-302031-08-30
4中泓一个面喷漆A186175186924成功2025-08-302030-08-30
.....................
281鑫通半合成机油1L186185187201成功2025-08-302025-09-09
282鑫通刹车油186186187202成功2025-08-302025-09-09
283空调管道清洗一次186201187203成功2025-08-302026-10-09
284一个面喷漆B186254187204成功2025-08-302026-12-06
285全合成机油1L186253187205成功2025-08-302026-12-06
\n", "

286 rows × 6 columns

\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "检查优惠券创建结果:\n" ] }, { "ename": "KeyError", "evalue": "\"['clean_phone'] not in index\"", "output_type": "error", "traceback": [ "\u001B[31m---------------------------------------------------------------------------\u001B[39m", "\u001B[31mKeyError\u001B[39m Traceback (most recent call last)", "\u001B[36mCell\u001B[39m\u001B[36m \u001B[39m\u001B[32mIn[7]\u001B[39m\u001B[32m, line 406\u001B[39m\n\u001B[32m 404\u001B[39m display(result_df)\n\u001B[32m 405\u001B[39m \u001B[38;5;28mprint\u001B[39m(\u001B[33m\"\u001B[39m\u001B[38;5;130;01m\\n\u001B[39;00m\u001B[33m检查优惠券创建结果:\u001B[39m\u001B[33m\"\u001B[39m)\n\u001B[32m--> \u001B[39m\u001B[32m406\u001B[39m \u001B[38;5;28mprint\u001B[39m(create_coupon_df[[\u001B[33m'\u001B[39m\u001B[33m优惠券名称\u001B[39m\u001B[33m'\u001B[39m, \u001B[33m'\u001B[39m\u001B[33mnew_id\u001B[39m\u001B[33m'\u001B[39m, \u001B[33m'\u001B[39m\u001B[33m门店id\u001B[39m\u001B[33m'\u001B[39m, \u001B[33m'\u001B[39m\u001B[33mclean_phone\u001B[39m\u001B[33m'\u001B[39m]].head())\n\u001B[32m 407\u001B[39m \u001B[38;5;28mprint\u001B[39m(\u001B[33m\"\u001B[39m\u001B[33mnew_id 为空的数量:\u001B[39m\u001B[33m\"\u001B[39m, create_coupon_df[\u001B[33m'\u001B[39m\u001B[33mnew_id\u001B[39m\u001B[33m'\u001B[39m].isna().sum())\n\u001B[32m 408\u001B[39m \u001B[38;5;28mprint\u001B[39m(\u001B[33m\"\u001B[39m\u001B[38;5;130;01m\\n\u001B[39;00m\u001B[33m检查门店ID:\u001B[39m\u001B[33m\"\u001B[39m)\n", "\u001B[36mFile \u001B[39m\u001B[32mD:\\ProgramTools\\anaconda3\\envs\\f6\\Lib\\site-packages\\pandas\\core\\frame.py:4113\u001B[39m, in \u001B[36mDataFrame.__getitem__\u001B[39m\u001B[34m(self, key)\u001B[39m\n\u001B[32m 4111\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m is_iterator(key):\n\u001B[32m 4112\u001B[39m key = \u001B[38;5;28mlist\u001B[39m(key)\n\u001B[32m-> \u001B[39m\u001B[32m4113\u001B[39m indexer = \u001B[38;5;28mself\u001B[39m.columns._get_indexer_strict(key, \u001B[33m\"\u001B[39m\u001B[33mcolumns\u001B[39m\u001B[33m\"\u001B[39m)[\u001B[32m1\u001B[39m]\n\u001B[32m 4115\u001B[39m \u001B[38;5;66;03m# take() does not accept boolean indexers\u001B[39;00m\n\u001B[32m 4116\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28mgetattr\u001B[39m(indexer, \u001B[33m\"\u001B[39m\u001B[33mdtype\u001B[39m\u001B[33m\"\u001B[39m, \u001B[38;5;28;01mNone\u001B[39;00m) == \u001B[38;5;28mbool\u001B[39m:\n", "\u001B[36mFile \u001B[39m\u001B[32mD:\\ProgramTools\\anaconda3\\envs\\f6\\Lib\\site-packages\\pandas\\core\\indexes\\base.py:6212\u001B[39m, in \u001B[36mIndex._get_indexer_strict\u001B[39m\u001B[34m(self, key, axis_name)\u001B[39m\n\u001B[32m 6209\u001B[39m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[32m 6210\u001B[39m keyarr, indexer, new_indexer = \u001B[38;5;28mself\u001B[39m._reindex_non_unique(keyarr)\n\u001B[32m-> \u001B[39m\u001B[32m6212\u001B[39m \u001B[38;5;28mself\u001B[39m._raise_if_missing(keyarr, indexer, axis_name)\n\u001B[32m 6214\u001B[39m keyarr = \u001B[38;5;28mself\u001B[39m.take(indexer)\n\u001B[32m 6215\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28misinstance\u001B[39m(key, Index):\n\u001B[32m 6216\u001B[39m \u001B[38;5;66;03m# GH 42790 - Preserve name from an Index\u001B[39;00m\n", "\u001B[36mFile \u001B[39m\u001B[32mD:\\ProgramTools\\anaconda3\\envs\\f6\\Lib\\site-packages\\pandas\\core\\indexes\\base.py:6264\u001B[39m, in \u001B[36mIndex._raise_if_missing\u001B[39m\u001B[34m(self, key, indexer, axis_name)\u001B[39m\n\u001B[32m 6261\u001B[39m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mKeyError\u001B[39;00m(\u001B[33mf\u001B[39m\u001B[33m\"\u001B[39m\u001B[33mNone of [\u001B[39m\u001B[38;5;132;01m{\u001B[39;00mkey\u001B[38;5;132;01m}\u001B[39;00m\u001B[33m] are in the [\u001B[39m\u001B[38;5;132;01m{\u001B[39;00maxis_name\u001B[38;5;132;01m}\u001B[39;00m\u001B[33m]\u001B[39m\u001B[33m\"\u001B[39m)\n\u001B[32m 6263\u001B[39m not_found = \u001B[38;5;28mlist\u001B[39m(ensure_index(key)[missing_mask.nonzero()[\u001B[32m0\u001B[39m]].unique())\n\u001B[32m-> \u001B[39m\u001B[32m6264\u001B[39m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mKeyError\u001B[39;00m(\u001B[33mf\u001B[39m\u001B[33m\"\u001B[39m\u001B[38;5;132;01m{\u001B[39;00mnot_found\u001B[38;5;132;01m}\u001B[39;00m\u001B[33m not in index\u001B[39m\u001B[33m\"\u001B[39m)\n", "\u001B[31mKeyError\u001B[39m: \"['clean_phone'] not in index\"" ] } ], "execution_count": 7 }, { "metadata": { "ExecuteTime": { "end_time": "2025-08-30T09:06:07.317386Z", "start_time": "2025-08-30T09:06:06.401828Z" } }, "cell_type": "code", "source": [ "print(\"删除无用优惠券...\")\n", "delete_list = []\n", "for index, item in create_coupon_df.iterrows():\n", " delete_list.append(item['new_id'])\n", "set(delete_list)\n", "for item in set(delete_list):\n", " response = requests.delete(f'https://yunxiu.f6car.cn/marketing/couponTemplate/delete/{item}', cookies=cookies,\n", " headers=headers)" ], "id": "1f5c0c23fc53805b", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "删除无用优惠券...\n" ] }, { "ename": "KeyError", "evalue": "'new_id'", "output_type": "error", "traceback": [ "\u001B[31m---------------------------------------------------------------------------\u001B[39m", "\u001B[31mKeyError\u001B[39m Traceback (most recent call last)", "\u001B[36mFile \u001B[39m\u001B[32mD:\\ProgramTools\\anaconda3\\envs\\f6\\Lib\\site-packages\\pandas\\core\\indexes\\base.py:3812\u001B[39m, in \u001B[36mIndex.get_loc\u001B[39m\u001B[34m(self, key)\u001B[39m\n\u001B[32m 3811\u001B[39m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[32m-> \u001B[39m\u001B[32m3812\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m._engine.get_loc(casted_key)\n\u001B[32m 3813\u001B[39m \u001B[38;5;28;01mexcept\u001B[39;00m \u001B[38;5;167;01mKeyError\u001B[39;00m \u001B[38;5;28;01mas\u001B[39;00m err:\n", "\u001B[36mFile \u001B[39m\u001B[32mpandas/_libs/index.pyx:167\u001B[39m, in \u001B[36mpandas._libs.index.IndexEngine.get_loc\u001B[39m\u001B[34m()\u001B[39m\n", "\u001B[36mFile \u001B[39m\u001B[32mpandas/_libs/index.pyx:196\u001B[39m, in \u001B[36mpandas._libs.index.IndexEngine.get_loc\u001B[39m\u001B[34m()\u001B[39m\n", "\u001B[36mFile \u001B[39m\u001B[32mpandas/_libs/hashtable_class_helper.pxi:7088\u001B[39m, in \u001B[36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001B[39m\u001B[34m()\u001B[39m\n", "\u001B[36mFile \u001B[39m\u001B[32mpandas/_libs/hashtable_class_helper.pxi:7096\u001B[39m, in \u001B[36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001B[39m\u001B[34m()\u001B[39m\n", "\u001B[31mKeyError\u001B[39m: 'new_id'", "\nThe above exception was the direct cause of the following exception:\n", "\u001B[31mKeyError\u001B[39m Traceback (most recent call last)", "\u001B[36mCell\u001B[39m\u001B[36m \u001B[39m\u001B[32mIn[2]\u001B[39m\u001B[32m, line 4\u001B[39m\n\u001B[32m 2\u001B[39m delete_list = []\n\u001B[32m 3\u001B[39m \u001B[38;5;28;01mfor\u001B[39;00m index, item \u001B[38;5;129;01min\u001B[39;00m create_coupon_df.iterrows():\n\u001B[32m----> \u001B[39m\u001B[32m4\u001B[39m delete_list.append(item[\u001B[33m'\u001B[39m\u001B[33mnew_id\u001B[39m\u001B[33m'\u001B[39m])\n\u001B[32m 5\u001B[39m \u001B[38;5;28mset\u001B[39m(delete_list)\n\u001B[32m 6\u001B[39m \u001B[38;5;28;01mfor\u001B[39;00m item \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mset\u001B[39m(delete_list):\n", "\u001B[36mFile \u001B[39m\u001B[32mD:\\ProgramTools\\anaconda3\\envs\\f6\\Lib\\site-packages\\pandas\\core\\series.py:1130\u001B[39m, in \u001B[36mSeries.__getitem__\u001B[39m\u001B[34m(self, key)\u001B[39m\n\u001B[32m 1127\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m._values[key]\n\u001B[32m 1129\u001B[39m \u001B[38;5;28;01melif\u001B[39;00m key_is_scalar:\n\u001B[32m-> \u001B[39m\u001B[32m1130\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m._get_value(key)\n\u001B[32m 1132\u001B[39m \u001B[38;5;66;03m# Convert generator to list before going through hashable part\u001B[39;00m\n\u001B[32m 1133\u001B[39m \u001B[38;5;66;03m# (We will iterate through the generator there to check for slices)\u001B[39;00m\n\u001B[32m 1134\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m is_iterator(key):\n", "\u001B[36mFile \u001B[39m\u001B[32mD:\\ProgramTools\\anaconda3\\envs\\f6\\Lib\\site-packages\\pandas\\core\\series.py:1246\u001B[39m, in \u001B[36mSeries._get_value\u001B[39m\u001B[34m(self, label, takeable)\u001B[39m\n\u001B[32m 1243\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m._values[label]\n\u001B[32m 1245\u001B[39m \u001B[38;5;66;03m# Similar to Index.get_value, but we do not fall back to positional\u001B[39;00m\n\u001B[32m-> \u001B[39m\u001B[32m1246\u001B[39m loc = \u001B[38;5;28mself\u001B[39m.index.get_loc(label)\n\u001B[32m 1248\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m is_integer(loc):\n\u001B[32m 1249\u001B[39m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28mself\u001B[39m._values[loc]\n", "\u001B[36mFile \u001B[39m\u001B[32mD:\\ProgramTools\\anaconda3\\envs\\f6\\Lib\\site-packages\\pandas\\core\\indexes\\base.py:3819\u001B[39m, in \u001B[36mIndex.get_loc\u001B[39m\u001B[34m(self, key)\u001B[39m\n\u001B[32m 3814\u001B[39m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28misinstance\u001B[39m(casted_key, \u001B[38;5;28mslice\u001B[39m) \u001B[38;5;129;01mor\u001B[39;00m (\n\u001B[32m 3815\u001B[39m \u001B[38;5;28misinstance\u001B[39m(casted_key, abc.Iterable)\n\u001B[32m 3816\u001B[39m \u001B[38;5;129;01mand\u001B[39;00m \u001B[38;5;28many\u001B[39m(\u001B[38;5;28misinstance\u001B[39m(x, \u001B[38;5;28mslice\u001B[39m) \u001B[38;5;28;01mfor\u001B[39;00m x \u001B[38;5;129;01min\u001B[39;00m casted_key)\n\u001B[32m 3817\u001B[39m ):\n\u001B[32m 3818\u001B[39m \u001B[38;5;28;01mraise\u001B[39;00m InvalidIndexError(key)\n\u001B[32m-> \u001B[39m\u001B[32m3819\u001B[39m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mKeyError\u001B[39;00m(key) \u001B[38;5;28;01mfrom\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[34;01merr\u001B[39;00m\n\u001B[32m 3820\u001B[39m \u001B[38;5;28;01mexcept\u001B[39;00m \u001B[38;5;167;01mTypeError\u001B[39;00m:\n\u001B[32m 3821\u001B[39m \u001B[38;5;66;03m# If we have a listlike key, _check_indexing_error will raise\u001B[39;00m\n\u001B[32m 3822\u001B[39m \u001B[38;5;66;03m# InvalidIndexError. Otherwise we fall through and re-raise\u001B[39;00m\n\u001B[32m 3823\u001B[39m \u001B[38;5;66;03m# the TypeError.\u001B[39;00m\n\u001B[32m 3824\u001B[39m \u001B[38;5;28mself\u001B[39m._check_indexing_error(key)\n", "\u001B[31mKeyError\u001B[39m: 'new_id'" ] } ], "execution_count": 2 }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": [ "import requests\n", "\n", "cookies = {\n", " 'macanSESSIONID': '6f5ca5b1-1e19-4858-8dbf-a03ad20518f4',\n", " 'erpLanguage': 'zh-CN',\n", " 'tmall': 'false',\n", " 'Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1756257166,1756352022,1756431231,1756538308',\n", " 'HMACCOUNT': '55F2182717FD6AE6',\n", " 'prodOrg': '15983224677615038465',\n", " 'unp': '15983224680525881432',\n", " 'un': '15983224680525881432',\n", " '_up': '-NillNN-qyBEJ--t3vnSknvoOF52xfKPsskD23s6WOJVXvDFpJvQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqEfURrYon0gUI-_lRv-ZNHu3M-GTc15CyF3WsqOVVjOkfmF7COhBtrEj9mnm4lc2yRzo.',\n", " 'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2215983224680525881432%22%2C%22first_id%22%3A%22198a89fdaa54f-0a897244f8104b8-4c657b58-2073600-198a89fdaa61b71%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%22198a89fdaa54f-0a897244f8104b8-4c657b58-2073600-198a89fdaa61b71%22%7D',\n", " 'Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1756543081',\n", "}\n", "\n", "headers = {\n", " 'accept': 'application/json, text/plain, */*',\n", " 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',\n", " 'content-type': 'application/json;charset=UTF-8',\n", " 'origin': 'https://yunxiu.f6car.cn',\n", " 'priority': 'u=1, i',\n", " 'referer': 'https://yunxiu.f6car.cn/erp/view/index.html',\n", " 'sec-ch-ua': '\"Not;A=Brand\";v=\"99\", \"Microsoft Edge\";v=\"139\", \"Chromium\";v=\"139\"',\n", " 'sec-ch-ua-mobile': '?0',\n", " 'sec-ch-ua-platform': '\"Windows\"',\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/139.0.0.0 Safari/537.36 Edg/139.0.0.0',\n", " # 'cookie': 'macanSESSIONID=6f5ca5b1-1e19-4858-8dbf-a03ad20518f4; erpLanguage=zh-CN; tmall=false; Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1756257166,1756352022,1756431231,1756538308; HMACCOUNT=55F2182717FD6AE6; prodOrg=15983224677615038465; unp=15983224680525881432; un=15983224680525881432; _up=-NillNN-qyBEJ--t3vnSknvoOF52xfKPsskD23s6WOJVXvDFpJvQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqEfURrYon0gUI-_lRv-ZNHu3M-GTc15CyF3WsqOVVjOkfmF7COhBtrEj9mnm4lc2yRzo.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215983224680525881432%22%2C%22first_id%22%3A%22198a89fdaa54f-0a897244f8104b8-4c657b58-2073600-198a89fdaa61b71%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%22198a89fdaa54f-0a897244f8104b8-4c657b58-2073600-198a89fdaa61b71%22%7D; Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1756543081',\n", "}\n", "\n", "json_data = {\n", " 'couponTemplateId': '186321',\n", " 'idCustomers': [\n", " '12092452785052741938',\n", " ],\n", "}\n", "\n", "response = requests.post(\n", " 'https://yunxiu.f6car.cn/macan/coupon/info/stationBatchGiveCoupon',\n", " cookies=cookies,\n", " headers=headers,\n", " json=json_data,\n", ")\n", "\n", "# Note: json_data will not be serialized by requests\n", "# exactly as it was in the original request.\n", "#data = '{\"couponTemplateId\":\"186321\",\"idCustomers\":[\"12092452785052741938\"]}'\n", "#response = requests.post(\n", "# 'https://yunxiu.f6car.cn/macan/coupon/info/stationBatchGiveCoupon',\n", "# cookies=cookies,\n", "# headers=headers,\n", "# data=data,\n", "#)\n" ], "id": "faa3f2c3556e35d3" }, { "metadata": { "ExecuteTime": { "end_time": "2025-08-30T09:09:01.674860Z", "start_time": "2025-08-30T09:09:00.700524Z" } }, "cell_type": "code", "source": [ "import requests\n", "\n", "cookies = {\n", " 'marketingSESSIONID': '3d297d6a-95b3-4f8c-a0aa-d3f9f4f95f36',\n", " 'erpLanguage': 'zh-CN',\n", " 'tmall': 'false',\n", " 'Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1756257166,1756352022,1756431231,1756538308',\n", " 'HMACCOUNT': '55F2182717FD6AE6',\n", " 'prodOrg': '15983224677615038465',\n", " 'unp': '15983224680525881432',\n", " 'un': '15983224680525881432',\n", " '_up': '-NillNN-qyBEJ--t3vnSknvoOF52xfKPsskD23s6WOJVXvDFpJvQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqEfURrYon0gUI-_lRv-ZNHu3M-GTc15CyF3WsqOVVjOkfmF7COhBtrEj9mnm4lc2yRzo.',\n", " 'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2215983224680525881432%22%2C%22first_id%22%3A%22198a89fdaa54f-0a897244f8104b8-4c657b58-2073600-198a89fdaa61b71%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%22198a89fdaa54f-0a897244f8104b8-4c657b58-2073600-198a89fdaa61b71%22%7D',\n", " 'Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1756543081',\n", "}\n", "\n", "headers = {\n", " 'accept': 'application/json, text/plain, */*',\n", " 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',\n", " 'priority': 'u=1, i',\n", " 'referer': 'https://yunxiu.f6car.cn/erp/view/index.html',\n", " 'sec-ch-ua': '\"Not;A=Brand\";v=\"99\", \"Microsoft Edge\";v=\"139\", \"Chromium\";v=\"139\"',\n", " 'sec-ch-ua-mobile': '?0',\n", " 'sec-ch-ua-platform': '\"Windows\"',\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/139.0.0.0 Safari/537.36 Edg/139.0.0.0',\n", " # 'cookie': 'marketingSESSIONID=3d297d6a-95b3-4f8c-a0aa-d3f9f4f95f36; erpLanguage=zh-CN; tmall=false; Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1756257166,1756352022,1756431231,1756538308; HMACCOUNT=55F2182717FD6AE6; prodOrg=15983224677615038465; unp=15983224680525881432; un=15983224680525881432; _up=-NillNN-qyBEJ--t3vnSknvoOF52xfKPsskD23s6WOJVXvDFpJvQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqEfURrYon0gUI-_lRv-ZNHu3M-GTc15CyF3WsqOVVjOkfmF7COhBtrEj9mnm4lc2yRzo.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215983224680525881432%22%2C%22first_id%22%3A%22198a89fdaa54f-0a897244f8104b8-4c657b58-2073600-198a89fdaa61b71%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%22198a89fdaa54f-0a897244f8104b8-4c657b58-2073600-198a89fdaa61b71%22%7D; Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1756543081',\n", "}\n", "all_data = []\n", "for i in range (1, 8):\n", " params = {\n", " 'couponName': '',\n", " 'statusList': '',\n", " 'orgIdList': '',\n", " 'pageNo': i,\n", " 'pageSize': '100',\n", " 'isDeleted': '0',\n", " 'sorts': '',\n", " }\n", "\n", " response = requests.get(\n", " 'https://yunxiu.f6car.cn/marketing/couponTemplate/paging',\n", " params=params,\n", " cookies=cookies,\n", " headers=headers,\n", " )\n", " all_data += response.json().get('data').get(\"data\")\n", "df = pd.DataFrame(all_data)\n", "df.to_csv('coupon.csv', index=False)\n" ], "id": "407bb3ef2e7c1bf5", "outputs": [], "execution_count": 5 }, { "metadata": { "ExecuteTime": { "end_time": "2025-09-01T01:53:12.937155Z", "start_time": "2025-09-01T01:52:27.753609Z" } }, "cell_type": "code", "source": [ "import requests\n", "import pandas as pd\n", "\n", "cookies = {\n", " 'marketingSESSIONID': '3d297d6a-95b3-4f8c-a0aa-d3f9f4f95f36',\n", " 'erpLanguage': 'zh-CN',\n", " 'tmall': 'false',\n", " 'Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1756257166,1756352022,1756431231,1756538308',\n", " 'HMACCOUNT': '55F2182717FD6AE6',\n", " 'prodOrg': '15983224677615038465',\n", " 'unp': '15983224680525881432',\n", " 'un': '15983224680525881432',\n", " '_up': '-NillNN-qyBEJ--t3vnSknvoOF52xfKPsskD23s6WOJVXvDFpJvQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqEfURrYon0gUI-_lRv-ZNHu3M-GTc15CyF3WsqOVVjOkfmF7COhBtrEj9mnm4lc2yRzo.',\n", " 'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2215983224680525881432%22%2C%22first_id%22%3A%22198a89fdaa54f-0a897244f8104b8-4c657b58-2073600-198a89fdaa61b71%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%22198a89fdaa54f-0a897244f8104b8-4c657b58-2073600-198a89fdaa61b71%22%7D',\n", " 'Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1756543081',\n", "}\n", "\n", "headers = {\n", " 'accept': 'application/json, text/plain, */*',\n", " 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',\n", " 'priority': 'u=1, i',\n", " 'referer': 'https://yunxiu.f6car.cn/erp/view/index.html',\n", " 'sec-ch-ua': '\"Not;A=Brand\";v=\"99\", \"Microsoft Edge\";v=\"139\", \"Chromium\";v=\"139\"',\n", " 'sec-ch-ua-mobile': '?0',\n", " 'sec-ch-ua-platform': '\"Windows\"',\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/139.0.0.0 Safari/537.36 Edg/139.0.0.0',\n", " # 'cookie': 'marketingSESSIONID=3d297d6a-95b3-4f8c-a0aa-d3f9f4f95f36; erpLanguage=zh-CN; tmall=false; Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1756257166,1756352022,1756431231,1756538308; HMACCOUNT=55F2182717FD6AE6; prodOrg=15983224677615038465; unp=15983224680525881432; un=15983224680525881432; _up=-NillNN-qyBEJ--t3vnSknvoOF52xfKPsskD23s6WOJVXvDFpJvQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqEfURrYon0gUI-_lRv-ZNHu3M-GTc15CyF3WsqOVVjOkfmF7COhBtrEj9mnm4lc2yRzo.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215983224680525881432%22%2C%22first_id%22%3A%22198a89fdaa54f-0a897244f8104b8-4c657b58-2073600-198a89fdaa61b71%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%22198a89fdaa54f-0a897244f8104b8-4c657b58-2073600-198a89fdaa61b71%22%7D; Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1756543081',\n", "}\n", "\n", "print(\"删除无用优惠券...\")\n", "delete_list = []\n", "df = pd.read_excel(fr\"D:\\Idea Project\\F6+宜搭+其它(1)\\张阳脚本\\文件输出\\已创建优惠券.xlsx\",sheet_name=\"导出计数_new_id\")\n", "for index , row in df.iterrows():\n", " response = requests.delete(f'https://yunxiu.f6car.cn/marketing/couponTemplate/delete/{row[\"new_id\"]}', cookies=cookies,\n", " headers=headers)\n", " print(response.json())" ], "id": "25637a7751d68332", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "删除无用优惠券...\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n", "{'success': True, 'code': 200, 'message': None, 'data': True}\n" ] } ], "execution_count": 2 }, { "metadata": { "ExecuteTime": { "end_time": "2025-08-30T09:18:20.606032Z", "start_time": "2025-08-30T09:18:13.351642Z" } }, "cell_type": "code", "source": [ "print(\"正在获取客户列表...\")\n", "params = {\n", " 'pageSize': '100',\n", " 'pageNo': '1',\n", "}\n", "\n", "response = requests.get(\n", " 'https://yunxiu.f6car.cn/member/customer/listForPermission',\n", " params=params,\n", " cookies=cookies,\n", " headers=headers,\n", ")\n", "\n", "customer_list = []\n", "total = response.json()['data']['total']\n", "total = int(total)\n", "total_page = total // 100 + 1\n", "for i in tqdm(range(1, total_page + 1), desc=\"获取客户列表\"):\n", " params['pageNo'] = i\n", " response = requests.get(\n", " 'https://yunxiu.f6car.cn/member/customer/listForPermission',\n", " params=params,\n", " cookies=cookies,\n", " headers=headers,\n", " )\n", " data_list = response.json()['data'][\"data\"]\n", " for item in data_list:\n", " customer_list.append({\n", " 'name': item['name'],\n", " 'idCustomer': item['idCustomer'],\n", " 'cellPhone': item['cellPhone'],\n", " })\n", "df = pd.DataFrame(customer_list)\n", "df.to_csv('customer.csv', index=False)" ], "id": "ab17655f1fd643f", "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "正在获取客户列表...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "获取客户列表: 100%|██████████| 38/38 [00:07<00:00, 5.41it/s]\n" ] } ], "execution_count": 8 }, { "metadata": {}, "cell_type": "markdown", "source": "单独发券", "id": "f2dffe95404b36dc" }, { "metadata": {}, "cell_type": "code", "outputs": [], "execution_count": null, "source": [ "import requests\n", "\n", "cookies = {\n", " 'macanSESSIONID': '6f5ca5b1-1e19-4858-8dbf-a03ad20518f4',\n", " 'erpLanguage': 'zh-CN',\n", " 'tmall': 'false',\n", " 'Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1756257166,1756352022,1756431231,1756538308',\n", " 'HMACCOUNT': '55F2182717FD6AE6',\n", " 'prodOrg': '15983224677615038465',\n", " 'unp': '15983224680525881432',\n", " 'un': '15983224680525881432',\n", " '_up': '-NillNN-qyBEJ--t3vnSknvoOF52xfKPsskD23s6WOJVXvDFpJvQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqEfURrYon0gUI-_lRv-ZNHu3M-GTc15CyF3WsqOVVjOkfmF7COhBtrEj9mnm4lc2yRzo.',\n", " 'sensorsdata2015jssdkcross': '%7B%22distinct_id%22%3A%2215983224680525881432%22%2C%22first_id%22%3A%22198a89fdaa54f-0a897244f8104b8-4c657b58-2073600-198a89fdaa61b71%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%22198a89fdaa54f-0a897244f8104b8-4c657b58-2073600-198a89fdaa61b71%22%7D',\n", " 'Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a': '1756543081',\n", "}\n", "\n", "headers = {\n", " 'accept': 'application/json, text/plain, */*',\n", " 'accept-language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',\n", " 'content-type': 'application/json;charset=UTF-8',\n", " 'origin': 'https://yunxiu.f6car.cn',\n", " 'priority': 'u=1, i',\n", " 'referer': 'https://yunxiu.f6car.cn/erp/view/index.html',\n", " 'sec-ch-ua': '\"Not;A=Brand\";v=\"99\", \"Microsoft Edge\";v=\"139\", \"Chromium\";v=\"139\"',\n", " 'sec-ch-ua-mobile': '?0',\n", " 'sec-ch-ua-platform': '\"Windows\"',\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/139.0.0.0 Safari/537.36 Edg/139.0.0.0',\n", " # 'cookie': 'macanSESSIONID=6f5ca5b1-1e19-4858-8dbf-a03ad20518f4; erpLanguage=zh-CN; tmall=false; Hm_lvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1756257166,1756352022,1756431231,1756538308; HMACCOUNT=55F2182717FD6AE6; prodOrg=15983224677615038465; unp=15983224680525881432; un=15983224680525881432; _up=-NillNN-qyBEJ--t3vnSknvoOF52xfKPsskD23s6WOJVXvDFpJvQjaZJ9Q3d-WrAAGgt60MgQHajHWBHMKKxj0CuWypi1JgKCFP1EPEk-HbqEfURrYon0gUI-_lRv-ZNHu3M-GTc15CyF3WsqOVVjOkfmF7COhBtrEj9mnm4lc2yRzo.; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%2215983224680525881432%22%2C%22first_id%22%3A%22198a89fdaa54f-0a897244f8104b8-4c657b58-2073600-198a89fdaa61b71%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22%24device_id%22%3A%22198a89fdaa54f-0a897244f8104b8-4c657b58-2073600-198a89fdaa61b71%22%7D; Hm_lpvt_25f5e7a3a5dbb293d7dd35d5f1be8d0a=1756543081',\n", "}\n", "\n", "json_data = {\n", " 'couponTemplateId': '187205',\n", " 'idCustomers': [\n", " '12092452785052741938',\n", " ],\n", "}\n", "\n", "response = requests.post(\n", " 'https://yunxiu.f6car.cn/macan/coupon/info/stationBatchGiveCoupon',\n", " cookies=cookies,\n", " headers=headers,\n", " json=json_data,\n", ")\n", "\n", "# Note: json_data will not be serialized by requests\n", "# exactly as it was in the original request.\n", "#data = '{\"couponTemplateId\":\"187205\",\"idCustomers\":[\"12092452785052741938\"]}'\n", "#response = requests.post(\n", "# 'https://yunxiu.f6car.cn/macan/coupon/info/stationBatchGiveCoupon',\n", "# cookies=cookies,\n", "# headers=headers,\n", "# data=data,\n", "#)\n" ], "id": "5bf9f56c31418e32" } ], "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 }