【发布时间】:2022-01-13 18:49:07
【问题描述】:
我在电报上收到的示例短信:
听最好的音乐: Ava Max - My Head & My Heart
我的问题是,我的脚本如何检查消息并最终通过嵌套链接打开站点? 我试过了:
for entity in event.message.text:
if isinstance(entity, MessageEntityTextUrl):
open_url(entity.url)
但没有运气 - 脚本无法打开链接。
//编辑 实施 watzon 的解决方案:
async def my_event_handler(event):
msg = event.message.message
for _, inner_text in msg.get_entities_text(MessageEntityTextUrl):
open_url(inner_text)
现在错误是:
...in my_event_handler
for _, inner_text in msg.get_entities_text(MessageEntityTextUrl):
AttributeError: 'str' object has no attribute 'get_entities_text'
我一定是错过了这里的错误,我应该在 msg 中更改什么?
//编辑2
msg = event.message
修复了错误,但我仍然没有得到链接作为输出。
【问题讨论】:
-
这里的
entity是什么?你能打印出来分享一下吗?因为如果 .text 如果是一个字符串,那么它只有一个字符 -
在您实现@watzon 的答案时,只需将
msg定义为msg = event.message。event.message.message是消息的字符串表示,这就是它没有属性'get_entities_text'的原因。 -
@druskacik 非常感谢,错误不再出现但下一个问题是 inner_text 实际上是嵌套链接 visible text ,而不是我可以打开的链接。所以看看上面的 Ava Max 歌曲示例,我的输出是:"Ava Max - My Head & My Heart" 但应该是 youtube.com/....我怎样才能做到这一点? MessageEntityTextUrl 在这里的使用方式是否正确?
-
请检查变量
_是否包含url?你可以像for url, inner_text in msg.get_entities_text(MessageEntityTextUrl): open_url(url)一样重写它 -
@druskacik 如此简单却又如此出色,谢谢! '_' 包含消息实体的偏移量、长度、url 等,所以我使用了 openURL(
_.url) 现在它确实打开了一个嵌套链接。就我检查了一些案例而言,还有其他问题,但我认为我们已经解决了这个问题。非常感谢。
标签: python telegram telegram-bot telethon