mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
117 lines
6.6 KiB
Plaintext
117 lines
6.6 KiB
Plaintext
from __future__ import with_statement
|
|
__license__ = 'GPL 3'
|
|
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
|
__docformat__ = 'restructuredtext en'
|
|
|
|
import urllib, re
|
|
from calibre.web.feeds.news import BasicNewsRecipe
|
|
|
|
class ChicagoTribune(BasicNewsRecipe):
|
|
|
|
title = 'Chicago Tribune'
|
|
__author__ = 'Kovid Goyal and Sujata Raman, a.peter'
|
|
description = 'Politics, local and business news from Chicago'
|
|
language = 'en'
|
|
version = 2
|
|
|
|
use_embedded_content = False
|
|
no_stylesheets = True
|
|
remove_javascript = True
|
|
recursions = 1
|
|
|
|
keep_only_tags = [dict(name='div', attrs={'class':["story","entry-asset asset hentry"]}),
|
|
dict(name='div', attrs={'id':["pagebody","story","maincontentcontainer"]}),
|
|
]
|
|
remove_tags_after = [{'class':['photo_article',]}]
|
|
|
|
match_regexps = [r'page=[0-9]+']
|
|
|
|
remove_tags = [{'id':["moduleArticleTools","content-bottom","rail","articleRelates module","toolSet","relatedrailcontent","div-wrapper","beta","atp-comments","footer",'gallery-subcontent','subFooter']},
|
|
{'class':["clearfix","relatedTitle","articleRelates module","asset-footer","tools","comments","featurePromo","featurePromo fp-topjobs brownBackground","clearfix fullSpan brownBackground","curvedContent",'nextgen-share-tools','outbrainTools', 'google-ad-story-bottom']},
|
|
dict(name='font',attrs={'id':["cr-other-headlines"]})]
|
|
extra_css = '''
|
|
h1{font-family:Arial,Helvetica,sans-serif; font-weight:bold;font-size:large;}
|
|
h2{font-family:Arial,Helvetica,sans-serif; font-weight:normal;font-size:small;}
|
|
.byline {font-family:Arial,Helvetica,sans-serif; font-size:xx-small;}
|
|
.date {font-family:Arial,Helvetica,sans-serif; font-size:xx-small;}
|
|
p{font-family:Arial,Helvetica,sans-serif;font-size:small;}
|
|
.copyright {font-family:Arial,Helvetica,sans-serif;font-size:xx-small;text-align:center}
|
|
.story{font-family:Arial,Helvetica,sans-serif;font-size:small;}
|
|
.entry-asset asset hentry{font-family:Arial,Helvetica,sans-serif;font-size:small;}
|
|
.pagebody{font-family:Arial,Helvetica,sans-serif;font-size:small;}
|
|
.maincontentcontainer{font-family:Arial,Helvetica,sans-serif;font-size:small;}
|
|
.story-body{font-family:Arial,Helvetica,sans-serif;font-size:small;}
|
|
body{font-family:Helvetica,Arial,sans-serif;font-size:small;}
|
|
'''
|
|
feeds = [
|
|
('Latest news', 'http://feeds.chicagotribune.com/chicagotribune/news/'),
|
|
('Local news', 'http://feeds.chicagotribune.com/chicagotribune/news/local/'),
|
|
('Nation/world', 'http://feeds.chicagotribune.com/chicagotribune/news/nationworld/'),
|
|
('Hot topics', 'http://feeds.chicagotribune.com/chicagotribune/hottopics/'),
|
|
('Most E-mailed stories', 'http://feeds.chicagotribune.com/chicagotribune/email/'),
|
|
('Opinion', 'http://feeds.chicagotribune.com/chicagotribune/opinion/'),
|
|
('Off Topic', 'http://feeds.chicagotribune.com/chicagotribune/offtopic/'),
|
|
#('Politics', 'http://feeds.chicagotribune.com/chicagotribune/politics/'),
|
|
#('Special Reports', 'http://feeds.chicagotribune.com/chicagotribune/special/'),
|
|
#('Religion News', 'http://feeds.chicagotribune.com/chicagotribune/religion/'),
|
|
('Business news', 'http://feeds.chicagotribune.com/chicagotribune/business/'),
|
|
('Jobs and Careers', 'http://feeds.chicagotribune.com/chicagotribune/career/'),
|
|
('Local scene', 'http://feeds.chicagotribune.com/chicagohomes/localscene/'),
|
|
('Phil Rosenthal', 'http://feeds.chicagotribune.com/chicagotribune/rosenthal/'),
|
|
#('Tech Buzz', 'http://feeds.chicagotribune.com/chicagotribune/techbuzz/'),
|
|
('Your Money', 'http://feeds.chicagotribune.com/chicagotribune/yourmoney/'),
|
|
('Jon Hilkevitch - Getting around', 'http://feeds.chicagotribune.com/chicagotribune/gettingaround/'),
|
|
('Jon Yates - What\'s your problem?', 'http://feeds.chicagotribune.com/chicagotribune/problem/'),
|
|
('Garisson Keillor', 'http://feeds.chicagotribune.com/chicagotribune/keillor/'),
|
|
('Marks Jarvis - On Money', 'http://feeds.chicagotribune.com/chicagotribune/marksjarvisonmoney/'),
|
|
('Sports', 'http://feeds.chicagotribune.com/chicagotribune/sports/'),
|
|
('Arts and Architecture', 'http://feeds.chicagotribune.com/chicagotribune/arts/'),
|
|
('Books', 'http://feeds.chicagotribune.com/chicagotribune/books/'),
|
|
#('Magazine', 'http://feeds.chicagotribune.com/chicagotribune/magazine/'),
|
|
('Movies', 'http://feeds.chicagotribune.com/chicagotribune/movies/'),
|
|
('Music', 'http://feeds.chicagotribune.com/chicagotribune/music/'),
|
|
('TV', 'http://feeds.chicagotribune.com/chicagotribune/tv/'),
|
|
('Hypertext', 'http://feeds.chicagotribune.com/chicagotribune/hypertext/'),
|
|
('iPhone Blog', 'http://feeds.feedburner.com/redeye/iphoneblog'),
|
|
('Julie\'s Health Club', 'http://feeds.chicagotribune.com/chicagotribune_julieshealthclub/'),
|
|
]
|
|
|
|
|
|
def get_article_url(self, article):
|
|
ans = None
|
|
try:
|
|
s = article.summary
|
|
ans = urllib.unquote(
|
|
re.search(r'href=".+?bookmark.cfm.+?link=(.+?)"', s).group(1))
|
|
except:
|
|
pass
|
|
if ans is None:
|
|
ans = article.get('feedburner_origlink', article.get('guid', article.get('link')))
|
|
if ans is not None:
|
|
return ans.replace('?track=rss', '')
|
|
|
|
def skip_ad_pages(self, soup):
|
|
text = soup.find(text='click here to continue to article')
|
|
if text:
|
|
a = text.parent
|
|
url = a.get('href')
|
|
if url:
|
|
return self.index_to_soup(url, raw=True)
|
|
|
|
def postprocess_html(self, soup, first_fetch):
|
|
# Remove the navigation bar. It was kept until now to be able to follow
|
|
# the links to further pages. But now we don't need them anymore.
|
|
for nav in soup.findAll(attrs={'class':['toppaginate','article-nav clearfix']}):
|
|
nav.extract()
|
|
|
|
for t in soup.findAll(['table', 'tr', 'td']):
|
|
t.name = 'div'
|
|
|
|
for tag in soup.findAll('form', dict(attrs={'name':["comments_form"]})):
|
|
tag.extract()
|
|
for tag in soup.findAll('font', dict(attrs={'id':["cr-other-headlines"]})):
|
|
tag.extract()
|
|
|
|
return soup
|
|
|