使用Python中的loop和with语句从特定API获取更新的帖子

使用Python中的loop和with语句从特定API获取更新的帖子,python,Python,我需要检查是否有人发布了新的帖子(每小时一次),若有,我想得到新帖子的列表。要做到这一点,我首先需要知道新职位的数量。因此,我需要使用循环请求URL以获得大致范围 现在我有了以下GETAPI: https://xxx.xxx?uid=1&ps=10 其中,uid是用户id,ps是我想要获得的帖子数量 它将返回具有以下格式的JSON对象: { 'plist': [ { pid: 1002, created

我需要检查是否有人发布了新的帖子(每小时一次),若有,我想得到新帖子的列表。要做到这一点,我首先需要知道新职位的数量。因此,我需要使用循环请求URL以获得大致范围

现在我有了以下
GET
API:

https://xxx.xxx?uid=1&ps=10
其中,
uid
是用户id,
ps
是我想要获得的帖子数量

它将返回具有以下格式的JSON对象:

{
  'plist': [
            {
              pid: 1002,
              created: 1594474444,
              ...
            },
            ...
           ],
  'counts': {
              'ps': 10, 
              'total': 14400
            }
}
plist
已按后期创建日期排序

created
是该帖子日期的unix时间戳

total
是来自该用户的帖子总数,在我得到这个JSON对象之前,我不会知道这个数字

以下是我尝试过的:

  • 使用API获取
    n
    帖子
  • 比较
    plist
    (因为已经排序)中最后一篇文章的创建时间与我上次更新的时间
  • 如果需要更新额外的帖子,请使用API获取
    2*n
    帖子,然后转到步骤2;否则就这样做

  • 我的问题是,我不知道如何将while循环和
    语句一起使用。或者有更好的方法吗?

    你能澄清一下你想要实现什么吗?为什么你们需要一个while循环?@drum我需要检查是否有人发布了新的帖子,如果有,我想得到新帖子的列表。要做到这一点,我首先需要知道新职位的数量。因此,我需要使用循环请求URL以获得大致范围。我仍然不太理解您的问题,但是如果您想每小时都这样做,请不要在代码中这样做。相反,编写脚本以获取数据,将其与已有数据进行比较,然后执行upsert策略(如果是新的,则插入,如果是现有的,则更新)。要每小时运行一次,请使用cron之类的工具。
    import json
    import urllib.parse
    import urllib.request
    
    def get_new_posts(uid, number_of_posts, last_update):
        params = {'uid': uid, 'ps': number_of_posts}
        url = 'https://xxx.xxx?' + urllib.parse.urlencode(params)
    
        with urllib.request.urlopen(url) as response:
             body = json.loads(response.read())
             oldest = body['plist'][-1]['created']
             if oldest > last_update:
                 # do something to reopen the url using new params
                 # and go back again
             
             # using binary search strategy to get all new posts
             return binary_search_cut(body, last_update)