This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
surveillao/base/models.py

71 lines
2.5 KiB
Python

from django.db import models
import feedparser
import datetime
import re
UNKNOWN_DATE = datetime.datetime(1970,1,1)
class Feed(models.Model):
url = models.URLField()
name = models.CharField(max_length=200)
regex = models.CharField(max_length=500, default='.*(web|internet|logiciel|informati|grc|citoyen)')
regex_exclude = models.CharField(max_length=500, default='', blank=True)
add_date = models.DateTimeField(auto_now_add=True)
parsed_date = models.DateTimeField(default=UNKNOWN_DATE)
def __unicode__(self):
return u'%s' % self.name
def read(self):
added = 0
feed = feedparser.parse(self.url)
re_in = re.compile(self.regex)
if self.regex_exclude != '':
print 'exclusion ON'
re_out = re.compile(self.regex_exclude)
else:
re_out = None
for e in feed.entries:
if re_in.match(e.title) or re_in.match(e.description):
if re_out != None:
if re_out.match(e.title) or re_out.match(e.description):
continue
print 'add item %s (%s)' % (e.title, e.link)
d = e.date_parsed
dt = datetime.datetime(d[0],d[1],d[2],d[3],d[4],d[5])
try:
Item(title=e.title,
link=e.link,
published_date=dt,
expire_date=UNKNOWN_DATE,
description=e.description,
source=self).save()
added += 1
except e,m:
print 'WARN : cannot add this (duplicate ?)'
raise e
self.parsed_date = datetime.datetime.now()
self.save()
return added
class Item(models.Model):
# from feed
title = models.CharField(max_length=200)
link = models.URLField()
description = models.CharField(max_length=500)
published_date = models.DateTimeField()
#
source = models.ForeignKey(Feed)
add_date = models.DateTimeField(auto_now_add=True)
# user content
mark = models.BooleanField(default=False)
expire_date = models.DateTimeField(blank=True)
comments = models.CharField(max_length=1000, blank=True)
def title_with_link(self):
return '<a href="%s">%s</a>' % (self.link, self.title)
title_with_link.short_description = "title"
title_with_link.allow_tags = True
title_with_link.admin_order_field = 'title'