Я пишу телеграмм-бота для набора реляционных карточных игр и использую смесь вывода
Я могу запустить бота, и это здорово. Проблема в том, что когда я называю свой сайт www.relationalgames.com/cards/deck?Papo Papo, я получаю сообщение об ошибке:
Файл "/usr/local/lib/python3.10/site-packages/urllib3/util/retry.py", строка 592, с шагом поднять MaxRetryError(_pool, url, ошибка или ResponseError(причина)) urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='www.relationalgames.com', port=443): превышено максимальное количество попыток с URL: /cards?deck=Papo%20a%20Papo (вызвано NewCo nnectionError('<объект urllib3.connection.HTTPSConnection по адресу 0x7f46da0873a0>: не удалось установить новое соединение: [Errno 111] Отказано в соединении'))
Интересно, это какое-то ограничение бесплатной учетной записи PythonAnywhere, или я делаю что-то не так... Есть идеи, как это преодолеть?
Вот мой текущий код
import telepot
import json
import random
import urllib3
import time
# You can leave this bit out if you're using a paid PythonAnywhere account
proxy_url = "http://proxy.server:3128"
telepot.api._pools = {
'default': urllib3.ProxyManager(proxy_url=proxy_url, num_pools=3, maxsize=10, retries=False, timeout=30),
}
telepot.api._onetime_pool_spec = (urllib3.ProxyManager, dict(proxy_url=proxy_url, num_pools=1, maxsize=1, retries=False, timeout=30))
# end of the stuff that's only needed for free accounts
http = urllib3.PoolManager(timeout=60)
def handle(msg):
content_type, chat_type, chat_id = telepot.glance(msg)
if content_type == 'text':
if msg['text'] == '/start':
bot.sendMessage(chat_id, "Enter the name of a deck:")
else:
#try:
deck_name = msg['text']
response = http.request('GET', f'https://www.relationalgames.com/cards?deck = {deck_name}') # requests.get(f'https://www.relationalgames.com/cards?deck = {deck_name}')
print(response)
playable_deck = json.loads(response.text)
random.shuffle(playable_deck)
while len(playable_deck) > 0:
card = playable_deck.pop()
if 'url' in card:
bot.sendMessage(chat_id, card['url'])
else:
bot.sendMessage(chat_id, card['cardText'])
if len(playable_deck) == 0:
bot.sendMessage(chat_id, "Do you want to restart the game? (yes or no)")
break
bot.sendMessage(chat_id, "Press any key for next card")
bot.getUpdates()
#except:
# bot.sendMessage(chat_id, "Error processing your request")
TOKEN = 'My Token'
bot = telepot.Bot(TOKEN)
bot.message_loop(handle)
print ('Listening ...')
# Keep the program running.
while 1:
time.sleep(10)






Бесплатные учетные записи на PythonAnywhere имеют ограниченный доступ в Интернет к разрешенным общедоступным API (только HTTP(s)). Вы можете запросить добавление в белый список, если рассматриваемый сайт предоставляет общедоступный API с официальной документацией.
Да... в конце концов у меня все заработало (во всяком случае, временно) с платной версией PythonAnywhere.