用于API调用的Python ::链接生成器

时间:2017-07-28 05:18:21

标签: python generator

我正在点击一个API,其响应包含许多页面,例如100。

这需要太长时间,因此我尝试使用generators,因此我可以为每个页面和流程yield值,直到管道中遇到一些condition

import requests
import json
import itertools as it

我定义了这个generator来提出请求:

def api_query(query):


    page=1
    while True:
         # do requests, then
         for result in body:    
            title = result["result"]["title"]           
            primaryartist_name = result["result"]["primary_artist"]["name"]

            yield title, primaryartist_name

        page+=1

然后,我想使用另一个generator

过滤第一页的回复
def api_filter():

    api_response = api_query('query') 
    # 10 first results
    page1 = [api_response.next() for i in range(10)]
    # do some filtering with page1 results
    yield results

最后,我为condition测试了它,并尝试return我想要的值:

def api_print():

    results = api_filter()

    page1 = list(it.islice(results, 5))
    # check if page1 results satisfy a given condition
    if condition:
        return page1
    # or try next page
    else:
        page2 = list(it.islice(results.next(), 5))
            return page2

但是,在最后一段代码中,我只能打印page1;如果代码移到else,我会得到

page2 = list(it.islice(results.next(), 5)) StopIteration

我做错了什么?

ps:对不起,如果这是一个非工作的例子;完整的代码太长了,所以我使用一个简化的问题来测试这种情况下的生成器的概念...

0 个答案:

没有答案