0

我尝试连接到 Riot api 以访问召唤者信息。我写了3个文件:

  1. “RiotConsts”:设置一些常量的文件,例如“URL”、“api_version”、“region”
  2. “RiotAPI”:主要功能
  3. “riot_main”:调用我想要的信息。

我收到一条错误消息:“RiotAPI' 对象没有属性 '_request'”。

class RiotAPI(object):
    def __init__(self,api_key,region=Consts.REGIONS['europe_nordic_and_east']):
        self.api_key = api_key
        self.region = region

    def request(self, api_key, params={}):
        args = {'api_key': self.api_key}
        for k,v in params.items():
            if k not in args:
                args[k] = v
        response = requests.get(
            Consts.URL['base'].format(
                proxy = self.region,
                region = self.region,
                url = api_url
                ),
            params=args
            )
        print (response.url)
        return response.json()

    def get_summoner_by_name(self, name):
        api_url = Consts.URL['summoner_by_name'].format(
            version=Consts.API_VERSIONS['summoner'],
            summonerName=name
            )
        return self._request(api_url)

我希望收到召唤者信息,但我得到:'RiotAPI' 对象没有属性'_request'

4

2 回答 2

1

连接 Riot API 并获得召唤者信息的更简单代码:

class RiotApi(object):
    def __init__(self, api_key: str, region="euw1"):
        self.__RIOT_API_KEY = api_key
        self.__HEADER = {'X-Riot-Token': self.__RIOT_API_KEY}
        self.__REGION = region
        self.__BASE_URL = ".api.riotgames.com/lol/"
        self.__API_URL_SUMMONER_V4 = "https://" + self.__REGION + self.__BASE_URL + "summoner/v4/summoners/"

    def get_summoner_by_name(self, summoner_name: str) -> dict:
        """Summoner Infos and Ids
        @param summoner_name: LoL summoner name
        @return json object of infos and ids
        """
        url = self.__API_URL_SUMMONER_V4 + "by-name/" + summoner_name
        request = requests.get(url, headers=self.__HEADER)
        return request.json()


于 2021-07-23T12:38:17.480 回答
0

正如评论中提到的,object has no attribute错误是由调用未定义的属性(或方法)引起的——在这种情况下是_request()方法。所以,假设其余的代码是正确的,你可以试试这个代码:

# class RiotAPI(object):
class RiotAPI:
    def __init__(self,api_key,region=Consts.REGIONS['europe_nordic_and_east']):
        self.api_key = api_key
        self.region = region

    # def request(self, api_key, params={}):
    def request(self, api_url, params={}):
        args = {'api_key': self.api_key}
        for k,v in params.items():
            if k not in args:
                args[k] = v
        response = requests.get(
            Consts.URL['base'].format(
                proxy = self.region,
                region = self.region,
                url = api_url
                ),
            params=args
            )
        print (response.url)
        return response.json()

    def get_summoner_by_name(self, name):
        api_url = Consts.URL['summoner_by_name'].format(
            version=Consts.API_VERSIONS['summoner'],
            summonerName=name
            )
        #return self._request(api_url)
        return self.request(api_url)
于 2019-06-20T23:37:52.180 回答