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

KMF*_*MFR 7 python bots telegram python-telegram-bot telegram-bot

我希望我的 Telegram 机器人将 URL 发送到频道。但是,该 url 包含“&”字符,该字符会缩短尝试发送的消息。Telegram API 文档说我需要使用 & (没有空格)来替换 & 但要么我不明白某些东西,要么它不起作用。

这就是我正在做的:

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

movieSearch 是:

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

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

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

Pau*_*ine 7

代替:

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

做这个:

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

requests.get(
    "https://api.telegram.org/{}/sendMessage".format(botID),
    params=params
)
Run Code Online (Sandbox Code Playgroud)

我认为问题的发生是因为您&在 URL 中具有“text”参数的值,但没有将其转义为%26. 最好使用字典,让requests库为你转义。你仍然需要逃避&as &

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