..
Viewing
feed.py
46 lines (35 loc) • 1.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 | import re
import requests
from django.conf import settings
from django.contrib.syndication.views import Feed
from django.utils import feedgenerator
from django.utils.feedgenerator import Enclosure
from .models import Post
request_domain = settings.DEBUG and 'https://preview.thatcomputerscientist.com' or 'https://shi.foo'
class RSSFeed(Feed):
title = 'Shifoo'
link = '/weblog'
description = 'RSS Feed for Shifoo\'s Weblog'
feed_type = feedgenerator.Rss201rev2Feed
def items(self):
return Post.objects.all().filter(is_public=True).order_by('-date')[:10]
def item_title(self, item):
return item.title
def item_description(self, item):
body = re.sub(r"[\x00-\x08\x0B-\x1F\x7F-\x9F]", "", str(item.body))
return body
def item_link(self, item):
return f'{request_domain}/weblog/{item.slug}'
def item_pubdate(self, item):
return item.date
def get_cl(self, url):
r = requests.head(url)
return str(r.headers['Content-Length'])
def item_enclosures(self, item):
return [
Enclosure(
url=f'{request_domain}/ignis/post_image/1200/{item.id}.gif',
length=self.get_cl(f'{request_domain}/ignis/post_image/1200/{item.id}.gif'),
mime_type='image/gif',
)
]
|
|