def rss(): response.headers['Content-Type'] = 'application/rss+xml' import gluon.contrib.rss2 as rss2 requested_groups = request.vars.groups or '1' try: requested_groups = tuple([int(i) for i in requested_groups.split(',')]) except: return '' entries=db(db.announcement.id==db.access.record_id)\ (db.access.table_name=='announcement')\ (db.access.persons_group.belongs(requested_groups))\ (db.announcement.to_rss==True)\ (db.auth_user.id==db.announcement.owner)\ .select(groupby=db.announcement.id) items = [ rss2.RSSItem(title=entry.announcement.title, link=MAIN, author=entry.auth_user.email, description=entry.announcement.body, pubDate=entry.announcement.posted_on) for entry in entries ] rss = rss2.RSS2(title='public rss for groups ' + str(requested_groups), link=MAIN, description=str(requested_groups), lastBuildDate=datetime.datetime.now(), items=items) return rss2.dumps(rss)
def planet(): #return "" import gluon.contrib.rss2 as rss2 # store planet rss entries in disk (forever...) import portalocker import os, cPickle as pickle path = os.path.join(request.folder,'cache', "planet.rss") if not os.path.exists(path): f = open(path, "w+") rss = get_planet_rss(None) rss = [{'title': item.title, 'author': item.author, 'pubDate': item.pubDate, 'link': item.link, 'description': item.description} for item in rss.items] else: f = open(path, "r+") rss = None portalocker.lock(f, portalocker.LOCK_EX) if not rss: rss = pickle.load(f) else: f.seek(0) pickle.dump(rss, f) portalocker.unlock(f) f.close() # .rss requests if request.extension == "rss": # return new rss feed xml response.headers['Content-Type']='application/rss+xml' return rss2.dumps(rss) # else send the rss object to be processed by # the view return response.render(dict(rss = rss, rss2 = rss2))
def rss(): response.headers["Content-Type"] = "application/rss+xml" import gluon.contrib.rss2 as rss2 requested_groups = request.vars.groups or "1" try: requested_groups = tuple([int(i) for i in requested_groups.split(",")]) except: return "" entries = db(db.announcement.id == db.access.record_id)(db.access.table_name == "announcement")( db.access.persons_group.belongs(requested_groups) )(db.announcement.to_rss == True)(db.auth_user.id == db.announcement.owner).select(groupby=db.announcement.id) items = [ rss2.RSSItem( title=entry.announcement.title, link=MAIN, author=entry.auth_user.email, description=entry.announcement.body, pubDate=entry.announcement.posted_on, ) for entry in entries ] rss = rss2.RSS2( title="public rss for groups " + str(requested_groups), link=MAIN, description=str(requested_groups), lastBuildDate=datetime.datetime.now(), items=items, ) return rss2.dumps(rss)
def planet(): FILTER = 'web2py' import datetime import re import gluon.contrib.rss2 as rss2 import gluon.contrib.feedparser as feedparser # filter for general (not categorized) feeds regex = re.compile(FILTER, re.I) # select all feeds feeds = db(db.feed).select() entries = [] for feed in feeds: # fetch and parse feeds d = feedparser.parse(feed.url) for entry in d.entries: # filter feed entries if not feed.general or regex.search(entry.description): # extract entry attributes entries.append({ 'feed': {'author':feed.author, 'link':feed.link, 'url':feed.url, 'name':feed.name}, 'title': entry.title, 'link': entry.link, 'description': entry.description, 'author': hasattr(entry, 'author_detail') \ and entry.author_detail.name \ or feed.author, 'date': datetime.datetime(*entry.date_parsed[:6]) }) # sort entries by date, descending entries.sort(key=lambda x: x['date'], reverse=True) now = datetime.datetime.now() # aggregate rss2 feed with parsed entries rss = rss2.RSS2( title="Planet web2py", link=URL("planet").encode("utf8"), description="planet author", lastBuildDate=now, items=[ rss2.RSSItem( title=entry['title'], link=entry['link'], description=entry['description'], author=entry['author'], # guid = rss2.Guid('unknown'), pubDate=entry['date']) for entry in entries ]) # return new rss feed xml response.headers['Content-Type'] = 'application/rss+xml' return rss2.dumps(rss)
def planet(): FILTER = 'web2py' import datetime import re import gluon.contrib.rss2 as rss2 import gluon.contrib.feedparser as feedparser # filter for general (not categorized) feeds regex = re.compile(FILTER,re.I) # select all feeds feeds = db(db.feed).select() entries = [] for feed in feeds: # fetch and parse feeds d = feedparser.parse(feed.url) for entry in d.entries: # filter feed entries if not feed.general or regex.search(entry.description): # extract entry attributes entries.append({ 'feed': {'author':feed.author, 'link':feed.link, 'url':feed.url, 'name':feed.name}, 'title': entry.title, 'link': entry.link, 'description': entry.description, 'author': hasattr(entry, 'author_detail') \ and entry.author_detail.name \ or feed.author, 'date': datetime.datetime(*entry.date_parsed[:6]) }) # sort entries by date, descending entries.sort(key=lambda x: x['date'],reverse=True) now = datetime.datetime.now() # aggregate rss2 feed with parsed entries rss = rss2.RSS2(title="Planet web2py", link = URL("planet").encode("utf8"), description = "planet author", lastBuildDate = now, items = [ rss2.RSSItem( title = entry['title'], link = entry['link'], description = entry['description'], author = entry['author'], # guid = rss2.Guid('unknown'), pubDate = entry['date']) for entry in entries] ) # return new rss feed xml response.headers['Content-Type']='application/rss+xml' return rss2.dumps(rss)
def rss_aggregator(): import datetime import gluon.contrib.rss2 as rss2 import gluon.contrib.feedparser as feedparser d = feedparser.parse('http://rss.slashdot.org/Slashdot/slashdot/to') rss = rss2.RSS2(title=d.channel.title, link=d.channel.link, description=d.channel.description, lastBuildDate=datetime.datetime.now(), items=[rss2.RSSItem(title=entry.title, link=entry.link, description=entry.description, pubDate=datetime.datetime.now()) for entry in d.entries]) response.headers['Content-Type'] = 'application/rss+xml' return rss2.dumps(rss)
def view_collection_feed(): """ Creates an rss feed. Creates items (based on stories) for this feed. Items have audio enclosures (will these always be mp3?). """ stories = {} collection_id=request.args(0) collection = db.collection[collection_id] or redirect(error_page) stories=db(db.story.collection.contains(collection_id)).select(orderby=db.story.title) email = db(db.auth_user.id == db.auth_user.id==collection.created_by).select(db.auth_user.email).as_list() email = email[0]['email'] first_name = db(db.auth_user.id == db.auth_user.id==collection.created_by).select(db.auth_user.first_name).as_list() first_name = first_name[0]['first_name'] last_name = db(db.auth_user.id == db.auth_user.id==collection.created_by).select(db.auth_user.last_name).as_list() last_name = last_name[0]['last_name'] length=len(stories) # print email # print first_name # print last_name scheme = request.env.get('WSGI_URL_SCHEME', 'http').lower() # rss = rss2.RSS2(title=collection.title, rss = GeoRSSFeed(title=collection.title, link = scheme + '://' + request.env.http_host + request.env.path_info, description = collection.description, lastBuildDate = collection.modified_on, items = [ # rss2.RSSItem(title = story.title, GeoRSSItem(title = story.title, author = email + '(' + first_name + ' ' + last_name + ')', link = story.url, guid = scheme + '://' + request.env.http_host + '/publicradioroadtrip/default/view_story/' + str(story.id), enclosure = rss2.Enclosure(story.audio_url, 0, 'audio/mpeg'), description = story.description, content = '<p><a href="' + format_audio_url(story.id) + '">Listen here</a></p>', point = story.latitude + ' ' + story.longitude, # comments = 'test', pubDate = story.date) for story in stories]) response.headers['Content-Type']='application/rss+xml' return rss2.dumps(rss)
def rss(): response.headers['Content-Type']='application/rss+xml' import gluon.contrib.rss2 as rss2 requested_groups=request.vars.groups or '1' try: requested_groups=tuple([int(i) for i in requested_groups.split(',')]) except: return '' entries=db(db.announcement.id==db.access.record_id)\ (db.access.table_name=='announcement')\ (db.access.auth_users_group.belongs(requested_groups))\ (db.announcement.to_rss==True)\ (db.auth_user.id==db.announcement.owner)\ .select(groupby=db.announcement.id) items = [rss2.RSSItem( title=entry.announcement.title, link=MAIN, author=entry.auth_user.email, description = entry.announcement.body, pubDate = entry.announcement.posted_on) for entry in entries] rss = rss2.RSS2(title='public rss for '+str(requested_groups), link = MAIN, description = str(requested_groups), lastBuildDate = datetime.datetime.now(), items=items) return rss2.dumps(rss)
def planet(): #return "" import gluon.contrib.rss2 as rss2 # store planet rss entries in disk (forever...) def get_rss_feeds(): rss = get_planet_rss(None) rss = [{'title': item.title, 'author': item.author, 'pubDate': item.pubDate, 'link': item.link, 'description': item.description} for item in rss.items] return rss rss = cache.disk(request.env.path_info + ".planet", get_rss_feeds, time_expire=60*15) # .rss requests if request.extension == "rss": # return new rss feed xml response.headers['Content-Type']='application/rss+xml' return rss2.dumps(rss) # else send the rss object to be processed by # the view return response.render(dict(rss = rss, rss2 = rss2))