Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Python
- import requests, json
- # Django
- from django.core.cache import caches
- # Project
- from utilities import notify
- '''
- Our page builder is builder.io
- '''
- API_KEY = "0e283f9aec57480a988bd13b48a6526f"
- URL_PREFIX = "https://www.ethikdo.co"
- cache = caches['cms']
- def get(endpoint="", params={}):
- paramstring = ""
- if params:
- for key, value in params.items():
- paramstring += f"&{key}={value}"
- response = requests.get(f"https://cdn.builder.io/api/{endpoint}?apiKey={API_KEY}{paramstring}")
- try:
- return response.json()
- except json.decoder.JSONDecodeError:
- return response.text
- def page_html(url):
- html = cache.get(url)
- if not html:
- params = {
- 'url': URL_PREFIX + url + '/',
- 'includeUnpublished': 'true',
- }
- try:
- html = get("v1/html/page", params)['data']['html']
- except KeyError:
- html = "Page could not be loaded"
- else:
- cache.set(url, html)
- return html
- def pages(includeUnpublished=False, from_cache=True):
- pages = cache.get('pages') if from_cache else None
- if not pages :
- pages = {}
- params = {'omit': 'data.blocks',}
- if includeUnpublished:
- params['includeUnpublished'] = "true"
- pages_data = get("v2/content/page", params)
- page_list = pages_data.get('results', None) if pages_data else None
- if page_list:
- for page in page_list:
- try:
- url = page['data']['url']
- pages[url] = page['data']
- pages[url]['html'] = page_html(url)
- except KeyError as e:
- exception = e.__class__.__name__
- notify(f"An error occured when loading a builder.io page. `{exception}: {e}`", 'alerts')
- cache.set('pages', pages)
- else:
- notify(f"An error occured when loading the builder.io pages. `{str(page_list)}`", 'alerts')
- return pages
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement