def get_artwork(self, **kwargs): import random import requests try: response = requests.get(self.api_url, timeout=1, params=self.parameters).json() except: return False, 'victoriaalbertmuseum' # If an error occurs here, the API is most likely no longer accepting requests response = access(response, ['records']) artwork = {} available_choices = range(len(response)) image_url = None while not image_url: choice = random.choice(available_choices) image_url = access(response, [choice, 'fields', 'primary_image_id']) if image_url: artwork['image_url'] = "http://media.vam.ac.uk/media/thira/collection_images/{0}/{1}.jpg".format(image_url[:6], image_url) break else: available_choices.remove(choice) else: return False, 'victoriaalbertmuseum' # If none of the choices had a valid image artwork['from_api'] = 'Victoria and Albert Museum' artwork['external_id'] = access(response, [choice, 'pk']) if not artwork['external_id']: return False, 'victoriaalbertmuseum' artwork['title'] = access(response, [choice, 'fields', 'title']) if not artwork['title']: artwork['title'] = 'Untitled' # artwork['external_url'] = access(response, []) artwork['source'] = 'Victoria and Albert Museum' artwork['museum'] = 'Victoria and Albert Museum' artwork['artist'] = access(response, [choice, 'fields', 'artist']) artwork['art_type'] = access(response, [choice, 'fields', 'object']) # artwork['description'] = access(response, []) artwork['date'] = access(response, [choice, 'fields', 'date_text']) # print artwork try: artwork_model = self.save_artwork_details(**artwork) except: return False, 'victoriaalbertmuseum' return artwork_model, 'victoriaalbertmuseum'
def get_artwork(self, **kwargs): import random import requests from requests.auth import HTTPBasicAuth from apps.mash.museum_apis.art_credentials import luce_username, luce_password artwork_id = random.randint(self.random_boundaries[0], self.random_boundaries[1]) self.parameters['start'] = artwork_id try: response = requests.get(self.api_url, timeout=0.1, params=self.parameters, auth=HTTPBasicAuth(luce_username, luce_password)).json() except: return False, 'luce' # If an error occurs here, the API is most likely no longer accepting requests artwork = {} artwork['from_api'] = 'luce' artwork['external_id'] = artwork_id artwork['image_url'] = access(response, ['response','docs',0,'descriptiveNonRepeating','online_media','media',0,'content']) artwork['title'] = access(response, ['response', 'docs', 0, 'descriptiveNonRepeating', 'title', 'content']) artwork['external_url'] = access(response, ['response', 'docs', 0, 'descriptiveNonRepeating', 'record_link']) artwork['source'] = access(response, ['response', 'docs', 0, 'freetext', 'dataSource', 0, 'content']) artwork['artist'] = access(response, ['response', 'docs', 0, 'freetext', 'name', 0, 'content']) artwork['art_type'] = access(response, ['response', 'docs', 0, 'freetext', 'objectType', 0, 'content']) artwork['description'] = access(response, ['response', 'docs', 0, 'freetext', 'physicalDescription', 0, 'content']) artwork['date'] = access(response, ['response', 'docs', 0, 'freetext', 'date', 0, 'content']) try: artwork_model = self.save_artwork_details(**artwork) except: return False, 'luce' # Sample model instance # {'created_at': datetime.datetime(2014, 3, 31, 2, 18, 46, 161577, tzinfo=<UTC>), 'art_type': u'Graphic Arts-Print', 'description': u'lithograph on paper', 'artist': u'Louis Silverstein, born New York City 1919-1994', 'museum': u'', 'title': u'Crucible, from the American Absract Artists 50th Anniversary Print Portfolio', '_state': <django.db.models.base.ModelState object at 0x1041cde90>, 'from_api': u'luce', 'updated_at': datetime.datetime(2014, 3, 31, 2, 18, 46, 161608, tzinfo=<UTC>), 'source': u'Smithsonian American Art Museum', 'image_url': u'http://americanart.si.edu/images/1987/1987.52.39_1a.jpg', 'date': u'1987', 'external_id': u'15515', 'id': 1, 'external_url': u'http://americanart.si.edu/collections/search/artwork/?id=22412'} return artwork_model, 'luce'
def get_artwork(self, **kwargs): import random import requests try: response = requests.get(self.api_url, timeout=15, params=self.parameters).json() except: return False, 'brooklyn' # If an error occurs here, the API is most likely no longer accepting requests artwork = {} artwork['from_api'] = 'brooklyn' available_choices = range(len(access(response, ['response', 'resultset', 'items']))) if len(available_choices) < 1: return False, 'brooklyn' image_url = None while not image_url: choice = random.choice(available_choices) # Determine the largest available image image_choices = access(response, ['response', 'resultset', 'items', choice, 'images']) max_available_size = -1 if image_choices: for image_key, image_values in image_choices.items(): # Skip non-image key/value pairs like results_limit and total try: int(image_key) except: continue uri = access(image_values, ['uri']) if not uri: continue available_size = uri.index('/size') if available_size > 0: available_size = int(uri[available_size + 5]) if available_size > max_available_size: max_available_size = available_size image_url = uri if image_url and max_available_size > 2: # more consistently give larger images artwork['image_url'] = image_url break else: available_choices.remove(choice) else: # Last resort, if only small images are available in the resultset if image_url and max_available_size <= 2: # Try to get size 4 even if it's not given try: r = requests.get(image_url.replace('/size{0}'.format(max_available_size), '/size4')) if r.status_code == 200: artwork['image_url'] = image_url.replace('/size{0}'.format(max_available_size), '/size4') else: artwork['image_url'] = image_url except: artwork['image_url'] = image_url else: return False, 'brooklyn' artwork['external_id'] = access(response, ['response', 'resultset', 'items', choice, 'id']) if not artwork['external_id']: return False, 'brooklyn' artwork['title'] = access(response, ['response', 'resultset', 'items', choice, 'title']) artwork['external_url'] = access(response, ['response', 'resultset', 'items', choice, 'uri']) artwork['source'] = 'Brooklyn Museum' artwork['art_type'] = access(response, ['response', 'resultset', 'items', choice, 'medium']) artwork['description'] = access(response, ['response', 'resultset', 'items', choice, 'description']) if not artwork['description']: artwork['description'] = access(response, ['response', 'resultset', 'items', choice, 'label']) artwork['date'] = access(response, ['response', 'resultset', 'items', choice, 'object_date']) # Brooklyn API has multiple artists all_artists = access(response, ['response', 'resultset', 'items', choice, 'artists']) artwork['artist'] = [] if all_artists: for artist in all_artists: artwork['artist'].append(artist['name']) artwork['artist'] = ', '.join(artwork['artist']) else: artwork['artist'] = '' # Brooklyn API descriptions sometimes have \r\n and HTML characters in them. Let's remove them if artwork['description']: artwork['description'] = strip_tags(artwork['description']) artwork['description'] = artwork['description'].replace('\\r\\n', '') else: artwork['description'] = '' # Brooklyn API returns lots of escaped characters using backslashes. Let's remove those. for key, value in artwork.items(): if value: artwork[key] = value.replace('\\', '') try: artwork_model = self.save_artwork_details(**artwork) except: return False, 'brooklyn' # Sample model instance # {'created_at': datetime.datetime(2014, 3, 31, 2, 18, 46, 161577, tzinfo=<UTC>), 'art_type': u'Graphic Arts-Print', 'description': u'lithograph on paper', 'artist': u'Louis Silverstein, born New York City 1919-1994', 'museum': u'', 'title': u'Crucible, from the American Absract Artists 50th Anniversary Print Portfolio', '_state': <django.db.models.base.ModelState object at 0x1041cde90>, 'from_api': u'luce', 'updated_at': datetime.datetime(2014, 3, 31, 2, 18, 46, 161608, tzinfo=<UTC>), 'source': u'Smithsonian American Art Museum', 'image_url': u'http://americanart.si.edu/images/1987/1987.52.39_1a.jpg', 'date': u'1987', 'external_id': u'15515', 'id': 1, 'external_url': u'http://americanart.si.edu/collections/search/artwork/?id=22412'} return artwork_model, 'brooklyn'
def get_artwork(self, **kwargs): import random import requests try: response = requests.get(self.api_url, timeout=5, params=self.parameters).json() except: return ( False, "waltersmuseum", ) # If an error occurs here, the API is most likely no longer accepting requests response = access(response, ["Items"]) artwork = {} available_choices = range(len(response)) image_url = None while not image_url: choice = random.choice(available_choices) for image_size in ("Raw", "Large", "Medium", "Small"): image_url = access(response, [choice, "PrimaryImage", image_size]) if image_url: artwork["image_url"] = image_url break else: available_choices.remove(choice) if image_url: break else: return False, "waltersmuseum" # If none of the choices had a valid image artwork["from_api"] = "Walters Museum" artwork["external_id"] = access(response, [choice, "ObjectID"]) if not artwork["external_id"]: return False, "waltersmuseum" artwork["title"] = access(response, [choice, "Title"]) if not artwork["title"] or artwork["title"] == "null": artwork["title"] = "Untitled" artwork["external_url"] = access(response, [choice, "ResourceURL"]) artwork["source"] = "Walters Museum" artwork["museum"] = "Walters Museum" artwork["artist"] = access(response, [choice, "Creator"]) artwork["art_type"] = access(response, [choice, "Medium"]) artwork["description"] = access(response, [choice, "Description"]) if not artwork["description"] or artwork["description"] == "null": artwork["description"] = None artwork["date"] = access(response, [choice, "DateText"]) try: artwork_model = self.save_artwork_details(**artwork) except: return False, "waltersmuseum" return artwork_model, "waltersmuseum"