70 lines
2.4 KiB
Python
70 lines
2.4 KiB
Python
# SPDX-FileCopyrightText: 2020 Dan Cogliano for Adafruit Industries
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
import time
|
|
import random
|
|
import board
|
|
from adafruit_pyportal import PyPortal
|
|
from adafruit_display_shapes.circle import Circle
|
|
|
|
WIDTH = board.DISPLAY.width
|
|
HEIGHT = board.DISPLAY.height
|
|
|
|
#pylint: disable=line-too-long
|
|
|
|
# these lines show the entire collection
|
|
APIURL = "https://openaccess-api.clevelandart.org/api/artworks?cc0=1&has_image=1&indent=2&limit=1&skip="
|
|
IMAGECOUNT = 31954
|
|
|
|
# uncomment these lines to show just paintings
|
|
# APIURL = "https://openaccess-api.clevelandart.org/api/artworks?cc0=1&has_image=1&indent=2&limit=1&type=Painting&skip="
|
|
# IMAGECOUNT = 3223
|
|
|
|
BACKGROUND_FILE = "/background.bmp"
|
|
if WIDTH > 320:
|
|
BACKGROUND_FILE = "/background_480.bmp"
|
|
|
|
pyportal = PyPortal(default_bg=BACKGROUND_FILE,
|
|
image_json_path=["data", 0, "images", "web", "url"],
|
|
image_dim_json_path=(["data", 0, "images", "web", "width"],
|
|
["data", 0, "images", "web", "height"]),
|
|
image_resize=(WIDTH, HEIGHT - 15),
|
|
image_position=(0, 0),
|
|
text_font="/fonts/OpenSans-9.bdf",
|
|
json_path=["data", 0, "title"],
|
|
text_position=(4, HEIGHT - 9),
|
|
text_color=0xFFFFFF)
|
|
|
|
circle = Circle(WIDTH - 8, HEIGHT - 7, 5, fill=0)
|
|
pyportal.splash.append(circle)
|
|
loopcount = 0
|
|
errorcount = 0
|
|
while True:
|
|
response = None
|
|
try:
|
|
circle.fill = 0xFF0000
|
|
itemid = random.randint(1, IMAGECOUNT)
|
|
# itemid = 20 # portrait mode example
|
|
# itemid = 21 # landscape mode example
|
|
print("retrieving url:", APIURL + str(itemid))
|
|
response = pyportal.fetch(APIURL + str(itemid))
|
|
circle.fill = 0
|
|
print("Response is", response)
|
|
loopcount = loopcount + 1
|
|
|
|
except (RuntimeError, KeyError, TypeError) as e:
|
|
print("An error occured, retrying! -", e)
|
|
print("loop counter:", loopcount)
|
|
assert errorcount < 20, "Too many errors, stopping"
|
|
errorcount = errorcount + 1
|
|
time.sleep(60)
|
|
continue
|
|
|
|
errorcount = 0
|
|
stamp = time.monotonic()
|
|
# wait 5 minutes before getting again
|
|
while (time.monotonic() - stamp) < (5*60):
|
|
# or, if they touch the screen, fetch immediately!
|
|
if pyportal.touchscreen.touch_point:
|
|
break
|