在查询字符串中包含&

时间:2018-12-18 22:44:23

标签: python twitch

我目前正在运行一系列机器人来记录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'))
...

0 个答案:

没有答案