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:
parent
cdb54991b7
commit
de781c1af1
7 changed files with 152 additions and 4 deletions
|
@ -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"]
|
||||
|
|
15
acros/management/commands/refetch_wikipedia.py
Normal file
15
acros/management/commands/refetch_wikipedia.py
Normal 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()
|
33
acros/migrations/0026_auto_20200608_1519.py
Normal file
33
acros/migrations/0026_auto_20200608_1519.py
Normal 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),
|
||||
),
|
||||
]
|
33
acros/migrations/0027_auto_20200608_1521.py
Normal file
33
acros/migrations/0027_auto_20200608_1521.py
Normal 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),
|
||||
),
|
||||
]
|
|
@ -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
|
||||
|
|
|
@ -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>#}
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in a new issue