使用Python中的loop和with语句从特定API获取更新的帖子
我需要检查是否有人发布了新的帖子(每小时一次),若有,我想得到新帖子的列表。要做到这一点,我首先需要知道新职位的数量。因此,我需要使用循环请求URL以获得大致范围 现在我有了以下使用Python中的loop和with语句从特定API获取更新的帖子,python,Python,我需要检查是否有人发布了新的帖子(每小时一次),若有,我想得到新帖子的列表。要做到这一点,我首先需要知道新职位的数量。因此,我需要使用循环请求URL以获得大致范围 现在我有了以下GETAPI: https://xxx.xxx?uid=1&ps=10 其中,uid是用户id,ps是我想要获得的帖子数量 它将返回具有以下格式的JSON对象: { 'plist': [ { pid: 1002, created
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对象之前,我不会知道这个数字
以下是我尝试过的:
n
帖子plist
(因为已经排序)中最后一篇文章的创建时间与我上次更新的时间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)