Nasa API 传数据好慢
Nasa API pass the data so slow
我正在尝试从 NASA API 获取近地小行星数据。
我正在获取所需的数据,但速度非常慢。如何优化我的代码以快速获取数据?
@api_view(['GET'])
def getDates(request, start_date, end_date):
dates = []
all_data = list()
api_key = '****************************'
url_neo_feed = "https://api.nasa.gov/neo/rest/v1/feed?"
params = {
'api_key': api_key,
'start_date': start_date,
'end_date': end_date
}
response = requests.get(url_neo_feed, params=params)
json_data = orjson.loads(response.text)
date_asteroids = json_data['near_earth_objects']
for date in date_asteroids:
dates.append(date)
# Splitting the data to make it more meaningful
for date in dates:
collection = json_data.get('near_earth_objects')
all_dates = collection.get('{}'.format(date))
all_data.append(all_dates)
return Response(all_data)
NASA 的 API 显然需要 8 秒来响应 4 天的数据。
您的处理代码只用了很短的时间(不到 0.01 秒)来处理该数据。
对于 NASA 的 API 速度慢,您无能为力,但您可以在本地缓存给定时间段的数据,如果这对您的应用程序来说没问题的话;该范围的后续请求将是 near-instant.
您可以使用例如Django's cache(确保它被配置为不同于 DummyCache 的其他东西以查看效果):
from django.core.cache import cache
@api_view(['GET'])
def getDates(request, start_date, end_date):
cache_key = f'nasa_neo_{start_date}_{end_date}'
json_data = cache.get(cache_key)
if not json_data:
response = requests.get("https://api.nasa.gov/neo/rest/v1/feed?", params={
'api_key': api_key,
'start_date': start_date,
'end_date': end_date
})
response.raise_for_status()
json_data = orjson.loads(response.text)
cache.set(cache_key, json_data, timeout=86400)
date_asteroids = ...
我正在尝试从 NASA API 获取近地小行星数据。 我正在获取所需的数据,但速度非常慢。如何优化我的代码以快速获取数据?
@api_view(['GET'])
def getDates(request, start_date, end_date):
dates = []
all_data = list()
api_key = '****************************'
url_neo_feed = "https://api.nasa.gov/neo/rest/v1/feed?"
params = {
'api_key': api_key,
'start_date': start_date,
'end_date': end_date
}
response = requests.get(url_neo_feed, params=params)
json_data = orjson.loads(response.text)
date_asteroids = json_data['near_earth_objects']
for date in date_asteroids:
dates.append(date)
# Splitting the data to make it more meaningful
for date in dates:
collection = json_data.get('near_earth_objects')
all_dates = collection.get('{}'.format(date))
all_data.append(all_dates)
return Response(all_data)
NASA 的 API 显然需要 8 秒来响应 4 天的数据。
您的处理代码只用了很短的时间(不到 0.01 秒)来处理该数据。
对于 NASA 的 API 速度慢,您无能为力,但您可以在本地缓存给定时间段的数据,如果这对您的应用程序来说没问题的话;该范围的后续请求将是 near-instant.
您可以使用例如Django's cache(确保它被配置为不同于 DummyCache 的其他东西以查看效果):
from django.core.cache import cache
@api_view(['GET'])
def getDates(request, start_date, end_date):
cache_key = f'nasa_neo_{start_date}_{end_date}'
json_data = cache.get(cache_key)
if not json_data:
response = requests.get("https://api.nasa.gov/neo/rest/v1/feed?", params={
'api_key': api_key,
'start_date': start_date,
'end_date': end_date
})
response.raise_for_status()
json_data = orjson.loads(response.text)
cache.set(cache_key, json_data, timeout=86400)
date_asteroids = ...