#!/usr/bin/env python __license__ = 'GPL v3' __copyright__ = '2011, Davide Cavalca ' ''' lwn.net ''' from calibre.web.feeds.news import BasicNewsRecipe import re class WeeklyLWN(BasicNewsRecipe): title = 'LWN.net Weekly Edition' description = 'Weekly summary of what has happened in the free software world.' __author__ = 'Davide Cavalca' language = 'en' site_url = 'http://lwn.net' extra_css = 'pre,code,samp,kbd,tt { font-size: 80% }\nblockquote {margin-left:0 }\n* { color: black }\n' cover_url = site_url + '/images/lcorner.png' #masthead_url = 'http://lwn.net/images/lcorner.png' publication_type = 'magazine' remove_tags_before = dict(attrs={'class':'PageHeadline'}) remove_tags_after = dict(attrs={'class':'ArticleText'}) remove_tags = [dict(name=['h2', 'form'])] preprocess_regexps = [ # Remove the
and "Log in to post comments" (re.compile(r'>sys.stderr, "*** print_version(url):", url return url def parse_index(self): if self.username is not None and self.password is not None: index_url = self.print_version('/current/bigpage') else: index_url = self.print_version('/free/bigpage') soup = self.index_to_soup(index_url) body = soup.body articles = {} ans = [] url_re = re.compile('^/Articles/') while True: tag_title = body.findNext(attrs={'class':'SummaryHL'}) if tag_title == None: break tag_section = tag_title.findPrevious(attrs={'class':'Cat1HL'}) if tag_section == None: section = 'Front Page' else: section = tag_section.string tag_section2 = tag_title.findPrevious(attrs={'class':'Cat2HL'}) if tag_section2 != None: if tag_section2.findPrevious(attrs={'class':'Cat1HL'}) == tag_section: section = "%s: %s" %(section, tag_section2.string) if section not in articles.keys(): articles[section] = [] if section not in ans: ans.append(section) body = tag_title while True: tag_url = body.findNext(name='a', attrs={'href':url_re}) if tag_url == None: break body = tag_url if tag_url.string == None: continue elif tag_url.string == 'Full Story': break elif tag_url.string.startswith('Comments ('): break else: continue if tag_url == None: break article = dict( title=self.tag_to_string(tag_title), url=tag_url['href'], description='', content='', date='') articles[section].append(article) ans = [(key, articles[key]) for key in ans if articles.has_key(key)] if not ans: raise Exception('Could not find any articles.') return ans # vim: expandtab:ts=4:sw=4