#python
#python
Вопрос:
Мне нужно проверить, есть ли новые опубликованные сообщения от кого-либо (каждый час), и если да, я хочу получить список новых сообщений. Для этого мне сначала нужно узнать количество новых сообщений. Поэтому мне нужно использовать цикл для запроса URL-адреса, чтобы получить приблизительный диапазон.
Теперь у меня есть следующий GET
API:
https://xxx.xxx?uid=1amp;ps=10
где uid
идентификатор пользователя и ps
количество сообщений, которые я хочу получить.
Он вернет объект JSON со следующим форматом:
{
'plist': [
{
pid: 1002,
created: 1594474444,
...
},
...
],
'counts': {
'ps': 10,
'total': 14400
}
}
plist
уже отсортирован по дате создания сообщения.
created
это временная метка unix для даты этого сообщения.
total
это общее количество сообщений от этого пользователя, и я не буду знать это число, пока не получу этот объект JSON обратно.
Вот что я попробовал:
- Получайте
n
сообщения с помощью API. - Сравните созданное время последнего сообщения
plist
(поскольку оно уже отсортировано) со временем последнего обновления. - Если необходимо обновить дополнительные сообщения, получите
2*n
сообщения с помощью API, затем перейдите к шагу 2; в противном случае сделано.
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)
Моя проблема в том, что я не знаю, как использовать цикл while и with
оператор вместе. Или есть какой-нибудь лучший метод?
Комментарии:
1. Можете ли вы уточнить, чего вы пытаетесь достичь? И зачем вам нужен цикл while?
2. @drum Мне нужно проверить, есть ли новые опубликованные сообщения от кого-либо, и если да, я хочу получить список новых сообщений. Для этого мне сначала нужно узнать количество новых сообщений. Поэтому мне нужно использовать цикл для запроса URL-адреса, чтобы получить приблизительный диапазон.
3. Я все еще не совсем понимаю вашу проблему, но если вы хотите делать это каждый час, не делайте этого в коде. Вместо этого напишите свой скрипт так, чтобы он получал данные, сравнивал их с тем, что у вас уже есть, затем выполняйте стратегию обновления (вставить, если новый, обновить, если существующий). Чтобы запускать его каждый час, используйте что-то вроде cron .