This commit is contained in:
j 2023-07-16 11:26:14 +05:30
commit 4b157ed1d1
15 changed files with 305 additions and 133 deletions

View file

@ -1,6 +1,8 @@
from django.utils.timezone import datetime, timedelta
from django.utils import timezone
import json
import requests
import lxml.html
from django.conf import settings
from django.contrib.auth import get_user_model
@ -31,6 +33,10 @@ class Item(models.Model):
announced = models.DateTimeField(null=True, default=None, blank=True)
data = models.JSONField(default=dict, editable=False)
def save(self, *args, **kwargs):
if self.url and not self.data:
self.update_data()
super().save(*args, **kwargs)
def __str__(self):
return '%s (%s)' % (self.title, self.url)
@ -70,6 +76,26 @@ class Item(models.Model):
def get_absolute_url(self):
return reverse('item', kwargs={'id': self.id})
def update_data(self):
self.data.update(self.parse_url())
def parse_url(self):
content = requests.get(self.url).text
doc = lxml.html.fromstring(content)
data = {}
for meta in doc.cssselect('meta'):
key = meta.attrib.get('name')
if not key:
key = meta.attrib.get('property')
value = meta.attrib.get('content')
if key and value:
if key in ('viewport', ):
continue
key = key.replace('og:', '')
data[key] = value
return data
class Comment(models.Model):
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
@ -83,6 +109,10 @@ class Comment(models.Model):
data = models.JSONField(default=dict, editable=False)
published = models.DateTimeField(null=True, default=None)
@property
def is_published(self):
return bool(self.published)
def __str__(self):
return '%s: %s' % (self.item, self.user)