【问题标题】:Telethon first steps in pythonTelethon 在 python 中的第一步
【发布时间】:2020-05-07 12:16:49
【问题描述】:

好的,所以我一直打算使用 Telethon 来通过 Python 自动化电报上的几件事,但我不确定我是否理解它的要点。

首先,您需要一个 api_id 和一个 api_hash。为此,您可以访问my.telegram 并访问 API 开发工具。在那里,您会收到一个代码到您的电报 Android 手机,提交后,您会收到一个唯一的 ID/哈希。第一个问题,您发送此代码是为了生成一个应用程序不再需要吗?

现在在python中,你可以如下启动一个客户端。

from telethon import TelegramClient

api_id=12345
api_hash='abcdef12345ghij'

client=TelegramClient('name of the session',api_id,api_hash)

您可以尝试连接客户端,但可能会导致客户端未授权或手机未注册,因此您可以使用 start 来决定是登录还是注册。 在start中可以设置的参数中,有force_sms (bool, optional)强制telegram分享短信注册登录所需的code。 我的问题是,如果电话没有注册,还有什么其他方式可以使用电报?我的意思是,他们无法将其发送到移动应用,因为那部手机没有。

如果手机未注册是可能的,这是否意味着您获得 id/hash 的手机不一定与您创建客户端时使用的手机相同?

由于此方法有回调,您可以输入发送到手机的代码并连接到电报。

连接客户端的另一种方法是使用StringSession。我找到了这段代码:

from telethon.sync import TelegramClient
from telethon.sessions import StringSession

# Generating a new one
with TelegramClient(StringSession(), api_id, api_hash) as client:
    print(client.session.save())

# Converting SQLite (or any) to StringSession
with TelegramClient(name, api_id, api_hash) as client:
    print(StringSession.save(client.session))

# Usage
string = '1aaNk8EX-YRfwoRsebUkugFvht6DUPi_Q25UOCzOAqzc...'
with TelegramClient(StringSession(string), api_id, api_hash) as client:
    client.loop.run_until_complete(client.send_message('me', 'Hi'))

这本身就带来了几个问题。根据文档,这是一种在字符串中存储登录所需凭据的方法,包括授权密钥和电话。

这是如何获取授权密钥的?在另一种方法中,它被发送到您的手机供您输入,但是在这里?如何指定要连接的电话?这是您只能使用的方法,还是只能在手机获得访问权限后使用?

在代码中,这可能吗?

#Obtain an api_id, api_hash from phone 777777777

from telethon import TelegramClient
from telethon.sessions import StringSession

api_id=12345
api_hash='abcdef12345ghij'    
client=TelegramClient('name of the session',api_id,api_hash)

client.start(phone='5555555',force_sms=True,code_callback=True,first_name='John',last_name='Doe')
#Asked to input the code sent to the phone 555555 by sms. Is this code the authentication key?

string = StringSession.save(client.session) #Now I can connect whenever I want using string session.

最后两个问题

即使他们不尝试同时连接,您能否为同一个号码进行多个会话?例如,不同的 api/hash 在不同的时间启动同一部手机,或者第一个会话存储在电报中,创建第二个会话会切断第一个会话的电报链接?

您可以以任何方式跳过用于注册的验证码吗?

亲切的问候

【问题讨论】:

    标签: python-3.x api telegram telethon


    【解决方案1】:

    发送此代码是为了生成不再需要的应用程序吗?

    是的,就像许多提供 API 的在线服务一样,您注册您的 developer 帐户并获得一个令牌(在 Telegram 的情况下,api_idapi_hash 组合)可用于访问API(完全限制或限制较少)。

    您的应用程序绑定到您的用户帐户似乎有点令人困惑,但这并不意味着它只能在您的帐户中使用。您(开发者)创建一个应用程序,任何其他用户(甚至机器人)都可以使用您的 api_idapi_hash 运行您的应用程序。

    例如,当您使用 Telegram for Android 或 Telegram Desktop 时,您正在运行他们开发的应用程序,并且正在使用各自开发人员的 api_idapi_hash 登录,而不是您自己的。

    如果手机没有注册,还有什么其他方式可以使用电报?

    Telegram 可能会向电话号码发送 SMS 或拨打电话。您可以使用https://tl.telethon.dev 发现send code 在撰写本文时返回SentCode。这带有一个SentCodeType,目前可以指示:通过应用程序、电话、闪电话或短信发送。

    这是否意味着您获得 id/hash 的手机不一定与您创建客户端时使用的手机相同?

    如上所述,api_idapi_hash 适用于应用程序的开发人员,而不是将登录到您的应用程序的用户。当您开始时,此人通常是相同的(您,开发人员),但是当您发布您的应用程序时,任何人都可以登录,而无需提供他们的api_idapi_hash。当然,您需要保守这些秘密,以尽量减少人们在他们的应用程序中使用您的密钥,尽管这实际上并不可行。

    这是如何获取授权密钥的?

    StringSession 将生成的用于加密的授权密钥嵌入到字符串本身中。下次您使用客户端时,您只需要这个密钥,因为 Telegram 已经知道您是谁,因为您之前登录过。

    如何指定要连接的手机?

    没有必要。 Telegram 会记住使用特定授权密钥登录的帐户。在官方客户端中,您可能会看到哪些设备已登录并终止它们的会话(使它们的授权密钥无效)以将它们注销。

    这是您只能使用的方法,还是只能在手机获得访问权限后使用?

    您也可以使用StringSession 登录,然后将其打印出来供以后重复使用。在这种情况下,StringSession 将开始为空,Telethon 将生成授权密钥,您将登录,保存会话将产生可重复使用的内容。

    即使他们不尝试同时连接,您能否为同一个号码进行多个会话?

    是的,例如,当您使用 Telegram for Android 和 Telegram Desktop 时,就会发生这种情况。使用 Telethon 添加第三个也不例外。

    您可以以任何方式跳过用于注册的验证码吗?

    否,因为 Telegram 需要验证手机是否存在并且正在使用中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      • 2022-09-27
      • 2019-02-06
      • 2022-09-27
      • 2022-09-27
      • 2013-04-11
      • 2015-07-29
      相关资源
      最近更新 更多