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 Python bot 发送粗体文本
我的 Telegram Bot 无法读取另一个 Telegram Bot 发送的消息