Как кэшировать вызовы API Mashape. Я получил код ниже, но он, похоже, не делает кеширование. Mashape использует unirest для получения ответа API.Кэширование вызовов API Mashape в Python
def fetchMashape(url, headers):
cached = unirest.get(url, headers=headers) #cache.get(url)
content =""
if not cached:
response = unirest.get(url,
headers=headers)
else:
response = cached
dictionary = json.loads(response.raw_body)
return dictionary
Я был в состоянии сделать это с URL, где я могу добавить ключ API с помощью запроса HTTP библиотеку http://docs.python-requests.org/en/latest/index.html например
from django.core.cache import cache
from urllib2 import Request, urlopen, build_opener
from urllib import urlencode
import json, ast
import unirest
import requests
import xmltodict
test = fetchJson("http//www.myapi.com/v1/MY_API_KEY/query/json=blahblah")
#fetchJson with caching
def fetchJson(url):
cached = cache.get(url)
content = ""
if not cached:
r = requests.get(url)
if(r.ok):
cache.set(url, r.text)
content = r.text
else:
content = None
else:
# Return the cached content
content = cached
if content is not None:
return json.loads(content)
else:
return None
Я использую django 1.6.6. Кэш хранится в базе данных. Мой файл settings.py. Имя базы данных - dev_cache.
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'dev_cache',
'TIMEOUT': 60*60*24*7*4,
'VERSION': 1,
'OPTIONS': {
'MAX_ENTRIES': 1022000
}
}
}
Привет cloudviz, надеюсь, что я могу вам помочь, но, пожалуйста, вы можете, дайте мне знать немного больше ниже: * Вы установили библиотеку Unirest? Я не вижу его в вашем коде * Кэширование означает, что вы хотите сохранить ответ API в переменную? Имейте в виду, что если вы запустите сценарий два раза, переменная перестанет существовать после запуска первого скрипта, может быть, вам лучше записать ее на БД или статический файл на вашем диске где-нибудь в целях кеширования? –
Спасибо. Я обновил свой вопрос @API_sheriff_orlie. Я установил библиотеку Unirest. Кэширование. Я хочу сохранить содержимое ответа (например, JSON) в базу данных с именем dev_cache. Все работает нормально, это кэширование ответа api mashape, которое работает неправильно. – cloudviz
Вы пытались определить переменную «response» вне области if? –