获取Tinder API认证令牌遇问题:接口404及TypeError错误求助
如何解决Tinder API令牌获取时的404错误与TypeError?
我正在开发一款基于DialogFlow的AI机器人,用于与Tinder匹配对象进行智能对话,相关脚本归属tinderbot仓库。目前尝试获取认证令牌以对接机器人,但运行脚本并输入手机验证码后出现错误,且脚本顶部的API链接均返回404。
原脚本代码:
import json import requests CODE_REQUEST_URL = "https://api.gotinder.com/v2/auth/sms/send?auth_type=sms" CODE_VALIDATE_URL = "https://api.gotinder.com/v2/auth/sms/validate?auth_type=sms" TOKEN_URL = "https://api.gotinder.com/v2/auth/login/sms" HEADERS = {'user-agent': 'Tinder/11.4.0 (iPhone; iOS 12.4.1; Scale/2.00)', 'content-type': 'application/json'} def send_otp_code(phone_number): data = {'phone_number': phone_number} r = requests.post(CODE_REQUEST_URL, headers=HEADERS, data=json.dumps(data), verify=False) print(r.url) response = r.json() if(response.get("data")['sms_sent'] == False): return False else: return True def get_refresh_token(otp_code, phone_number): data = {'otp_code': otp_code, 'phone_number': phone_number} r = requests.post(CODE_VALIDATE_URL, headers=HEADERS, data=json.dumps(data), verify=False) print(r.url) response = r.json() if(response.get("data")["validated"] == False): return False else: return response.get("data")["refresh_token"] def get_api_token(refresh_token): data = {'refresh_token': refresh_token } r = requests.post(TOKEN_URL, headers=HEADERS, data=json.dumps(data), verify=False) print(r.url) response = r.json() return response.get("data")["api_token"] phone_number = input("Please enter your phone number under the international format (country code + number): ") log_code = send_otp_code(phone_number) otp_code = input("Please enter the code you've received by sms: ") refresh_token = get_refresh_token(otp_code, phone_number) print("Here is your Tinder token: " + str(get_api_token(refresh_token)))
运行后报错:
File "c:\Users\MIS-l\OneDrive\Desktop\tinderbot-master\phone_auth_token.py", line 44, in <module> print("Here is your Tinder token: " + get_api_token(refresh_token)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "c:\Users\MIS-l\OneDrive\Desktop\tinderbot-master\phone_auth_token.py", line 37, in get_api_token return response.get("data")["api_token"] ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^ TypeError: 'NoneType' object is not subscriptable
解决方案
1. 更新API端点
Tinder已废弃v2版本的认证接口,需替换为v3端点:
- 发送OTP:
https://api.gotinder.com/v3/auth/sms/send?auth_type=sms - 验证OTP:
https://api.gotinder.com/v3/auth/sms/validate?auth_type=sms - 获取令牌:
https://api.gotinder.com/v3/auth/login/sms
2. 增加响应空值判断
原代码未处理API返回无data字段的情况,需在每个函数中添加空值检查,避免TypeError。
3. 更新User-Agent
使用较新版本的Tinder客户端UA,降低被服务器拦截的概率。
修改后的完整代码
import json import requests # 替换为v3 API端点 CODE_REQUEST_URL = "https://api.gotinder.com/v3/auth/sms/send?auth_type=sms" CODE_VALIDATE_URL = "https://api.gotinder.com/v3/auth/sms/validate?auth_type=sms" TOKEN_URL = "https://api.gotinder.com/v3/auth/login/sms" # 更新为近期的User-Agent HEADERS = { 'user-agent': 'Tinder/13.10.0 (iPhone; iOS 16.5; Scale/3.00)', 'content-type': 'application/json' } def send_otp_code(phone_number): data = {'phone_number': phone_number} try: r = requests.post(CODE_REQUEST_URL, headers=HEADERS, data=json.dumps(data), verify=False) r.raise_for_status() # 捕获HTTP错误 response = r.json() data = response.get("data") if not data or data.get('sms_sent') is False: return False return True except Exception as e: print(f"发送OTP失败: {str(e)}") return False def get_refresh_token(otp_code, phone_number): data = {'otp_code': otp_code, 'phone_number': phone_number} try: r = requests.post(CODE_VALIDATE_URL, headers=HEADERS, data=json.dumps(data), verify=False) r.raise_for_status() response = r.json() data = response.get("data") if not data or data.get("validated") is False: return False return data.get("refresh_token") except Exception as e: print(f"验证OTP失败: {str(e)}") return False def get_api_token(refresh_token): if not refresh_token: print("无效的refresh_token") return None data = {'refresh_token': refresh_token } try: r = requests.post(TOKEN_URL, headers=HEADERS, data=json.dumps(data), verify=False) r.raise_for_status() response = r.json() data = response.get("data") if not data: print("API响应无data字段") return None return data.get("api_token") except Exception as e: print(f"获取API令牌失败: {str(e)}") return None phone_number = input("请输入国际格式手机号(国家代码+号码): ") otp_sent = send_otp_code(phone_number) if not otp_sent: print("发送验证码失败,请检查手机号或网络") exit() otp_code = input("请输入收到的短信验证码: ") refresh_token = get_refresh_token(otp_code, phone_number) if not refresh_token: print("验证码验证失败") exit() api_token = get_api_token(refresh_token) if api_token: print(f"你的Tinder令牌: {api_token}") else: print("获取令牌失败")
错误原因说明
- 404错误:原脚本使用的v2 API端点已被Tinder移除,服务器无法找到对应资源。
- TypeError:API返回404时,响应内容不含
data字段,response.get("data")返回None,尝试对None做下标操作就会触发该错误。
内容的提问来源于stack exchange,提问作者user5597340
相关产品推荐
相关产品推荐

