Socialify

Folder ..

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',
            )
        ]