From f3d9c59cfb8bccce17a7b19d9d981731eca27295 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 11 Sep 2011 09:44:41 -0600 Subject: [PATCH] Fix Business Week --- recipes/business_week.recipe | 168 +++++++++++++++++++---------------- 1 file changed, 90 insertions(+), 78 deletions(-) diff --git a/recipes/business_week.recipe b/recipes/business_week.recipe index fcb28d1d3e..ca9078a112 100644 --- a/recipes/business_week.recipe +++ b/recipes/business_week.recipe @@ -1,93 +1,105 @@ -#!/usr/bin/env python __license__ = 'GPL v3' -__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' -__docformat__ = 'restructuredtext en' - +__copyright__ = '2008 Kovid Goyal kovid@kovidgoyal.net, 2010 Darko Miletic ' ''' -businessweek.com +www.businessweek.com ''' from calibre.web.feeds.news import BasicNewsRecipe class BusinessWeek(BasicNewsRecipe): - title = 'Business Week' - description = 'Business News, Stock Market and Financial Advice' - __author__ = 'ChuckEggDotCom and Sujata Raman' - language = 'en' + title = 'Business Week' + __author__ = 'Kovid Goyal and Darko Miletic' + description = 'Read the latest international business news & stock market news. Get updated company profiles, financial advice, global economy and technology news.' + publisher = 'Bloomberg L.P.' + category = 'Business, business news, stock market, stock market news, financial advice, company profiles, financial advice, global economy, technology news' + oldest_article = 7 + max_articles_per_feed = 200 + no_stylesheets = True + encoding = 'utf8' + use_embedded_content = False + language = 'en' + remove_empty_feeds = True + publication_type = 'magazine' + cover_url = 'http://images.businessweek.com/mz/covers/current_120x160.jpg' + masthead_url = 'http://assets.businessweek.com/images/bw-logo.png' + extra_css = """ + body{font-family: Helvetica,Arial,sans-serif } + img{margin-bottom: 0.4em; display:block} + .tagline{color: gray; font-style: italic} + .photoCredit{font-size: small; color: gray} + """ - oldest_article = 7 - max_articles_per_feed = 10 - no_stylesheets = True + conversion_options = { + 'comment' : description + , 'tags' : category + , 'publisher' : publisher + , 'language' : language + } - recursions = 1 - match_regexps = [r'http://www.businessweek.com/.*_page_[1-9].*'] - extra_css = ''' - h1{font-family :Arial,Helvetica,sans-serif; font-size:large;} - .news_story_title{font-family :Arial,Helvetica,sans-serif; font-size:large;font-weight:bold;} - h2{font-family :Arial,Helvetica,sans-serif; font-size:medium;color:#666666;} - h3{text-transform:uppercase;font-family :Arial,Helvetica,sans-serif; font-size:large;font-weight:bold;} - h4{font-family :Arial,Helvetica,sans-serif; font-size:small;font-weight:bold;} - p{font-family :Arial,Helvetica,sans-serif; } - #lede600{font-size:x-small;} - #storybody{font-size:x-small;} - p{font-family :Arial,Helvetica,sans-serif;} - .strap{font-family :Arial,Helvetica,sans-serif; font-size:x-small; color:#064599;} - .byline{font-family :Arial,Helvetica,sans-serif; font-size:x-small;} - .postedBy{font-family :Arial,Helvetica,sans-serif; font-size:x-small;color:#666666;} - .trackback{font-family :Arial,Helvetica,sans-serif; font-size:x-small;color:#666666;} - .date{font-family :Arial,Helvetica,sans-serif; font-size:x-small;color:#666666;} - .wrapper{font-family :Arial,Helvetica,sans-serif; font-size:x-small;} - .photoCredit{font-family :Arial,Helvetica,sans-serif; font-size:x-small;color:#666666;} - .tagline{font-family :Arial,Helvetica,sans-serif; font-size:x-small;color:#666666;} - .pageCount{color:#666666;font-family :Arial,Helvetica,sans-serif; font-size:x-small;} - .note{font-family :Arial,Helvetica,sans-serif; font-size:small;color:#666666;font-style:italic;} - .highlight{font-family :Arial,Helvetica,sans-serif; font-size:small;background-color:#FFF200;} - .annotation{font-family :Arial,Helvetica,sans-serif; font-size:x-small;color:#666666;} - ''' - - remove_tags = [ dict(name='div', attrs={'id':["log","feedback","footer","secondarynav","secondnavbar","header","email","bw2-header","column2","wrapper-bw2-footer","wrapper-mgh-footer","inset","commentForm","commentDisplay","bwExtras","bw2-umbrella","readerComments","leg","rightcol"]}), - dict(name='div', attrs={'class':["menu",'sponsorbox smallertext',"TopNavTile","graybottom leaderboard"]}), - dict(name='img', alt ="News"), - dict(name='td', width ="1"), - ] + remove_tags = [ + dict(attrs={'class':'inStory'}) + ,dict(name=['meta','link','iframe','base','embed','object','table','th','tr','td']) + ,dict(attrs={'id':['inset','videoDisplay']}) + ] + keep_only_tags = [dict(name='div', attrs={'id':['story-body','storyBody','article_body','articleBody']})] + remove_attributes = ['lang'] + match_regexps = [r'http://www.businessweek.com/.*_page_[1-9].*'] - feeds = [ - (u'Top Stories', u'http://www.businessweek.com/topStories/rss/topStories.rss'), - (u'Top News', u'http://www.businessweek.com/rss/bwdaily.rss'), - (u'Asia', u'http://www.businessweek.com/rss/asia.rss'), - (u'Autos', u'http://www.businessweek.com/rss/autos/index.rss'), - (u'Classic Cars', u'http://rss.businessweek.com/bw_rss/classiccars'), - (u'Hybrids', u'http://rss.businessweek.com/bw_rss/hybrids'), - (u'Europe', u'http://www.businessweek.com/rss/europe.rss'), - (u'Auto Reviews', u'http://rss.businessweek.com/bw_rss/autoreviews'), - (u'Innovation & Design', u'http://www.businessweek.com/rss/innovate.rss'), - (u'Architecture', u'http://www.businessweek.com/rss/architecture.rss'), - (u'Brand Equity', u'http://www.businessweek.com/rss/brandequity.rss'), - (u'Auto Design', u'http://www.businessweek.com/rss/carbuff.rss'), - (u'Game Room', u'http://rss.businessweek.com/bw_rss/gameroom'), - (u'Technology', u'http://www.businessweek.com/rss/technology.rss'), - (u'Investing', u'http://rss.businessweek.com/bw_rss/investor'), - (u'Small Business', u'http://www.businessweek.com/rss/smallbiz.rss'), - (u'Careers', u'http://rss.businessweek.com/bw_rss/careers'), - (u'B-Schools', u'http://www.businessweek.com/rss/bschools.rss'), - (u'Magazine Selections', u'http://www.businessweek.com/rss/magazine.rss'), - (u'CEO Guide to Tech', u'http://www.businessweek.com/rss/ceo_guide_tech.rss'), - ] + + feeds = [ + (u'Top Stories', u'http://www.businessweek.com/topStories/rss/topStories.rss'), + (u'Top News' , u'http://www.businessweek.com/rss/bwdaily.rss' ), + (u'Asia', u'http://www.businessweek.com/rss/asia.rss'), + (u'Autos', u'http://www.businessweek.com/rss/autos/index.rss'), + (u'Classic Cars', u'http://rss.businessweek.com/bw_rss/classiccars'), + (u'Hybrids', u'http://rss.businessweek.com/bw_rss/hybrids'), + (u'Europe', u'http://www.businessweek.com/rss/europe.rss'), + (u'Auto Reviews', u'http://rss.businessweek.com/bw_rss/autoreviews'), + (u'Innovation & Design', u'http://www.businessweek.com/rss/innovate.rss'), + (u'Architecture', u'http://www.businessweek.com/rss/architecture.rss'), + (u'Brand Equity', u'http://www.businessweek.com/rss/brandequity.rss'), + (u'Auto Design', u'http://www.businessweek.com/rss/carbuff.rss'), + (u'Game Room', u'http://rss.businessweek.com/bw_rss/gameroom'), + (u'Technology', u'http://www.businessweek.com/rss/technology.rss'), + (u'Investing', u'http://rss.businessweek.com/bw_rss/investor'), + (u'Small Business', u'http://www.businessweek.com/rss/smallbiz.rss'), + (u'Careers', u'http://rss.businessweek.com/bw_rss/careers'), + (u'B-Schools', u'http://www.businessweek.com/rss/bschools.rss'), + (u'Magazine Selections', u'http://www.businessweek.com/rss/magazine.rss'), + (u'CEO Guide to Tech', u'http://www.businessweek.com/rss/ceo_guide_tech.rss'), + ] def get_article_url(self, article): - url = article.get('guid', None) + if 'podcasts' in url: + return None + if 'surveys' in url: + return None + if 'images' in url: + return None + if 'feedroom' in url: + return None + if '/magazine/toc/' in url: + return None + rurl, sep, rest = url.rpartition('?') + if rurl: + return rurl + return rest - if 'podcasts' in url or 'surveys' in url: - url = None - - return url - - def postprocess_html(self, soup, first): - - for tag in soup.findAll(name=['ul','li','table','td','tr','span']): - tag.name = 'div' - for tag in soup.findAll(name= 'div',attrs={ 'id':'pageNav'}): - tag.extract() - return soup + def print_version(self, url): + if '/news/' in url or '/blog/ in url': + return url + if '/magazine' in url: + rurl = url.replace('http://www.businessweek.com/','http://www.businessweek.com/printer/') + else: + rurl = url.replace('http://www.businessweek.com/','http://www.businessweek.com/print/') + return rurl.replace('/investing/','/investor/') + def preprocess_html(self, soup): + for item in soup.findAll(style=True): + del item['style'] + for alink in soup.findAll('a'): + if alink.string is not None: + tstr = alink.string + alink.replaceWith(tstr) + return soup