python 中的 Telethon 第一步
Telethon first steps in python
好吧,所以我一直打算使用 Telethon 通过 Python 在电报上自动执行几件事,但我不确定我是否理解它的要点。
首先,你需要一个api_id和一个api_hash。为此,您转到 my.telegram 并转到 API 开发工具。在那里你会收到一个代码到你的电报 android phone,提交后,你会收到一个唯一的 id/hash。第一个问题,发送给您的代码是否是为了生成应用程序所必需的?
现在python,您可以按如下方式启动客户端。
from telethon import TelegramClient
api_id=12345
api_hash='abcdef12345ghij'
client=TelegramClient('name of the session',api_id,api_hash)
您可以尝试连接客户端,但可能会导致未授权或phone未注册,因此您可以使用开始,这将决定是登录还是注册.
在start中可以设置的参数中,有force_sms (bool, optional)
强制telegram分享短信注册登录所需的代码。
我的问题是,如果 phone 没有注册,还有什么其他方式可以使用电报?我的意思是,他们无法将其发送到移动应用程序,因为 phone 没有。
如果 phone 没有被注册是可能的,这是否意味着您获得 id/hash 的 phone 不一定与您创建的 phone 相同客户?
由于此方法有回调,您可以输入发送到您的 phone 的代码并连接到电报。
另一种连接客户端的方法是使用 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'))
这本身就带来了几个问题。根据文档,这是一种将登录所需的凭据存储在字符串中的方法,包括授权密钥和 phone.
这是如何获取授权密钥的?另一种方法是发到你的phone让你输入,可是这里呢?如何指定要连接的 phone?这是您只能使用的方法,还是只能在 phone 获得访问权限后使用?
在代码中,这可能吗?
#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 在不同的时间开始相同的 phone,或者当第一个会话存储在电报中时,创建第二个会话会严重影响 link 到第一个电报?
能不能跳过注册用的验证码?
亲切的问候
is this code you are sent in order to generate an app necessary any more?
是的,就像许多提供 API 的在线服务一样,您注册您的 开发者 帐户并获得一个令牌(在 Telegram 的情况下,api_id
和api_hash
组合),可用于访问 API(完全或较少限制)。
您的应用程序绑定到您的用户帐户似乎有点令人困惑,但这并不意味着它只能在您的帐户中使用。您,开发人员,创建一个应用程序,任何其他用户(甚至机器人)都可以使用您的 api_id
和 api_hash
.
运行 您的应用程序
例如,当您使用 Telegram for Android 或 Telegram Desktop 时,您正在 运行ning 他们开发的应用程序,并使用 api_id
和 api_hash
各自的开发者,而不是你自己的。
if the phone is not signed up, what other means could have telegram used?
Telegram 可以向 phone 号码发送短信或执行 phone 呼叫。您可以使用 https://tl.telethon.dev to find that send code returns, at the time of writing, a SentCode
. This comes with a SentCodeType
,目前可以指示:通过应用、电话、闪拨或短信发送。
does this mean the phone with which you got your id/hash is is not necessarily the same with which you create the client?
如上所述,api_id
和 api_hash
适用于 应用程序开发人员 ,而不是 用户 将登录到您的应用程序。当您开始时,这个人通常是同一个人(您,开发者),但是当您发布您的应用程序时,任何人都可以登录而无需提供他们的 api_id
和 api_hash
。当然,您需要保守这些秘密以尽量减少人们在他们的应用程序中使用您的密钥,尽管这并不是真正可行的。
How is this obtaining the authorization key?
StringSession
将生成的用于加密的授权密钥嵌入到字符串本身中。下次你使用客户端时,你只需要这个密钥,因为 Telegram 已经知道你是谁,因为你之前登录过。
How can you specify the phone to which you want to connect?
没有必要。 Telegram 会记住使用特定授权密钥登录的帐户。在官方客户端中,您可能会看到哪些设备已登录并终止它们的会话(使它们的授权密钥无效)以将它们注销。
Is this a method you can only, or you should only use after the phone has been given access?
您也可以使用 StringSession
登录,打印出来以后再用。在这种情况下,StringSession
将开始为空,Telethon 将生成一个授权密钥,您将登录,保存会话将产生可以重复使用的内容。
Can you have more than one session for the same number, even if they don't try to connect at the same time?
是的,这就是您使用 Telegram for Android 和 Telegram Desktop 时发生的情况。添加三分之一与 Telethon 没有什么不同。
Can you skip in any way the verification code using for signing up?
否,因为 Telegram 需要验证 phone 是否存在并且正在使用中。
好吧,所以我一直打算使用 Telethon 通过 Python 在电报上自动执行几件事,但我不确定我是否理解它的要点。
首先,你需要一个api_id和一个api_hash。为此,您转到 my.telegram 并转到 API 开发工具。在那里你会收到一个代码到你的电报 android phone,提交后,你会收到一个唯一的 id/hash。第一个问题,发送给您的代码是否是为了生成应用程序所必需的?
现在python,您可以按如下方式启动客户端。
from telethon import TelegramClient
api_id=12345
api_hash='abcdef12345ghij'
client=TelegramClient('name of the session',api_id,api_hash)
您可以尝试连接客户端,但可能会导致未授权或phone未注册,因此您可以使用开始,这将决定是登录还是注册.
在start中可以设置的参数中,有force_sms (bool, optional)
强制telegram分享短信注册登录所需的代码。
我的问题是,如果 phone 没有注册,还有什么其他方式可以使用电报?我的意思是,他们无法将其发送到移动应用程序,因为 phone 没有。
如果 phone 没有被注册是可能的,这是否意味着您获得 id/hash 的 phone 不一定与您创建的 phone 相同客户?
由于此方法有回调,您可以输入发送到您的 phone 的代码并连接到电报。
另一种连接客户端的方法是使用 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'))
这本身就带来了几个问题。根据文档,这是一种将登录所需的凭据存储在字符串中的方法,包括授权密钥和 phone.
这是如何获取授权密钥的?另一种方法是发到你的phone让你输入,可是这里呢?如何指定要连接的 phone?这是您只能使用的方法,还是只能在 phone 获得访问权限后使用?
在代码中,这可能吗?
#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 在不同的时间开始相同的 phone,或者当第一个会话存储在电报中时,创建第二个会话会严重影响 link 到第一个电报?
能不能跳过注册用的验证码?
亲切的问候
is this code you are sent in order to generate an app necessary any more?
是的,就像许多提供 API 的在线服务一样,您注册您的 开发者 帐户并获得一个令牌(在 Telegram 的情况下,api_id
和api_hash
组合),可用于访问 API(完全或较少限制)。
您的应用程序绑定到您的用户帐户似乎有点令人困惑,但这并不意味着它只能在您的帐户中使用。您,开发人员,创建一个应用程序,任何其他用户(甚至机器人)都可以使用您的 api_id
和 api_hash
.
例如,当您使用 Telegram for Android 或 Telegram Desktop 时,您正在 运行ning 他们开发的应用程序,并使用 api_id
和 api_hash
各自的开发者,而不是你自己的。
if the phone is not signed up, what other means could have telegram used?
Telegram 可以向 phone 号码发送短信或执行 phone 呼叫。您可以使用 https://tl.telethon.dev to find that send code returns, at the time of writing, a SentCode
. This comes with a SentCodeType
,目前可以指示:通过应用、电话、闪拨或短信发送。
does this mean the phone with which you got your id/hash is is not necessarily the same with which you create the client?
如上所述,api_id
和 api_hash
适用于 应用程序开发人员 ,而不是 用户 将登录到您的应用程序。当您开始时,这个人通常是同一个人(您,开发者),但是当您发布您的应用程序时,任何人都可以登录而无需提供他们的 api_id
和 api_hash
。当然,您需要保守这些秘密以尽量减少人们在他们的应用程序中使用您的密钥,尽管这并不是真正可行的。
How is this obtaining the authorization key?
StringSession
将生成的用于加密的授权密钥嵌入到字符串本身中。下次你使用客户端时,你只需要这个密钥,因为 Telegram 已经知道你是谁,因为你之前登录过。
How can you specify the phone to which you want to connect?
没有必要。 Telegram 会记住使用特定授权密钥登录的帐户。在官方客户端中,您可能会看到哪些设备已登录并终止它们的会话(使它们的授权密钥无效)以将它们注销。
Is this a method you can only, or you should only use after the phone has been given access?
您也可以使用 StringSession
登录,打印出来以后再用。在这种情况下,StringSession
将开始为空,Telethon 将生成一个授权密钥,您将登录,保存会话将产生可以重复使用的内容。
Can you have more than one session for the same number, even if they don't try to connect at the same time?
是的,这就是您使用 Telegram for Android 和 Telegram Desktop 时发生的情况。添加三分之一与 Telethon 没有什么不同。
Can you skip in any way the verification code using for signing up?
否,因为 Telegram 需要验证 phone 是否存在并且正在使用中。