mirror of
https://github.com/postgres/pgweb.git
synced 2025-08-06 09:57:57 +00:00
48 lines
1.5 KiB
Python
Executable File
48 lines
1.5 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
import feedparser
|
|
import socket
|
|
import sys
|
|
import os
|
|
from datetime import datetime
|
|
|
|
# Set up for accessing django
|
|
from django.core.management import setup_environ
|
|
sys.path.append(os.path.join(os.path.abspath(os.path.dirname(sys.argv[0])), '../../pgweb'))
|
|
import settings
|
|
setup_environ(settings)
|
|
|
|
from core.models import ImportedRSSFeed, ImportedRSSItem
|
|
from django.db import transaction
|
|
|
|
# Set timeout for loading RSS feeds
|
|
socket.setdefaulttimeout(20)
|
|
|
|
transaction.enter_transaction_management()
|
|
transaction.managed()
|
|
for importfeed in ImportedRSSFeed.objects.all():
|
|
try:
|
|
feed = feedparser.parse(importfeed.url)
|
|
|
|
if not hasattr(feed, 'status'):
|
|
# bozo_excpetion can seemingly be set when there is no error as well,
|
|
# so make sure we only check if we didn't get a status.
|
|
if hasattr(feed,'bozo_exception'):
|
|
raise Exception('Feed load error %s' % feed.bozo_exception)
|
|
raise Exception('Feed load error with no exception!')
|
|
if feed.status != 200:
|
|
raise Exception('Feed returned status %s' % feed.status)
|
|
for entry in feed.entries:
|
|
try:
|
|
item = ImportedRSSItem.objects.get(feed=importfeed, url=entry.link)
|
|
except ImportedRSSItem.DoesNotExist:
|
|
item = ImportedRSSItem(feed=importfeed,
|
|
title=entry.title[:100],
|
|
url=entry.link,
|
|
posttime=datetime.strptime(entry.date, "%a, %d %b %Y %H:%M:%S %Z"),
|
|
)
|
|
item.save()
|
|
transaction.commit()
|
|
except Exception, e:
|
|
print "Failed to load %s: %s" % (importfeed, e)
|