好的,所以我一直打算用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)
您可以尝试连接客户端,但它可能导致它没有被授权或电话没有注册,所以您可以使用开始,这将决定是登录,还是注册。在开始时可以设置的参数中,有force_sms (bool, optional)
强制电报共享通过短信注册和登录所需的代码。我在这里的问题是,如果电话没有注册,还有什么其他方式可以使用电报?我的意思是,他们不能把它发送到移动应用程序,因为那部手机没有一个。
如果没有注册电话是可能的,这是否意味着您获得id/散列的电话与您创建客户端的电话不一定相同?
由于此方法有一个回调,您可以输入发送到您的电话的代码,并连接到电报。
另一种连接客户端的方法是使用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/散列在不同的时间启动相同的电话,或者当第一次会话存储在电报中时,创建第二次访问会切断与第一次电报的链接?
您可以以任何方式跳过用于注册的验证代码吗?
亲切的问候
发布于 2020-05-07 16:21:20
这段代码是为了生成应用程序而发送的吗?
是的,就像许多提供API的在线服务一样,您注册您的开发人员帐户,并获得一个令牌(在Telegram的例子中,api_id
和api_hash
组合),它可以用于访问API (完全或者限制较少)。
您的应用程序绑定到您的用户帐户似乎有点混乱,但这并不意味着它只能在您的帐户中使用。开发人员可以创建应用程序,任何其他用户(甚至bot)都可以使用api_id
和api_hash
运行应用程序。
例如,当您将Telegram用于Android或Telegram Desktop时,您正在运行他们开发的应用程序,并使用各自开发人员的api_id
和api_hash
登录,而不是您自己的应用程序。
如果电话没有注册,还有什么其他方式可以使用电报呢?
电报可以发送短信到电话号码或执行电话呼叫。您可以使用https://tl.telethon.dev发现在编写本报告时,发送码返回一个SentCode
。这提供了一个SentCodeType
,目前可以表明:通过应用程序发送,呼叫,闪存,或短信。
这是否意味着您获得id/散列的电话与您创建客户端的电话不一定相同?
如上所述,api_id
和api_hash
是面向应用程序的开发人员的,而不是将登录到应用程序的用户。当您开始工作时,这个人通常是同一个人(您,开发人员),但是当您发布应用程序时,任何人都可以登录,而不需要提供他们的api_id
和api_hash
。当然,您需要保守这些秘密,以尽量减少人们在应用程序中使用您的密钥,尽管这并不是真正可行的。
这是如何获得授权密钥的?
StringSession
嵌入生成的授权密钥,用于字符串本身内的加密。下次当你使用客户端时,你所需要的就是这把钥匙,因为电报已经知道你是谁了,因为你之前已经登录了。
如何指定要连接的电话?
不必了。Telegram记得用某个授权密钥登录的帐户。在正式客户端中,您可能会看到哪些设备登录并终止其会话(使其授权密钥无效)以将其注销。
这是一种你只能使用的方法,还是只有在手机被授予访问权限后才能使用?
您也可以使用StringSession
登录,只需打印它并在以后重用它。在这种情况下,StringSession
将开始为空,Telethon将生成一个授权密钥,您将登录,并且保存会话将产生一些可以重用的内容。
对于同一个号码,您能有不止一个会话吗?即使他们不尝试同时连接?
是的,这就是当你使用诸如Android和Telegram Desktop的电报时所发生的事情。在Telethon中添加第三个并没有什么不同。
您可以以任何方式跳过用于注册的验证代码吗?
不,因为电报需要确认电话的存在和使用。
https://stackoverflow.com/questions/61657596
复制相似问题