1
0
Fork 0
mirror of https://github.com/Findus23/acronomy.git synced 2024-09-19 15:33:45 +02:00

add link to original wikipedia image

This commit is contained in:
Lukas Winkler 2020-06-08 18:45:38 +02:00
parent cdb54991b7
commit de781c1af1
Signed by: lukas
GPG key ID: 54DE4D798D244853
7 changed files with 152 additions and 4 deletions

View file

@ -53,3 +53,11 @@ class AddForm(ModelForm):
model = Acronym
fields = ['name', 'full_name', "description_md", "tags"]
class AddWikipediaForm(ModelForm):
tags = TagField()
class Meta:
model = Acronym
fields = ['name', 'full_name', "description_md", "tags"]

View file

@ -0,0 +1,15 @@
from django.core.management.base import BaseCommand
from acros.models import WikipediaLink
class Command(BaseCommand):
help = 'Updates all Wikipedia articles'
def handle(self, *args, **options):
links = WikipediaLink.objects.all()
for link in links:
if link.fetched:
self.stdout.write(link.title)
link.fetched = False
link.save()

View file

@ -0,0 +1,33 @@
# Generated by Django 3.0.6 on 2020-06-08 15:19
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('acros', '0025_auto_20200601_1821'),
]
operations = [
migrations.AddField(
model_name='historicalwikipedialink',
name='thumbnail_caption',
field=models.CharField(max_length=1000, null=True),
),
migrations.AddField(
model_name='historicalwikipedialink',
name='thumbnail_title',
field=models.CharField(max_length=100, null=True),
),
migrations.AddField(
model_name='wikipedialink',
name='thumbnail_caption',
field=models.CharField(max_length=1000, null=True),
),
migrations.AddField(
model_name='wikipedialink',
name='thumbnail_title',
field=models.CharField(max_length=100, null=True),
),
]

View file

@ -0,0 +1,33 @@
# Generated by Django 3.0.6 on 2020-06-08 15:21
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('acros', '0026_auto_20200608_1519'),
]
operations = [
migrations.AlterField(
model_name='historicalwikipedialink',
name='thumbnail_caption',
field=models.CharField(blank=True, max_length=1000, null=True),
),
migrations.AlterField(
model_name='historicalwikipedialink',
name='thumbnail_title',
field=models.CharField(blank=True, max_length=100, null=True),
),
migrations.AlterField(
model_name='wikipedialink',
name='thumbnail_caption',
field=models.CharField(blank=True, max_length=1000, null=True),
),
migrations.AlterField(
model_name='wikipedialink',
name='thumbnail_title',
field=models.CharField(blank=True, max_length=100, null=True),
),
]

View file

@ -18,13 +18,16 @@ class WikipediaLink(models.Model):
height_field="thumbnail_height", width_field="thumbnail_width")
thumbnail_width = models.IntegerField(blank=True, editable=False)
thumbnail_height = models.IntegerField(blank=True, editable=False)
thumbnail_title = models.CharField(max_length=100, null=True, blank=True)
thumbnail_caption = models.CharField(max_length=1000, null=True, blank=True)
timestamp = models.DateTimeField(blank=True)
fetched = models.BooleanField(default=False)
history = HistoricalRecords()
def save(self, *args, **kwargs):
if not self.fetched:
self.extract, self.extract_html, self.timestamp, thumbnail_url = fetch_wikipedia_summary(self.title)
self.extract, self.extract_html, self.timestamp, thumbnail_url, \
self.thumbnail_title, self.thumbnail_caption = fetch_wikipedia_summary(self.title)
with TemporaryFile("rb+") as fd:
r = requests.get(thumbnail_url)
filename = thumbnail_url.split("/")[-1]
@ -40,5 +43,9 @@ class WikipediaLink(models.Model):
def url(self):
return f"https://en.wikipedia.org/wiki/{self.title}"
@property
def thumbnail_wiki_url(self):
return f"https://en.wikipedia.org/wiki/{self.thumbnail_title}"
def __str__(self):
return self.title

