考虑到每次对read()的调用都将返回一部分数据,我试图一一解析URL。我有一个所有者(GitHub帐户),一个或多个存储库以及一个或多个资源(问题,提交等)。当用户调用read()时,该类必须迭代每个存储库和资源的组合 多次。问题在于,它不会遍历所有者,存储库和资源之间的每个组合。到目前为止,这是我的代码:
import requests
class GitHub():
def __init__(self, owner, repositories, resources):
self.owner = owner
self.repositories = repositories
self.resources = resources
def read(self):
for rep in self.repositories:
for res in self.resources:
url = 'https://api.github.com/repos/{}/{}/{}'.format(self.owner, rep, res)
result = requests.get(url)
if result.status_code == 200:
json_res = result.json()
return json_res
else:
print(result.text)
print(result.status_code)
gh = GitHub('example', ['example1', 'example2'], ['issues','pulls'])
data = gh.read()
更新
class GitHub():
def __init__(self, owner, repositories, resources):
self.owner = owner
self.repositories = repositories
self.resources = resources
def create_list(self):
for rep in self.repositories:
for res in self.resources:
url = 'https://api.github.com/repos/{}/{}/{}'.format(self.owner, rep, res)
result = requests.get(url)
if result.status_code == 200:
json_res = result.json()
print(json_res)
else:
print(result.text)
print(result.status_code)
break
yield
gh = GitHub('moby', ['moby', 'buildkit'], ['issues','pulls'])
data = gh.create_list()
while data is not None:
try:
next(data)
data = gh.create_list()
except StopIteration:
break
我只是设法得到了这种形式的代码。现在,当我尝试执行代码时,它会在相同的URL(.../moby/moby/issues
)上进行迭代,而不会从self.resources
中获取下一个值(在create_list
方法中)。我在哪里错了?
答案 0 :(得分:0)
我看到您正在使用yield
,因此您尝试创建一个generator,该列表允许您一次迭代一个项目。但是有两个问题:
yield
没有产生任何价值create_list()
,好像它一次产生了所有元素一样。以下,我更改了yield
来生成一个字典,其中包含当前项目的网址和结果。然后,我用for
遍历值,打印出每个项目的url和从GitHub返回的结果中的元素数:
import requests
class GitHub():
def __init__(self, owner, repositories, resources):
self.owner = owner
self.repositories = repositories
self.resources = resources
def create_list(self):
for rep in self.repositories:
for res in self.resources:
url = 'https://api.github.com/repos/{}/{}/{}'.format(self.owner, rep, res)
result = requests.get(url)
if result.status_code == 200:
yield {'url': url, 'result': result.json()}
gh = GitHub('moby', ['moby', 'buildkit'], ['issues','pulls'])
for result in gh.create_list():
print('url: {}\tlen(result): {}'.format(result['url'], len(result['result'])))
输出:
url: https://api.github.com/repos/moby/moby/issues len(result): 30 url: https://api.github.com/repos/moby/moby/pulls len(result): 30 url: https://api.github.com/repos/moby/buildkit/issues len(result): 30 url: https://api.github.com/repos/moby/buildkit/pulls len(result): 8