Получать обновленные сообщения из определенного API с помощью цикла и с помощью инструкции в Python

#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 обратно.

Вот что я попробовал:

  1. Получайте n сообщения с помощью API.
  2. Сравните созданное время последнего сообщения plist (поскольку оно уже отсортировано) со временем последнего обновления.
  3. Если необходимо обновить дополнительные сообщения, получите 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 .