如何用Python程序化获取Telegram的API_ID与API_HASH?表单hash参数疑问
程序化获取Telegram API_ID和API_HASH的完整方案
问题背景
已通过requests实现Telegram账号的程序化登录(登录响应为b'true'),但调用https://my.telegram.org/apps/create接口创建应用时,需提交含hash参数的payload,不清楚如何程序化获取该参数。
解决步骤
1. 登录成功后提取apps页面的hash参数
登录会话保持有效后,请求https://my.telegram.org/apps页面,页面中存在一个隐藏的hash字段,这就是创建应用接口所需的参数,可通过HTML解析工具提取。
2. 构造并提交应用创建请求
用提取到的hash结合应用基本信息(名称、短名称等)构造POST请求,提交到创建应用接口。
3. 提取生成的API_ID和API_HASH
提交成功后,再次请求https://my.telegram.org/apps页面,解析页面内容获取生成的api_id和api_hash。
完整代码示例
import requests import json from bs4 import BeautifulSoup # 初始化会话 s = requests.session() send_password_headers = { "authority": "my.telegram.org", "Accept": "application/json, text/javascript, */*; q=0.01", "Accept-Encoding": "gzip, deflate, br", "Accept-Language": "en-US,en;q=0.9", "Cache-Control": "no-cache", "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", "Origin": "https://my.telegram.org", "Pragma": "no-cache", "Referer": "https://my.telegram.org/auth?to=apps", "Sec-Ch-Ua": '"Microsoft Edge";v="119", "Chromium";v="119", "Not?A_Brand";v="24"', "Sec-Ch-Ua-Mobile": "?0", "Sec-Ch-Ua-Platform": '"Windows"', "Sec-Fetch-Dest": "empty", "Sec-Fetch-Mode": "cors", "Sec-Fetch-Site": "same-origin", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0", "X-Requested-With": "XMLHttpRequest" } # 发送手机号获取随机hash number = str(int(input('请输入带国家码的手机号: '))) num_url = 'https://my.telegram.org/auth/send_password' num_data = {'phone': number} random_hash_response = s.post(num_url, data=num_data, headers=send_password_headers) if 'random_hash' in str(random_hash_response.content): value = json.loads(random_hash_response.content.decode("utf-8"))["random_hash"] # 输入验证码完成登录 otp_url = 'https://my.telegram.org/auth/login' otp_data = { 'phone': number, 'random_hash': value, 'password': input("请输入登录验证码: ") } login_headers = send_password_headers.copy() login_headers['path'] = "/auth/login" login_response = s.post(otp_url, data=otp_data, headers=login_headers) if login_response.content == b'true': print("登录成功") # 访问apps页面提取创建应用的hash apps_page_url = 'https://my.telegram.org/apps' apps_page = s.get(apps_page_url) soup = BeautifulSoup(apps_page.text, 'html.parser') create_hash = soup.find('input', {'name': 'hash'})['value'] # 提交应用创建请求 create_app_url = 'https://my.telegram.org/apps/create' create_app_data = { 'hash': create_hash, 'app_title': 'My Test App', # 自定义应用名称 'app_shortname': 'testapp_unique', # 自定义唯一短名称 'app_url': '', 'app_platform': 'android', # 可选平台:android/ios/web/desktop等 'app_desc': '' } create_app_response = s.post(create_app_url, data=create_app_data, headers=send_password_headers) # 提取API_ID和API_HASH if create_app_response.status_code == 200: new_apps_page = s.get(apps_page_url) new_soup = BeautifulSoup(new_apps_page.text, 'html.parser') api_id = new_soup.find('span', {'id': 'app_id'}).text.strip() api_hash = new_soup.find('span', {'id': 'app_hash'}).text.strip() print(f"\nAPI_ID: {api_id}") print(f"API_HASH: {api_hash}") else: print(f"创建应用失败,响应内容: {create_app_response.content}") else: print(f"登录失败,响应内容: {login_response.content}") else: print(f"获取随机hash失败,响应内容: {random_hash_response.content}")
关键说明
- 需先安装HTML解析库:执行
pip install beautifulsoup4 app_shortname必须是Telegram平台唯一名称,重复会导致创建失败,需自定义修改app_platform可按需选择,支持android、ios、web、desktop等选项
内容的提问来源于stack exchange,提问作者Avijit Bhuin
相关产品推荐
相关产品推荐

