# -*- coding: utf-8 -*-
"""
=============================================================
  易盾识别 Demo (Python版)

  功能说明：
  提交易盾验证码识别任务

  使用方法：
  1. 安装依赖：pip install requests
  2. 将下方的 APPKEY 替换为你自己的用户密钥
  3. 将 YIDUN_ID 替换为你获取到的易盾验证码 id 参数
  4. 将 YIDUN_REFERER 替换为你获取到的 referer 值
  5. 运行脚本：python recognize_yidun.py
=============================================================
"""

import requests
import json
import sys

# ======================== 配置区域（请替换为你自己的参数）========================
# 用户密钥，登录平台后获取
APPKEY = "你的appkey"

# 易盾验证码的 id 参数值（从目标网站抓包获取）
YIDUN_ID = "你获取到的易盾id"

# 易盾验证码的 referer 值（从目标网站抓包获取，注意不是当前页面的URL）
YIDUN_REFERER = "你获取到的referer地址"

# 项目类型，易盾固定填写 500（特殊类型请联系客服）
ITEM_ID = 500

# 可选参数：代理IP（格式示例：http://IP:端口，若需白名单支持请联系客服。http://账号:密码@proxy.com:8080 或 socks5://127.0.0.1:9888）
PROXY = ""

# 可选参数：开发者密钥（如果有的话填写）
DEVKEY = ""
# ===============================================================================

# API基础地址
API_BASE = "http://api.ttocr.com/api"


def recognize_yidun():
    """
    提交易盾验证码识别任务
    接口地址：POST http://api.ttocr.com/api/recognize2
    必填参数：appkey, id, referer, itemid(固定500)
    可选参数：proxy, devkey, ua, type
    重要提示：如果结果无法通过验证，请将返回的validate进行urlencode编码后再尝试
    """
    print("=" * 50)
    print("[易盾识别] 正在提交易盾识别任务...")
    print("=" * 50)
    url = f"{API_BASE}/recognize2"
    post_data = {
        "appkey": APPKEY,
        "id": YIDUN_ID,
        "referer": YIDUN_REFERER,
        "itemid": ITEM_ID,
    }
    if PROXY:
        post_data["proxy"] = PROXY
    if DEVKEY:
        post_data["devkey"] = DEVKEY
    print(f"[请求参数] id={YIDUN_ID}")
    print(f"[请求参数] referer={YIDUN_REFERER}")
    print(f"[请求参数] itemid={ITEM_ID}")
    try:
        response = requests.post(url, data=post_data, timeout=60)
        result = response.json()
        if result.get("status") == 1:
            print(f"[成功] 识别成功！耗时：{result.get('time')}ms")
            print(f"[识别结果] {result.get('data')}")
        else:
            print(f"[失败] 识别失败，错误信息：{result.get('msg')}")
            print(f"[提示] 错误状态码：{result.get('status')}，请参考错误代码表排查")
        print(f"\n[完整响应] {json.dumps(result, ensure_ascii=False, indent=2)}")
        return result
    except requests.exceptions.RequestException as e:
        print(f"[异常] 网络请求出错：{e}")
        return None


if __name__ == "__main__":
    print("*" * 60)
    print("  易盾识别 Demo (Python版)")
    print("*" * 60)
    if APPKEY == "你的appkey":
        print("\n[错误] 请先在脚本顶部的配置区域填写你的 APPKEY")
        sys.exit(1)
    if YIDUN_ID == "你获取到的易盾id":
        print("\n[错误] 请先在脚本顶部的配置区域填写 YIDUN_ID 和 YIDUN_REFERER")
        sys.exit(1)
    recognize_yidun()
    print("\n" + "=" * 50)
    print("[完成] 识别执行完毕")
    print("=" * 50)

