飞机开发者 API 连接超时

91 天前
 UEVdugfw

刚接触飞机开发者 API ,写的 python 脚本用于群关键字监控,运行时报错 Attempt 1 at connecting failed: TimeoutError

之后使用 curl -4 -L https://api.telegram.org 测试连通性,返回的是一个 html 网页,而不是 json 。

该 IP 用于飞机登录和日常使用是没问题的。期间也换了几个,报错都一样。

请问这问题是不是出在 IP 上?

脚本:

import asyncio
from telethon import TelegramClient, events
from telethon.network import ConnectionTcpMTProxyRandomizedIntermediate

# 替换为你的 API 凭证
api_id = 'xxxx'  # 你的 api_id
api_hash = 'xxxx'  # 你的 api_hash
phone_number = 'xxxx'  # 你的电话号码,例如 '+1234567890'
group_name = 'xxxx'  # 目标群聊的用户名(例如 '@MyGroup')或 ID (例如 -100123456789 )

# 定义要监控的关键字列表
keywords = ['test', 'python']  # 替换为你想监控的关键字

# 代理设置(根据你的代理类型选择 SOCKS5 或 HTTP )
proxy = {
    'proxy_type': 'http',  # 可选值:'socks5', 'http', 或 'mtproxy'
    'addr': '127.0.0.1',  # 代理服务器地址
    'port': 7897,  # 代理服务器端口
    'username': None,  # 代理用户名(如果不需要认证,设为 None )
    'password': None  # 代理密码(如果不需要认证,设为 None )
}

# 创建 Telegram 客户端并应用代理设置
if proxy['proxy_type'] == 'mtproxy':
    client = TelegramClient(
        'session_name',
        api_id,
        api_hash,
        connection=ConnectionTcpMTProxyRandomizedIntermediate,
        proxy=(proxy['addr'], proxy['port'], proxy.get('secret'))  # MTProxy 需要 secret
    )
else:
    client = TelegramClient(
        'session_name',
        api_id,
        api_hash,
        proxy=(proxy['proxy_type'].upper(), proxy['addr'], proxy['port'], proxy['username'], proxy['password'])
    )

# 事件处理器:监听新消息
@client.on(events.NewMessage(chats=group_name))
async def handler(event):
    message = event.message.text
    if not message:  # 确保消息内容不为空
        return
    message = message.lower()  # 获取消息内容并转为小写
    # 检查消息是否包含任意关键字
    for keyword in keywords:
        if keyword.lower() in message:
            print(f"检测到关键字 '{keyword}' 在消息: {event.message.text}")
            print(f"发送者: {event.message.sender_id}, 时间: {event.message.date}")
            # 将消息保存到文件
            with open('keyword_messages.txt', 'a', encoding='utf-8') as f:
                f.write(f"关键字: {keyword}\n 消息: {event.message.text}\n 发送者: {event.message.sender_id}\n 时间: {event.message.date}\n\n")

async def main():
    # 启动客户端并登录
    try:
        await client.start(phone=phone_number)
        print("正在通过代理监控群聊消息...")
        # 保持脚本运行
        await client.run_until_disconnected()
    except Exception as e:
        print(f"启动客户端失败: {e}")

# 运行脚本
if __name__ == '__main__':
    asyncio.run(main())
431 次点击
所在节点    Telegram
6 条回复
julyclyde
84 天前
api.telegram.org 好像是 bot api 服务器吧
client API 也是同一个吗?
tianhualefei
64 天前
同样问题,我也没解决
gPT5 的回复是 你要连接的是 telegram 的
禁止或不支持 Telegram 的协议流量
如果代理只是个“通用”SOCKS5 ,但背后节点是 HTTP/HTTPS 转发,可能不支持 Telegram 的二进制 MTProto/TLS ,还会主动把连接关掉。

API 是链接 149.154.167.51:443 这种数据中心 IP 的。
UEVdugfw
63 天前
@tianhualefei #2 还真没往这方面想。之前 tg api 找了个变相的方案暂时把问题解决了。
我之前思路一直以为是 vps ip 问题,所以在寻找可用 vps 这个方向。
过几天有空了再研究研究
heisenyu
39 天前
@UEVdugfw 遇到了同样的问题,请问后续解决了吗
heisenyu
39 天前
@heisenyu 我这边发现问题了并解决了

原本使用的 PySocks 是同步库,不支持 asyncio ,Telethon 是完全异步的,需要异步代理支持

换成 python-socks[asyncio] 就可以了
UEVdugfw
38 天前
@heisenyu #5 太感谢了。我有空了按这个思路试试。这几个月忙装修,就把这问题放一边了。装修比找问题更累

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1156017

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX