X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/d66f9960d12d739c44a89d1d4e013f52783097e7..a9226097c8eea0591fd3249f62a71becc6d2be93:/src/references/models.py?ds=sidebyside diff --git a/src/references/models.py b/src/references/models.py index 70493d347..d4733ffcf 100644 --- a/src/references/models.py +++ b/src/references/models.py @@ -1,4 +1,5 @@ import json +import urllib.parse from django.db import models from wikidata.client import Client @@ -8,6 +9,7 @@ class Entity(models.Model): WIKIDATA_IMAGE = 'P18' WIKIDATA_COORDINATE_LOCATION = 'P625' WIKIDATA_EARTH = 'Q2' + WIKIDATA_IMAGE_QUERY = './w/api.php?action=query&titles={}&format=json&prop=imageinfo&iiprop=url&iiurlwidth=240&iiurlheight=200' uri = models.CharField(max_length=255, unique=True, db_index=True) label = models.CharField(max_length=1024, blank=True) @@ -43,20 +45,46 @@ class Entity(models.Model): self.lon = location.longitude images = entity.getlist(client.get(self.WIKIDATA_IMAGE)) - self.images = json.dumps([ - { + image_data_list = [] + for image in images: + image_data = { "url": image.image_url, "page": image.page_url, "resolution": image.image_resolution, - } for image in images - ]) + } + + result = client.request( + self.WIKIDATA_IMAGE_QUERY.format( + urllib.parse.quote(image.title) + ) + ) + + result_data = next(iter(result['query']['pages'].values()))['imageinfo'][0] + image_data['thumburl'] = result_data['thumburl'] + image_data['thumbresolution'] = [ + result_data['thumbwidth'], + result_data['thumbheight'] + ] + if 'responsiveUrls' in result_data: + image_data['responsiveUrls'] = result_data['responsiveUrls'] + + image_data_list.append(image_data) + + self.images = json.dumps(image_data_list) class Reference(models.Model): book = models.ForeignKey('catalogue.Book', models.CASCADE) entity = models.ForeignKey(Entity, models.CASCADE) - first_section = models.CharField(max_length=255) class Meta: unique_together = (('book', 'entity'),) + +class Occurence(models.Model): + reference = models.ForeignKey(Reference, models.CASCADE) + section = models.IntegerField() + html = models.TextField() + + class Meta: + ordering = ('section',)