Бот Telegram должен отправить URL-адрес, содержащий символ «&», но он отправляет URL-адрес только до тех пор, пока этот символ не прекратит его - PullRequest
0 голосов
/ 11 мая 2018

Я хочу, чтобы мой бот Telegram отправлял URL на канал. Тем не менее, URL содержит символ «&», который обрезает сообщение, которое он пытается отправить коротким. В документации Telegram API сказано, что мне нужно использовать & 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)

Вы можете видеть, что в movieSearch после release_date есть & user_rating = ... и так далее. Тем не менее, бот будет отправлять URL только до этого символа & (так до "2018-12-31").

Я пытался заменить & на & amp; но он все равно не отправит весь URL. Я пытался без parse_mode = HTML, но он тоже не работал.

1 Ответ

0 голосов
/ 11 мая 2018

Вместо:

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)
...