Telegram bot 应该发送包含“&”字符的 URL,但它仅在该字符之前发送 URL,然后将其缩短

Posted

技术标签:

【中文标题】Telegram bot 应该发送包含“&”字符的 URL,但它仅在该字符之前发送 URL,然后将其缩短【英文标题】:Telegram bot should send URL that contains "&" character, but it sends the URL only until that character and then cuts it short 【发布时间】:2018-10-21 05:47:33 【问题描述】:

我希望我的 Telegram 机器人向频道发送 URL。但是,url 包含“&”字符,它会缩短它试图发送的消息。 Telegram API documentation 说我需要使用 & amp; (没有空格)替换 & 但要么我不明白,要么它不起作用。

这就是我正在做的事情:

requests.get("https://api.telegram.org/"+botID+"/sendMessage?chat_id="+chatid+"&text="+movieSearch+"&parse_mode=html")

电影搜索是:

movieSearch = ("https://www.imdb.com/search/title?release_date="+year+"-01-01,2018-12-31&user_rating="+score+",&genres="+genres)

您可以在 release_date 之后的 movieSearch 中看到 &user_rating=... 等等。但是,机器人只会在该 & 字符之前发送 URL(所以直到“2018-12-31”)。

我尝试将 & 替换为 & amp;但它仍然不会发送整个 URL。我试过不使用 parse_mode=HTML,但也没有用。

【问题讨论】:

, 旁边有一个 &genres.. 去掉逗号 @johnashu 这是一个真实 URL 的示例,它也有逗号,我尝试删除它但没有效果:imdb.com/search/… 当您尝试将您发布的链接而不是 movieSearch 放入请求时会发生什么...... 您必须将其转义为%26amp;。这是因为您没有让 requests 库为您转义它。 @PauloScardine 哇,%26amp; 工作了。不知道请求库有效果,谢谢! 【参考方案1】:

代替:

requests.get("https://api.telegram.org/"+botID+"/sendMessage?chat_id="
             +chatid+"&text="+movieSearch+"&parse_mode=HTML")

这样做:

params = 
    "chat_id": chatid,
    "text": movieSearch,
    "parse_mode": "HTML",


requests.get(
    "https://api.telegram.org//sendMessage".format(botID),
    params=params
)

我认为问题的发生是因为您在 URL 中的“文本”参数的值中有 &,但没有将其转义为 %26。最好使用字典,让requests 库为您转义它。您仍然必须将& 转义为&

movieSearch = "https://www.imdb.com/search/title?release_date="
              "-01-01,2018-12-31&user_rating=&genres=".format(
                    year, score, genres)

【讨论】:

好的,谢谢先生。转义为%26amp; 有效,从现在开始我也将使用字典。【参考方案2】:

你应该使用char的ASCII Encoding

更多信息: URL Encoding

【讨论】:

以上是关于Telegram bot 应该发送包含“&”字符的 URL,但它仅在该字符之前发送 URL,然后将其缩短的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Telegram Bot API 发送表情符号?

如何使用 Telegram Python bot 发送粗体文本

我的 Telegram Bot 无法读取另一个 Telegram Bot 发送的消息

转发来自 Telegram Bot 的消息

如何通过 Telegram Bot API 在消息中发送嵌入图像和文本

Excel VBA 使用 Telegram bot api 发送图像