YouTubeチャンネルのすべての投稿を表示するアプリがあります。そのために、views.pyで呼び出すyoutube-APIv3を使用します。次に、レンダリング関数にコンテキストとして渡すすべてのデータをデータベースに保存します。
return render(request, "blog/home.html", context)
最後のAPI呼び出しが5分前の場合にのみAPIを呼び出し、それ以外の場合はデータベース内のデータを使用することが可能かどうか疑問に思いました。
私が持っているアイデアの1つは、API呼び出しが行われるたびに現在の日時をファイルに保存し、views-functionが呼び出されるたびに、現在の日時をファイル内の日時と比較することです。しかし、これは非効率的で、もっと良い方法があるのではないかと思っていました。
私はあなたが説明したのと同じようなことをしましたが、これがあなたの助けになるかどうかはわかりません。私の場合、1分ごとにのみ再度リクエストできます
@api_view(['GET'])
@permission_classes([AllowAny])
def api_get_cha3_price(request):
response_data = {}
# Get Cha3 price and the logics
d = CryptoPrice.objects.get(name='CHA3') # get the last updated time
d = d.date.replace(tzinfo=None) + timedelta(hours=8,
seconds=3) # +8 hours because it's malaysia time and 1 minute is so that if > 1 minute can request again
d1 = datetime.now()
cha3 = CryptoPrice.objects.get(name='CHA3')
if d1 > d:
import time
try:
timestamp = int(time.time() * 1000)
response = requests.get(
f"API_URL",
timeout=2)
if response.status_code == 200:
data = response.json()
cha3.price = data['data'][0]['price']
cha3.date = timezone.now()
cha3.save()
cha3_price = cha3.price
response_data["cha3_price"] = f"{cha3_price}"
except(requests.exceptions.Timeout, requests.exceptions.ConnectionError, KeyError, TypeError):
cha3_price = cha3.price
response_data["ERROR"] = f"{cha3_price}"
else:
cha3_price = cha3.price
response_data["cha3_price"] = f"{cha3_price}"
return Response(data=response_data)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加