Вот упрощенная версия моего скрипта:
Вот упрощенная версия моего скрипта:
Код: Выделить всё
import json
import requests
import pandas as pd
from datetime import datetime, timedelta
from ratelimit import limits, sleep_and_retry
# Constants for rate limiting
CALLS = 900
RATE_LIMIT = 3600
# API secrets for different forums
API_SECRETS = {
"example forum':"key"
}
# Rate limit decorator
@sleep_and_retry
@limits(calls=CALLS, period=RATE_LIMIT)
def check_limit(url):
return requests.get(url)
def fetch_comments(forum, hours=1):
api_secret = API_SECRETS[forum]
skeleton_url = f'https://disqus.com/api/3.0/forums/listPosts.json?forum={forum}&limit=100&related=thread&include=approved&order=desc&api_secret={api_secret}'
# Calculate the start time as a UNIX timestamp
time_threshold = datetime.utcnow() - timedelta(hours=hours)
time_threshold = int(time_threshold.timestamp())
url = f"{skeleton_url}&since={time_threshold}"
response = check_limit(url)
try:
comments = response.json()
except:
print('Error:', response.status_code)
return []
total_comments = comments["response"]
cursor = comments.get("cursor", {})
i = 1
while cursor.get("hasNext"):
print(f"Fetching comments for {forum}, page {i}, cursor: {cursor['next']}")
next_cursor = cursor['next']
next_url = f"{skeleton_url}&cursor={next_cursor}"
try:
response = check_limit(next_url)
comments = response.json()
if comments["code"] == 15:
time.sleep(3000)
response = check_limit(next_url)
comments = response.json()
if comments["code"] == 13:
print(comments)
print("Sleeping for 10 mins")
time.sleep(600)
else:
total_comments.extend(comments["response"])
i += 1
cursor = comments.get("cursor", {})
except Exception as e:
print(e)
time.sleep(60)
return total_comments
def main():
forums = ["example forum"]
for forum in forums:
print(f"Processing forum: {forum}")
comments = fetch_comments(forum, hours=1)
# Process and save comments
if __name__ == "__main__":
main()
Когда я устанавливаю параметр часов на 1, 2, 7 или 25, все полученные комментарии старше указанного временной интервал, то есть они выходят за пределы диапазона «последние X часов». Похоже, что параметр с тех пор извлекает комментарии с указанного времени и раньше, а не с указанного времени до текущего времени.
Любая помощь или рекомендации о том, как правильно использовать параметр с тех пор. или другой метод достижения желаемых результатов был бы очень признателен.
Спасибо!
Что я пробовал:
- Я убедился, что временные метки правильно преобразованы в формат UNIX.
< li>Я протестировал разные значения параметра Часы, чтобы подтвердить поведение. - Я просмотрел документацию Disqus API, но поведение все еще неожиданный.
Моя цель:
Я хочу получать комментарии от последнего указанного количества часов до текущего времени. Как я могу изменить свой скрипт или правильно использовать параметры Disqus API для достижения этой цели?
Подробнее здесь: https://stackoverflow.com/questions/785 ... ecent-ones