使用下一页 token 的 Pythonic 方式

标签 python recursion while-loop python-requests instagram

现在很多请求都会返回页面 token ,我很好奇处理它们的最合适的方法是什么?

我通常只是使用递归:

def get_followers(user_id,
                  access_token,
                  cursor=''):
    url = 'https://api.instagram.com/v1/users/%s/followed-by?access_token=%s&cursor=%s' % (my_user,
                                                                                           access_token,
                                                                                           cursor)
    print(url)
    response = requests.get(url)
    json_out = json.loads(response.text)
    for user in json_out['data']:
        usrname = user['username']
        my_followers.add_follower(usrname)
        print("Added: %s" % usrname)
    try:
        cursor = json_out['pagination']['next_url']
        get_followers(user_id, access_token, cursor)
    except KeyError:
        print("Finished with %d followers" % len(my_followers.followers))
    return

但是,也许:

while True:
  ..
  if condition:
    break

或者其他一些实现被认为更高效/Pythonic?

最佳答案

您可以将其更改为 generator访问结构时产生下一个追随者的函数,仅在必要时获取更多数据。

def get_followers(...)
    ...
    while token is not None:
        # fetch data
        ...
        for user in json_out['data']:
            yield user
        ...
        # fetch new token

然后,迭代此生成器以应用数据处理。这还具有分离数据采集和处理逻辑的优点。

followers = get_followers(...) 
for user in followers:
        username = user['username']
        my_followers.add_follower(username)
        print("Added: %s" % username)

关于使用下一页 token 的 Pythonic 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34630218/

相关文章:

algorithm - 数字总和可被 K 整除的子数组数

list - F#:递归函数:测试元素是否是给定列表的成员

recursion - 从 Erlang 列表中返回列表的索引

java - while() 循环的问题

java - while(true) 和 wait() 或线程 join() 之间有什么区别

python - 如何使用 python 为拼字游戏创建基于文本的棋盘?

Python 列表抽象

python - 以清晰的方式在 1 个轴上显示 3 个直方图 - matplotlib

python - 从 C++ 发出运行 python 脚本

java - 计数++ : While() wont stop loop after count reached