diff --git a/.bzrignore b/.bzrignore index d2a2d592dd..4dc2b4b9d4 100644 --- a/.bzrignore +++ b/.bzrignore @@ -14,6 +14,7 @@ resources/scripts.pickle resources/ebook-convert-complete.pickle resources/builtin_recipes.xml resources/builtin_recipes.zip +resources/template-functions.json setup/installer/windows/calibre/build.log src/calibre/translations/.errors src/cssutils/.svn/ diff --git a/Changelog.yaml b/Changelog.yaml index 544d6a72f8..017e0b0528 100644 --- a/Changelog.yaml +++ b/Changelog.yaml @@ -19,6 +19,67 @@ # new recipes: # - title: +- version: 0.8.5 + date: 2011-06-10 + + new features: + - title: "A new 'portable' calibre build, useful if you like to carry around calibre and its library on a USB key" + type: major + description: "For details, see: http://calibre-ebook.com/download_portable" + + - title: "E-book viewer: Remember the last used font size multiplier." + tickets: [774343] + + - title: "Preliminary support for the Kobo Touch. Drivers for the ZTE v9 tablet, Samsung S2, Notion Ink Adam and PocketBook 360+" + + - title: "When downloading metadata merge rather than replace tags" + + - title: "Edit metadata dialog: When pasting in an ISBN, if not valid ISBN if present on the clipboard popup a box for the user to enter the ISBN" + + - title: "Windows build: Add code to load .pyd python extensions from a zip file. This allows many more files in the calibre installation to be zipped up, speeding up the installer." + - title: "Add an action to remove all formats from the selected books to the remove books button" + + + bug fixes: + - title: "Various minor bug fixes to the column coloring code" + + - title: "Fix the not() template function" + + - title: "Nook Color/TSR: When sending books to the storage card place them in the My Files/Books subdirectory. Also do not upload cover thumbnails as users report that the NC/TSR don't use them." + tickets: [792842] + + - title: "Get Books: Update plugins for Amazon and B&N stores to handle website changes. Enable some stores by default on first run. Add Zixo store" + tickets: [792762] + + - title: "Comic Input: Replace the # character in filenames as it can cause problem with conversion/vieweing." + tickets: [792723] + + - title: "When writing files to zipfile, reset timestamp if it doesn't fit in 1980's vintage storage structures" + + - title: "Amazon metadata plugin: Fix parsing of published date from amazon.de when it has februar in it" + + improved recipes: + - Ambito + - GoComics + - Le Monde Diplomatique + - Max Planck + - express.de + + new recipes: + - title: Ambito Financiero + author: Darko Miletic + + - title: Stiin Tas Technica + author: Silviu Cotoara + + - title: "Metro News NL" + author: DrMerry + + - title: "Brigitte.de, Polizeipresse DE and Heise Online" + author: schuster + + + - version: 0.8.4 date: 2011-06-03 diff --git a/recipes/ambito.recipe b/recipes/ambito.recipe index dd92ee19b3..55a532bb9e 100644 --- a/recipes/ambito.recipe +++ b/recipes/ambito.recipe @@ -1,7 +1,5 @@ -#!/usr/bin/env python - __license__ = 'GPL v3' -__copyright__ = '2008-2009, Darko Miletic ' +__copyright__ = '2008-2011, Darko Miletic ' ''' ambito.com ''' @@ -11,51 +9,56 @@ from calibre.web.feeds.news import BasicNewsRecipe class Ambito(BasicNewsRecipe): title = 'Ambito.com' __author__ = 'Darko Miletic' - description = 'Informacion Libre las 24 horas' - publisher = 'Ambito.com' - category = 'news, politics, Argentina' + description = 'Ambito.com con noticias del Diario Ambito Financiero de Buenos Aires' + publisher = 'Editorial Nefir S.A.' + category = 'news, politics, economy, finances, Argentina' oldest_article = 2 - max_articles_per_feed = 100 no_stylesheets = True - encoding = 'iso-8859-1' - cover_url = 'http://www.ambito.com/img/logo_.jpg' - remove_javascript = True + encoding = 'cp1252' + masthead_url = 'http://www.ambito.com/img/logo_.jpg' use_embedded_content = False + language = 'es_AR' + publication_type = 'newsportal' + extra_css = """ + body{font-family: "Trebuchet MS",Verdana,sans-serif} + .volanta{font-size: small} + .t2_portada{font-size: xx-large; font-family: Georgia,serif; color: #026698} + """ - html2lrf_options = [ - '--comment', description - , '--category', category - , '--publisher', publisher - ] - html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"' + conversion_options = { + 'comment' : description + , 'tags' : category + , 'publisher' : publisher + , 'language' : language + } keep_only_tags = [dict(name='div', attrs={'align':'justify'})] - - remove_tags = [dict(name=['object','link'])] + remove_tags = [dict(name=['object','link','embed','iframe','meta','link','table','img'])] + remove_attributes = ['align'] feeds = [ (u'Principales Noticias', u'http://www.ambito.com/rss/noticiasp.asp' ) ,(u'Economia' , u'http://www.ambito.com/rss/noticias.asp?S=Econom%EDa' ) ,(u'Politica' , u'http://www.ambito.com/rss/noticias.asp?S=Pol%EDtica' ) ,(u'Informacion General' , u'http://www.ambito.com/rss/noticias.asp?S=Informaci%F3n%20General') - ,(u'Agro' , u'http://www.ambito.com/rss/noticias.asp?S=Agro' ) + ,(u'Campo' , u'http://www.ambito.com/rss/noticias.asp?S=Agro' ) ,(u'Internacionales' , u'http://www.ambito.com/rss/noticias.asp?S=Internacionales' ) ,(u'Deportes' , u'http://www.ambito.com/rss/noticias.asp?S=Deportes' ) ,(u'Espectaculos' , u'http://www.ambito.com/rss/noticias.asp?S=Espect%E1culos' ) - ,(u'Tecnologia' , u'http://www.ambito.com/rss/noticias.asp?S=Tecnologia' ) - ,(u'Salud' , u'http://www.ambito.com/rss/noticias.asp?S=Salud' ) + ,(u'Tecnologia' , u'http://www.ambito.com/rss/noticias.asp?S=Tecnolog%EDa' ) ,(u'Ambito Nacional' , u'http://www.ambito.com/rss/noticias.asp?S=Ambito%20Nacional' ) ] def print_version(self, url): - return url.replace('http://www.ambito.com/noticia.asp?','http://www.ambito.com/noticias/imprimir.asp?') + return url.replace('/noticia.asp?','/noticias/imprimir.asp?') def preprocess_html(self, soup): - mtag = '' - soup.head.insert(0,mtag) for item in soup.findAll(style=True): del item['style'] + for item in soup.findAll('a'): + str = item.string + if str is None: + str = self.tag_to_string(item) + item.replaceWith(str) return soup - - language = 'es_AR' diff --git a/recipes/ambito_financiero.recipe b/recipes/ambito_financiero.recipe new file mode 100644 index 0000000000..08c056e8ee --- /dev/null +++ b/recipes/ambito_financiero.recipe @@ -0,0 +1,87 @@ +__license__ = 'GPL v3' +__copyright__ = '2011, Darko Miletic ' +''' +ambito.com/diario +''' + +import time +from calibre import strftime +from calibre.web.feeds.news import BasicNewsRecipe + +class Ambito_Financiero(BasicNewsRecipe): + title = 'Ambito Financiero' + __author__ = 'Darko Miletic' + description = 'Informacion Libre las 24 horas' + publisher = 'Editorial Nefir S.A.' + category = 'news, politics, economy, Argentina' + no_stylesheets = True + encoding = 'cp1252' + masthead_url = 'http://www.ambito.com/diario/img/logo_af.gif' + publication_type = 'newspaper' + needs_subscription = 'optional' + use_embedded_content = False + language = 'es_AR' + PREFIX = 'http://www.ambito.com' + INDEX = PREFIX + '/diario/index.asp' + LOGIN = PREFIX + '/diario/login/entrada.asp' + extra_css = """ + body{font-family: "Trebuchet MS",Verdana,sans-serif} + .volanta{font-size: small} + .t2_portada{font-size: xx-large; font-family: Georgia,serif; color: #026698} + """ + + conversion_options = { + 'comment' : description + , 'tags' : category + , 'publisher' : publisher + , 'language' : language + } + + keep_only_tags = [dict(name='div', attrs={'align':'justify'})] + remove_tags = [dict(name=['object','link','embed','iframe','meta','link','table','img'])] + remove_attributes = ['align'] + + def get_browser(self): + br = BasicNewsRecipe.get_browser() + br.open(self.INDEX) + if self.username is not None and self.password is not None: + br.open(self.LOGIN) + br.select_form(name='frmlogin') + br['USER_NAME'] = self.username + br['USER_PASS'] = self.password + br.submit() + return br + + def print_version(self, url): + return url.replace('/diario/noticia.asp?','/noticias/imprimir.asp?') + + def preprocess_html(self, soup): + for item in soup.findAll(style=True): + del item['style'] + for item in soup.findAll('a'): + str = item.string + if str is None: + str = self.tag_to_string(item) + item.replaceWith(str) + return soup + + def parse_index(self): + soup = self.index_to_soup(self.INDEX) + cover_item = soup.find('img',attrs={'class':'fotodespliegue'}) + if cover_item: + self.cover_url = self.PREFIX + cover_item['src'] + articles = [] + checker = [] + for feed_link in soup.findAll('a', attrs={'class':['t0_portada','t2_portada','bajada']}): + url = self.PREFIX + feed_link['href'] + title = self.tag_to_string(feed_link) + date = strftime("%a, %d %b %Y %H:%M:%S +0000",time.gmtime()) + if url not in checker: + checker.append(url) + articles.append({ + 'title' :title + ,'date' :date + ,'url' :url + ,'description':u'' + }) + return [(self.title, articles)] diff --git a/recipes/daily_mirror.recipe b/recipes/daily_mirror.recipe new file mode 100644 index 0000000000..5d4dbe3f4b --- /dev/null +++ b/recipes/daily_mirror.recipe @@ -0,0 +1,52 @@ +from calibre.web.feeds.news import BasicNewsRecipe + +class AdvancedUserRecipe1306061239(BasicNewsRecipe): + title = u'The Daily Mirror' + description = 'News as provide by The Daily Mirror -UK' + + __author__ = 'Dave Asbury' + language = 'en_GB' + + cover_url = 'http://yookeo.com/screens/m/i/mirror.co.uk.jpg' + + masthead_url = 'http://www.nmauk.co.uk/nma/images/daily_mirror.gif' + + + oldest_article = 1 + max_articles_per_feed = 100 + remove_empty_feeds = True + remove_javascript = True + no_stylesheets = True + + keep_only_tags = [ + dict(name='h1'), + dict(attrs={'class':['article-attr']}), + dict(name='div', attrs={'class' : [ 'article-body', 'crosshead']}) + + + ] + + remove_tags = [ + dict(name='div', attrs={'class' : ['caption', 'article-resize']}), + dict( attrs={'class':'append-html'}) + ] + + + + + feeds = [ + + (u'News', u'http://www.mirror.co.uk/news/rss.xml') + ,(u'Tech News', u'http://www.mirror.co.uk/news/technology/rss.xml') + ,(u'Weird World','http://www.mirror.co.uk/news/weird-world/rss.xml') + ,(u'Film Gossip','http://www.mirror.co.uk/celebs/film/rss.xml') + ,(u'Music News','http://www.mirror.co.uk/celebs/music/rss.xml') + ,(u'Celebs and Tv Gossip','http://www.mirror.co.uk/celebs/tv/rss.xml') + ,(u'Sport','http://www.mirror.co.uk/sport/rss.xml') + ,(u'Life Style','http://www.mirror.co.uk/life-style/rss.xml') + ,(u'Advice','http://www.mirror.co.uk/advice/rss.xml') + ,(u'Travel','http://www.mirror.co.uk/advice/travel/rss.xml') + + # example of commented out feed not needed ,(u'Travel','http://www.mirror.co.uk/advice/travel/rss.xml') + ] + diff --git a/recipes/go_comics.recipe b/recipes/go_comics.recipe index a30ae1e94d..7062c0913d 100644 --- a/recipes/go_comics.recipe +++ b/recipes/go_comics.recipe @@ -11,8 +11,8 @@ import mechanize, re class GoComics(BasicNewsRecipe): title = 'GoComics' __author__ = 'Starson17' - __version__ = '1.05' - __date__ = '19 may 2011' + __version__ = '1.06' + __date__ = '07 June 2011' description = u'200+ Comics - Customize for more days/comics: Defaults to 7 days, 25 comics - 20 general, 5 editorial.' category = 'news, comics' language = 'en' @@ -56,225 +56,318 @@ class GoComics(BasicNewsRecipe): def parse_index(self): feeds = [] for title, url in [ - ######## COMICS - GENERAL ######## - (u"2 Cows and a Chicken", u"http://www.gocomics.com/2cowsandachicken"), - # (u"9 to 5", u"http://www.gocomics.com/9to5"), - # (u"The Academia Waltz", u"http://www.gocomics.com/academiawaltz"), - # (u"Adam@Home", u"http://www.gocomics.com/adamathome"), - # (u"Agnes", u"http://www.gocomics.com/agnes"), - # (u"Andy Capp", u"http://www.gocomics.com/andycapp"), - # (u"Animal Crackers", u"http://www.gocomics.com/animalcrackers"), - # (u"Annie", u"http://www.gocomics.com/annie"), - (u"The Argyle Sweater", u"http://www.gocomics.com/theargylesweater"), - # (u"Ask Shagg", u"http://www.gocomics.com/askshagg"), - (u"B.C.", u"http://www.gocomics.com/bc"), - # (u"Back in the Day", u"http://www.gocomics.com/backintheday"), - # (u"Bad Reporter", u"http://www.gocomics.com/badreporter"), - # (u"Baldo", u"http://www.gocomics.com/baldo"), - # (u"Ballard Street", u"http://www.gocomics.com/ballardstreet"), - # (u"Barkeater Lake", u"http://www.gocomics.com/barkeaterlake"), - # (u"The Barn", u"http://www.gocomics.com/thebarn"), - # (u"Basic Instructions", u"http://www.gocomics.com/basicinstructions"), - # (u"Bewley", u"http://www.gocomics.com/bewley"), - # (u"Big Top", u"http://www.gocomics.com/bigtop"), - # (u"Biographic", u"http://www.gocomics.com/biographic"), - (u"Birdbrains", u"http://www.gocomics.com/birdbrains"), - # (u"Bleeker: The Rechargeable Dog", u"http://www.gocomics.com/bleeker"), - # (u"Bliss", u"http://www.gocomics.com/bliss"), - (u"Bloom County", u"http://www.gocomics.com/bloomcounty"), - # (u"Bo Nanas", u"http://www.gocomics.com/bonanas"), - # (u"Bob the Squirrel", u"http://www.gocomics.com/bobthesquirrel"), - # (u"The Boiling Point", u"http://www.gocomics.com/theboilingpoint"), - # (u"Boomerangs", u"http://www.gocomics.com/boomerangs"), - # (u"The Boondocks", u"http://www.gocomics.com/boondocks"), - # (u"Bottomliners", u"http://www.gocomics.com/bottomliners"), - # (u"Bound and Gagged", u"http://www.gocomics.com/boundandgagged"), - # (u"Brainwaves", u"http://www.gocomics.com/brainwaves"), - # (u"Brenda Starr", u"http://www.gocomics.com/brendastarr"), - # (u"Brewster Rockit", u"http://www.gocomics.com/brewsterrockit"), - # (u"Broom Hilda", u"http://www.gocomics.com/broomhilda"), - (u"Calvin and Hobbes", u"http://www.gocomics.com/calvinandhobbes"), - # (u"Candorville", u"http://www.gocomics.com/candorville"), - # (u"Cathy", u"http://www.gocomics.com/cathy"), - # (u"C'est la Vie", u"http://www.gocomics.com/cestlavie"), - # (u"Chuckle Bros", u"http://www.gocomics.com/chucklebros"), - # (u"Citizen Dog", u"http://www.gocomics.com/citizendog"), - # (u"The City", u"http://www.gocomics.com/thecity"), - # (u"Cleats", u"http://www.gocomics.com/cleats"), - # (u"Close to Home", u"http://www.gocomics.com/closetohome"), - # (u"Compu-toon", u"http://www.gocomics.com/compu-toon"), - # (u"Cornered", u"http://www.gocomics.com/cornered"), - (u"Cul de Sac", u"http://www.gocomics.com/culdesac"), - # (u"Daddy's Home", u"http://www.gocomics.com/daddyshome"), - # (u"Deep Cover", u"http://www.gocomics.com/deepcover"), - # (u"Dick Tracy", u"http://www.gocomics.com/dicktracy"), - # (u"The Dinette Set", u"http://www.gocomics.com/dinetteset"), - # (u"Dog Eat Doug", u"http://www.gocomics.com/dogeatdoug"), - # (u"Domestic Abuse", u"http://www.gocomics.com/domesticabuse"), - # (u"Doodles", u"http://www.gocomics.com/doodles"), - (u"Doonesbury", u"http://www.gocomics.com/doonesbury"), - # (u"The Doozies", u"http://www.gocomics.com/thedoozies"), - # (u"The Duplex", u"http://www.gocomics.com/duplex"), - # (u"Eek!", u"http://www.gocomics.com/eek"), - # (u"The Elderberries", u"http://www.gocomics.com/theelderberries"), - # (u"Flight Deck", u"http://www.gocomics.com/flightdeck"), - # (u"Flo and Friends", u"http://www.gocomics.com/floandfriends"), - # (u"The Flying McCoys", u"http://www.gocomics.com/theflyingmccoys"), - (u"For Better or For Worse", u"http://www.gocomics.com/forbetterorforworse"), - # (u"For Heaven's Sake", u"http://www.gocomics.com/forheavenssake"), - # (u"Fort Knox", u"http://www.gocomics.com/fortknox"), - # (u"FoxTrot", u"http://www.gocomics.com/foxtrot"), - (u"FoxTrot Classics", u"http://www.gocomics.com/foxtrotclassics"), - # (u"Frank & Ernest", u"http://www.gocomics.com/frankandernest"), - # (u"Fred Basset", u"http://www.gocomics.com/fredbasset"), - # (u"Free Range", u"http://www.gocomics.com/freerange"), - # (u"Frog Applause", u"http://www.gocomics.com/frogapplause"), - # (u"The Fusco Brothers", u"http://www.gocomics.com/thefuscobrothers"), - (u"Garfield", u"http://www.gocomics.com/garfield"), - # (u"Garfield Minus Garfield", u"http://www.gocomics.com/garfieldminusgarfield"), - # (u"Gasoline Alley", u"http://www.gocomics.com/gasolinealley"), - # (u"Gil Thorp", u"http://www.gocomics.com/gilthorp"), - # (u"Ginger Meggs", u"http://www.gocomics.com/gingermeggs"), - # (u"Girls & Sports", u"http://www.gocomics.com/girlsandsports"), - # (u"Haiku Ewe", u"http://www.gocomics.com/haikuewe"), - # (u"Heart of the City", u"http://www.gocomics.com/heartofthecity"), - # (u"Heathcliff", u"http://www.gocomics.com/heathcliff"), - # (u"Herb and Jamaal", u"http://www.gocomics.com/herbandjamaal"), - # (u"Home and Away", u"http://www.gocomics.com/homeandaway"), - # (u"Housebroken", u"http://www.gocomics.com/housebroken"), - # (u"Hubert and Abby", u"http://www.gocomics.com/hubertandabby"), - # (u"Imagine This", u"http://www.gocomics.com/imaginethis"), - # (u"In the Bleachers", u"http://www.gocomics.com/inthebleachers"), - # (u"In the Sticks", u"http://www.gocomics.com/inthesticks"), - # (u"Ink Pen", u"http://www.gocomics.com/inkpen"), - # (u"It's All About You", u"http://www.gocomics.com/itsallaboutyou"), - # (u"Joe Vanilla", u"http://www.gocomics.com/joevanilla"), - # (u"La Cucaracha", u"http://www.gocomics.com/lacucaracha"), - # (u"Last Kiss", u"http://www.gocomics.com/lastkiss"), - # (u"Legend of Bill", u"http://www.gocomics.com/legendofbill"), - # (u"Liberty Meadows", u"http://www.gocomics.com/libertymeadows"), - (u"Lio", u"http://www.gocomics.com/lio"), - # (u"Little Dog Lost", u"http://www.gocomics.com/littledoglost"), - # (u"Little Otto", u"http://www.gocomics.com/littleotto"), - # (u"Loose Parts", u"http://www.gocomics.com/looseparts"), - # (u"Love Is...", u"http://www.gocomics.com/loveis"), - # (u"Maintaining", u"http://www.gocomics.com/maintaining"), - # (u"The Meaning of Lila", u"http://www.gocomics.com/meaningoflila"), - # (u"Middle-Aged White Guy", u"http://www.gocomics.com/middleagedwhiteguy"), - # (u"The Middletons", u"http://www.gocomics.com/themiddletons"), - # (u"Momma", u"http://www.gocomics.com/momma"), - # (u"Mutt & Jeff", u"http://www.gocomics.com/muttandjeff"), - # (u"Mythtickle", u"http://www.gocomics.com/mythtickle"), - # (u"Nest Heads", u"http://www.gocomics.com/nestheads"), - # (u"NEUROTICA", u"http://www.gocomics.com/neurotica"), - (u"New Adventures of Queen Victoria", u"http://www.gocomics.com/thenewadventuresofqueenvictoria"), - (u"Non Sequitur", u"http://www.gocomics.com/nonsequitur"), - # (u"The Norm", u"http://www.gocomics.com/thenorm"), - # (u"On A Claire Day", u"http://www.gocomics.com/onaclaireday"), - # (u"One Big Happy", u"http://www.gocomics.com/onebighappy"), - # (u"The Other Coast", u"http://www.gocomics.com/theothercoast"), - # (u"Out of the Gene Pool Re-Runs", u"http://www.gocomics.com/outofthegenepool"), - # (u"Overboard", u"http://www.gocomics.com/overboard"), - # (u"Pibgorn", u"http://www.gocomics.com/pibgorn"), - # (u"Pibgorn Sketches", u"http://www.gocomics.com/pibgornsketches"), - (u"Pickles", u"http://www.gocomics.com/pickles"), - # (u"Pinkerton", u"http://www.gocomics.com/pinkerton"), - # (u"Pluggers", u"http://www.gocomics.com/pluggers"), - (u"Pooch Cafe", u"http://www.gocomics.com/poochcafe"), - # (u"PreTeena", u"http://www.gocomics.com/preteena"), - # (u"The Quigmans", u"http://www.gocomics.com/thequigmans"), - # (u"Rabbits Against Magic", u"http://www.gocomics.com/rabbitsagainstmagic"), - (u"Real Life Adventures", u"http://www.gocomics.com/reallifeadventures"), - # (u"Red and Rover", u"http://www.gocomics.com/redandrover"), - # (u"Red Meat", u"http://www.gocomics.com/redmeat"), - # (u"Reynolds Unwrapped", u"http://www.gocomics.com/reynoldsunwrapped"), - # (u"Ronaldinho Gaucho", u"http://www.gocomics.com/ronaldinhogaucho"), - # (u"Rubes", u"http://www.gocomics.com/rubes"), - # (u"Scary Gary", u"http://www.gocomics.com/scarygary"), - (u"Shoe", u"http://www.gocomics.com/shoe"), - # (u"Shoecabbage", u"http://www.gocomics.com/shoecabbage"), - # (u"Skin Horse", u"http://www.gocomics.com/skinhorse"), - # (u"Slowpoke", u"http://www.gocomics.com/slowpoke"), - # (u"Speed Bump", u"http://www.gocomics.com/speedbump"), - # (u"State of the Union", u"http://www.gocomics.com/stateoftheunion"), - (u"Stone Soup", u"http://www.gocomics.com/stonesoup"), - # (u"Strange Brew", u"http://www.gocomics.com/strangebrew"), - # (u"Sylvia", u"http://www.gocomics.com/sylvia"), - # (u"Tank McNamara", u"http://www.gocomics.com/tankmcnamara"), - # (u"Tiny Sepuku", u"http://www.gocomics.com/tinysepuku"), - # (u"TOBY", u"http://www.gocomics.com/toby"), - # (u"Tom the Dancing Bug", u"http://www.gocomics.com/tomthedancingbug"), - # (u"Too Much Coffee Man", u"http://www.gocomics.com/toomuchcoffeeman"), - # (u"W.T. Duck", u"http://www.gocomics.com/wtduck"), - # (u"Watch Your Head", u"http://www.gocomics.com/watchyourhead"), - # (u"Wee Pals", u"http://www.gocomics.com/weepals"), - # (u"Winnie the Pooh", u"http://www.gocomics.com/winniethepooh"), - (u"Wizard of Id", u"http://www.gocomics.com/wizardofid"), - # (u"Working It Out", u"http://www.gocomics.com/workingitout"), - # (u"Yenny", u"http://www.gocomics.com/yenny"), - # (u"Zack Hill", u"http://www.gocomics.com/zackhill"), - (u"Ziggy", u"http://www.gocomics.com/ziggy"), - ######## COMICS - EDITORIAL ######## - ("Lalo Alcaraz","http://www.gocomics.com/laloalcaraz"), - ("Nick Anderson","http://www.gocomics.com/nickanderson"), - ("Chuck Asay","http://www.gocomics.com/chuckasay"), - ("Tony Auth","http://www.gocomics.com/tonyauth"), - ("Donna Barstow","http://www.gocomics.com/donnabarstow"), - # ("Bruce Beattie","http://www.gocomics.com/brucebeattie"), - # ("Clay Bennett","http://www.gocomics.com/claybennett"), - # ("Lisa Benson","http://www.gocomics.com/lisabenson"), - # ("Steve Benson","http://www.gocomics.com/stevebenson"), - # ("Chip Bok","http://www.gocomics.com/chipbok"), - # ("Steve Breen","http://www.gocomics.com/stevebreen"), - # ("Chris Britt","http://www.gocomics.com/chrisbritt"), - # ("Stuart Carlson","http://www.gocomics.com/stuartcarlson"), - # ("Ken Catalino","http://www.gocomics.com/kencatalino"), - # ("Paul Conrad","http://www.gocomics.com/paulconrad"), - # ("Jeff Danziger","http://www.gocomics.com/jeffdanziger"), - # ("Matt Davies","http://www.gocomics.com/mattdavies"), - # ("John Deering","http://www.gocomics.com/johndeering"), - # ("Bob Gorrell","http://www.gocomics.com/bobgorrell"), - # ("Walt Handelsman","http://www.gocomics.com/walthandelsman"), - # ("Clay Jones","http://www.gocomics.com/clayjones"), - # ("Kevin Kallaugher","http://www.gocomics.com/kevinkallaugher"), - # ("Steve Kelley","http://www.gocomics.com/stevekelley"), - # ("Dick Locher","http://www.gocomics.com/dicklocher"), - # ("Chan Lowe","http://www.gocomics.com/chanlowe"), - # ("Mike Luckovich","http://www.gocomics.com/mikeluckovich"), - # ("Gary Markstein","http://www.gocomics.com/garymarkstein"), - # ("Glenn McCoy","http://www.gocomics.com/glennmccoy"), - # ("Jim Morin","http://www.gocomics.com/jimmorin"), - # ("Jack Ohman","http://www.gocomics.com/jackohman"), - # ("Pat Oliphant","http://www.gocomics.com/patoliphant"), - # ("Joel Pett","http://www.gocomics.com/joelpett"), - # ("Ted Rall","http://www.gocomics.com/tedrall"), - # ("Michael Ramirez","http://www.gocomics.com/michaelramirez"), - # ("Marshall Ramsey","http://www.gocomics.com/marshallramsey"), - # ("Steve Sack","http://www.gocomics.com/stevesack"), - # ("Ben Sargent","http://www.gocomics.com/bensargent"), - # ("Drew Sheneman","http://www.gocomics.com/drewsheneman"), - # ("John Sherffius","http://www.gocomics.com/johnsherffius"), - # ("Small World","http://www.gocomics.com/smallworld"), - # ("Scott Stantis","http://www.gocomics.com/scottstantis"), - # ("Wayne Stayskal","http://www.gocomics.com/waynestayskal"), - # ("Dana Summers","http://www.gocomics.com/danasummers"), - # ("Paul Szep","http://www.gocomics.com/paulszep"), - # ("Mike Thompson","http://www.gocomics.com/mikethompson"), - # ("Tom Toles","http://www.gocomics.com/tomtoles"), - # ("Gary Varvel","http://www.gocomics.com/garyvarvel"), - # ("ViewsAfrica","http://www.gocomics.com/viewsafrica"), - # ("ViewsAmerica","http://www.gocomics.com/viewsamerica"), - # ("ViewsAsia","http://www.gocomics.com/viewsasia"), - # ("ViewsBusiness","http://www.gocomics.com/viewsbusiness"), - # ("ViewsEurope","http://www.gocomics.com/viewseurope"), - # ("ViewsLatinAmerica","http://www.gocomics.com/viewslatinamerica"), - # ("ViewsMidEast","http://www.gocomics.com/viewsmideast"), - # ("Views of the World","http://www.gocomics.com/viewsoftheworld"), - # ("Kerry Waghorn","http://www.gocomics.com/facesinthenews"), - # ("Dan Wasserman","http://www.gocomics.com/danwasserman"), - # ("Signe Wilkinson","http://www.gocomics.com/signewilkinson"), - # ("Wit of the World","http://www.gocomics.com/witoftheworld"), - # ("Don Wright","http://www.gocomics.com/donwright"), + (u"2 Cows and a Chicken", u"http://www.gocomics.com/2cowsandachicken"), + #(u"9 Chickweed Lane", u"http://www.gocomics.com/9chickweedlane"), + (u"9 to 5", u"http://www.gocomics.com/9to5"), + #(u"Adam At Home", u"http://www.gocomics.com/adamathome"), + (u"Agnes", u"http://www.gocomics.com/agnes"), + #(u"Alley Oop", u"http://www.gocomics.com/alleyoop"), + #(u"Andy Capp", u"http://www.gocomics.com/andycapp"), + #(u"Animal Crackers", u"http://www.gocomics.com/animalcrackers"), + #(u"Annie", u"http://www.gocomics.com/annie"), + #(u"Arlo & Janis", u"http://www.gocomics.com/arloandjanis"), + #(u"Ask Shagg", u"http://www.gocomics.com/askshagg"), + (u"B.C.", u"http://www.gocomics.com/bc"), + #(u"Back in the Day", u"http://www.gocomics.com/backintheday"), + #(u"Bad Reporter", u"http://www.gocomics.com/badreporter"), + #(u"Baldo", u"http://www.gocomics.com/baldo"), + #(u"Ballard Street", u"http://www.gocomics.com/ballardstreet"), + #(u"Barkeater Lake", u"http://www.gocomics.com/barkeaterlake"), + #(u"Basic Instructions", u"http://www.gocomics.com/basicinstructions"), + #(u"Ben", u"http://www.gocomics.com/ben"), + #(u"Betty", u"http://www.gocomics.com/betty"), + #(u"Bewley", u"http://www.gocomics.com/bewley"), + #(u"Big Nate", u"http://www.gocomics.com/bignate"), + #(u"Big Top", u"http://www.gocomics.com/bigtop"), + #(u"Biographic", u"http://www.gocomics.com/biographic"), + #(u"Birdbrains", u"http://www.gocomics.com/birdbrains"), + #(u"Bleeker: The Rechargeable Dog", u"http://www.gocomics.com/bleeker"), + #(u"Bliss", u"http://www.gocomics.com/bliss"), + (u"Bloom County", u"http://www.gocomics.com/bloomcounty"), + #(u"Bo Nanas", u"http://www.gocomics.com/bonanas"), + #(u"Bob the Squirrel", u"http://www.gocomics.com/bobthesquirrel"), + #(u"Boomerangs", u"http://www.gocomics.com/boomerangs"), + #(u"Bottomliners", u"http://www.gocomics.com/bottomliners"), + #(u"Bound and Gagged", u"http://www.gocomics.com/boundandgagged"), + #(u"Brainwaves", u"http://www.gocomics.com/brainwaves"), + #(u"Brenda Starr", u"http://www.gocomics.com/brendastarr"), + #(u"Brevity", u"http://www.gocomics.com/brevity"), + #(u"Brewster Rockit", u"http://www.gocomics.com/brewsterrockit"), + #(u"Broom Hilda", u"http://www.gocomics.com/broomhilda"), + (u"Calvin and Hobbes", u"http://www.gocomics.com/calvinandhobbes"), + #(u"Candorville", u"http://www.gocomics.com/candorville"), + #(u"Cathy", u"http://www.gocomics.com/cathy"), + #(u"C'est la Vie", u"http://www.gocomics.com/cestlavie"), + #(u"Cheap Thrills", u"http://www.gocomics.com/cheapthrills"), + #(u"Chuckle Bros", u"http://www.gocomics.com/chucklebros"), + #(u"Citizen Dog", u"http://www.gocomics.com/citizendog"), + #(u"Cleats", u"http://www.gocomics.com/cleats"), + #(u"Close to Home", u"http://www.gocomics.com/closetohome"), + #(u"Committed", u"http://www.gocomics.com/committed"), + #(u"Compu-toon", u"http://www.gocomics.com/compu-toon"), + #(u"Cornered", u"http://www.gocomics.com/cornered"), + #(u"Cow & Boy", u"http://www.gocomics.com/cow&boy"), + #(u"Cul de Sac", u"http://www.gocomics.com/culdesac"), + #(u"Daddy's Home", u"http://www.gocomics.com/daddyshome"), + #(u"Deep Cover", u"http://www.gocomics.com/deepcover"), + #(u"Dick Tracy", u"http://www.gocomics.com/dicktracy"), + (u"Dog Eat Doug", u"http://www.gocomics.com/dogeatdoug"), + #(u"Domestic Abuse", u"http://www.gocomics.com/domesticabuse"), + (u"Doodles", u"http://www.gocomics.com/doodles"), + (u"Doonesbury", u"http://www.gocomics.com/doonesbury"), + #(u"Drabble", u"http://www.gocomics.com/drabble"), + #(u"Eek!", u"http://www.gocomics.com/eek"), + #(u"F Minus", u"http://www.gocomics.com/fminus"), + #(u"Family Tree", u"http://www.gocomics.com/familytree"), + #(u"Farcus", u"http://www.gocomics.com/farcus"), + (u"Fat Cats Classics", u"http://www.gocomics.com/fatcatsclassics"), + #(u"Ferd'nand", u"http://www.gocomics.com/ferdnand"), + #(u"Flight Deck", u"http://www.gocomics.com/flightdeck"), + (u"Flo and Friends", u"http://www.gocomics.com/floandfriends"), + #(u"For Better or For Worse", u"http://www.gocomics.com/forbetterorforworse"), + #(u"For Heaven's Sake", u"http://www.gocomics.com/forheavenssake"), + #(u"Fort Knox", u"http://www.gocomics.com/fortknox"), + #(u"FoxTrot Classics", u"http://www.gocomics.com/foxtrotclassics"), + (u"FoxTrot", u"http://www.gocomics.com/foxtrot"), + #(u"Frank & Ernest", u"http://www.gocomics.com/frankandernest"), + #(u"Frazz", u"http://www.gocomics.com/frazz"), + #(u"Fred Basset", u"http://www.gocomics.com/fredbasset"), + #(u"Free Range", u"http://www.gocomics.com/freerange"), + #(u"Frog Applause", u"http://www.gocomics.com/frogapplause"), + #(u"Garfield Minus Garfield", u"http://www.gocomics.com/garfieldminusgarfield"), + (u"Garfield", u"http://www.gocomics.com/garfield"), + #(u"Gasoline Alley", u"http://www.gocomics.com/gasolinealley"), + #(u"Geech Classics", u"http://www.gocomics.com/geechclassics"), + #(u"Get Fuzzy", u"http://www.gocomics.com/getfuzzy"), + #(u"Gil Thorp", u"http://www.gocomics.com/gilthorp"), + #(u"Ginger Meggs", u"http://www.gocomics.com/gingermeggs"), + #(u"Girls & Sports", u"http://www.gocomics.com/girlsandsports"), + #(u"Graffiti", u"http://www.gocomics.com/graffiti"), + #(u"Grand Avenue", u"http://www.gocomics.com/grandavenue"), + #(u"Haiku Ewe", u"http://www.gocomics.com/haikuewe"), + #(u"Heart of the City", u"http://www.gocomics.com/heartofthecity"), + (u"Heathcliff", u"http://www.gocomics.com/heathcliff"), + #(u"Herb and Jamaal", u"http://www.gocomics.com/herbandjamaal"), + #(u"Herman", u"http://www.gocomics.com/herman"), + #(u"Home and Away", u"http://www.gocomics.com/homeandaway"), + #(u"Housebroken", u"http://www.gocomics.com/housebroken"), + #(u"Hubert and Abby", u"http://www.gocomics.com/hubertandabby"), + #(u"Imagine This", u"http://www.gocomics.com/imaginethis"), + #(u"In the Bleachers", u"http://www.gocomics.com/inthebleachers"), + #(u"In the Sticks", u"http://www.gocomics.com/inthesticks"), + #(u"Ink Pen", u"http://www.gocomics.com/inkpen"), + #(u"It's All About You", u"http://www.gocomics.com/itsallaboutyou"), + #(u"Jane's World", u"http://www.gocomics.com/janesworld"), + #(u"Joe Vanilla", u"http://www.gocomics.com/joevanilla"), + #(u"Jump Start", u"http://www.gocomics.com/jumpstart"), + #(u"Kit 'N' Carlyle", u"http://www.gocomics.com/kitandcarlyle"), + #(u"La Cucaracha", u"http://www.gocomics.com/lacucaracha"), + #(u"Last Kiss", u"http://www.gocomics.com/lastkiss"), + #(u"Legend of Bill", u"http://www.gocomics.com/legendofbill"), + #(u"Liberty Meadows", u"http://www.gocomics.com/libertymeadows"), + #(u"Li'l Abner Classics", u"http://www.gocomics.com/lilabnerclassics"), + #(u"Lio", u"http://www.gocomics.com/lio"), + #(u"Little Dog Lost", u"http://www.gocomics.com/littledoglost"), + #(u"Little Otto", u"http://www.gocomics.com/littleotto"), + #(u"Lola", u"http://www.gocomics.com/lola"), + #(u"Loose Parts", u"http://www.gocomics.com/looseparts"), + #(u"Love Is...", u"http://www.gocomics.com/loveis"), + #(u"Luann", u"http://www.gocomics.com/luann"), + #(u"Maintaining", u"http://www.gocomics.com/maintaining"), + (u"Marmaduke", u"http://www.gocomics.com/marmaduke"), + #(u"Meg! Classics", u"http://www.gocomics.com/megclassics"), + #(u"Middle-Aged White Guy", u"http://www.gocomics.com/middleagedwhiteguy"), + #(u"Minimum Security", u"http://www.gocomics.com/minimumsecurity"), + #(u"Moderately Confused", u"http://www.gocomics.com/moderatelyconfused"), + (u"Momma", u"http://www.gocomics.com/momma"), + #(u"Monty", u"http://www.gocomics.com/monty"), + #(u"Motley Classics", u"http://www.gocomics.com/motleyclassics"), + (u"Mutt & Jeff", u"http://www.gocomics.com/muttandjeff"), + #(u"Mythtickle", u"http://www.gocomics.com/mythtickle"), + #(u"Nancy", u"http://www.gocomics.com/nancy"), + #(u"Natural Selection", u"http://www.gocomics.com/naturalselection"), + #(u"Nest Heads", u"http://www.gocomics.com/nestheads"), + #(u"NEUROTICA", u"http://www.gocomics.com/neurotica"), + #(u"New Adventures of Queen Victoria", u"http://www.gocomics.com/thenewadventuresofqueenvictoria"), + #(u"Non Sequitur", u"http://www.gocomics.com/nonsequitur"), + #(u"Off The Mark", u"http://www.gocomics.com/offthemark"), + #(u"On A Claire Day", u"http://www.gocomics.com/onaclaireday"), + #(u"One Big Happy Classics", u"http://www.gocomics.com/onebighappyclassics"), + #(u"One Big Happy", u"http://www.gocomics.com/onebighappy"), + #(u"Out of the Gene Pool Re-Runs", u"http://www.gocomics.com/outofthegenepool"), + #(u"Over the Hedge", u"http://www.gocomics.com/overthehedge"), + #(u"Overboard", u"http://www.gocomics.com/overboard"), + #(u"PC and Pixel", u"http://www.gocomics.com/pcandpixel"), + (u"Peanuts", u"http://www.gocomics.com/peanuts"), + #(u"Pearls Before Swine", u"http://www.gocomics.com/pearlsbeforeswine"), + #(u"Pibgorn Sketches", u"http://www.gocomics.com/pibgornsketches"), + #(u"Pibgorn", u"http://www.gocomics.com/pibgorn"), + (u"Pickles", u"http://www.gocomics.com/pickles"), + #(u"Pinkerton", u"http://www.gocomics.com/pinkerton"), + #(u"Pluggers", u"http://www.gocomics.com/pluggers"), + #(u"Pooch Cafe", u"http://www.gocomics.com/poochcafe"), + #(u"PreTeena", u"http://www.gocomics.com/preteena"), + #(u"Prickly City", u"http://www.gocomics.com/pricklycity"), + #(u"Rabbits Against Magic", u"http://www.gocomics.com/rabbitsagainstmagic"), + #(u"Raising Duncan Classics", u"http://www.gocomics.com/raisingduncanclassics"), + #(u"Real Life Adventures", u"http://www.gocomics.com/reallifeadventures"), + #(u"Reality Check", u"http://www.gocomics.com/realitycheck"), + #(u"Red and Rover", u"http://www.gocomics.com/redandrover"), + #(u"Red Meat", u"http://www.gocomics.com/redmeat"), + #(u"Reynolds Unwrapped", u"http://www.gocomics.com/reynoldsunwrapped"), + #(u"Rip Haywire", u"http://www.gocomics.com/riphaywire"), + #(u"Ripley's Believe It or Not!", u"http://www.gocomics.com/ripleysbelieveitornot"), + #(u"Ronaldinho Gaucho", u"http://www.gocomics.com/ronaldinhogaucho"), + #(u"Rose Is Rose", u"http://www.gocomics.com/roseisrose"), + #(u"Rubes", u"http://www.gocomics.com/rubes"), + #(u"Rudy Park", u"http://www.gocomics.com/rudypark"), + #(u"Scary Gary", u"http://www.gocomics.com/scarygary"), + #(u"Shirley and Son Classics", u"http://www.gocomics.com/shirleyandsonclassics"), + #(u"Shoe", u"http://www.gocomics.com/shoe"), + #(u"Shoecabbage", u"http://www.gocomics.com/shoecabbage"), + #(u"Skin Horse", u"http://www.gocomics.com/skinhorse"), + #(u"Slowpoke", u"http://www.gocomics.com/slowpoke"), + #(u"Soup To Nutz", u"http://www.gocomics.com/souptonutz"), + #(u"Speed Bump", u"http://www.gocomics.com/speedbump"), + #(u"Spot The Frog", u"http://www.gocomics.com/spotthefrog"), + #(u"State of the Union", u"http://www.gocomics.com/stateoftheunion"), + #(u"Stone Soup", u"http://www.gocomics.com/stonesoup"), + #(u"Strange Brew", u"http://www.gocomics.com/strangebrew"), + #(u"Sylvia", u"http://www.gocomics.com/sylvia"), + #(u"Tank McNamara", u"http://www.gocomics.com/tankmcnamara"), + #(u"Tarzan Classics", u"http://www.gocomics.com/tarzanclassics"), + #(u"That's Life", u"http://www.gocomics.com/thatslife"), + #(u"The Academia Waltz", u"http://www.gocomics.com/academiawaltz"), + #(u"The Argyle Sweater", u"http://www.gocomics.com/theargylesweater"), + #(u"The Barn", u"http://www.gocomics.com/thebarn"), + #(u"The Boiling Point", u"http://www.gocomics.com/theboilingpoint"), + #(u"The Boondocks", u"http://www.gocomics.com/boondocks"), + #(u"The Born Loser", u"http://www.gocomics.com/thebornloser"), + #(u"The Buckets", u"http://www.gocomics.com/thebuckets"), + #(u"The City", u"http://www.gocomics.com/thecity"), + #(u"The Dinette Set", u"http://www.gocomics.com/dinetteset"), + #(u"The Doozies", u"http://www.gocomics.com/thedoozies"), + #(u"The Duplex", u"http://www.gocomics.com/duplex"), + #(u"The Elderberries", u"http://www.gocomics.com/theelderberries"), + #(u"The Flying McCoys", u"http://www.gocomics.com/theflyingmccoys"), + #(u"The Fusco Brothers", u"http://www.gocomics.com/thefuscobrothers"), + #(u"The Grizzwells", u"http://www.gocomics.com/thegrizzwells"), + #(u"The Humble Stumble", u"http://www.gocomics.com/thehumblestumble"), + #(u"The Knight Life", u"http://www.gocomics.com/theknightlife"), + #(u"The Meaning of Lila", u"http://www.gocomics.com/meaningoflila"), + #(u"The Middletons", u"http://www.gocomics.com/themiddletons"), + #(u"The Norm", u"http://www.gocomics.com/thenorm"), + #(u"The Other Coast", u"http://www.gocomics.com/theothercoast"), + #(u"The Quigmans", u"http://www.gocomics.com/thequigmans"), + #(u"The Sunshine Club", u"http://www.gocomics.com/thesunshineclub"), + #(u"Tiny Sepuk", u"http://www.gocomics.com/tinysepuk"), + #(u"TOBY", u"http://www.gocomics.com/toby"), + #(u"Tom the Dancing Bug", u"http://www.gocomics.com/tomthedancingbug"), + #(u"Too Much Coffee Man", u"http://www.gocomics.com/toomuchcoffeeman"), + #(u"Unstrange Phenomena", u"http://www.gocomics.com/unstrangephenomena"), + #(u"W.T. Duck", u"http://www.gocomics.com/wtduck"), + #(u"Watch Your Head", u"http://www.gocomics.com/watchyourhead"), + #(u"Wee Pals", u"http://www.gocomics.com/weepals"), + #(u"Winnie the Pooh", u"http://www.gocomics.com/winniethepooh"), + #(u"Wizard of Id", u"http://www.gocomics.com/wizardofid"), + #(u"Working Daze", u"http://www.gocomics.com/workingdaze"), + #(u"Working It Out", u"http://www.gocomics.com/workingitout"), + #(u"Yenny", u"http://www.gocomics.com/yenny"), + #(u"Zack Hill", u"http://www.gocomics.com/zackhill"), + (u"Ziggy", u"http://www.gocomics.com/ziggy"), + # + ######## EDITORIAL CARTOONS ##################### + (u"Adam Zyglis", u"http://www.gocomics.com/adamzyglis"), + #(u"Andy Singer", u"http://www.gocomics.com/andysinger"), + #(u"Ben Sargent",u"http://www.gocomics.com/bensargent"), + #(u"Bill Day", u"http://www.gocomics.com/billday"), + #(u"Bill Schorr", u"http://www.gocomics.com/billschorr"), + #(u"Bob Englehart", u"http://www.gocomics.com/bobenglehart"), + (u"Bob Gorrell",u"http://www.gocomics.com/bobgorrell"), + #(u"Brian Fairrington", u"http://www.gocomics.com/brianfairrington"), + #(u"Bruce Beattie", u"http://www.gocomics.com/brucebeattie"), + #(u"Cam Cardow", u"http://www.gocomics.com/camcardow"), + #(u"Chan Lowe",u"http://www.gocomics.com/chanlowe"), + #(u"Chip Bok",u"http://www.gocomics.com/chipbok"), + #(u"Chris Britt",u"http://www.gocomics.com/chrisbritt"), + #(u"Chuck Asay",u"http://www.gocomics.com/chuckasay"), + #(u"Clay Bennett",u"http://www.gocomics.com/claybennett"), + #(u"Clay Jones",u"http://www.gocomics.com/clayjones"), + #(u"Dan Wasserman",u"http://www.gocomics.com/danwasserman"), + #(u"Dana Summers",u"http://www.gocomics.com/danasummers"), + #(u"Daryl Cagle", u"http://www.gocomics.com/darylcagle"), + #(u"David Fitzsimmons", u"http://www.gocomics.com/davidfitzsimmons"), + (u"Dick Locher",u"http://www.gocomics.com/dicklocher"), + #(u"Don Wright",u"http://www.gocomics.com/donwright"), + #(u"Donna Barstow",u"http://www.gocomics.com/donnabarstow"), + #(u"Drew Litton", u"http://www.gocomics.com/drewlitton"), + #(u"Drew Sheneman",u"http://www.gocomics.com/drewsheneman"), + #(u"Ed Stein", u"http://www.gocomics.com/edstein"), + #(u"Eric Allie", u"http://www.gocomics.com/ericallie"), + #(u"Gary Markstein", u"http://www.gocomics.com/garymarkstein"), + #(u"Gary McCoy", u"http://www.gocomics.com/garymccoy"), + #(u"Gary Varvel", u"http://www.gocomics.com/garyvarvel"), + #(u"Glenn McCoy",u"http://www.gocomics.com/glennmccoy"), + #(u"Henry Payne", u"http://www.gocomics.com/henrypayne"), + #(u"Jack Ohman",u"http://www.gocomics.com/jackohman"), + #(u"JD Crowe", u"http://www.gocomics.com/jdcrowe"), + #(u"Jeff Danziger",u"http://www.gocomics.com/jeffdanziger"), + #(u"Jeff Parker", u"http://www.gocomics.com/jeffparker"), + #(u"Jeff Stahler", u"http://www.gocomics.com/jeffstahler"), + #(u"Jerry Holbert", u"http://www.gocomics.com/jerryholbert"), + #(u"Jim Morin",u"http://www.gocomics.com/jimmorin"), + #(u"Joel Pett",u"http://www.gocomics.com/joelpett"), + #(u"John Cole", u"http://www.gocomics.com/johncole"), + #(u"John Darkow", u"http://www.gocomics.com/johndarkow"), + #(u"John Deering",u"http://www.gocomics.com/johndeering"), + #(u"John Sherffius", u"http://www.gocomics.com/johnsherffius"), + #(u"Ken Catalino",u"http://www.gocomics.com/kencatalino"), + #(u"Kerry Waghorn",u"http://www.gocomics.com/facesinthenews"), + #(u"Kevin Kallaugher",u"http://www.gocomics.com/kevinkallaugher"), + #(u"Lalo Alcaraz",u"http://www.gocomics.com/laloalcaraz"), + #(u"Larry Wright", u"http://www.gocomics.com/larrywright"), + #(u"Lisa Benson", u"http://www.gocomics.com/lisabenson"), + #(u"Marshall Ramsey", u"http://www.gocomics.com/marshallramsey"), + #(u"Matt Bors", u"http://www.gocomics.com/mattbors"), + #(u"Matt Davies",u"http://www.gocomics.com/mattdavies"), + #(u"Michael Ramirez", u"http://www.gocomics.com/michaelramirez"), + #(u"Mike Keefe", u"http://www.gocomics.com/mikekeefe"), + #(u"Mike Luckovich", u"http://www.gocomics.com/mikeluckovich"), + #(u"MIke Thompson", u"http://www.gocomics.com/mikethompson"), + #(u"Monte Wolverton", u"http://www.gocomics.com/montewolverton"), + #(u"Mr. Fish", u"http://www.gocomics.com/mrfish"), + #(u"Nate Beeler", u"http://www.gocomics.com/natebeeler"), + #(u"Nick Anderson", u"http://www.gocomics.com/nickanderson"), + #(u"Pat Bagley", u"http://www.gocomics.com/patbagley"), + #(u"Pat Oliphant",u"http://www.gocomics.com/patoliphant"), + #(u"Paul Conrad",u"http://www.gocomics.com/paulconrad"), + #(u"Paul Szep", u"http://www.gocomics.com/paulszep"), + #(u"RJ Matson", u"http://www.gocomics.com/rjmatson"), + #(u"Rob Rogers", u"http://www.gocomics.com/robrogers"), + #(u"Robert Ariail", u"http://www.gocomics.com/robertariail"), + #(u"Scott Stantis", u"http://www.gocomics.com/scottstantis"), + #(u"Signe Wilkinson", u"http://www.gocomics.com/signewilkinson"), + #(u"Small World",u"http://www.gocomics.com/smallworld"), + #(u"Steve Benson", u"http://www.gocomics.com/stevebenson"), + #(u"Steve Breen", u"http://www.gocomics.com/stevebreen"), + #(u"Steve Kelley", u"http://www.gocomics.com/stevekelley"), + #(u"Steve Sack", u"http://www.gocomics.com/stevesack"), + #(u"Stuart Carlson",u"http://www.gocomics.com/stuartcarlson"), + #(u"Ted Rall",u"http://www.gocomics.com/tedrall"), + #(u"(Th)ink", u"http://www.gocomics.com/think"), + #(u"Tom Toles",u"http://www.gocomics.com/tomtoles"), + (u"Tony Auth",u"http://www.gocomics.com/tonyauth"), + #(u"Views of the World",u"http://www.gocomics.com/viewsoftheworld"), + #(u"ViewsAfrica",u"http://www.gocomics.com/viewsafrica"), + #(u"ViewsAmerica",u"http://www.gocomics.com/viewsamerica"), + #(u"ViewsAsia",u"http://www.gocomics.com/viewsasia"), + #(u"ViewsBusiness",u"http://www.gocomics.com/viewsbusiness"), + #(u"ViewsEurope",u"http://www.gocomics.com/viewseurope"), + #(u"ViewsLatinAmerica",u"http://www.gocomics.com/viewslatinamerica"), + #(u"ViewsMidEast",u"http://www.gocomics.com/viewsmideast"), + (u"Walt Handelsman",u"http://www.gocomics.com/walthandelsman"), + #(u"Wayne Stayskal",u"http://www.gocomics.com/waynestayskal"), + #(u"Wit of the World",u"http://www.gocomics.com/witoftheworld"), ]: print 'Working on: ', title articles = self.make_links(url) @@ -352,3 +445,4 @@ class GoComics(BasicNewsRecipe): p{font-family:Arial,Helvetica,sans-serif;font-size:small;} body{font-family:Helvetica,Arial,sans-serif;font-size:small;} ''' + diff --git a/recipes/hbr_blogs.recipe b/recipes/hbr_blogs.recipe index bd72a95ebf..acee567d8d 100644 --- a/recipes/hbr_blogs.recipe +++ b/recipes/hbr_blogs.recipe @@ -6,7 +6,7 @@ class HBR(BasicNewsRecipe): title = 'Harvard Business Review Blogs' description = 'To subscribe go to http://hbr.harvardbusiness.org' needs_subscription = True - __author__ = 'Kovid Goyal and Sujata Raman, enhanced by BrianG' + __author__ = 'Kovid Goyal, enhanced by BrianG' language = 'en' no_stylesheets = True diff --git a/recipes/icons/ambito_financiero.png b/recipes/icons/ambito_financiero.png new file mode 100644 index 0000000000..e0a6f409cf Binary files /dev/null and b/recipes/icons/ambito_financiero.png differ diff --git a/recipes/icons/observatorul_cultural.png b/recipes/icons/observatorul_cultural.png new file mode 100644 index 0000000000..f322bd01dc Binary files /dev/null and b/recipes/icons/observatorul_cultural.png differ diff --git a/recipes/icons/stiintasitehnica.png b/recipes/icons/stiintasitehnica.png new file mode 100644 index 0000000000..eb16ec3a0e Binary files /dev/null and b/recipes/icons/stiintasitehnica.png differ diff --git a/recipes/lemonde_dip.recipe b/recipes/lemonde_dip.recipe index 9845c207fc..8e61e24cdc 100644 --- a/recipes/lemonde_dip.recipe +++ b/recipes/lemonde_dip.recipe @@ -1,5 +1,5 @@ __license__ = 'GPL v3' -__copyright__ = '2008-2010, Darko Miletic ' +__copyright__ = '2008-2011, Darko Miletic ' ''' mondediplo.com ''' @@ -11,7 +11,7 @@ from calibre.web.feeds.news import BasicNewsRecipe class LeMondeDiplomatiqueEn(BasicNewsRecipe): title = 'Le Monde diplomatique - English edition' __author__ = 'Darko Miletic' - description = 'Real journalism making sense of the world around us' + description = "Le Monde diplomatique is the place you go when you want to know what's really happening. This is a major international paper that is truly independent, that sees the world in fresh ways, that focuses on places no other publications reach. We offer a clear, considered view of the conflicting interests and complexities of a modern global world. LMD in English is a concise version of the Paris-based parent edition, publishing all the major stories each month, expertly translated, and with some London-based commissions too. We offer a taster of LMD quality on our website where a selection of articles are available each month." publisher = 'Le Monde diplomatique' category = 'news, politics, world' no_stylesheets = True @@ -26,13 +26,19 @@ class LeMondeDiplomatiqueEn(BasicNewsRecipe): INDEX = PREFIX + strftime('%Y/%m/') use_embedded_content = False language = 'en' - extra_css = ' body{font-family: "Luxi sans","Lucida sans","Lucida Grande",Lucida,"Lucida Sans Unicode",sans-serif} .surtitre{font-size: 1.2em; font-variant: small-caps; margin-bottom: 0.5em} .chapo{font-size: 1.2em; font-weight: bold; margin: 1em 0 0.5em} .texte{font-family: Georgia,"Times New Roman",serif} h1{color: #990000} .notes{border-top: 1px solid #CCCCCC; font-size: 0.9em; line-height: 1.4em} ' + extra_css = """ + body{font-family: "Luxi sans","Lucida sans","Lucida Grande",Lucida,"Lucida Sans Unicode",sans-serif} + .surtitre{font-size: 1.2em; font-variant: small-caps; margin-bottom: 0.5em} + .chapo{font-size: 1.2em; font-weight: bold; margin: 1em 0 0.5em} + .texte{font-family: Georgia,"Times New Roman",serif} h1{color: #990000} + .notes{border-top: 1px solid #CCCCCC; font-size: 0.9em; line-height: 1.4em} + """ conversion_options = { - 'comment' : description - , 'tags' : category - , 'publisher' : publisher - , 'language' : language + 'comment' : description + , 'tags' : category + , 'publisher' : publisher + , 'language' : language } def get_browser(self): @@ -46,12 +52,12 @@ class LeMondeDiplomatiqueEn(BasicNewsRecipe): br.open(self.LOGIN,data) return br - keep_only_tags =[ + keep_only_tags =[ dict(name='div', attrs={'id':'contenu'}) , dict(name='div',attrs={'class':'notes surlignable'}) ] remove_tags = [dict(name=['object','link','script','iframe','base'])] - remove_attributes = ['height','width'] + remove_attributes = ['height','width','name','lang'] def parse_index(self): articles = [] @@ -75,3 +81,24 @@ class LeMondeDiplomatiqueEn(BasicNewsRecipe): }) return [(self.title, articles)] + def get_cover_url(self): + cover_url = None + soup = self.index_to_soup(self.INDEX) + cover_item = soup.find('div',attrs={'class':'current'}) + if cover_item: + ap = cover_item.find('img',attrs={'class':'spip_logos'}) + if ap: + cover_url = self.INDEX + ap['src'] + return cover_url + + def preprocess_html(self, soup): + for item in soup.findAll(style=True): + del item['style'] + for item in soup.findAll('a'): + if item.string is not None: + str = item.string + item.replaceWith(str) + else: + str = self.tag_to_string(item) + item.replaceWith(str) + return soup diff --git a/recipes/metro_news_nl.recipe b/recipes/metro_news_nl.recipe new file mode 100644 index 0000000000..cfdd9e5441 --- /dev/null +++ b/recipes/metro_news_nl.recipe @@ -0,0 +1,45 @@ +from calibre.web.feeds.news import BasicNewsRecipe + +class AdvancedUserRecipe1306097511(BasicNewsRecipe): + title = u'Metro Nieuws NL' + oldest_article = 2 + max_articles_per_feed = 100 + __author__ = u'DrMerry' + description = u'Metro Nederland' + language = u'nl' + simultaneous_downloads = 5 + delay = 1 +# timefmt = ' [%A, %d %B, %Y]' + timefmt = '' + no_stylesheets = True + remove_javascript = True + remove_empty_feeds = True + cover_url = 'http://www.readmetro.com/img/en/metroholland/last/1/small.jpg' + remove_empty_feeds = True + publication_type = 'newspaper' + remove_tags_before = dict(name='div', attrs={'id':'date'}) + remove_tags_after = dict(name='div', attrs={'id':'column-1-3'}) + encoding = 'utf-8' + extra_css = '#date {font-size: 10px} .article-image-caption {font-size: 8px}' + + remove_tags = [dict(name='div', attrs={'class':[ 'metroCommentFormWrap', + 'commentForm', 'metroCommentInnerWrap', 'article-slideshow-counter-container', 'article-slideshow-control', 'ad', 'header-links', + 'art-rgt','pluck-app pluck-comm', 'share-and-byline', 'article-tools-below-title', 'col-179 ', 'related-links', 'clear padding-top-15', 'share-tools', 'article-page-auto-pushes', 'footer-edit']}), + dict(name='div', attrs={'id':['article-2', 'article-4', 'article-1', 'navigation', 'footer', 'header', 'comments', 'sidebar']}), + dict(name='iframe')] + + feeds = [ + (u'Binnenland', u'http://www.metronieuws.nl/rss.xml?c=1277377288-3'), + (u'Economie', u'http://www.metronieuws.nl/rss.xml?c=1278070988-0'), + (u'Den Haag', u'http://www.metronieuws.nl/rss.xml?c=1289013337-3'), + (u'Rotterdam', u'http://www.metronieuws.nl/rss.xml?c=1289013337-2'), + (u'Amsterdam', u'http://www.metronieuws.nl/rss.xml?c=1289013337-1'), + (u'Columns', u'http://www.metronieuws.nl/rss.xml?c=1277377288-17'), + (u'Entertainment', u'http://www.metronieuws.nl/rss.xml?c=1277377288-2'), + (u'Dot', u'http://www.metronieuws.nl/rss.xml?c=1283166782-12'), + (u'Familie', u'http://www.metronieuws.nl/rss.xml?c=1283166782-9'), + (u'Blogs', u'http://www.metronieuws.nl/rss.xml?c=1295586825-6'), + (u'Reizen', u'http://www.metronieuws.nl/rss.xml?c=1277377288-13'), + (u'Carrière', u'http://www.metronieuws.nl/rss.xml?c=1278070988-1'), + (u'Sport', u'http://www.metronieuws.nl/rss.xml?c=1277377288-12') + ] diff --git a/recipes/nme.recipe b/recipes/nme.recipe new file mode 100644 index 0000000000..70e8e24fde --- /dev/null +++ b/recipes/nme.recipe @@ -0,0 +1,42 @@ +from calibre.web.feeds.news import BasicNewsRecipe + +class AdvancedUserRecipe1306061239(BasicNewsRecipe): + title = u'New Musical Express Magazine' + __author__ = "scissors" + language = 'en' + remove_empty_feeds = True + remove_javascript = True + no_stylesheets = True + oldest_article = 7 + max_articles_per_feed = 100 + cover_url = 'http://tawanda3000.files.wordpress.com/2011/02/nme-logo.jpg' + + remove_tags = [ + dict( attrs={'class':'clear_icons'}), + dict( attrs={'class':'share_links'}), + dict( attrs={'id':'right_panel'}), + dict( attrs={'class':'today box'}) + +] + + keep_only_tags = [ + + dict(name='h1'), + #dict(name='h3'), + dict(attrs={'class' : 'BText'}), + dict(attrs={'class' : 'Bmore'}), + dict(attrs={'class' : 'bPosts'}), + dict(attrs={'class' : 'text'}), + dict(attrs={'id' : 'article_gallery'}), + dict(attrs={'class' : 'article_text'}) +] + + + + + feeds = [ + (u'NME News', u'http://feeds2.feedburner.com/nmecom/rss/newsxml'), + (u'Reviews', u'http://feeds2.feedburner.com/nme/SdML'), + (u'Blogs', u'http://www.nme.com/blog/index.php?blog=140&tempskin=_rss2'), + + ] diff --git a/recipes/stiintasitehnica.recipe b/recipes/stiintasitehnica.recipe new file mode 100644 index 0000000000..c58a115b56 --- /dev/null +++ b/recipes/stiintasitehnica.recipe @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +#!/usr/bin/env python + +__license__ = 'GPL v3' +__copyright__ = u'2011, Silviu Cotoar\u0103' +''' +stiintasitehnica.com +''' + +from calibre.web.feeds.news import BasicNewsRecipe + +class Stiintasitehnica(BasicNewsRecipe): + title = u'\u0218tiin\u021b\u0103 \u015fi Tehnic\u0103' + __author__ = u'Silviu Cotoar\u0103' + description = u'\u0218tiin\u021b\u0103 \u015fi Tehnic\u0103' + publisher = u'\u0218tiin\u021b\u0103 \u015fi Tehnic\u0103' + oldest_article = 50 + language = 'ro' + max_articles_per_feed = 100 + no_stylesheets = True + use_embedded_content = False + category = u'Ziare,Reviste,Stiinta,Tehnica' + encoding = 'utf-8' + cover_url = 'http://www.stiintasitehnica.com/images/logo.jpg' + + conversion_options = { + 'comments' : description + ,'tags' : category + ,'language' : language + ,'publisher' : publisher + } + + keep_only_tags = [ + dict(name='div', attrs={'id':'mainColumn2'}) + ] + + remove_tags = [ + dict(name='span', attrs={'class':['redEar']}) + , dict(name='table', attrs={'class':['connect_widget_interactive_area']}) + , dict(name='div', attrs={'class':['panel-overlay']}) + , dict(name='div', attrs={'id':['pointer']}) + , dict(name='img', attrs={'class':['nav-next', 'nav-prev']}) + , dict(name='table', attrs={'class':['connect_widget_interactive_area']}) + , dict(name='hr', attrs={'class':['dotted']}) + ] + + remove_tags_after = [ + dict(name='hr', attrs={'class':['dotted']}) + ] + + feeds = [ + (u'Feeds', u'http://www.stiintasitehnica.com/rss/stiri.xml') + ] + + def preprocess_html(self, soup): + return self.adeify_images(soup) diff --git a/resources/content_server/browse/browse.html b/resources/content_server/browse/browse.html index de78e432d7..6a9697dc06 100644 --- a/resources/content_server/browse/browse.html +++ b/resources/content_server/browse/browse.html @@ -20,8 +20,8 @@ - - + +