我目前正在运行一系列机器人来记录Twitch流的各种不同游戏或类别。我想包括地下城与龙;但是,标题中的“&”号会妨碍代码(在空格处可以正常使用)。该机器人使用Python 2.7。我相信可以使用urllib进行此操作,但是我一直无法确定一种不需要大量重新编码的方法,对于仅希望包含符号而言,这似乎是多余的。
import json
import requests
import time
from settings import API
from requests.exceptions import ConnectionError, SSLError
def get_top_streams(n):
twitch_api_url = "https://api.twitch.tv/kraken/streams/?limit=%i&language=en&partner=true&game=Dungeons & Dragons" % n
headers = {'Client-Id': API['CLIENTID']}
try:
return json.loads(requests.get(twitch_api_url, headers=headers).text)['streams']
except (ValueError, ConnectionError, SSLError):
time.sleep(5)
return get_top_streams(n)
def get_channel_names(streams):
return [stream['channel']['name'] for stream in streams]
def current_time_in_milli():
return int(round(time.time() * 1000))
如果您需要查看完整的脚本,则与Pire's logger on GitHub相比,该机器人略有调整。
编辑:先前与该问题相关的建议Escaping ampersand in URL解决方案提出了一种javascript解决方案;而这是一个python 2脚本。此外,我之前曾尝试将&编码为%26,并且在代码中不起作用(因此,我感到困惑,为什么我提到空格可以工作-不需要%20,所以我提出了这个问题)。 / p>
编辑2:这是一个解决方案,以防其他人偶然发现。
...
import urllib
...
'https://api.twitch.tv/kraken/streams/?limit=%i&language=en&partner=true&game=%s' % (n, urllib.quote('Dungeons & Dragons'))
...