View file

@ -29,8 +29,11 @@
{% for link in acro.wiki_articles.all %}
<div class="mb-4 col-md-4">
<div class="card">
<img src="{{ link.thumbnail.url }}" class="card-img-top"
width="{{ link.thumbnail_width }}" height="{{ link.thumbnail_height }}">
<a href="{{ link.thumbnail_wiki_url }}">
<img src="{{ link.thumbnail.url }}" class="card-img-top"
width="{{ link.thumbnail_width }}" height="{{ link.thumbnail_height }}"
title="{{ link.thumbnail_caption }}">
</a>
<div class="card-body">
<h5 class="card-title">{{ link.title }}</h5>
{#<p class="card-text">{{ link.extract_html|safe }}</p>#}
@ -102,6 +105,42 @@
</div>
</div>
{% endfor %}
{# {% if user.is_authenticated %}#}
{# <div class="mb-4 col-md-4">#}
{# <div class="card">#}
{# <div class="card-body">#}
{# <div class="btn-group-vertical" role="group">#}
{# <button data-toggle="collapse" href="#collapseAddWikipediaForm" class="btn btn-secondary" role="button"#}
{# aria-expanded="false" aria-controls="collapseAddWikipediaForm">#}
{# add Wikipedia Article#}
{# </button>#}
{# <button data-toggle="collapse" href="#collapseAddPaperForm" class="btn btn-secondary" role="button"#}
{# aria-expanded="false" aria-controls="collapseAddPaperForm">#}
{# add Reference Paper#}
{# </button>#}
{# <button data-toggle="collapse" href="#collapseAddWebsiteForm" class="btn btn-secondary" role="button"#}
{# aria-expanded="false" aria-controls="collapseAddWebsiteForm">#}
{# add Website Link#}
{# </button>#}
{# </div>#}
{# </div>#}
{# <form class="card-footer accordion" id="addAccordion">#}
{# <div id="collapseAddWikipediaForm" class="collapse form-group" data-parent="#addAccordion">#}
{# <label for="wikiTitle">Wikipedia Title</label>#}
{# <input type="text" class="form-control" name="wiki_title" id="wikiTitle">#}
{# </div>#}
{# <div id="collapseAddPaperForm" class="collapse form-group" data-parent="#addAccordion">#}
{# <label for="paperBibcode">Bibcode</label>#}
{# <input type="text" class="form-control" name="paper_bibcode" id="paperBibcode">#}
{# </div>#}
{# <div id="collapseAddWebsiteForm" class="collapse form-group" data-parent="#addAccordion">#}
{# <label for="websiteUrl">URL</label>#}
{# <input type="url" class="form-control" name="website_url" id="websiteUrl">#}
{# </div>#}
{# </form>#}
{# </div>#}
{# </div>#}
{# {% endif %}#}
</div>
<a href="{% url 'admin:acros_acronym_change' acro.id %}">Admin-Edit</a>
{# <a href="{% url 'edit' acro.slug %}">Edit</a>#}

View file

@ -7,7 +7,20 @@ def fetch_wikipedia_summary(title: str):
r.raise_for_status()
data = r.json()
print(data)
return data["extract"], data["extract_html"], data["timestamp"], data["thumbnail"]["source"]
r2 = requests.get("https://en.wikipedia.org/api/rest_v1/page/media-list/" + title)
r2.raise_for_status()
image_data = r2.json()["items"]
if len(image_data) > 0:
image_title = image_data[0]["title"]
image_caption = image_data[0]["caption"]["text"] if "caption" in image_data else None
else:
image_title = image_caption = None
return (
data["extract"], data["extract_html"], data["timestamp"],
data["thumbnail"]["source"],
image_title, image_caption
)
def get_website_title(url: str) -> str: