Sync to trunk.
163
Changelog.yaml
@ -19,6 +19,169 @@
|
|||||||
# new recipes:
|
# new recipes:
|
||||||
# - title:
|
# - title:
|
||||||
|
|
||||||
|
- version: 0.8.19
|
||||||
|
date: 2011-09-16
|
||||||
|
|
||||||
|
new features:
|
||||||
|
- title: "Driver for Sony Ericsson Xperia Arc"
|
||||||
|
|
||||||
|
- title: "MOBI Output: Add option in Preferences->Output Options->MOBI Output to enable the share via Facebook feature for calibre produced MOBI files. Note that enabling this disables the sync last read position across multiple devices feature. Don't ask me why, ask Amazon."
|
||||||
|
|
||||||
|
- title: "Content server: Update metadata when sending MOBI as well as EPUB files"
|
||||||
|
|
||||||
|
- title: "News download: Add an auto_cleanup_keep variable that allows recipe writers to tell the auto cleanup to never remove a specified element"
|
||||||
|
|
||||||
|
- title: "Conversion: Remove paragraph spacing: If you set the indent size negative, calibre will now leave the indents specified in the input document"
|
||||||
|
|
||||||
|
bug fixes:
|
||||||
|
- title: "Fix regression in 0.8.18 that broke PDF Output"
|
||||||
|
|
||||||
|
- title: "MOBI Output: Revert change in 0.8.18 that marked news downloads with a single section as blogs, as the Kindle does not auto archive them"
|
||||||
|
|
||||||
|
- title: "PDF output on OSX now generates proper non image based documents"
|
||||||
|
|
||||||
|
- title: "RTF Input: Fix handling of internal links and underlined text"
|
||||||
|
tickets: [845328]
|
||||||
|
|
||||||
|
- title: "Fix language sometimes not getting set when downloading metadata in the edit metadata dialog"
|
||||||
|
|
||||||
|
- title: "Fix regression that broke killing of multiple jobs"
|
||||||
|
tickets: [850764]
|
||||||
|
|
||||||
|
- title: "Fix bug processing author names with initials when downloading metadata from ozon.ru."
|
||||||
|
tickets: [845420]
|
||||||
|
|
||||||
|
- title: "Fix a memory leak in the Copy to library operation which also fixes the metadata.db being held open in the destination library"
|
||||||
|
tickets: [849469]
|
||||||
|
|
||||||
|
- title: "Keyboard shortcuts: Allow use of symbol keys like >,*,etc."
|
||||||
|
tickets: [847378]
|
||||||
|
|
||||||
|
- title: "EPUB Output: When splitting be a little cleverer about discarding 'empty' pages"
|
||||||
|
|
||||||
|
|
||||||
|
improved recipes:
|
||||||
|
- Twitch Films
|
||||||
|
- Japan Times
|
||||||
|
- People/US Magazine mashup
|
||||||
|
- Business World India
|
||||||
|
- Inquirer.net
|
||||||
|
- Guardian/Observer
|
||||||
|
|
||||||
|
new recipes:
|
||||||
|
- title: RT
|
||||||
|
author: Darko Miletic
|
||||||
|
|
||||||
|
- title: CIO Magazine
|
||||||
|
author: Julio Map
|
||||||
|
|
||||||
|
- title: India Today and Hindustan Times
|
||||||
|
author: Krittika Goyal
|
||||||
|
|
||||||
|
- title: Pagina 12 Print Edition
|
||||||
|
author: Pablo Marfil
|
||||||
|
|
||||||
|
- version: 0.8.18
|
||||||
|
date: 2011-09-09
|
||||||
|
|
||||||
|
new features:
|
||||||
|
- title: "Kindle news download: On Kindle 3 and newer have the View Articles and Sections menu remember the current article."
|
||||||
|
tickets: [748741]
|
||||||
|
|
||||||
|
- title: "Conversion: Add option to unsmarten puctuation under Look & Feel"
|
||||||
|
|
||||||
|
- title: "Driver of Motorola Ex124G and Pandigital Nova Tablet"
|
||||||
|
|
||||||
|
- title: "Allow downloading metadata from amazon.co.jp. To use it, configure the amazon metadata source to use the Japanese amazon site."
|
||||||
|
tickets: [842447]
|
||||||
|
|
||||||
|
- title: "When automatically generating author sort for author name, ignore common prefixes like Mr. Dr. etc. Controllable via tweak. Also add a tweak to allow control of how a string is split up into multiple authors."
|
||||||
|
tickets: [795984]
|
||||||
|
|
||||||
|
- title: "TXT Output: Preserve as much formatting as possible when generating Markdown output including various CSS styles"
|
||||||
|
|
||||||
|
bug fixes:
|
||||||
|
|
||||||
|
- title: "Fix pubdate incorrect when used in save to disk template in timezones ahead of GMT."
|
||||||
|
tickets: [844445]
|
||||||
|
|
||||||
|
- title: "When attempting to stop multiple device jobs at once, only show a single error message"
|
||||||
|
tickets: [841588]
|
||||||
|
|
||||||
|
- title: "Fix conversion of large EPUB files to PDF erroring out on systems with a limited number of available file handles"
|
||||||
|
tickets: [816616]
|
||||||
|
|
||||||
|
- title: "EPUB catalog generation: Fix some entries going off the left edge of the page for unread/wishlist items"
|
||||||
|
|
||||||
|
- title: "When setting language in an EPUB file always use the 2 letter language code in preference to the three letter code, when possible."
|
||||||
|
tickets: [841201]
|
||||||
|
|
||||||
|
- title: "Content server: Fix --url-prefix not used for links in the book details view."
|
||||||
|
|
||||||
|
- title: "MOBI Input: When links in a MOBI file point to just before block elements, and there is a page break on the block element, the links can end up pointing to the wrong place on conversion. Adjust the location in such cases to point to the block element directly."
|
||||||
|
|
||||||
|
improved recipes:
|
||||||
|
- Kopalnia Wiedzy
|
||||||
|
- FilmWeb.pl
|
||||||
|
- Philadelphia Inquirer
|
||||||
|
- Honolulu Star Advertiser
|
||||||
|
- Counterpunch
|
||||||
|
- Philadelphia Inquirer
|
||||||
|
|
||||||
|
new recipes:
|
||||||
|
- title: Various Polish news sources
|
||||||
|
author: fenuks
|
||||||
|
|
||||||
|
- version: 0.8.17
|
||||||
|
date: 2011-09-02
|
||||||
|
|
||||||
|
new features:
|
||||||
|
- title: "Basic support for Amazon AZW4 format (PDF wrapped inside a MOBI)"
|
||||||
|
|
||||||
|
- title: "When showing the cover browser in a separate window, allow the use of the V, D shortcut keys to view the current book and send it to device respectively."
|
||||||
|
tickets: [836402]
|
||||||
|
|
||||||
|
- title: "Add an option in Preferences->Miscellaneous to abort conversion jobs that take too long."
|
||||||
|
tickets: [835233]
|
||||||
|
|
||||||
|
- title: "Driver for HTC Evo and HP TouchPad (with kindle app)"
|
||||||
|
|
||||||
|
- title: "Preferences->Adding books, detect when the user specifies a test expression with no file extension and popup a warning"
|
||||||
|
|
||||||
|
bug fixes:
|
||||||
|
- title: "E-book viewer: Ensure toolbars are always visible"
|
||||||
|
|
||||||
|
- title: "Content server: Fix grouping of Tags/authors not working for some non english languages with Internet Explorer"
|
||||||
|
tickets: [835238]
|
||||||
|
|
||||||
|
- title: "When downloading metadata from amazon, fix italics inside brackets getting lost."
|
||||||
|
tickets: [836857]
|
||||||
|
|
||||||
|
- title: "Get Books: Add EscapeMagazine.pl and RW2010.pl stores"
|
||||||
|
|
||||||
|
- title: "Conversion pipeline: Fix conversion of cm/mm to pts. Fixes use of cm as a length unit when converting to MOBI."
|
||||||
|
|
||||||
|
- title: "When showing the cover browser in a separate window, focus the cover browser so that keyboard shortcuts work immediately."
|
||||||
|
tickets: [835933]
|
||||||
|
|
||||||
|
- title: "HTMLZ Output: Fix special chars like ampersands, etc. not being converted to entities"
|
||||||
|
|
||||||
|
- title: "Keyboard shortcuts config: Fix clicking done in the shortcut editor with shortcuts set to default caused the displayed shortcut to be always set to None"
|
||||||
|
|
||||||
|
- title: "Fix bottom most entries in keyboard shortcuts not editable"
|
||||||
|
|
||||||
|
improved recipes:
|
||||||
|
- Hacker News
|
||||||
|
- Nikkei News
|
||||||
|
|
||||||
|
new recipes:
|
||||||
|
- title: "Haber 7 and Hira"
|
||||||
|
authors: thomass
|
||||||
|
|
||||||
|
- title: "NTV and NTVSpor by A Erdogan"
|
||||||
|
author: A Erdogan
|
||||||
|
|
||||||
|
|
||||||
- version: 0.8.16
|
- version: 0.8.16
|
||||||
date: 2011-08-26
|
date: 2011-08-26
|
||||||
|
|
||||||
|
38
recipes/adventure_zone_pl.recipe
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Adventure_zone(BasicNewsRecipe):
|
||||||
|
title = u'Adventure Zone'
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = 'Adventure zone - adventure games from A to Z'
|
||||||
|
category = 'games'
|
||||||
|
language = 'pl'
|
||||||
|
oldest_article = 15
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
no_stylesheets = True
|
||||||
|
remove_tags_before= dict(name='td', attrs={'class':'main-bg'})
|
||||||
|
remove_tags_after= dict(name='td', attrs={'class':'main-body middle-border'})
|
||||||
|
extra_css = '.main-bg{text-align: left;} td.capmain{ font-size: 22px; }'
|
||||||
|
feeds = [(u'Nowinki', u'http://www.adventure-zone.info/fusion/feeds/news.php')]
|
||||||
|
|
||||||
|
def get_cover_url(self):
|
||||||
|
soup = self.index_to_soup('http://www.adventure-zone.info/fusion/news.php')
|
||||||
|
cover=soup.find(id='box_OstatninumerAZ')
|
||||||
|
self.cover_url='http://www.adventure-zone.info/fusion/'+ cover.center.a.img['src']
|
||||||
|
return getattr(self, 'cover_url', self.cover_url)
|
||||||
|
|
||||||
|
|
||||||
|
def skip_ad_pages(self, soup):
|
||||||
|
skip_tag = soup.body.findAll(name='a')
|
||||||
|
if skip_tag is not None:
|
||||||
|
for r in skip_tag:
|
||||||
|
if 'articles.php?' in r['href']:
|
||||||
|
if r.strong is not None:
|
||||||
|
word=r.strong.string
|
||||||
|
if ('zapowied' or 'recenzj') in word:
|
||||||
|
return self.index_to_soup('http://www.adventure-zone.info/fusion/print.php?type=A&item_id'+r['href'][r['href'].find('_id')+3:], raw=True)
|
||||||
|
else:
|
||||||
|
None
|
||||||
|
|
||||||
|
def print_version(self, url):
|
||||||
|
return url.replace('news.php?readmore', 'print.php?type=N&item_id')
|
||||||
|
|
18
recipes/astro_news_pl.recipe
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class AstroNEWS(BasicNewsRecipe):
|
||||||
|
title = u'AstroNEWS'
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = 'AstroNEWS- astronomy every day'
|
||||||
|
category = 'astronomy, science'
|
||||||
|
language = 'pl'
|
||||||
|
oldest_article = 8
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
auto_cleanup = True
|
||||||
|
cover_url='http://news.astronet.pl/img/logo_news.jpg'
|
||||||
|
# no_stylesheets= True
|
||||||
|
feeds = [(u'Wiadomości', u'http://news.astronet.pl/rss.cgi')]
|
||||||
|
|
||||||
|
def print_version(self, url):
|
||||||
|
return url.replace('astronet.pl/', 'astronet.pl/print.cgi?')
|
||||||
|
|
15
recipes/astronomia_pl.recipe
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Astronomia_pl(BasicNewsRecipe):
|
||||||
|
title = u'Astronomia.pl'
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = 'Astronomia - polish astronomy site'
|
||||||
|
cover_url = 'http://www.astronomia.pl/grafika/logo.gif'
|
||||||
|
category = 'astronomy, science'
|
||||||
|
language = 'pl'
|
||||||
|
oldest_article = 8
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
#no_stylesheets=True
|
||||||
|
remove_tags_before=dict(name='div', attrs={'id':'a1'})
|
||||||
|
keep_only_tags=[dict(name='div', attrs={'id':['a1', 'h2']})]
|
||||||
|
feeds = [(u'Wiadomości z astronomii i astronautyki', u'http://www.astronomia.pl/rss/')]
|
@ -1,15 +1,52 @@
|
|||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
|
||||||
class Bash_org_pl(BasicNewsRecipe):
|
class Bash_org_pl(BasicNewsRecipe):
|
||||||
title = u'Bash.org.pl'
|
title = u'Bash.org.pl'
|
||||||
__author__ = 'fenuks'
|
__author__ = 'fenuks'
|
||||||
description = 'Bash.org.pl - funny quotations from IRC discussions'
|
description = 'Bash.org.pl - funny quotations from IRC discussions'
|
||||||
category = 'funny quotations, humour'
|
category = 'funny quotations, humour'
|
||||||
language = 'pl'
|
language = 'pl'
|
||||||
oldest_article = 15
|
|
||||||
cover_url = u'http://userlogos.org/files/logos/dzikiosiol/none_0.png'
|
cover_url = u'http://userlogos.org/files/logos/dzikiosiol/none_0.png'
|
||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 50
|
||||||
no_stylesheets= True
|
no_stylesheets= True
|
||||||
keep_only_tags= [dict(name='div', attrs={'class':'quote post-content post-body'})]
|
keep_only_tags= [dict(name='a', attrs={'class':'qid click'}),
|
||||||
feeds = [(u'Cytaty', u'http://bash.org.pl/rss')]
|
dict(name='div', attrs={'class':'quote post-content post-body'})]
|
||||||
|
|
||||||
|
|
||||||
|
def latest_articles(self):
|
||||||
|
articles = []
|
||||||
|
soup=self.index_to_soup(u'http://bash.org.pl/latest/')
|
||||||
|
#date=soup.find('div', attrs={'class':'right'}).string
|
||||||
|
tags=soup.findAll('a', attrs={'class':'qid click'})
|
||||||
|
for a in tags:
|
||||||
|
title=a.string
|
||||||
|
url='http://bash.org.pl' +a['href']
|
||||||
|
articles.append({'title' : title,
|
||||||
|
'url' : url,
|
||||||
|
'date' : '',
|
||||||
|
'description' : ''
|
||||||
|
})
|
||||||
|
return articles
|
||||||
|
|
||||||
|
|
||||||
|
def random_articles(self):
|
||||||
|
articles = []
|
||||||
|
for i in range(self.max_articles_per_feed):
|
||||||
|
soup=self.index_to_soup(u'http://bash.org.pl/random/')
|
||||||
|
#date=soup.find('div', attrs={'class':'right'}).string
|
||||||
|
url=soup.find('a', attrs={'class':'qid click'})
|
||||||
|
title=url.string
|
||||||
|
url='http://bash.org.pl' +url['href']
|
||||||
|
articles.append({'title' : title,
|
||||||
|
'url' : url,
|
||||||
|
'date' : '',
|
||||||
|
'description' : ''
|
||||||
|
})
|
||||||
|
return articles
|
||||||
|
|
||||||
|
|
||||||
|
def parse_index(self):
|
||||||
|
feeds = []
|
||||||
|
feeds.append((u"Najnowsze", self.latest_articles()))
|
||||||
|
feeds.append((u"Losowe", self.random_articles()))
|
||||||
|
return feeds
|
70
recipes/benchmark_pl.recipe
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
import re
|
||||||
|
class Benchmark_pl(BasicNewsRecipe):
|
||||||
|
title = u'Benchmark.pl'
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = u'benchmark.pl -IT site'
|
||||||
|
cover_url = 'http://www.ieaddons.pl/benchmark/logo_benchmark_new.gif'
|
||||||
|
category = 'IT'
|
||||||
|
language = 'pl'
|
||||||
|
oldest_article = 8
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
no_stylesheets=True
|
||||||
|
preprocess_regexps = [(re.compile(ur'\bWięcej o .*</body>', re.DOTALL|re.IGNORECASE), lambda match: '</body>')]
|
||||||
|
keep_only_tags=[dict(name='div', attrs={'class':['m_zwykly', 'gallery']})]
|
||||||
|
remove_tags_after=dict(name='div', attrs={'class':'body'})
|
||||||
|
remove_tags=[dict(name='div', attrs={'class':['kategoria', 'socialize', 'thumb', 'panelOcenaObserwowane', 'categoryNextToSocializeGallery']})]
|
||||||
|
INDEX= 'http://www.benchmark.pl'
|
||||||
|
feeds = [(u'Aktualności', u'http://www.benchmark.pl/rss/aktualnosci-pliki.xml'),
|
||||||
|
(u'Testy i recenzje', u'http://www.benchmark.pl/rss/testy-recenzje-minirecenzje.xml')]
|
||||||
|
|
||||||
|
|
||||||
|
def append_page(self, soup, appendtag):
|
||||||
|
nexturl = soup.find('span', attrs={'class':'next'})
|
||||||
|
while nexturl is not None:
|
||||||
|
nexturl= self.INDEX + nexturl.parent['href']
|
||||||
|
soup2 = self.index_to_soup(nexturl)
|
||||||
|
nexturl=soup2.find('span', attrs={'class':'next'})
|
||||||
|
pagetext = soup2.find(name='div', attrs={'class':'body'})
|
||||||
|
appendtag.find('div', attrs={'class':'k_ster'}).extract()
|
||||||
|
pos = len(appendtag.contents)
|
||||||
|
appendtag.insert(pos, pagetext)
|
||||||
|
if appendtag.find('div', attrs={'class':'k_ster'}) is not None:
|
||||||
|
appendtag.find('div', attrs={'class':'k_ster'}).extract()
|
||||||
|
|
||||||
|
|
||||||
|
def image_article(self, soup, appendtag):
|
||||||
|
nexturl=soup.find('div', attrs={'class':'preview'})
|
||||||
|
if nexturl is not None:
|
||||||
|
nexturl=nexturl.find('a', attrs={'class':'move_next'})
|
||||||
|
image=appendtag.find('div', attrs={'class':'preview'}).div['style'][16:]
|
||||||
|
image=self.INDEX + image[:image.find("')")]
|
||||||
|
appendtag.find(attrs={'class':'preview'}).name='img'
|
||||||
|
appendtag.find(attrs={'class':'preview'})['src']=image
|
||||||
|
appendtag.find('a', attrs={'class':'move_next'}).extract()
|
||||||
|
while nexturl is not None:
|
||||||
|
nexturl= self.INDEX + nexturl['href']
|
||||||
|
soup2 = self.index_to_soup(nexturl)
|
||||||
|
nexturl=soup2.find('a', attrs={'class':'move_next'})
|
||||||
|
image=soup2.find('div', attrs={'class':'preview'}).div['style'][16:]
|
||||||
|
image=self.INDEX + image[:image.find("')")]
|
||||||
|
soup2.find(attrs={'class':'preview'}).name='img'
|
||||||
|
soup2.find(attrs={'class':'preview'})['src']=image
|
||||||
|
pagetext=soup2.find('div', attrs={'class':'gallery'})
|
||||||
|
pagetext.find('div', attrs={'class':'title'}).extract()
|
||||||
|
pagetext.find('div', attrs={'class':'thumb'}).extract()
|
||||||
|
pagetext.find('div', attrs={'class':'panelOcenaObserwowane'}).extract()
|
||||||
|
if nexturl is not None:
|
||||||
|
pagetext.find('a', attrs={'class':'move_next'}).extract()
|
||||||
|
pagetext.find('a', attrs={'class':'move_back'}).extract()
|
||||||
|
pos = len(appendtag.contents)
|
||||||
|
appendtag.insert(pos, pagetext)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
if soup.find('div', attrs={'class':'preview'}) is not None:
|
||||||
|
self.image_article(soup, soup.body)
|
||||||
|
else:
|
||||||
|
self.append_page(soup, soup.body)
|
||||||
|
return soup
|
61
recipes/berliner_zeitung.recipe
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
from calibre.web.feeds.recipes import BasicNewsRecipe
|
||||||
|
import re
|
||||||
|
|
||||||
|
class SportsIllustratedRecipe(BasicNewsRecipe) :
|
||||||
|
__author__ = 'ape'
|
||||||
|
__copyright__ = 'ape'
|
||||||
|
__license__ = 'GPL v3'
|
||||||
|
language = 'de'
|
||||||
|
description = 'Berliner Zeitung'
|
||||||
|
version = 2
|
||||||
|
title = u'Berliner Zeitung'
|
||||||
|
timefmt = ' [%d.%m.%Y]'
|
||||||
|
|
||||||
|
no_stylesheets = True
|
||||||
|
remove_javascript = True
|
||||||
|
use_embedded_content = False
|
||||||
|
publication_type = 'newspaper'
|
||||||
|
|
||||||
|
keep_only_tags = [dict(name='div', attrs={'class':'teaser t_split t_artikel'})]
|
||||||
|
|
||||||
|
INDEX = 'http://www.berlinonline.de/berliner-zeitung/'
|
||||||
|
|
||||||
|
def parse_index(self):
|
||||||
|
base = 'http://www.berlinonline.de'
|
||||||
|
answer = []
|
||||||
|
articles = {}
|
||||||
|
more = 1
|
||||||
|
|
||||||
|
soup = self.index_to_soup(self.INDEX)
|
||||||
|
|
||||||
|
# Get list of links to ressorts from index page
|
||||||
|
ressort_list = soup.findAll('ul', attrs={'class': re.compile('ressortlist')})
|
||||||
|
for ressort in ressort_list[0].findAll('a'):
|
||||||
|
feed_title = ressort.string
|
||||||
|
print 'Analyzing', feed_title
|
||||||
|
if not articles.has_key(feed_title):
|
||||||
|
articles[feed_title] = []
|
||||||
|
answer.append(feed_title)
|
||||||
|
# Load ressort page.
|
||||||
|
feed = self.index_to_soup('http://www.berlinonline.de' + ressort['href'])
|
||||||
|
# find mainbar div which contains the list of all articles
|
||||||
|
for article_container in feed.findAll('div', attrs={'class': re.compile('mainbar')}):
|
||||||
|
# iterate over all articles
|
||||||
|
for article_teaser in article_container.findAll('div', attrs={'class': re.compile('teaser')}):
|
||||||
|
# extract title of article
|
||||||
|
if article_teaser.h3 != None:
|
||||||
|
article = {'title' : article_teaser.h3.a.string, 'date' : u'', 'url' : base + article_teaser.h3.a['href'], 'description' : u''}
|
||||||
|
articles[feed_title].append(article)
|
||||||
|
else:
|
||||||
|
# Skip teasers for missing photos
|
||||||
|
if article_teaser.div.p.contents[0].find('Foto:') > -1:
|
||||||
|
continue
|
||||||
|
article = {'title': 'Weitere Artikel ' + str(more), 'date': u'', 'url': base + article_teaser.div.p.a['href'], 'description': u''}
|
||||||
|
articles[feed_title].append(article)
|
||||||
|
more += 1
|
||||||
|
answer = [[key, articles[key]] for key in answer if articles.has_key(key)]
|
||||||
|
return answer
|
||||||
|
|
||||||
|
def get_masthead_url(self):
|
||||||
|
return 'http://www.berlinonline.de/.img/berliner-zeitung/blz_logo.gif'
|
||||||
|
|
@ -1,93 +1,105 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
|
__copyright__ = '2008 Kovid Goyal kovid@kovidgoyal.net, 2010 Darko Miletic <darko.miletic at gmail.com>'
|
||||||
__docformat__ = 'restructuredtext en'
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
businessweek.com
|
www.businessweek.com
|
||||||
'''
|
'''
|
||||||
|
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class BusinessWeek(BasicNewsRecipe):
|
class BusinessWeek(BasicNewsRecipe):
|
||||||
title = 'Business Week'
|
title = 'Business Week'
|
||||||
description = 'Business News, Stock Market and Financial Advice'
|
__author__ = 'Kovid Goyal and Darko Miletic'
|
||||||
__author__ = 'ChuckEggDotCom and Sujata Raman'
|
description = 'Read the latest international business news & stock market news. Get updated company profiles, financial advice, global economy and technology news.'
|
||||||
language = 'en'
|
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
|
conversion_options = {
|
||||||
max_articles_per_feed = 10
|
'comment' : description
|
||||||
no_stylesheets = True
|
, 'tags' : category
|
||||||
|
, 'publisher' : publisher
|
||||||
|
, 'language' : language
|
||||||
|
}
|
||||||
|
|
||||||
recursions = 1
|
remove_tags = [
|
||||||
match_regexps = [r'http://www.businessweek.com/.*_page_[1-9].*']
|
dict(attrs={'class':'inStory'})
|
||||||
extra_css = '''
|
,dict(name=['meta','link','iframe','base','embed','object','table','th','tr','td'])
|
||||||
h1{font-family :Arial,Helvetica,sans-serif; font-size:large;}
|
,dict(attrs={'id':['inset','videoDisplay']})
|
||||||
.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;}
|
keep_only_tags = [dict(name='div', attrs={'id':['story-body','storyBody','article_body','articleBody']})]
|
||||||
h3{text-transform:uppercase;font-family :Arial,Helvetica,sans-serif; font-size:large;font-weight:bold;}
|
remove_attributes = ['lang']
|
||||||
h4{font-family :Arial,Helvetica,sans-serif; font-size:small;font-weight:bold;}
|
match_regexps = [r'http://www.businessweek.com/.*_page_[1-9].*']
|
||||||
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"),
|
|
||||||
]
|
|
||||||
|
|
||||||
feeds = [
|
|
||||||
(u'Top Stories', u'http://www.businessweek.com/topStories/rss/topStories.rss'),
|
feeds = [
|
||||||
(u'Top News', u'http://www.businessweek.com/rss/bwdaily.rss'),
|
(u'Top Stories', u'http://www.businessweek.com/topStories/rss/topStories.rss'),
|
||||||
(u'Asia', u'http://www.businessweek.com/rss/asia.rss'),
|
(u'Top News' , u'http://www.businessweek.com/rss/bwdaily.rss' ),
|
||||||
(u'Autos', u'http://www.businessweek.com/rss/autos/index.rss'),
|
(u'Asia', u'http://www.businessweek.com/rss/asia.rss'),
|
||||||
(u'Classic Cars', u'http://rss.businessweek.com/bw_rss/classiccars'),
|
(u'Autos', u'http://www.businessweek.com/rss/autos/index.rss'),
|
||||||
(u'Hybrids', u'http://rss.businessweek.com/bw_rss/hybrids'),
|
(u'Classic Cars', u'http://rss.businessweek.com/bw_rss/classiccars'),
|
||||||
(u'Europe', u'http://www.businessweek.com/rss/europe.rss'),
|
(u'Hybrids', u'http://rss.businessweek.com/bw_rss/hybrids'),
|
||||||
(u'Auto Reviews', u'http://rss.businessweek.com/bw_rss/autoreviews'),
|
(u'Europe', u'http://www.businessweek.com/rss/europe.rss'),
|
||||||
(u'Innovation & Design', u'http://www.businessweek.com/rss/innovate.rss'),
|
(u'Auto Reviews', u'http://rss.businessweek.com/bw_rss/autoreviews'),
|
||||||
(u'Architecture', u'http://www.businessweek.com/rss/architecture.rss'),
|
(u'Innovation & Design', u'http://www.businessweek.com/rss/innovate.rss'),
|
||||||
(u'Brand Equity', u'http://www.businessweek.com/rss/brandequity.rss'),
|
(u'Architecture', u'http://www.businessweek.com/rss/architecture.rss'),
|
||||||
(u'Auto Design', u'http://www.businessweek.com/rss/carbuff.rss'),
|
(u'Brand Equity', u'http://www.businessweek.com/rss/brandequity.rss'),
|
||||||
(u'Game Room', u'http://rss.businessweek.com/bw_rss/gameroom'),
|
(u'Auto Design', u'http://www.businessweek.com/rss/carbuff.rss'),
|
||||||
(u'Technology', u'http://www.businessweek.com/rss/technology.rss'),
|
(u'Game Room', u'http://rss.businessweek.com/bw_rss/gameroom'),
|
||||||
(u'Investing', u'http://rss.businessweek.com/bw_rss/investor'),
|
(u'Technology', u'http://www.businessweek.com/rss/technology.rss'),
|
||||||
(u'Small Business', u'http://www.businessweek.com/rss/smallbiz.rss'),
|
(u'Investing', u'http://rss.businessweek.com/bw_rss/investor'),
|
||||||
(u'Careers', u'http://rss.businessweek.com/bw_rss/careers'),
|
(u'Small Business', u'http://www.businessweek.com/rss/smallbiz.rss'),
|
||||||
(u'B-Schools', u'http://www.businessweek.com/rss/bschools.rss'),
|
(u'Careers', u'http://rss.businessweek.com/bw_rss/careers'),
|
||||||
(u'Magazine Selections', u'http://www.businessweek.com/rss/magazine.rss'),
|
(u'B-Schools', u'http://www.businessweek.com/rss/bschools.rss'),
|
||||||
(u'CEO Guide to Tech', u'http://www.businessweek.com/rss/ceo_guide_tech.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):
|
def get_article_url(self, article):
|
||||||
|
|
||||||
url = article.get('guid', None)
|
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:
|
def print_version(self, url):
|
||||||
url = None
|
if '/news/' in url or '/blog/' in url:
|
||||||
|
return url
|
||||||
return url
|
if '/magazine' in url:
|
||||||
|
rurl = url.replace('http://www.businessweek.com/','http://www.businessweek.com/printer/')
|
||||||
def postprocess_html(self, soup, first):
|
else:
|
||||||
|
rurl = url.replace('http://www.businessweek.com/','http://www.businessweek.com/print/')
|
||||||
for tag in soup.findAll(name=['ul','li','table','td','tr','span']):
|
return rurl.replace('/investing/','/investor/')
|
||||||
tag.name = 'div'
|
|
||||||
for tag in soup.findAll(name= 'div',attrs={ 'id':'pageNav'}):
|
|
||||||
tag.extract()
|
|
||||||
return soup
|
|
||||||
|
|
||||||
|
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
|
||||||
|
@ -4,95 +4,73 @@ __copyright__ = '2009-2010, Darko Miletic <darko.miletic at gmail.com>'
|
|||||||
www.businessworld.in
|
www.businessworld.in
|
||||||
'''
|
'''
|
||||||
|
|
||||||
from calibre import strftime
|
import re
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class BusinessWorldMagazine(BasicNewsRecipe):
|
class BusinessWorldMagazine(BasicNewsRecipe):
|
||||||
title = 'Business World Magazine'
|
title = 'Business World Magazine'
|
||||||
__author__ = 'Darko Miletic'
|
__author__ = 'Kovid Goyal'
|
||||||
description = 'News from India'
|
description = 'News from India'
|
||||||
publisher = 'ABP Pvt Ltd Publication'
|
publisher = 'ABP Pvt Ltd Publication'
|
||||||
category = 'news, politics, finances, India, Asia'
|
category = 'news, politics, finances, India, Asia'
|
||||||
delay = 1
|
delay = 1
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
INDEX = 'http://www.businessworld.in/bw/Magazine_Current_Issue'
|
INDEX = 'http://www.businessworld.in/businessworld/magazine_latest_issue.php'
|
||||||
ROOT = 'http://www.businessworld.in'
|
ROOT = 'http://www.businessworld.in'
|
||||||
use_embedded_content = False
|
|
||||||
encoding = 'utf-8'
|
encoding = 'utf-8'
|
||||||
language = 'en_IN'
|
language = 'en_IN'
|
||||||
extra_css = """
|
auto_cleanup = True
|
||||||
img{display: block; margin-bottom: 0.5em}
|
|
||||||
body{font-family: Arial,Helvetica,sans-serif}
|
|
||||||
h2{color: gray; display: block}
|
|
||||||
"""
|
|
||||||
|
|
||||||
conversion_options = {
|
|
||||||
'comment' : description
|
|
||||||
, 'tags' : category
|
|
||||||
, 'publisher' : publisher
|
|
||||||
, 'language' : language
|
|
||||||
}
|
|
||||||
|
|
||||||
def is_in_list(self,linklist,url):
|
|
||||||
for litem in linklist:
|
|
||||||
if litem == url:
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def parse_index(self):
|
def parse_index(self):
|
||||||
|
br = self.browser
|
||||||
|
br.open(self.ROOT)
|
||||||
|
raw = br.open(br.click_link(text_regex=re.compile('Current.*Issue',
|
||||||
|
re.I))).read()
|
||||||
|
soup = self.index_to_soup(raw)
|
||||||
|
mc = soup.find(attrs={'class':'mag_cover'})
|
||||||
|
if mc is not None:
|
||||||
|
img = mc.find('img', src=True)
|
||||||
|
if img is not None:
|
||||||
|
self.cover_url = img['src']
|
||||||
|
|
||||||
|
feeds = []
|
||||||
|
current_section = None
|
||||||
articles = []
|
articles = []
|
||||||
linklist = []
|
for tag in soup.findAll(['h3', 'h2']):
|
||||||
soup = self.index_to_soup(self.INDEX)
|
inner_a = tag.find('a')
|
||||||
|
if tag.name == 'h3' and inner_a is not None:
|
||||||
tough = soup.find('div', attrs={'id':'tough'})
|
continue
|
||||||
if tough:
|
if tag.name == 'h2' and (inner_a is None or current_section is
|
||||||
for item in tough.findAll('h1'):
|
None):
|
||||||
description = ''
|
continue
|
||||||
title_prefix = ''
|
|
||||||
feed_link = item.find('a')
|
if tag.name == 'h3':
|
||||||
if feed_link and feed_link.has_key('href'):
|
if current_section is not None and articles:
|
||||||
url = self.ROOT + feed_link['href']
|
feeds.append((current_section, articles))
|
||||||
if not self.is_in_list(linklist,url):
|
current_section = self.tag_to_string(tag)
|
||||||
title = title_prefix + self.tag_to_string(feed_link)
|
self.log('Found section:', current_section)
|
||||||
date = strftime(self.timefmt)
|
articles = []
|
||||||
articles.append({
|
elif tag.name == 'h2':
|
||||||
'title' :title
|
url = inner_a.get('href', None)
|
||||||
,'date' :date
|
if url is None: continue
|
||||||
,'url' :url
|
if url.startswith('/'): url = self.ROOT + url
|
||||||
,'description':description
|
title = self.tag_to_string(inner_a)
|
||||||
})
|
h1 = tag.findPreviousSibling('h1')
|
||||||
linklist.append(url)
|
if h1 is not None:
|
||||||
|
title = self.tag_to_string(h1) + title
|
||||||
for item in soup.findAll('div', attrs={'class':'nametitle'}):
|
self.log('\tFound article:', title)
|
||||||
description = ''
|
articles.append({'title':title, 'url':url, 'date':'',
|
||||||
title_prefix = ''
|
'description':''})
|
||||||
feed_link = item.find('a')
|
|
||||||
if feed_link and feed_link.has_key('href'):
|
if current_section and articles:
|
||||||
url = self.ROOT + feed_link['href']
|
feeds.append((current_section, articles))
|
||||||
if not self.is_in_list(linklist,url):
|
|
||||||
title = title_prefix + self.tag_to_string(feed_link)
|
return feeds
|
||||||
date = strftime(self.timefmt)
|
|
||||||
articles.append({
|
|
||||||
'title' :title
|
|
||||||
,'date' :date
|
|
||||||
,'url' :url
|
|
||||||
,'description':description
|
|
||||||
})
|
|
||||||
linklist.append(url)
|
|
||||||
return [(soup.head.title.string, articles)]
|
|
||||||
|
|
||||||
|
|
||||||
keep_only_tags = [dict(name='div', attrs={'id':'printwrapper'})]
|
|
||||||
remove_tags = [dict(name=['object','link','meta','base','iframe','link','table'])]
|
|
||||||
|
|
||||||
def print_version(self, url):
|
|
||||||
return url.replace('/bw/','/bw/storyContent/')
|
|
||||||
|
|
||||||
def get_cover_url(self):
|
|
||||||
cover_url = None
|
|
||||||
soup = self.index_to_soup(self.INDEX)
|
|
||||||
cover_item = soup.find('img',attrs={'class':'toughbor'})
|
|
||||||
if cover_item:
|
|
||||||
cover_url = self.ROOT + cover_item['src']
|
|
||||||
return cover_url
|
|
||||||
|
40
recipes/cgm_pl.recipe
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class CGM(BasicNewsRecipe):
|
||||||
|
title = u'CGM'
|
||||||
|
oldest_article = 7
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = u'Codzienna Gazeta Muzyczna'
|
||||||
|
cover_url = 'http://www.krafcy.com/foto/tinymce/Image/cgm%281%29.jpg'
|
||||||
|
category = 'music'
|
||||||
|
language = 'pl'
|
||||||
|
use_embedded_content = False
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
no_stylesheers=True
|
||||||
|
extra_css = 'div {color:black;} strong {color:black;} span {color:black;} p {color:black;}'
|
||||||
|
remove_tags_before=dict(id='mainContent')
|
||||||
|
remove_tags_after=dict(name='div', attrs={'class':'fbContainer'})
|
||||||
|
remove_tags=[dict(name='div', attrs={'class':'fbContainer'}),
|
||||||
|
dict(name='p', attrs={'class':['tagCloud', 'galleryAuthor']}),
|
||||||
|
dict(id=['movieShare', 'container'])]
|
||||||
|
feeds = [(u'Informacje', u'http://www.cgm.pl/rss.xml'), (u'Polecamy', u'http://www.cgm.pl/rss,4,news.xml'),
|
||||||
|
(u'Recenzje', u'http://www.cgm.pl/rss,1,news.xml')]
|
||||||
|
|
||||||
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
ad=soup.findAll('img')
|
||||||
|
for r in ad:
|
||||||
|
if '/_vault/_article_photos/5841.jpg' in r['src'] or '_vault/_article_photos/5807.jpg' in r['src'] or 'article_photos/5841.jpg' in r['src'] or 'article_photos/5825.jpg' in r['src'] or '_article_photos/5920.jpg' in r['src'] or '_article_photos/5919.jpg' in r['src'] or '_article_photos/5918.jpg' in r['src'] or '_article_photos/5914.jpg' in r['src'] or '_article_photos/5911.jpg' in r['src'] or '_article_photos/5923.jpg' in r['src'] or '_article_photos/5921.jpg' in r['src']:
|
||||||
|
ad[ad.index(r)].extract()
|
||||||
|
gallery=soup.find('div', attrs={'class':'galleryFlash'})
|
||||||
|
if gallery:
|
||||||
|
img=gallery.find('embed')
|
||||||
|
if img:
|
||||||
|
img=img['src'][35:]
|
||||||
|
img='http://www.cgm.pl/_vault/_gallery/_photo/'+img
|
||||||
|
param=gallery.findAll(name='param')
|
||||||
|
for i in param:
|
||||||
|
i.extract()
|
||||||
|
gallery.contents[1].name='img'
|
||||||
|
gallery.contents[1]['src']=img
|
||||||
|
return soup
|
29
recipes/china_post.recipe
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class CP(BasicNewsRecipe):
|
||||||
|
title = u'China Post'
|
||||||
|
language = 'en_CN'
|
||||||
|
__author__ = 'Krittika Goyal'
|
||||||
|
oldest_article = 1 #days
|
||||||
|
max_articles_per_feed = 25
|
||||||
|
use_embedded_content = False
|
||||||
|
|
||||||
|
no_stylesheets = True
|
||||||
|
auto_cleanup = True
|
||||||
|
|
||||||
|
feeds = [
|
||||||
|
('Top Stories',
|
||||||
|
'http://www.chinapost.com.tw/rss/front.xml'),
|
||||||
|
('Taiwan',
|
||||||
|
'http://www.chinapost.com.tw/rss/taiwan.xml'),
|
||||||
|
('China',
|
||||||
|
'http://www.chinapost.com.tw/rss/china.xml'),
|
||||||
|
('Business',
|
||||||
|
'http://www.chinapost.com.tw/rss/business.xml'),
|
||||||
|
('World',
|
||||||
|
'http://www.chinapost.com.tw/rss/international.xml'),
|
||||||
|
('Sports',
|
||||||
|
'http://www.chinapost.com.tw/rss/sports.xml'),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
@ -1,35 +1,47 @@
|
|||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class Cicero(BasicNewsRecipe):
|
class BasicUserRecipe1316245412(BasicNewsRecipe):
|
||||||
timefmt = ' [%Y-%m-%d]'
|
title = u'Cicero Online'
|
||||||
title = u'Cicero'
|
description = u'Magazin f\xfcr politische Kultur'
|
||||||
__author__ = 'mad@sharktooth.de'
|
publisher = 'Ringier Publishing GmbH'
|
||||||
description = u'Magazin f\xfcr politische Kultur'
|
category = 'news, politics, Germany'
|
||||||
|
language = 'de'
|
||||||
|
encoding = 'UTF-8'
|
||||||
|
__author__ = 'Armin Geller' # Upd. 2011-09-19
|
||||||
|
|
||||||
oldest_article = 7
|
oldest_article = 7
|
||||||
language = 'de'
|
|
||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
use_embedded_content = False
|
auto_cleanup = False
|
||||||
publisher = 'Ringier Publishing'
|
|
||||||
category = 'news, politics, Germany'
|
# remove_javascript = True
|
||||||
encoding = 'iso-8859-1'
|
|
||||||
publication_type = 'magazine'
|
remove_tags = [
|
||||||
masthead_url = 'http://www.cicero.de/img2/cicero_logo_rss.gif'
|
dict(name='div', attrs={'id':["header", "navigation", "skip-link", "header-print", "header-print-url", "meta-toolbar", "footer"]}),
|
||||||
feeds = [
|
dict(name='div', attrs={'class':["region region-sidebar-first column sidebar", "breadcrumb", "breadcrumb-title", "meta", "comment-wrapper",
|
||||||
(u'Das gesamte Portfolio', u'http://www.cicero.de/rss/rss.php?ress_id='),
|
"field field-name-field-show-teaser-right field-type-list-boolean field-label-above"]}),
|
||||||
#(u'Alle Heft-Inhalte', u'http://www.cicero.de/rss/rss.php?ress_id=heft'),
|
dict(name='div', attrs={'title':["Dossier Auswahl"]}),
|
||||||
#(u'Alle Online-Inhalte', u'http://www.cicero.de/rss/rss.php?ress_id=online'),
|
dict(name='h2', attrs={'class':["title comment-form"]}),
|
||||||
#(u'Berliner Republik', u'http://www.cicero.de/rss/rss.php?ress_id=4'),
|
dict(name='form', attrs={'class':["comment-form user-info-from-cookie"]}),
|
||||||
#(u'Weltb\xfchne', u'http://www.cicero.de/rss/rss.php?ress_id=1'),
|
# 2011-09-19 clean-up on first feed historical caricature- and video preview pictures and social icons
|
||||||
#(u'Salon', u'http://www.cicero.de/rss/rss.php?ress_id=7'),
|
dict(name='table', attrs={'class':["mcx-social-horizontal", "page-header"]}), # 2011-09-19
|
||||||
#(u'Kapital', u'http://www.cicero.de/rss/rss.php?ress_id=6'),
|
dict(name='div', attrs={'class':["page-header", "view view-alle-karikaturen view-id-alle_karikaturen view-display-id-default view-dom-id-1",
|
||||||
#(u'Netzst\xfccke', u'http://www.cicero.de/rss/rss.php?ress_id=9'),
|
"pagination",
|
||||||
#(u'Leinwand', u'http://www.cicero.de/rss/rss.php?ress_id=12'),
|
"view view-letzte-videos view-id-letzte_videos view-display-id-default view-dom-id-1"]}), # 2011-09-19
|
||||||
#(u'Bibliothek', u'http://www.cicero.de/rss/rss.php?ress_id=15'),
|
]
|
||||||
(u'Kolumne - Alle Kolulmnen', u'http://www.cicero.de/rss/rss2.php?ress_id='),
|
|
||||||
#(u'Kolumne - Schreiber, Berlin', u'http://www.cicero.de/rss/rss2.php?ress_id=35'),
|
feeds = [
|
||||||
#(u'Kolumne - TV Kritik', u'http://www.cicero.de/rss/rss2.php?ress_id=34')
|
(u'Das gesamte Portfolio', u'http://www.cicero.de/rss.xml'),
|
||||||
]
|
(u'Berliner Republik', u'http://www.cicero.de/berliner-republik.xml'),
|
||||||
|
(u'Weltb\xfchne', u'http://www.cicero.de/weltbuehne.xml'),
|
||||||
|
(u'Kapital', u'http://www.cicero.de/kapital.xml'),
|
||||||
|
(u'Salon', u'http://www.cicero.de/salon.xml'),
|
||||||
|
(u'Blogs', u'http://www.cicero.de/blogs.xml'), #seems not to be in use at the moment
|
||||||
|
]
|
||||||
|
|
||||||
def print_version(self, url):
|
def print_version(self, url):
|
||||||
return 'http://www.cicero.de/page_print.php?' + url.rpartition('?')[2]
|
return url + '?print'
|
||||||
|
|
||||||
|
# def get_cover_url(self):
|
||||||
|
# return 'http://www.cicero.de/sites/all/themes/cicero/logo.png' # need to find a good logo on their home page!
|
||||||
|
|
||||||
|
128
recipes/cio_magazine.recipe
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
# Los primeros comentarios son las dificultades que he tenido con el Piton
|
||||||
|
# Cuando da error UTF8 revisa los comentarios (acentos). En notepad++ Search, Goto, posicion y lo ves.
|
||||||
|
# Editar con Notepad++ Si pone - donde no debe es que ha indentado mal... Edit - Blank operations - tab to space
|
||||||
|
# He entendido lo que significa el from... son paths dentro de pylib.zip...
|
||||||
|
# Con from importa solo un simbolo...con import,la libreria completa
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
# sys no hace falta... lo intente usar para escribir en stderr
|
||||||
|
from calibre import strftime
|
||||||
|
# Para convertir el tiempo del articulo
|
||||||
|
import string, re
|
||||||
|
# Para usar expresiones regulares
|
||||||
|
# Visto en pylib.zip... la primera letra es mayuscula
|
||||||
|
# Estas dos ultimas han sido un vago intento de establecer una cookie (no usado)
|
||||||
|
|
||||||
|
class CIO_Magazine(BasicNewsRecipe):
|
||||||
|
title = 'CIO Magazine'
|
||||||
|
oldest_article = 14
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
auto_cleanup = True
|
||||||
|
__author__ = 'Julio Map'
|
||||||
|
description = 'CIO is the leading information brand for today-s busy Chief information Officer - CIO Magazine bi-monthly '
|
||||||
|
language = 'en'
|
||||||
|
encoding = 'utf8'
|
||||||
|
cover_url = 'http://www.cio.com/homepage/images/hp-cio-logo-linkedin.png'
|
||||||
|
|
||||||
|
remove_tags_before = dict(name='div', attrs={'id':'container'})
|
||||||
|
# Absolutamente innecesario... al final he visto un print_version (ver mas adelante)
|
||||||
|
|
||||||
|
# Dentro de una revista dada...
|
||||||
|
# issue_details contiene el titulo y las secciones de este ejemplar
|
||||||
|
# DetailModule esta dentro de issue_details contiene las urls y resumenes
|
||||||
|
# Dentro de un articulo dado...
|
||||||
|
# Article-default-body contiene el texto. Pero como digo, he encontrado una print_version
|
||||||
|
|
||||||
|
no_stylesheets = True
|
||||||
|
remove_javascript = True
|
||||||
|
|
||||||
|
def print_version(self,url):
|
||||||
|
# A esta funcion le llama el sistema... no hay que llamarla uno mismo (porque seria llamada dos veces)
|
||||||
|
# Existe una version imprimible de los articulos cambiando
|
||||||
|
# http://www.cio.com/article/<num>/<titulo> por
|
||||||
|
# http://www.cio.com/article/print/<num> que contiene todas las paginas dentro del div id=container
|
||||||
|
if url.startswith('/'):
|
||||||
|
url = 'http://www.cio.com'+url
|
||||||
|
segments = url.split('/')
|
||||||
|
printURL = '/'.join(segments[0:4]) + '/print/' + segments[4] +'#'
|
||||||
|
return printURL
|
||||||
|
|
||||||
|
|
||||||
|
def parse_index(self):
|
||||||
|
###########################################################################
|
||||||
|
# This method should be implemented in recipes that parse a website
|
||||||
|
# instead of feeds to generate a list of articles. Typical uses are for
|
||||||
|
# news sources that have a Print Edition webpage that lists all the
|
||||||
|
# articles in the current print edition. If this function is implemented,
|
||||||
|
# it will be used in preference to BasicNewsRecipe.parse_feeds().
|
||||||
|
#
|
||||||
|
# It must return a list. Each element of the list must be a 2-element
|
||||||
|
# tuple of the form ('feed title', list of articles).
|
||||||
|
#
|
||||||
|
# Each list of articles must contain dictionaries of the form:
|
||||||
|
#
|
||||||
|
# {
|
||||||
|
# 'title' : article title,
|
||||||
|
# 'url' : URL of print version,
|
||||||
|
# 'date' : The publication date of the article as a string,
|
||||||
|
# 'description' : A summary of the article
|
||||||
|
# 'content' : The full article (can be an empty string). This is used by FullContentProfile
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# For an example, see the recipe for downloading The Atlantic.
|
||||||
|
# In addition, you can add 'author' for the author of the article.
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
# Primero buscamos cual es la ultima revista que se ha creado
|
||||||
|
soupinicial = self.index_to_soup('http://www.cio.com/magazine')
|
||||||
|
# Es el primer enlace que hay en el DIV con class content_body
|
||||||
|
a= soupinicial.find(True, attrs={'class':'content_body'}).find('a', href=True)
|
||||||
|
INDEX = re.sub(r'\?.*', '', a['href'])
|
||||||
|
# Como cio.com usa enlaces relativos, le anteponemos el domain name.
|
||||||
|
if INDEX.startswith('/'): # protegiendonos de que dejen de usarlos
|
||||||
|
INDEX = 'http://www.cio.com'+INDEX
|
||||||
|
# Y nos aseguramos en los logs que lo estamos haciendo bien
|
||||||
|
print ("INDEX en parse_index: ", INDEX)
|
||||||
|
|
||||||
|
# Ya sabemos cual es la revista... procesemosla.
|
||||||
|
soup = self.index_to_soup(INDEX)
|
||||||
|
|
||||||
|
articles = {}
|
||||||
|
key = None
|
||||||
|
feeds = []
|
||||||
|
# Para empezar nos quedamos solo con dos DIV, 'heading' y ' issue_item'
|
||||||
|
# Del primero sacamos las categorias (key) y del segundo las urls y resumenes
|
||||||
|
for div in soup.findAll(True,
|
||||||
|
attrs={'class':['heading', 'issue_item']}):
|
||||||
|
|
||||||
|
if div['class'] == 'heading':
|
||||||
|
key = string.capwords(self.tag_to_string(div.span))
|
||||||
|
print ("Key: ",key) # Esto es para depurar
|
||||||
|
articles[key] = []
|
||||||
|
feeds.append(key)
|
||||||
|
|
||||||
|
elif div['class'] == 'issue_item':
|
||||||
|
a = div.find('a', href=True)
|
||||||
|
if not a:
|
||||||
|
continue
|
||||||
|
url = re.sub(r'\?.*', '', a['href'])
|
||||||
|
print("url: ",url) # Esto es para depurar
|
||||||
|
title = self.tag_to_string(a, use_alt=True).strip() # Ya para nota, quitar al final las dos ultimas palabras
|
||||||
|
pubdate = strftime('%a, %d %b') # No es la fecha de publicacion sino la de colecta
|
||||||
|
summary = div.find('p') # Dentro de la div 'issue_item' el unico parrafo que hay es el resumen
|
||||||
|
description = '' # Si hay summary la description sera el summary... si no, la dejamos en blanco
|
||||||
|
|
||||||
|
if summary:
|
||||||
|
description = self.tag_to_string(summary, use_alt=False)
|
||||||
|
print ("Description = ", description)
|
||||||
|
|
||||||
|
|
||||||
|
feed = key if key is not None else 'Uncategorized' # Esto esta copiado del NY times
|
||||||
|
if not articles.has_key(feed):
|
||||||
|
articles[feed] = []
|
||||||
|
if not 'podcasts' in url:
|
||||||
|
articles[feed].append(
|
||||||
|
dict(title=title, url=url, date=pubdate,
|
||||||
|
description=description,
|
||||||
|
content=''))
|
||||||
|
feeds = [(key, articles[key]) for key in feeds if articles.has_key(key)]
|
||||||
|
return feeds
|
@ -1,40 +1,10 @@
|
|||||||
import re
|
|
||||||
from lxml.html import parse
|
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class Counterpunch(BasicNewsRecipe):
|
class Counterpunch(BasicNewsRecipe):
|
||||||
'''
|
title = u'Counterpunch'
|
||||||
Parses counterpunch.com for articles
|
oldest_article = 7
|
||||||
'''
|
max_articles_per_feed = 100
|
||||||
title = 'Counterpunch'
|
auto_cleanup = True
|
||||||
description = 'Daily political opinion from www.Counterpunch.com'
|
|
||||||
language = 'en'
|
|
||||||
__author__ = 'O. Emmerson'
|
|
||||||
keep_only_tags = [dict(name='td', attrs={'width': '522'})]
|
|
||||||
max_articles_per_feed = 10
|
|
||||||
|
|
||||||
def parse_index(self):
|
feeds = [(u'Counterpunch', u'http://www.counterpunch.org/category/article/feed/')]
|
||||||
feeds = []
|
|
||||||
title, url = 'Counterpunch', 'http://www.counterpunch.com'
|
|
||||||
articles = self.parse_page(url)
|
|
||||||
if articles:
|
|
||||||
feeds.append((title, articles))
|
|
||||||
return feeds
|
|
||||||
|
|
||||||
def parse_page(self, url):
|
|
||||||
parsed_page = parse(url).getroot()
|
|
||||||
articles = []
|
|
||||||
unwanted_text = re.compile('Website\ of\ the|I\ urge\ you|Subscribe\ now|DONATE|\@asis\.com|donation\ button|click\ over\ to\ our')
|
|
||||||
parsed_articles = [a for a in parsed_page.cssselect("html>body>table tr>td>p[class='style2']") if not unwanted_text.search(a.text_content())]
|
|
||||||
for art in parsed_articles:
|
|
||||||
try:
|
|
||||||
author = art.text
|
|
||||||
title = art.cssselect("a")[0].text + ' by {0}'.format(author)
|
|
||||||
art_url = 'http://www.counterpunch.com/' + art.cssselect("a")[0].attrib['href']
|
|
||||||
articles.append({'title': title, 'url': art_url})
|
|
||||||
except Exception as e:
|
|
||||||
e
|
|
||||||
#print('Handler Error: ', e, 'title :', a.text_content())
|
|
||||||
pass
|
|
||||||
return articles
|
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
import re
|
||||||
|
|
||||||
class Dobreprogramy_pl(BasicNewsRecipe):
|
class Dobreprogramy_pl(BasicNewsRecipe):
|
||||||
title = 'Dobreprogramy.pl'
|
title = 'Dobreprogramy.pl'
|
||||||
@ -15,6 +15,7 @@ class Dobreprogramy_pl(BasicNewsRecipe):
|
|||||||
extra_css = '.title {font-size:22px;}'
|
extra_css = '.title {font-size:22px;}'
|
||||||
oldest_article = 8
|
oldest_article = 8
|
||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
|
preprocess_regexps = [(re.compile(ur'<div id="\S+360pmp4">Twoja przeglądarka nie obsługuje Flasha i HTML5 lub wyłączono obsługę JavaScript...</div>'), lambda match: '') ]
|
||||||
remove_tags = [dict(name='div', attrs={'class':['komentarze', 'block', 'portalInfo', 'menuBar', 'topBar']})]
|
remove_tags = [dict(name='div', attrs={'class':['komentarze', 'block', 'portalInfo', 'menuBar', 'topBar']})]
|
||||||
keep_only_tags = [dict(name='div', attrs={'class':['mainBar', 'newsContent', 'postTitle title', 'postInfo', 'contentText', 'content']})]
|
keep_only_tags = [dict(name='div', attrs={'class':['mainBar', 'newsContent', 'postTitle title', 'postInfo', 'contentText', 'content']})]
|
||||||
feeds = [(u'Aktualności', 'http://feeds.feedburner.com/dobreprogramy/Aktualnosci'),
|
feeds = [(u'Aktualności', 'http://feeds.feedburner.com/dobreprogramy/Aktualnosci'),
|
||||||
|
17
recipes/dzieje_pl.recipe
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Dzieje(BasicNewsRecipe):
|
||||||
|
title = u'dzieje.pl'
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = 'Dzieje - history of Poland'
|
||||||
|
cover_url = 'http://www.dzieje.pl/sites/default/files/dzieje_logo.png'
|
||||||
|
category = 'history'
|
||||||
|
language = 'pl'
|
||||||
|
oldest_article = 8
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
remove_javascript=True
|
||||||
|
no_stylesheets= True
|
||||||
|
remove_tags_before= dict(name='h1', attrs={'class':'title'})
|
||||||
|
remove_tags_after= dict(id='dogory')
|
||||||
|
remove_tags=[dict(id='dogory')]
|
||||||
|
feeds = [(u'Dzieje', u'http://dzieje.pl/rss.xml')]
|
@ -77,32 +77,23 @@ class Economist(BasicNewsRecipe):
|
|||||||
continue
|
continue
|
||||||
self.log('Found section: %s'%section_title)
|
self.log('Found section: %s'%section_title)
|
||||||
articles = []
|
articles = []
|
||||||
for h5 in section.findAll('h5'):
|
subsection = ''
|
||||||
article_title = self.tag_to_string(h5).strip()
|
for node in section.findAll(attrs={'class':'article'}):
|
||||||
if not article_title:
|
subsec = node.findPreviousSibling('h5')
|
||||||
continue
|
if subsec is not None:
|
||||||
data = h5.findNextSibling(attrs={'class':'article'})
|
subsection = self.tag_to_string(subsec)
|
||||||
if data is None: continue
|
prefix = (subsection+': ') if subsection else ''
|
||||||
a = data.find('a', href=True)
|
a = node.find('a', href=True)
|
||||||
if a is None: continue
|
if a is not None:
|
||||||
url = a['href']
|
url = a['href']
|
||||||
if url.startswith('/'): url = 'http://www.economist.com'+url
|
if url.startswith('/'): url = 'http://www.economist.com'+url
|
||||||
url += '/print'
|
url += '/print'
|
||||||
article_title += ': %s'%self.tag_to_string(a).strip()
|
title = self.tag_to_string(a)
|
||||||
articles.append({'title':article_title, 'url':url,
|
if title:
|
||||||
'description':'', 'date':''})
|
title = prefix + title
|
||||||
if not articles:
|
self.log('\tFound article:', title)
|
||||||
# We have last or first section
|
articles.append({'title':title, 'url':url,
|
||||||
for art in section.findAll(attrs={'class':'article'}):
|
'description':'', 'date':''})
|
||||||
a = art.find('a', href=True)
|
|
||||||
if a is not None:
|
|
||||||
url = a['href']
|
|
||||||
if url.startswith('/'): url = 'http://www.economist.com'+url
|
|
||||||
url += '/print'
|
|
||||||
title = self.tag_to_string(a)
|
|
||||||
if title:
|
|
||||||
articles.append({'title':title, 'url':url,
|
|
||||||
'description':'', 'date':''})
|
|
||||||
|
|
||||||
if articles:
|
if articles:
|
||||||
if section_title not in feeds:
|
if section_title not in feeds:
|
||||||
|
@ -69,32 +69,23 @@ class Economist(BasicNewsRecipe):
|
|||||||
continue
|
continue
|
||||||
self.log('Found section: %s'%section_title)
|
self.log('Found section: %s'%section_title)
|
||||||
articles = []
|
articles = []
|
||||||
for h5 in section.findAll('h5'):
|
subsection = ''
|
||||||
article_title = self.tag_to_string(h5).strip()
|
for node in section.findAll(attrs={'class':'article'}):
|
||||||
if not article_title:
|
subsec = node.findPreviousSibling('h5')
|
||||||
continue
|
if subsec is not None:
|
||||||
data = h5.findNextSibling(attrs={'class':'article'})
|
subsection = self.tag_to_string(subsec)
|
||||||
if data is None: continue
|
prefix = (subsection+': ') if subsection else ''
|
||||||
a = data.find('a', href=True)
|
a = node.find('a', href=True)
|
||||||
if a is None: continue
|
if a is not None:
|
||||||
url = a['href']
|
url = a['href']
|
||||||
if url.startswith('/'): url = 'http://www.economist.com'+url
|
if url.startswith('/'): url = 'http://www.economist.com'+url
|
||||||
url += '/print'
|
url += '/print'
|
||||||
article_title += ': %s'%self.tag_to_string(a).strip()
|
title = self.tag_to_string(a)
|
||||||
articles.append({'title':article_title, 'url':url,
|
if title:
|
||||||
'description':'', 'date':''})
|
title = prefix + title
|
||||||
if not articles:
|
self.log('\tFound article:', title)
|
||||||
# We have last or first section
|
articles.append({'title':title, 'url':url,
|
||||||
for art in section.findAll(attrs={'class':'article'}):
|
'description':'', 'date':''})
|
||||||
a = art.find('a', href=True)
|
|
||||||
if a is not None:
|
|
||||||
url = a['href']
|
|
||||||
if url.startswith('/'): url = 'http://www.economist.com'+url
|
|
||||||
url += '/print'
|
|
||||||
title = self.tag_to_string(a)
|
|
||||||
if title:
|
|
||||||
articles.append({'title':title, 'url':url,
|
|
||||||
'description':'', 'date':''})
|
|
||||||
|
|
||||||
if articles:
|
if articles:
|
||||||
if section_title not in feeds:
|
if section_title not in feeds:
|
||||||
|
15
recipes/elektroda_pl.recipe
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Elektroda(BasicNewsRecipe):
|
||||||
|
title = u'Elektroda'
|
||||||
|
oldest_article = 8
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = 'Elektroda.pl'
|
||||||
|
cover_url = 'http://demotywatory.elektroda.pl/Thunderpic/logo.gif'
|
||||||
|
category = 'electronics'
|
||||||
|
language = 'pl'
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
remove_tags_before=dict(name='span', attrs={'class':'postbody'})
|
||||||
|
remove_tags_after=dict(name='td', attrs={'class':'spaceRow'})
|
||||||
|
remove_tags=[dict(name='a', attrs={'href':'#top'})]
|
||||||
|
feeds = [(u'Elektroda', u'http://www.elektroda.pl/rtvforum/rss.php')]
|
@ -31,10 +31,10 @@ class Filmweb_pl(BasicNewsRecipe):
|
|||||||
(u'Recenzje redakcji', u'http://www.filmweb.pl/feed/reviews/latest'),
|
(u'Recenzje redakcji', u'http://www.filmweb.pl/feed/reviews/latest'),
|
||||||
(u'Recenzje użytkowników', u'http://www.filmweb.pl/feed/user-reviews/latest')]
|
(u'Recenzje użytkowników', u'http://www.filmweb.pl/feed/user-reviews/latest')]
|
||||||
|
|
||||||
def skip_ad_pages(self, soup):
|
def skip_ad_pages(self, soup):
|
||||||
skip_tag = soup.find('a', attrs={'class':'welcomeScreenButton'})['href']
|
skip_tag = soup.find('a', attrs={'class':'welcomeScreenButton'})
|
||||||
#self.log.warn(skip_tag)
|
|
||||||
if skip_tag is not None:
|
if skip_tag is not None:
|
||||||
return self.index_to_soup(skip_tag, raw=True)
|
self.log.warn('skip_tag')
|
||||||
else:
|
self.log.warn(skip_tag)
|
||||||
None
|
return self.index_to_soup(skip_tag['href'], raw=True)
|
||||||
|
|
||||||
|
@ -16,13 +16,13 @@ class Fleshbot(BasicNewsRecipe):
|
|||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
encoding = 'utf-8'
|
encoding = 'utf-8'
|
||||||
use_embedded_content = False
|
use_embedded_content = True
|
||||||
language = 'en'
|
language = 'en'
|
||||||
masthead_url = 'http://cache.fleshbot.com/assets/base/img/thumbs140x140/fleshbot.com.png'
|
masthead_url = 'http://cache.gawkerassets.com/assets/kotaku.com/img/logo.png'
|
||||||
extra_css = '''
|
extra_css = '''
|
||||||
body{font-family: "Lucida Grande",Helvetica,Arial,sans-serif}
|
body{font-family: "Lucida Grande",Helvetica,Arial,sans-serif}
|
||||||
img{margin-bottom: 1em}
|
img{margin-bottom: 1em}
|
||||||
h1{font-family :Arial,Helvetica,sans-serif; font-size:x-large}
|
h1{font-family :Arial,Helvetica,sans-serif; font-size:large}
|
||||||
'''
|
'''
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
'comment' : description
|
'comment' : description
|
||||||
@ -31,13 +31,12 @@ class Fleshbot(BasicNewsRecipe):
|
|||||||
, 'language' : language
|
, 'language' : language
|
||||||
}
|
}
|
||||||
|
|
||||||
remove_attributes = ['width','height']
|
feeds = [(u'Articles', u'http://feeds.gawker.com/fleshbot/vip?format=xml')]
|
||||||
keep_only_tags = [dict(attrs={'class':'content permalink'})]
|
|
||||||
remove_tags_before = dict(name='h1')
|
remove_tags = [
|
||||||
remove_tags = [dict(attrs={'class':'contactinfo'})]
|
{'class': 'feedflare'},
|
||||||
remove_tags_after = dict(attrs={'class':'contactinfo'})
|
]
|
||||||
|
|
||||||
feeds = [(u'Articles', u'http://feeds.gawker.com/fleshbot/full')]
|
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
def preprocess_html(self, soup):
|
||||||
return self.adeify_images(soup)
|
return self.adeify_images(soup)
|
||||||
|
26
recipes/gildia_pl.recipe
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Gildia(BasicNewsRecipe):
|
||||||
|
title = u'Gildia.pl'
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = 'Gildia - cultural site'
|
||||||
|
cover_url = 'http://www.film.gildia.pl/_n_/portal/redakcja/logo/logo-gildia.pl-500.jpg'
|
||||||
|
category = 'culture'
|
||||||
|
language = 'pl'
|
||||||
|
oldest_article = 8
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
no_stylesheets=True
|
||||||
|
remove_tags=[dict(name='div', attrs={'class':'backlink'}), dict(name='div', attrs={'class':'im_img'}), dict(name='div', attrs={'class':'addthis_toolbox addthis_default_style'})]
|
||||||
|
keep_only_tags=dict(name='div', attrs={'class':'widetext'})
|
||||||
|
feeds = [(u'Gry', u'http://www.gry.gildia.pl/rss'), (u'Literatura', u'http://www.literatura.gildia.pl/rss'), (u'Film', u'http://www.film.gildia.pl/rss'), (u'Horror', u'http://www.horror.gildia.pl/rss'), (u'Konwenty', u'http://www.konwenty.gildia.pl/rss'), (u'Plansz\xf3wki', u'http://www.planszowki.gildia.pl/rss'), (u'Manga i anime', u'http://www.manga.gildia.pl/rss'), (u'Star Wars', u'http://www.starwars.gildia.pl/rss'), (u'Techno', u'http://www.techno.gildia.pl/rss'), (u'Historia', u'http://www.historia.gildia.pl/rss'), (u'Magia', u'http://www.magia.gildia.pl/rss'), (u'Bitewniaki', u'http://www.bitewniaki.gildia.pl/rss'), (u'RPG', u'http://www.rpg.gildia.pl/rss'), (u'LARP', u'http://www.larp.gildia.pl/rss'), (u'Muzyka', u'http://www.muzyka.gildia.pl/rss'), (u'Nauka', u'http://www.nauka.gildia.pl/rss')]
|
||||||
|
|
||||||
|
|
||||||
|
def skip_ad_pages(self, soup):
|
||||||
|
content = soup.find('div', attrs={'class':'news'})
|
||||||
|
skip_tag= content.findAll(name='a')
|
||||||
|
if skip_tag is not None:
|
||||||
|
for link in skip_tag:
|
||||||
|
if 'recenzja' in link['href']:
|
||||||
|
self.log.warn('odnosnik')
|
||||||
|
self.log.warn(link['href'])
|
||||||
|
return self.index_to_soup(link['href'], raw=True)
|
13
recipes/greenlinux_pl.recipe
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class GreenLinux(BasicNewsRecipe):
|
||||||
|
title = u'GreenLinux.pl'
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
category = 'IT'
|
||||||
|
language = 'pl'
|
||||||
|
cover_url = 'http://lh5.ggpht.com/_xd_6Y9kXhEc/S8tjyqlfhfI/AAAAAAAAAYU/zFNTp07ZQko/top.png'
|
||||||
|
oldest_article = 15
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
auto_cleanup = True
|
||||||
|
|
||||||
|
feeds = [(u'Newsy', u'http://feeds.feedburner.com/greenlinux')]
|
38
recipes/gry_online_pl.recipe
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
from calibre.web.feeds.recipes import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Gry_online_pl(BasicNewsRecipe):
|
||||||
|
title = u'Gry-Online.pl'
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = 'Gry-Online.pl - computer games'
|
||||||
|
category = 'games'
|
||||||
|
language = 'pl'
|
||||||
|
oldest_article = 13
|
||||||
|
INDEX= 'http://www.gry-online.pl/'
|
||||||
|
cover_url='http://www.gry-online.pl/img/1st_10/1st-gol-logo.png'
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
no_stylesheets= True
|
||||||
|
extra_css = 'p.wn1{font-size:22px;}'
|
||||||
|
remove_tags_after= [dict(name='div', attrs={'class':['tresc-newsa']})]
|
||||||
|
keep_only_tags = [dict(name='div', attrs={'class':['txthead']}), dict(name='p', attrs={'class':['wtx1', 'wn1', 'wob']}), dict(name='a', attrs={'class':['num_str_nex']})]
|
||||||
|
#remove_tags= [dict(name='div', attrs={'class':['news_plat']})]
|
||||||
|
feeds = [(u'Newsy', 'http://www.gry-online.pl/rss/news.xml'), ('Teksty', u'http://www.gry-online.pl/rss/teksty.xml')]
|
||||||
|
|
||||||
|
|
||||||
|
def append_page(self, soup, appendtag):
|
||||||
|
nexturl = soup.find('a', attrs={'class':'num_str_nex'})
|
||||||
|
if appendtag.find('a', attrs={'class':'num_str_nex'}) is not None:
|
||||||
|
appendtag.find('a', attrs={'class':'num_str_nex'}).replaceWith('\n')
|
||||||
|
if nexturl is not None:
|
||||||
|
if 'strona' in nexturl.div.string:
|
||||||
|
nexturl= self.INDEX + nexturl['href']
|
||||||
|
soup2 = self.index_to_soup(nexturl)
|
||||||
|
pagetext = soup2.findAll(name='p', attrs={'class':['wtx1', 'wn1', 'wob']})
|
||||||
|
for tag in pagetext:
|
||||||
|
pos = len(appendtag.contents)
|
||||||
|
appendtag.insert(pos, tag)
|
||||||
|
self.append_page(soup2, appendtag)
|
||||||
|
|
||||||
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
self.append_page(soup, soup.body)
|
||||||
|
return soup
|
@ -15,8 +15,10 @@ class Guardian(BasicNewsRecipe):
|
|||||||
title = u'The Guardian and The Observer'
|
title = u'The Guardian and The Observer'
|
||||||
if date.today().weekday() == 6:
|
if date.today().weekday() == 6:
|
||||||
base_url = "http://www.guardian.co.uk/theobserver"
|
base_url = "http://www.guardian.co.uk/theobserver"
|
||||||
|
cover_pic = 'Observer digital edition'
|
||||||
else:
|
else:
|
||||||
base_url = "http://www.guardian.co.uk/theguardian"
|
base_url = "http://www.guardian.co.uk/theguardian"
|
||||||
|
cover_pic = 'Guardian digital edition'
|
||||||
|
|
||||||
__author__ = 'Seabound and Sujata Raman'
|
__author__ = 'Seabound and Sujata Raman'
|
||||||
language = 'en_GB'
|
language = 'en_GB'
|
||||||
@ -79,7 +81,7 @@ class Guardian(BasicNewsRecipe):
|
|||||||
# soup = self.index_to_soup("http://www.guardian.co.uk/theobserver")
|
# soup = self.index_to_soup("http://www.guardian.co.uk/theobserver")
|
||||||
soup = self.index_to_soup(self.base_url)
|
soup = self.index_to_soup(self.base_url)
|
||||||
# find cover pic
|
# find cover pic
|
||||||
img = soup.find( 'img',attrs ={'alt':'Guardian digital edition'})
|
img = soup.find( 'img',attrs ={'alt':self.cover_pic})
|
||||||
if img is not None:
|
if img is not None:
|
||||||
self.cover_url = img['src']
|
self.cover_url = img['src']
|
||||||
# end find cover pic
|
# end find cover pic
|
||||||
|
50
recipes/h7_tumspor.recipe
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Haber7TS (BasicNewsRecipe):
|
||||||
|
|
||||||
|
title = u'H7 TÜMSPOR'
|
||||||
|
__author__ = u'thomass'
|
||||||
|
description = ' Haber 7 TÜMSPOR sitesinden tüm branşlarda spor haberleri '
|
||||||
|
oldest_article =2
|
||||||
|
max_articles_per_feed =100
|
||||||
|
no_stylesheets = True
|
||||||
|
#delay = 1
|
||||||
|
#use_embedded_content = False
|
||||||
|
encoding = 'ISO 8859-9'
|
||||||
|
publisher = 'thomass'
|
||||||
|
category = 'güncel, haber, türkçe,spor,futbol'
|
||||||
|
language = 'tr'
|
||||||
|
publication_type = 'newspaper'
|
||||||
|
|
||||||
|
conversion_options = {
|
||||||
|
'tags' : category
|
||||||
|
,'language' : language
|
||||||
|
,'publisher' : publisher
|
||||||
|
,'linearize_tables': True
|
||||||
|
}
|
||||||
|
extra_css = ' #newsheadcon h1{font-weight: bold; font-size: 18px;color:#0000FF} '
|
||||||
|
keep_only_tags = [dict(name='div', attrs={'class':['intNews','leftmidmerge']})]
|
||||||
|
remove_tags = [dict(name='div', attrs={'id':['blocktitle','banner46860body']}),dict(name='div', attrs={'class':[ 'Breadcrumb','shr','mobile/home.jpg','etiket','yorumYazNew','shr','y-list','banner','lftBannerShowcase','comments','interNews','lftBanner','midblock','rightblock','comnum','commentcon',]}) ,dict(name='a', attrs={'class':['saveto','sendto','comlink','newsshare',]}),dict(name='iframe', attrs={'name':['frm111','frm107']}) ,dict(name='ul', attrs={'class':['nocPagi','leftmidmerge']})]
|
||||||
|
cover_img_url = 'http://image.tumspor.com/v2/images/tasarim/images/logo.jpg'
|
||||||
|
masthead_url = 'http://image.tumspor.com/v2/images/tasarim/images/logo.jpg'
|
||||||
|
remove_empty_feeds= True
|
||||||
|
|
||||||
|
feeds = [
|
||||||
|
( u'Futbol', u'http://open.dapper.net/services/h7tsfutbol'),
|
||||||
|
( u'Basketbol', u'http://open.dapper.net/services/h7tsbasket'),
|
||||||
|
( u'Tenis', u'http://open.dapper.net/services/h7tstenis'),
|
||||||
|
( u'NBA', u'http://open.dapper.net/services/h7tsnba'),
|
||||||
|
( u'Diğer Sporlar', u'http://open.dapper.net/services/h7tsdiger'),
|
||||||
|
( u'Yazarlar & Magazin', u'http://open.dapper.net/services/h7tsyazarmagazin'),
|
||||||
|
]
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
for alink in soup.findAll('a'):
|
||||||
|
if alink.string is not None:
|
||||||
|
tstr = alink.string
|
||||||
|
alink.replaceWith(tstr)
|
||||||
|
return soup
|
||||||
|
# def print_version(self, url):
|
||||||
|
# return url.replace('http://www.aksiyon.com.tr/aksiyon/newsDetail_getNewsById.action?load=detay&', 'http://www.aksiyon.com.tr/aksiyon/mobile_detailn.action?')
|
||||||
|
|
60
recipes/haber7.recipe
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Haber7 (BasicNewsRecipe):
|
||||||
|
|
||||||
|
title = u'Haber 7'
|
||||||
|
__author__ = u'thomass'
|
||||||
|
description = ' Haber 7 sitesinden haberler '
|
||||||
|
oldest_article =2
|
||||||
|
max_articles_per_feed =100
|
||||||
|
no_stylesheets = True
|
||||||
|
#delay = 1
|
||||||
|
#use_embedded_content = False
|
||||||
|
encoding = 'ISO 8859-9'
|
||||||
|
publisher = 'thomass'
|
||||||
|
category = 'güncel, haber, türkçe'
|
||||||
|
language = 'tr'
|
||||||
|
publication_type = 'newspaper'
|
||||||
|
|
||||||
|
conversion_options = {
|
||||||
|
'tags' : category
|
||||||
|
,'language' : language
|
||||||
|
,'publisher' : publisher
|
||||||
|
,'linearize_tables': True
|
||||||
|
}
|
||||||
|
extra_css = 'body{ font-size: 12px}h2{font-weight: bold; font-size: 18px;color:#0000FF} #newsheadcon h1{font-weight: bold; font-size: 18px;color:#0000FF}'
|
||||||
|
|
||||||
|
keep_only_tags = [dict(name='div', attrs={'class':['intNews','leftmidmerge']})]
|
||||||
|
remove_tags = [dict(name='div', attrs={'id':['blocktitle','banner46860body']}),dict(name='div', attrs={'class':[ 'Breadcrumb','shr','mobile/home.jpg','etiket','yorumYazNew','shr','y-list','banner','lftBannerShowcase','comments','interNews','lftBanner','midblock','rightblock','comnum','commentcon',]}) ,dict(name='a', attrs={'class':['saveto','sendto','comlink','newsshare',]}),dict(name='iframe', attrs={'name':['frm111','frm107']}) ,dict(name='ul', attrs={'class':['nocPagi','leftmidmerge']})]
|
||||||
|
|
||||||
|
cover_img_url = 'http://dl.dropbox.com/u/39726752/haber7.JPG'
|
||||||
|
masthead_url = 'http://dl.dropbox.com/u/39726752/haber7.JPG'
|
||||||
|
remove_empty_feeds= True
|
||||||
|
|
||||||
|
feeds = [
|
||||||
|
( u'Siyaset', u'http://open.dapper.net/services/h7siyaset'),
|
||||||
|
( u'Güncel', u'http://open.dapper.net/services/h7guncel'),
|
||||||
|
( u'Yaşam', u'http://open.dapper.net/services/h7yasam'),
|
||||||
|
( u'Ekonomi', u'http://open.dapper.net/services/h7ekonomi'),
|
||||||
|
( u'3. Sayfa', u'http://open.dapper.net/services/h73sayfa'),
|
||||||
|
( u'Dünya', u'http://open.dapper.net/services/h7dunya'),
|
||||||
|
( u'Medya', u'http://open.dapper.net/services/h7medya'),
|
||||||
|
|
||||||
|
( u'Yazarlar', u'http://open.dapper.net/services/h7yazarlar'),
|
||||||
|
( u'Bilim', u'http://open.dapper.net/services/h7bilim'),
|
||||||
|
( u'Eğitim', u'http://open.dapper.net/services/h7egitim'),
|
||||||
|
( u'Spor', u'http://open.dapper.net/services/h7sporv3'),
|
||||||
|
|
||||||
|
|
||||||
|
]
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
for alink in soup.findAll('a'):
|
||||||
|
if alink.string is not None:
|
||||||
|
tstr = alink.string
|
||||||
|
alink.replaceWith(tstr)
|
||||||
|
return soup
|
||||||
|
# def print_version(self, url):
|
||||||
|
# return url.replace('http://www.aksiyon.com.tr/aksiyon/newsDetail_getNewsById.action?load=detay&', 'http://www.aksiyon.com.tr/aksiyon/mobile_detailn.action?')
|
||||||
|
|
@ -7,6 +7,7 @@ Hacker News
|
|||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
from calibre.ptempfile import PersistentTemporaryFile
|
from calibre.ptempfile import PersistentTemporaryFile
|
||||||
from urlparse import urlparse
|
from urlparse import urlparse
|
||||||
|
import re
|
||||||
|
|
||||||
class HackerNews(BasicNewsRecipe):
|
class HackerNews(BasicNewsRecipe):
|
||||||
title = 'Hacker News'
|
title = 'Hacker News'
|
||||||
@ -14,8 +15,8 @@ class HackerNews(BasicNewsRecipe):
|
|||||||
description = u'Hacker News, run by Y Combinator. Anything that good hackers would find interesting, with a focus on programming and startups.'
|
description = u'Hacker News, run by Y Combinator. Anything that good hackers would find interesting, with a focus on programming and startups.'
|
||||||
publisher = 'Y Combinator'
|
publisher = 'Y Combinator'
|
||||||
category = 'news, programming, it, technology'
|
category = 'news, programming, it, technology'
|
||||||
masthead_url = 'http://i55.tinypic.com/2u6io76.png'
|
masthead_url = 'http://img585.imageshack.us/img585/5011/hnle.png'
|
||||||
cover_url = 'http://i55.tinypic.com/2u6io76.png'
|
cover_url = 'http://img585.imageshack.us/img585/5011/hnle.png'
|
||||||
delay = 1
|
delay = 1
|
||||||
max_articles_per_feed = 30
|
max_articles_per_feed = 30
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
@ -42,12 +43,42 @@ class HackerNews(BasicNewsRecipe):
|
|||||||
|
|
||||||
def get_hn_content(self, url):
|
def get_hn_content(self, url):
|
||||||
self.log('get_hn_content(' + url + ')')
|
self.log('get_hn_content(' + url + ')')
|
||||||
# this could be improved
|
soup = self.index_to_soup(url)
|
||||||
br = self.get_browser()
|
main = soup.find('tr').findNextSiblings('tr', limit=2)[1].td
|
||||||
f = br.open(url)
|
|
||||||
html = f.read()
|
title = self.tag_to_string(main.find('td', 'title'))
|
||||||
f.close()
|
link = main.find('td', 'title').find('a')['href']
|
||||||
return html
|
if link.startswith('item?'):
|
||||||
|
link = 'http://news.ycombinator.com/' + link
|
||||||
|
readable_link = link.rpartition('http://')[2].rpartition('https://')[2]
|
||||||
|
subtext = self.tag_to_string(main.find('td', 'subtext'))
|
||||||
|
|
||||||
|
title_content_td = main.find('td', 'title').findParent('tr').findNextSiblings('tr', limit=3)[2].findAll('td', limit=2)[1]
|
||||||
|
title_content = u''
|
||||||
|
if not title_content_td.find('form'):
|
||||||
|
title_content_td.name ='div'
|
||||||
|
title_content = title_content_td.prettify()
|
||||||
|
|
||||||
|
comments = u''
|
||||||
|
for td in main.findAll('td', 'default'):
|
||||||
|
comhead = td.find('span', 'comhead')
|
||||||
|
if comhead:
|
||||||
|
com_title = u'<h4>' + self.tag_to_string(comhead).replace(' | link', '') + u'</h4>'
|
||||||
|
comhead.parent.extract()
|
||||||
|
br = td.find('br')
|
||||||
|
if br:
|
||||||
|
br.extract()
|
||||||
|
reply = td.find('a', attrs = {'href' : re.compile('^reply?')})
|
||||||
|
if reply:
|
||||||
|
reply.parent.extract()
|
||||||
|
td.name = 'div'
|
||||||
|
indent_width = (int(td.parent.find('td').img['width']) * 2) / 3
|
||||||
|
td['style'] = 'padding-left: ' + str(indent_width) + 'px'
|
||||||
|
comments = comments + com_title + td.prettify()
|
||||||
|
|
||||||
|
body = u'<h3>' + title + u'</h3><p><a href="' + link + u'">' + readable_link + u'</a><br/><strong>' + subtext + u'</strong></p>' + title_content + u'<br/>'
|
||||||
|
body = body + comments
|
||||||
|
return u'<html><title>' + title + u'</title><body>' + body + '</body></html>'
|
||||||
|
|
||||||
def get_obfuscated_article(self, url):
|
def get_obfuscated_article(self, url):
|
||||||
if url.startswith('http://news.ycombinator.com'):
|
if url.startswith('http://news.ycombinator.com'):
|
||||||
@ -83,4 +114,10 @@ class HackerNews(BasicNewsRecipe):
|
|||||||
article.text_summary = self.prettyify_url(article.url)
|
article.text_summary = self.prettyify_url(article.url)
|
||||||
article.summary = article.text_summary
|
article.summary = article.text_summary
|
||||||
|
|
||||||
|
# def parse_index(self):
|
||||||
|
# feeds = []
|
||||||
|
# feeds.append((u'Hacker News',[{'title': 'Testing', 'url': 'http://news.ycombinator.com/item?id=2935944'}]))
|
||||||
|
# return feeds
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,9 +11,14 @@ class HBR(BasicNewsRecipe):
|
|||||||
timefmt = ' [%B %Y]'
|
timefmt = ' [%B %Y]'
|
||||||
language = 'en'
|
language = 'en'
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
|
recipe_disabled = ('hbr.org has started requiring the use of javascript'
|
||||||
|
' to log into their website. This is unsupported in calibre, so'
|
||||||
|
' this recipe has been disabled. If you would like to see '
|
||||||
|
' HBR supported in calibre, contact hbr.org and ask them'
|
||||||
|
' to provide a javascript free login method.')
|
||||||
|
|
||||||
LOGIN_URL = 'http://hbr.org/login?request_url=/'
|
LOGIN_URL = 'https://hbr.org/login?request_url=/'
|
||||||
LOGOUT_URL = 'http://hbr.org/logout?request_url=/'
|
LOGOUT_URL = 'https://hbr.org/logout?request_url=/'
|
||||||
|
|
||||||
INDEX = 'http://hbr.org/archive-toc/BR'
|
INDEX = 'http://hbr.org/archive-toc/BR'
|
||||||
|
|
||||||
@ -44,7 +49,7 @@ class HBR(BasicNewsRecipe):
|
|||||||
br['signin-form:username'] = self.username
|
br['signin-form:username'] = self.username
|
||||||
br['signin-form:password'] = self.password
|
br['signin-form:password'] = self.password
|
||||||
raw = br.submit().read()
|
raw = br.submit().read()
|
||||||
if 'My Account' not in raw:
|
if '>Sign out<' not in raw:
|
||||||
raise Exception('Failed to login, are you sure your username and password are correct?')
|
raise Exception('Failed to login, are you sure your username and password are correct?')
|
||||||
try:
|
try:
|
||||||
link = br.find_link(text='Sign out')
|
link = br.find_link(text='Sign out')
|
||||||
|
@ -5,10 +5,15 @@ class HBR(BasicNewsRecipe):
|
|||||||
|
|
||||||
title = 'Harvard Business Review Blogs'
|
title = 'Harvard Business Review Blogs'
|
||||||
description = 'To subscribe go to http://hbr.harvardbusiness.org'
|
description = 'To subscribe go to http://hbr.harvardbusiness.org'
|
||||||
needs_subscription = True
|
|
||||||
__author__ = 'Kovid Goyal'
|
__author__ = 'Kovid Goyal'
|
||||||
language = 'en'
|
language = 'en'
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
|
#recipe_disabled = ('hbr.org has started requiring the use of javascript'
|
||||||
|
# ' to log into their website. This is unsupported in calibre, so'
|
||||||
|
# ' this recipe has been disabled. If you would like to see '
|
||||||
|
# ' HBR supported in calibre, contact hbr.org and ask them'
|
||||||
|
# ' to provide a javascript free login method.')
|
||||||
|
needs_subscription = False
|
||||||
|
|
||||||
LOGIN_URL = 'http://hbr.org/login?request_url=/'
|
LOGIN_URL = 'http://hbr.org/login?request_url=/'
|
||||||
LOGOUT_URL = 'http://hbr.org/logout?request_url=/'
|
LOGOUT_URL = 'http://hbr.org/logout?request_url=/'
|
||||||
@ -36,6 +41,7 @@ class HBR(BasicNewsRecipe):
|
|||||||
def get_browser(self):
|
def get_browser(self):
|
||||||
br = BasicNewsRecipe.get_browser(self)
|
br = BasicNewsRecipe.get_browser(self)
|
||||||
self.logout_url = None
|
self.logout_url = None
|
||||||
|
return br
|
||||||
|
|
||||||
#'''
|
#'''
|
||||||
br.open(self.LOGIN_URL)
|
br.open(self.LOGIN_URL)
|
||||||
|
29
recipes/hindustan_times.recipe
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class HindustanTimes(BasicNewsRecipe):
|
||||||
|
title = u'Hindustan Times'
|
||||||
|
language = 'en_IN'
|
||||||
|
__author__ = 'Krittika Goyal'
|
||||||
|
oldest_article = 1 #days
|
||||||
|
max_articles_per_feed = 25
|
||||||
|
use_embedded_content = False
|
||||||
|
|
||||||
|
no_stylesheets = True
|
||||||
|
auto_cleanup = True
|
||||||
|
|
||||||
|
feeds = [
|
||||||
|
('News',
|
||||||
|
'http://feeds.hindustantimes.com/HT-NewsSectionPage-Topstories'),
|
||||||
|
('Views',
|
||||||
|
'http://feeds.hindustantimes.com/HT-ViewsSectionpage-Topstories'),
|
||||||
|
('Cricket',
|
||||||
|
'http://feeds.hindustantimes.com/HT-Cricket-TopStories'),
|
||||||
|
('Business',
|
||||||
|
'http://feeds.hindustantimes.com/HT-BusinessSectionpage-TopStories'),
|
||||||
|
('Entertainment',
|
||||||
|
'http://feeds.hindustantimes.com/HT-HomePage-Entertainment'),
|
||||||
|
('Lifestyle',
|
||||||
|
'http://feeds.hindustantimes.com/HT-Homepage-LifestyleNews'),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
52
recipes/hira.recipe
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
# coding=utf-8
|
||||||
|
|
||||||
|
from calibre.web.feeds.recipes import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Hira(BasicNewsRecipe):
|
||||||
|
title = 'Hira'
|
||||||
|
__author__ = 'thomass'
|
||||||
|
description = 'مجلة حراء مجلة علمية ثقافية فكرية تصدر كل شهرين، تعنى بالعلوم الطبيعية والإنسانية والاجتماعية وتحاور أسرار النفس البشرية وآفاق الكون الشاسعة بالمنظور القرآني الإيماني في تآلف وتناسب بين العلم والإيمان، والعقل والقلب، والفكر والواقع.'
|
||||||
|
oldest_article = 63
|
||||||
|
max_articles_per_feed = 50
|
||||||
|
no_stylesheets = True
|
||||||
|
#delay = 1
|
||||||
|
use_embedded_content = False
|
||||||
|
encoding = 'utf-8'
|
||||||
|
publisher = 'thomass'
|
||||||
|
category = 'News'
|
||||||
|
language = 'ar'
|
||||||
|
publication_type = 'magazine'
|
||||||
|
extra_css = ' .title-detail-wrap{ font-weight: bold ;text-align:right;color:#FF0000;font-size:25px}.title-detail{ font-family:sans-serif;text-align:right;} '
|
||||||
|
|
||||||
|
|
||||||
|
conversion_options = {
|
||||||
|
'tags' : category
|
||||||
|
,'language' : language
|
||||||
|
,'publisher' : publisher
|
||||||
|
,'linearize_tables': True
|
||||||
|
,'base-font-size':'10'
|
||||||
|
}
|
||||||
|
#html2lrf_options = []
|
||||||
|
keep_only_tags = [
|
||||||
|
dict(name='div', attrs={'class':['title-detail']})
|
||||||
|
]
|
||||||
|
|
||||||
|
remove_tags = [
|
||||||
|
dict(name='div', attrs={'class':['clear', 'bbsp']}),
|
||||||
|
]
|
||||||
|
|
||||||
|
remove_attributes = [
|
||||||
|
'width','height'
|
||||||
|
]
|
||||||
|
|
||||||
|
feeds = [
|
||||||
|
(u'حراء', 'http://open.dapper.net/services/hira'),
|
||||||
|
]
|
||||||
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
for alink in soup.findAll('a'):
|
||||||
|
if alink.string is not None:
|
||||||
|
tstr = alink.string
|
||||||
|
alink.replaceWith(tstr)
|
||||||
|
return soup
|
||||||
|
|
13
recipes/historia_pl.recipe
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Historia_org_pl(BasicNewsRecipe):
|
||||||
|
title = u'Historia.org.pl'
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = u'history site'
|
||||||
|
cover_url = 'http://lh3.googleusercontent.com/_QeRQus12wGg/TOvHsZ2GN7I/AAAAAAAAD_o/LY1JZDnq7ro/logo5.jpg'
|
||||||
|
category = 'history'
|
||||||
|
language = 'pl'
|
||||||
|
oldest_article = 8
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
|
||||||
|
feeds = [(u'Artykuły', u'http://www.historia.org.pl/index.php?format=feed&type=rss')]
|
BIN
recipes/icons/adventure_zone_pl.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
recipes/icons/astro_news_pl.png
Normal file
After Width: | Height: | Size: 625 B |
BIN
recipes/icons/astronomia_pl.png
Normal file
After Width: | Height: | Size: 389 B |
BIN
recipes/icons/benchmark_pl.png
Normal file
After Width: | Height: | Size: 658 B |
BIN
recipes/icons/cgm_pl.png
Normal file
After Width: | Height: | Size: 837 B |
BIN
recipes/icons/dzieje_pl.png
Normal file
After Width: | Height: | Size: 642 B |
BIN
recipes/icons/elektroda_pl.png
Normal file
After Width: | Height: | Size: 1023 B |
BIN
recipes/icons/greenlinux_pl.png
Normal file
After Width: | Height: | Size: 648 B |
BIN
recipes/icons/gry_online_pl.png
Normal file
After Width: | Height: | Size: 249 B |
BIN
recipes/icons/historia_pl.png
Normal file
After Width: | Height: | Size: 806 B |
BIN
recipes/icons/japan_times.png
Normal file
After Width: | Height: | Size: 1.2 KiB |
BIN
recipes/icons/lomza.png
Normal file
After Width: | Height: | Size: 2.0 KiB |
BIN
recipes/icons/rtnews.png
Normal file
After Width: | Height: | Size: 606 B |
BIN
recipes/icons/twitchfilms.png
Normal file
After Width: | Height: | Size: 200 B |
BIN
recipes/icons/ubuntu_pl.png
Normal file
After Width: | Height: | Size: 508 B |
@ -4,19 +4,19 @@ from calibre.web.feeds.news import BasicNewsRecipe
|
|||||||
|
|
||||||
class IDGse(BasicNewsRecipe):
|
class IDGse(BasicNewsRecipe):
|
||||||
title = 'IDG'
|
title = 'IDG'
|
||||||
description = 'IDG.se'
|
|
||||||
language = 'se'
|
|
||||||
__author__ = 'zapt0'
|
__author__ = 'zapt0'
|
||||||
|
language = 'sv'
|
||||||
|
description = 'IDG.se'
|
||||||
oldest_article = 1
|
oldest_article = 1
|
||||||
max_articles_per_feed = 40
|
max_articles_per_feed = 256
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
encoding = 'ISO-8859-1'
|
encoding = 'ISO-8859-1'
|
||||||
remove_javascript = True
|
remove_javascript = True
|
||||||
|
|
||||||
feeds = [(u'Senaste nytt',u'http://feeds.idg.se/idg/vzzs')]
|
feeds = [(u'Dagens IDG-nyheter',u'http://feeds.idg.se/idg/ETkj?format=xml')]
|
||||||
|
|
||||||
def print_version(self,url):
|
def print_version(self,url):
|
||||||
return url + '?articleRenderMode=print&m=print'
|
return url + '?articleRenderMode=print&m=print'
|
||||||
|
|
||||||
def get_cover_url(this):
|
def get_cover_url(this):
|
||||||
return 'http://idgmedia.idg.se/polopoly_fs/2.3275!images/idgmedia_logo_75.jpg'
|
return 'http://idgmedia.idg.se/polopoly_fs/2.3275!images/idgmedia_logo_75.jpg'
|
||||||
@ -30,4 +30,3 @@ class IDGse(BasicNewsRecipe):
|
|||||||
dict(name='div', attrs={'id':['preamble_ad']}),
|
dict(name='div', attrs={'id':['preamble_ad']}),
|
||||||
dict(name='ul', attrs={'class':['share']})
|
dict(name='ul', attrs={'class':['share']})
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -1,76 +1,25 @@
|
|||||||
|
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class IndiaToday(BasicNewsRecipe):
|
class IndiaToday(BasicNewsRecipe):
|
||||||
|
title = u'India Today'
|
||||||
title = 'India Today'
|
language = 'en_IN'
|
||||||
__author__ = 'Kovid Goyal'
|
__author__ = 'Krittika Goyal'
|
||||||
language = 'en_IN'
|
oldest_article = 15 #days
|
||||||
timefmt = ' [%d %m, %Y]'
|
max_articles_per_feed = 25
|
||||||
|
|
||||||
oldest_article = 700
|
|
||||||
max_articles_per_feed = 10
|
|
||||||
|
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
|
auto_cleanup = True
|
||||||
|
|
||||||
remove_tags_before = dict(id='content_story_title')
|
feeds = [
|
||||||
remove_tags_after = dict(id='rightblockdiv')
|
('Latest News', 'http://indiatoday.intoday.in/rss/article.jsp?sid=4'),
|
||||||
remove_tags = [dict(id=['rightblockdiv', 'share_links'])]
|
('Cover Story', 'http://indiatoday.intoday.in/rss/article.jsp?sid=30'),
|
||||||
|
('Nation', 'http://indiatoday.intoday.in/rss/article.jsp?sid=36'),
|
||||||
extra_css = '#content_story_title { font-size: 170%; font-weight: bold;}'
|
('States', 'http://indiatoday.intoday.in/rss/article.jsp?sid=21'),
|
||||||
conversion_options = { 'linearize_tables': True }
|
('Economy', 'http://indiatoday.intoday.in/rss/article.jsp?sid=34'),
|
||||||
|
('World', 'http://indiatoday.intoday.in/rss/article.jsp?sid=61'),
|
||||||
def it_get_index(self):
|
('Sport', 'http://indiatoday.intoday.in/rss/article.jsp?sid=41'),
|
||||||
soup = self.index_to_soup('http://indiatoday.intoday.in/site/archive')
|
|
||||||
a = soup.find('a', href=lambda x: x and 'issueId=' in x)
|
|
||||||
url = 'http://indiatoday.intoday.in/site/'+a.get('href')
|
|
||||||
img = a.find('img')
|
|
||||||
self.cover_url = img.get('src')
|
|
||||||
return self.index_to_soup(url)
|
|
||||||
|
|
||||||
def parse_index(self):
|
|
||||||
soup = self.it_get_index()
|
|
||||||
feeds, current_section, current_articles = [], None, []
|
|
||||||
for x in soup.findAll(name=['h1', 'a']):
|
|
||||||
if x.name == 'h1':
|
|
||||||
if current_section and current_articles:
|
|
||||||
feeds.append((current_section, current_articles))
|
|
||||||
current_section = self.tag_to_string(x)
|
|
||||||
current_articles = []
|
|
||||||
self.log('\tFound section:', current_section)
|
|
||||||
elif x.name == 'a' and 'Story' in x.get('href', ''):
|
|
||||||
title = self.tag_to_string(x)
|
|
||||||
url = x.get('href')
|
|
||||||
url = url.replace(' ', '%20')
|
|
||||||
if not url.startswith('/'):
|
|
||||||
url = 'http://indiatoday.intoday.in/site/' + url
|
|
||||||
if title and url:
|
|
||||||
url += '?complete=1'
|
|
||||||
self.log('\tFound article:', title)
|
|
||||||
self.log('\t\t', url)
|
|
||||||
desc = ''
|
|
||||||
h3 = x.parent.findNextSibling('h3')
|
|
||||||
if h3 is not None:
|
|
||||||
desc = 'By ' + self.tag_to_string(h3)
|
|
||||||
h4 = h3.findNextSibling('h4')
|
|
||||||
if h4 is not None:
|
|
||||||
desc = self.tag_to_string(h4) + ' ' + desc
|
|
||||||
if desc:
|
|
||||||
self.log('\t\t', desc)
|
|
||||||
current_articles.append({'title':title, 'description':desc,
|
|
||||||
'url':url, 'date':''})
|
|
||||||
|
|
||||||
if current_section and current_articles:
|
|
||||||
feeds.append((current_section, current_articles))
|
|
||||||
|
|
||||||
return feeds
|
|
||||||
|
|
||||||
def postprocess_html(self, soup, first):
|
|
||||||
a = soup.find(text='Print')
|
|
||||||
if a is not None:
|
|
||||||
tr = a.findParent('tr')
|
|
||||||
if tr is not None:
|
|
||||||
tr.extract()
|
|
||||||
return soup
|
|
||||||
|
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -7,56 +7,33 @@ www.inquirer.net
|
|||||||
'''
|
'''
|
||||||
|
|
||||||
from calibre.web.feeds.recipes import BasicNewsRecipe
|
from calibre.web.feeds.recipes import BasicNewsRecipe
|
||||||
from calibre.ebooks.BeautifulSoup import Tag
|
|
||||||
|
|
||||||
class InquirerNet(BasicNewsRecipe):
|
class InquirerNet(BasicNewsRecipe):
|
||||||
title = 'Inquirer.net'
|
title = 'Inquirer.net'
|
||||||
__author__ = 'Darko Miletic'
|
__author__ = 'Krittika Goyal'
|
||||||
description = 'News from Philipines'
|
description = 'News from Philipines'
|
||||||
oldest_article = 2
|
oldest_article = 2
|
||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
encoding = 'cp1252'
|
encoding = 'utf8'
|
||||||
publisher = 'inquirer.net'
|
publisher = 'inquirer.net'
|
||||||
category = 'news, politics, philipines'
|
category = 'news, politics, philipines'
|
||||||
lang = 'en'
|
lang = 'en'
|
||||||
language = 'en'
|
language = 'en'
|
||||||
|
|
||||||
extra_css = ' .fontheadline{font-size: x-large} .fontsubheadline{font-size: large} .fontkick{font-size: medium}'
|
use_embedded_content = False
|
||||||
|
|
||||||
html2lrf_options = [
|
no_stylesheets = True
|
||||||
'--comment', description
|
auto_cleanup = True
|
||||||
, '--category', category
|
|
||||||
, '--publisher', publisher
|
|
||||||
, '--ignore-tables'
|
|
||||||
]
|
|
||||||
|
|
||||||
html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"\nlinearize_tables=True'
|
|
||||||
|
|
||||||
remove_tags = [dict(name=['object','link','script','iframe','form'])]
|
|
||||||
|
|
||||||
feeds = [
|
feeds = [
|
||||||
(u'Breaking news', u'http://services.inquirer.net/rss/breakingnews.xml' )
|
(u'Inquirer', u'http://www.inquirer.net/fullfeed')
|
||||||
,(u'Top stories' , u'http://services.inquirer.net/rss/topstories.xml' )
|
|
||||||
,(u'Sports' , u'http://services.inquirer.net/rss/brk_breakingnews.xml' )
|
|
||||||
,(u'InfoTech' , u'http://services.inquirer.net/rss/infotech_tech.xml' )
|
|
||||||
,(u'InfoTech' , u'http://services.inquirer.net/rss/infotech_tech.xml' )
|
|
||||||
,(u'Business' , u'http://services.inquirer.net/rss/inq7money_breaking_news.xml' )
|
|
||||||
,(u'Editorial' , u'http://services.inquirer.net/rss/opinion_editorial.xml' )
|
|
||||||
,(u'Global Nation', u'http://services.inquirer.net/rss/globalnation_breakingnews.xml')
|
|
||||||
]
|
]
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
def get_browser(self):
|
||||||
mlang = Tag(soup,'meta',[("http-equiv","Content-Language"),("content",self.lang)])
|
br = BasicNewsRecipe.get_browser(self)
|
||||||
mcharset = Tag(soup,'meta',[("http-equiv","Content-Type"),("content","text/html; charset=utf-8")])
|
br.set_handle_gzip(True)
|
||||||
soup.head.insert(0,mlang)
|
return br
|
||||||
soup.head.insert(1,mcharset)
|
|
||||||
for item in soup.findAll(style=True):
|
|
||||||
del item['style']
|
|
||||||
return soup
|
|
||||||
|
|
||||||
def print_version(self, url):
|
|
||||||
rest, sep, art = url.rpartition('/view/')
|
|
||||||
art_id, sp, rrest = art.partition('/')
|
|
||||||
return 'http://services.inquirer.net/print/print.php?article_id=' + art_id
|
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2008, Darko Miletic <darko.miletic at gmail.com>'
|
__copyright__ = '2008-2011, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
'''
|
'''
|
||||||
japantimes.co.jp
|
japantimes.co.jp
|
||||||
'''
|
'''
|
||||||
@ -9,24 +7,61 @@ japantimes.co.jp
|
|||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class JapanTimes(BasicNewsRecipe):
|
class JapanTimes(BasicNewsRecipe):
|
||||||
title = u'The Japan Times'
|
title = 'The Japan Times'
|
||||||
__author__ = 'Darko Miletic'
|
__author__ = 'Darko Miletic'
|
||||||
description = 'News from Japan'
|
description = "Daily news and features on Japan from the most widely read English-language newspaper in Japan. Coverage includes national news, business news, sports news, commentary and features on living in Japan, entertainment, the arts, education and more."
|
||||||
language = 'en'
|
language = 'en_JP'
|
||||||
|
category = 'news, politics, japan'
|
||||||
oldest_article = 7
|
publisher = 'The Japan Times'
|
||||||
max_articles_per_feed = 100
|
oldest_article = 5
|
||||||
|
max_articles_per_feed = 150
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
|
encoding = 'utf8'
|
||||||
|
publication_type = 'newspaper'
|
||||||
|
masthead_url = 'http://search.japantimes.co.jp/images/header_title.gif'
|
||||||
|
extra_css = 'body{font-family: Geneva,Arial,Helvetica,sans-serif}'
|
||||||
|
|
||||||
keep_only_tags = [ dict(name='div', attrs={'id':'searchresult'}) ]
|
conversion_options = {
|
||||||
remove_tags_after = [ dict(name='div', attrs={'id':'mainbody' }) ]
|
'comment' : description
|
||||||
|
, 'tags' : category
|
||||||
|
, 'publisher' : publisher
|
||||||
|
, 'language' : language
|
||||||
|
, 'linearize_tables' : True
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
keep_only_tags = [dict(name='div', attrs={'id':'printresult'})]
|
||||||
remove_tags = [
|
remove_tags = [
|
||||||
dict(name='div' , attrs={'id':'ads' })
|
dict(name=['iframe','meta','link','embed','object','base'])
|
||||||
,dict(name='table', attrs={'width':470})
|
,dict(attrs={'id':'searchfooter'})
|
||||||
]
|
]
|
||||||
|
feeds = [(u'The Japan Times', u'http://feeds.feedburner.com/japantimes')]
|
||||||
|
remove_attributes = ['border']
|
||||||
|
|
||||||
|
def get_article_url(self, article):
|
||||||
|
rurl = BasicNewsRecipe.get_article_url(self, article)
|
||||||
|
return rurl.partition('?')[0]
|
||||||
|
|
||||||
feeds = [
|
def print_version(self, url):
|
||||||
(u'The Japan Times', u'http://feedproxy.google.com/japantimes')
|
return url.replace('/cgi-bin/','/print/')
|
||||||
]
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
for item in soup.findAll(style=True):
|
||||||
|
del item['style']
|
||||||
|
for item in soup.findAll('img'):
|
||||||
|
if not item.has_key('alt'):
|
||||||
|
item['alt'] = 'image'
|
||||||
|
for item in soup.findAll('photo'):
|
||||||
|
item.name = 'div'
|
||||||
|
for item in soup.head.findAll('paragraph'):
|
||||||
|
item.extract()
|
||||||
|
for item in soup.findAll('wwfilename'):
|
||||||
|
item.extract()
|
||||||
|
for item in soup.findAll('jtcategory'):
|
||||||
|
item.extract()
|
||||||
|
for item in soup.findAll('nomooter'):
|
||||||
|
item.extract()
|
||||||
|
for item in soup.body.findAll('paragraph'):
|
||||||
|
item.name = 'p'
|
||||||
|
return soup
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2011, Attis <attis@attis.one.pl>'
|
__copyright__ = '2011, Attis <attis@attis.one.pl>'
|
||||||
__version__ = 'v. 0.1'
|
__version__ = 'v. 0.1'
|
||||||
@ -16,21 +15,21 @@ class KopalniaWiedzy(BasicNewsRecipe):
|
|||||||
oldest_article = 7
|
oldest_article = 7
|
||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
INDEX = u'http://kopalniawiedzy.pl/'
|
INDEX = u'http://kopalniawiedzy.pl/'
|
||||||
remove_javascript = True
|
remove_javascript = True
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
|
|
||||||
remove_tags = [{'name':'p', 'attrs': {'class': 'keywords'} }]
|
remove_tags = [{'name':'p', 'attrs': {'class': 'keywords'} }, {'name':'div', 'attrs': {'class':'sexy-bookmarks sexy-bookmarks-bg-caring'}}]
|
||||||
remove_tags_after = dict(attrs={'class':'ad-square'})
|
remove_tags_after = dict(attrs={'class':'ad-square'})
|
||||||
keep_only_tags = [dict(name="div", attrs={'id':'articleContent'})]
|
keep_only_tags = [dict(name="div", attrs={'id':'articleContent'})]
|
||||||
extra_css = '.topimage {margin-top: 30px}'
|
extra_css = '.topimage {margin-top: 30px}'
|
||||||
|
|
||||||
preprocess_regexps = [
|
preprocess_regexps = [
|
||||||
(re.compile(u'<a .* rel="lightboxText" .*><img (.*)></a>'),
|
(re.compile(u'<a .* rel="lightboxText" .*><img (.*)></a>'),
|
||||||
lambda match: '<img class="topimage" ' + match.group(1) + '>' ),
|
lambda match: '<img class="topimage" ' + match.group(1) + '>' ),
|
||||||
(re.compile(u'<br /><br />'),
|
(re.compile(u'<br /><br />'),
|
||||||
lambda match: '<br\/>')
|
lambda match: '<br\/>')
|
||||||
]
|
]
|
||||||
|
|
||||||
feeds = [
|
feeds = [
|
||||||
(u'Biologia', u'http://kopalniawiedzy.pl/wiadomosci_biologia.rss'),
|
(u'Biologia', u'http://kopalniawiedzy.pl/wiadomosci_biologia.rss'),
|
||||||
(u'Medycyna', u'http://kopalniawiedzy.pl/wiadomosci_medycyna.rss'),
|
(u'Medycyna', u'http://kopalniawiedzy.pl/wiadomosci_medycyna.rss'),
|
||||||
@ -39,10 +38,10 @@ class KopalniaWiedzy(BasicNewsRecipe):
|
|||||||
(u'Ciekawostki', u'http://kopalniawiedzy.pl/wiadomosci_ciekawostki.rss'),
|
(u'Ciekawostki', u'http://kopalniawiedzy.pl/wiadomosci_ciekawostki.rss'),
|
||||||
(u'Artykuły', u'http://kopalniawiedzy.pl/artykuly.rss')
|
(u'Artykuły', u'http://kopalniawiedzy.pl/artykuly.rss')
|
||||||
]
|
]
|
||||||
|
|
||||||
def is_link_wanted(self, url, tag):
|
def is_link_wanted(self, url, tag):
|
||||||
return tag['class'] == 'next'
|
return tag['class'] == 'next'
|
||||||
|
|
||||||
def remove_beyond(self, tag, next):
|
def remove_beyond(self, tag, next):
|
||||||
while tag is not None and getattr(tag, 'name', None) != 'body':
|
while tag is not None and getattr(tag, 'name', None) != 'body':
|
||||||
after = getattr(tag, next)
|
after = getattr(tag, next)
|
||||||
@ -51,30 +50,30 @@ class KopalniaWiedzy(BasicNewsRecipe):
|
|||||||
after.extract()
|
after.extract()
|
||||||
after = ns
|
after = ns
|
||||||
tag = tag.parent
|
tag = tag.parent
|
||||||
|
|
||||||
def append_page(self, soup, appendtag, position):
|
def append_page(self, soup, appendtag, position):
|
||||||
pager = soup.find('a',attrs={'class':'next'})
|
pager = soup.find('a',attrs={'class':'next'})
|
||||||
if pager:
|
if pager:
|
||||||
nexturl = self.INDEX + pager['href']
|
nexturl = self.INDEX + pager['href']
|
||||||
soup2 = self.index_to_soup(nexturl)
|
soup2 = self.index_to_soup(nexturl)
|
||||||
texttag = soup2.find('div', attrs={'id':'articleContent'})
|
texttag = soup2.find('div', attrs={'id':'articleContent'})
|
||||||
|
|
||||||
tag = texttag.find(attrs={'class':'pages'})
|
tag = texttag.find(attrs={'class':'pages'})
|
||||||
self.remove_beyond(tag, 'nextSibling')
|
self.remove_beyond(tag, 'nextSibling')
|
||||||
|
|
||||||
newpos = len(texttag.contents)
|
newpos = len(texttag.contents)
|
||||||
self.append_page(soup2,texttag,newpos)
|
self.append_page(soup2,texttag,newpos)
|
||||||
|
|
||||||
appendtag.insert(position,texttag)
|
appendtag.insert(position,texttag)
|
||||||
|
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
def preprocess_html(self, soup):
|
||||||
self.append_page(soup, soup.body, 3)
|
self.append_page(soup, soup.body, 3)
|
||||||
|
|
||||||
for item in soup.findAll('div',attrs={'class':'pages'}):
|
for item in soup.findAll('div',attrs={'class':'pages'}):
|
||||||
item.extract()
|
item.extract()
|
||||||
|
|
||||||
for item in soup.findAll('p', attrs={'class':'wykop'}):
|
for item in soup.findAll('p', attrs={'class':'wykop'}):
|
||||||
item.extract()
|
item.extract()
|
||||||
|
|
||||||
return soup
|
return soup
|
||||||
|
28
recipes/ksiazka_pl.recipe
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
import re
|
||||||
|
class Ksiazka_net_pl(BasicNewsRecipe):
|
||||||
|
title = u'ksiazka.net.pl'
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = u'Ksiazka.net.pl - book vortal'
|
||||||
|
cover_url = 'http://www.ksiazka.net.pl/fileadmin/templates/ksiazka.net.pl/images/1PortalKsiegarski-logo.jpg'
|
||||||
|
category = 'books'
|
||||||
|
language = 'pl'
|
||||||
|
oldest_article = 8
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
no_stylesheets= True
|
||||||
|
#extra_css = 'img {float: right;}'
|
||||||
|
preprocess_regexps = [(re.compile(ur'Podoba mi się, kupuję:'), lambda match: '<br />')]
|
||||||
|
remove_tags_before= dict(name='div', attrs={'class':'m-body'})
|
||||||
|
remove_tags_after= dict(name='div', attrs={'class':'m-body-link'})
|
||||||
|
remove_tags=[dict(attrs={'class':['mk_library-icon', 'm-body-link', 'tagi']})]
|
||||||
|
feeds = [(u'Wiadomości', u'http://www.ksiazka.net.pl/?id=wiadomosci&type=100'),
|
||||||
|
(u'Książki', u'http://www.ksiazka.net.pl/?id=ksiazki&type=100'),
|
||||||
|
(u'Rynek', u'http://www.ksiazka.net.pl/?id=rynek&type=100')]
|
||||||
|
|
||||||
|
def image_url_processor(self, baseurl, url):
|
||||||
|
if (('file://' in url) and ('www.ksiazka.net.pl/' not in url)):
|
||||||
|
return 'http://www.ksiazka.net.pl/' + url[8:]
|
||||||
|
elif 'http://' not in url:
|
||||||
|
return 'http://www.ksiazka.net.pl/' + url
|
||||||
|
else:
|
||||||
|
return url
|
@ -46,7 +46,9 @@ class LATimes(BasicNewsRecipe):
|
|||||||
remove_tags_after=dict(name='p', attrs={'class':'copyright'})
|
remove_tags_after=dict(name='p', attrs={'class':'copyright'})
|
||||||
remove_tags = [
|
remove_tags = [
|
||||||
dict(name=['meta','link','iframe','object','embed'])
|
dict(name=['meta','link','iframe','object','embed'])
|
||||||
,dict(attrs={'class':['toolSet','articlerail','googleAd','entry-footer-left','entry-footer-right','entry-footer-social','google-ad-story-bottom','sphereTools']})
|
,dict(attrs={'class':['toolSet','articlerail','googleAd','entry-footer-left',
|
||||||
|
'entry-footer-right','entry-footer-social','google-ad-story-bottom',
|
||||||
|
'sphereTools', 'nextgen-share-tools']})
|
||||||
,dict(attrs={'id':['article-promo','googleads','moduleArticleToolsContainer','gallery-subcontent']})
|
,dict(attrs={'id':['article-promo','googleads','moduleArticleToolsContainer','gallery-subcontent']})
|
||||||
]
|
]
|
||||||
remove_attributes=['lang','xmlns:fb','xmlns:og','border','xtags','i','article_body']
|
remove_attributes=['lang','xmlns:fb','xmlns:og','border','xtags','i','article_body']
|
||||||
|
14
recipes/lomza.recipe
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Lomza(BasicNewsRecipe):
|
||||||
|
title = u'4Lomza'
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = u'4Łomża - regional site'
|
||||||
|
cover_url = 'http://www.4lomza.pl/i/logo4lomza_m.jpg'
|
||||||
|
language = 'pl'
|
||||||
|
oldest_article = 15
|
||||||
|
no_styleseets=True
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
remove_tags=[dict(name='div', attrs={'class':['bxbanner', 'drukuj', 'wyslijznajomemu']})]
|
||||||
|
keep_only_tags=[dict(name='div', attrs={'class':'wiadomosc'})]
|
||||||
|
feeds = [(u'Łomża', u'http://feeds.feedburner.com/4lomza.pl')]
|
@ -4,25 +4,17 @@ from calibre.web.feeds.news import BasicNewsRecipe
|
|||||||
class AdvancedUserRecipe1308306308(BasicNewsRecipe):
|
class AdvancedUserRecipe1308306308(BasicNewsRecipe):
|
||||||
title = u'Macleans Magazine'
|
title = u'Macleans Magazine'
|
||||||
language = 'en_CA'
|
language = 'en_CA'
|
||||||
__author__ = 'sexymax15'
|
__author__ = 'Medius'
|
||||||
oldest_article = 30
|
oldest_article = 7
|
||||||
max_articles_per_feed = 12
|
cover_url = 'http://www.rogersmagazines.com/rms_covers/md/CLE_md.jpg'
|
||||||
|
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
|
|
||||||
remove_empty_feeds = True
|
remove_empty_feeds = True
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
remove_javascript = True
|
remove_javascript = True
|
||||||
remove_tags = [dict(name ='img'),dict (id='header'),{'class':'postmetadata'}]
|
remove_tags = [dict(id='header'),{'class':'comment'}]
|
||||||
remove_tags_after = {'class':'postmetadata'}
|
remove_tags_after = {'class':'pagination'}
|
||||||
|
|
||||||
feeds = [(u'Blog Central', u'http://www2.macleans.ca/category/blog-central/feed/'),
|
feeds = [(u'Canada', u'http://www2.macleans.ca/category/canada/feed/'),
|
||||||
(u'Canada', u'http://www2.macleans.ca/category/canada/feed/'),
|
(u'World', u'http://www2.macleans.ca/category/news-politics/world/feed/'), (u'Business', u'http://www2.macleans.ca/category/business/feed/'), (u'Arts & Culture', u'http://www2.macleans.ca/category/arts/feed/'), (u'Opinion', u'http://www2.macleans.ca/category/opinion/feed/'), (u'Health', u'http://www2.macleans.ca/category/life/health/feed/'), (u'Sports', u'http://www2.macleans.ca/category/life/sports/feed/'), (u'Environment', u'http://www2.macleans.ca/category/life/environment/feed/'), (u'Technology', u'http://www2.macleans.ca/category/life/technology/feed/'), (u'Travel', u'http://www2.macleans.ca/category/life/travel/feed/'), (u'Blog Central', u'http://www2.macleans.ca/category/blog-central/feed/')]
|
||||||
(u'World', u'http://www2.macleans.ca/category/world-from-the-magazine/feed/'),
|
|
||||||
(u'Business', u'http://www2.macleans.ca/category/business/feed/'),
|
|
||||||
(u'Arts & Culture', u'http://www2.macleans.ca/category/arts-culture/feed/'),
|
|
||||||
(u'Opinion', u'http://www2.macleans.ca/category/opinion/feed/'),
|
|
||||||
(u'Health', u'http://www2.macleans.ca/category/health-from-the-magazine/feed/'),
|
|
||||||
(u'Environment', u'http://www2.macleans.ca/category/environment-from-the-magazine/feed/')]
|
|
||||||
def print_version(self, url):
|
|
||||||
return url + 'print/'
|
|
||||||
|
@ -2,7 +2,6 @@ from calibre.web.feeds.news import BasicNewsRecipe
|
|||||||
|
|
||||||
class AdvancedUserRecipe1306097511(BasicNewsRecipe):
|
class AdvancedUserRecipe1306097511(BasicNewsRecipe):
|
||||||
title = u'Metro Nieuws NL'
|
title = u'Metro Nieuws NL'
|
||||||
description = u'Metro Nieuws - NL'
|
|
||||||
# Version 1.2, updated cover image to match the changed website.
|
# Version 1.2, updated cover image to match the changed website.
|
||||||
# added info date on title
|
# added info date on title
|
||||||
oldest_article = 2
|
oldest_article = 2
|
||||||
@ -11,14 +10,14 @@ class AdvancedUserRecipe1306097511(BasicNewsRecipe):
|
|||||||
description = u'Metro Nederland'
|
description = u'Metro Nederland'
|
||||||
language = u'nl'
|
language = u'nl'
|
||||||
simultaneous_downloads = 5
|
simultaneous_downloads = 5
|
||||||
delay = 1
|
#delay = 1
|
||||||
# timefmt = ' [%A, %d %B, %Y]'
|
auto_cleanup = True
|
||||||
|
auto_cleanup_keep = '//div[@class="article-image-caption-2column"]|//div[@id="date"]'
|
||||||
timefmt = ' [%A, %d %b %Y]'
|
timefmt = ' [%A, %d %b %Y]'
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
remove_javascript = True
|
remove_javascript = True
|
||||||
remove_empty_feeds = True
|
remove_empty_feeds = True
|
||||||
cover_url = 'http://www.oldreadmetro.com/img/en/metroholland/last/1/small.jpg'
|
cover_url = 'http://www.oldreadmetro.com/img/en/metroholland/last/1/small.jpg'
|
||||||
remove_empty_feeds = True
|
|
||||||
publication_type = 'newspaper'
|
publication_type = 'newspaper'
|
||||||
remove_tags_before = dict(name='div', attrs={'id':'date'})
|
remove_tags_before = dict(name='div', attrs={'id':'date'})
|
||||||
remove_tags_after = dict(name='div', attrs={'id':'column-1-3'})
|
remove_tags_after = dict(name='div', attrs={'id':'column-1-3'})
|
||||||
|
@ -12,10 +12,15 @@ __UseChineseTitle__ = False
|
|||||||
__KeepImages__ = True
|
__KeepImages__ = True
|
||||||
# (HK only) Turn below to true if you wish to use life.mingpao.com as the main article source
|
# (HK only) Turn below to true if you wish to use life.mingpao.com as the main article source
|
||||||
__UseLife__ = True
|
__UseLife__ = True
|
||||||
|
# (HK only) if __UseLife__ is true, turn this on if you want to include the column section
|
||||||
|
__InclCols__ = False
|
||||||
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
Change Log:
|
Change Log:
|
||||||
|
2011/09/21: fetching "column" section is made optional. Default is False
|
||||||
|
2011/09/18: parse "column" section stuff from source text file directly.
|
||||||
|
2011/09/07: disable "column" section as it is no longer offered free.
|
||||||
2011/06/26: add fetching Vancouver and Toronto versions of the paper, also provide captions for images using life.mingpao fetch source
|
2011/06/26: add fetching Vancouver and Toronto versions of the paper, also provide captions for images using life.mingpao fetch source
|
||||||
provide options to remove all images in the file
|
provide options to remove all images in the file
|
||||||
2011/05/12: switch the main parse source to life.mingpao.com, which has more photos on the article pages
|
2011/05/12: switch the main parse source to life.mingpao.com, which has more photos on the article pages
|
||||||
@ -51,16 +56,19 @@ class MPRecipe(BasicNewsRecipe):
|
|||||||
title = 'Ming Pao - Hong Kong'
|
title = 'Ming Pao - Hong Kong'
|
||||||
description = 'Hong Kong Chinese Newspaper (http://news.mingpao.com)'
|
description = 'Hong Kong Chinese Newspaper (http://news.mingpao.com)'
|
||||||
category = 'Chinese, News, Hong Kong'
|
category = 'Chinese, News, Hong Kong'
|
||||||
extra_css = 'img {display: block; margin-left: auto; margin-right: auto; margin-top: 10px; margin-bottom: 10px;} font>b {font-size:200%; font-weight:bold;}'
|
extra_css = 'img {display: block; margin-left: auto; margin-right: auto; margin-top: 10px; margin-bottom: 10px;} font>b {font-size:200%; font-weight:bold;} div[class=heading] {font-size:200%; font-weight:bold;} div[class=images] {font-size:50%;}'
|
||||||
masthead_url = 'http://news.mingpao.com/image/portals_top_logo_news.gif'
|
masthead_url = 'http://news.mingpao.com/image/portals_top_logo_news.gif'
|
||||||
keep_only_tags = [dict(name='h1'),
|
keep_only_tags = [dict(name='h1'),
|
||||||
dict(name='font', attrs={'style':['font-size:14pt; line-height:160%;']}), # for entertainment page title
|
dict(name='font', attrs={'style':['font-size:14pt; line-height:160%;']}), # for entertainment page title
|
||||||
dict(name='font', attrs={'color':['AA0000']}), # for column articles title
|
dict(name='font', attrs={'color':['AA0000']}), # for column articles title
|
||||||
|
dict(attrs={'class':['heading']}), # for heading from txt
|
||||||
dict(attrs={'id':['newscontent']}), # entertainment and column page content
|
dict(attrs={'id':['newscontent']}), # entertainment and column page content
|
||||||
dict(attrs={'id':['newscontent01','newscontent02']}),
|
dict(attrs={'id':['newscontent01','newscontent02']}),
|
||||||
|
dict(attrs={'class':['content']}), # for content from txt
|
||||||
dict(attrs={'class':['photo']}),
|
dict(attrs={'class':['photo']}),
|
||||||
dict(name='table', attrs={'width':['100%'], 'border':['0'], 'cellspacing':['5'], 'cellpadding':['0']}), # content in printed version of life.mingpao.com
|
dict(name='table', attrs={'width':['100%'], 'border':['0'], 'cellspacing':['5'], 'cellpadding':['0']}), # content in printed version of life.mingpao.com
|
||||||
dict(name='img', attrs={'width':['180'], 'alt':['按圖放大']}) # images for source from life.mingpao.com
|
dict(name='img', attrs={'width':['180'], 'alt':['按圖放大']}), # images for source from life.mingpao.com
|
||||||
|
dict(attrs={'class':['images']}) # for images from txt
|
||||||
]
|
]
|
||||||
if __KeepImages__:
|
if __KeepImages__:
|
||||||
remove_tags = [dict(name='style'),
|
remove_tags = [dict(name='style'),
|
||||||
@ -230,12 +238,20 @@ class MPRecipe(BasicNewsRecipe):
|
|||||||
(u'\u570b\u969b World', 'http://life.mingpao.com/cfm/dailynews2.cfm?Issue=' + dateStr +'&Category=nalta', 'nal'),
|
(u'\u570b\u969b World', 'http://life.mingpao.com/cfm/dailynews2.cfm?Issue=' + dateStr +'&Category=nalta', 'nal'),
|
||||||
(u'\u7d93\u6fdf Finance', 'http://life.mingpao.com/cfm/dailynews2.cfm?Issue=' + dateStr + '&Category=nalea', 'nal'),
|
(u'\u7d93\u6fdf Finance', 'http://life.mingpao.com/cfm/dailynews2.cfm?Issue=' + dateStr + '&Category=nalea', 'nal'),
|
||||||
(u'\u9ad4\u80b2 Sport', 'http://life.mingpao.com/cfm/dailynews2.cfm?Issue=' + dateStr + '&Category=nalsp', 'nal'),
|
(u'\u9ad4\u80b2 Sport', 'http://life.mingpao.com/cfm/dailynews2.cfm?Issue=' + dateStr + '&Category=nalsp', 'nal'),
|
||||||
(u'\u5f71\u8996 Film/TV', 'http://life.mingpao.com/cfm/dailynews2.cfm?Issue=' + dateStr + '&Category=nalma', 'nal'),
|
(u'\u5f71\u8996 Film/TV', 'http://life.mingpao.com/cfm/dailynews2.cfm?Issue=' + dateStr + '&Category=nalma', 'nal')
|
||||||
(u'\u5c08\u6b04 Columns', 'http://life.mingpao.com/cfm/dailynews2.cfm?Issue=' + dateStr +'&Category=ncolumn', 'ncl')]:
|
]:
|
||||||
articles = self.parse_section2(url, keystr)
|
articles = self.parse_section2(url, keystr)
|
||||||
if articles:
|
if articles:
|
||||||
feeds.append((title, articles))
|
feeds.append((title, articles))
|
||||||
|
|
||||||
|
if __InclCols__ == True:
|
||||||
|
# parse column section articles directly from .txt files
|
||||||
|
for title, url, keystr in [(u'\u5c08\u6b04 Columns', 'http://life.mingpao.com/cfm/dailynews2.cfm?Issue=' + dateStr +'&Category=ncolumn', 'ncl')
|
||||||
|
]:
|
||||||
|
articles = self.parse_section2_txt(url, keystr)
|
||||||
|
if articles:
|
||||||
|
feeds.append((title, articles))
|
||||||
|
|
||||||
for title, url in [(u'\u526f\u520a Supplement', 'http://news.mingpao.com/' + dateStr + '/jaindex.htm'),
|
for title, url in [(u'\u526f\u520a Supplement', 'http://news.mingpao.com/' + dateStr + '/jaindex.htm'),
|
||||||
(u'\u82f1\u6587 English', 'http://news.mingpao.com/' + dateStr + '/emindex.htm')]:
|
(u'\u82f1\u6587 English', 'http://news.mingpao.com/' + dateStr + '/emindex.htm')]:
|
||||||
articles = self.parse_section(url)
|
articles = self.parse_section(url)
|
||||||
@ -356,6 +372,24 @@ class MPRecipe(BasicNewsRecipe):
|
|||||||
current_articles.reverse()
|
current_articles.reverse()
|
||||||
return current_articles
|
return current_articles
|
||||||
|
|
||||||
|
# parse from text file of life.mingpao.com
|
||||||
|
def parse_section2_txt(self, url, keystr):
|
||||||
|
self.get_fetchdate()
|
||||||
|
soup = self.index_to_soup(url)
|
||||||
|
a = soup.findAll('a', href=True)
|
||||||
|
a.reverse()
|
||||||
|
current_articles = []
|
||||||
|
included_urls = []
|
||||||
|
for i in a:
|
||||||
|
title = self.tag_to_string(i)
|
||||||
|
url = 'http://life.mingpao.com/cfm/' + i.get('href', False)
|
||||||
|
if (url not in included_urls) and (not url.rfind('.txt') == -1) and (not url.rfind(keystr) == -1):
|
||||||
|
url = url.replace('cfm/dailynews3.cfm?File=', 'ftp/Life3/') # use printed version of the article
|
||||||
|
current_articles.append({'title': title, 'url': url, 'description': ''})
|
||||||
|
included_urls.append(url)
|
||||||
|
current_articles.reverse()
|
||||||
|
return current_articles
|
||||||
|
|
||||||
# parse from www.mingpaovan.com
|
# parse from www.mingpaovan.com
|
||||||
def parse_section3(self, url, baseUrl):
|
def parse_section3(self, url, baseUrl):
|
||||||
self.get_fetchdate()
|
self.get_fetchdate()
|
||||||
@ -438,6 +472,39 @@ class MPRecipe(BasicNewsRecipe):
|
|||||||
current_articles.reverse()
|
current_articles.reverse()
|
||||||
return current_articles
|
return current_articles
|
||||||
|
|
||||||
|
# preprocess those .txt based files
|
||||||
|
def preprocess_raw_html(self, raw_html, url):
|
||||||
|
if url.rfind('ftp') == -1:
|
||||||
|
return raw_html
|
||||||
|
else:
|
||||||
|
splitter = re.compile(r'\n') # Match non-digits
|
||||||
|
new_raw_html = '<html><head><title>Untitled</title></head><body><div class="images">'
|
||||||
|
next_is_img_txt = False
|
||||||
|
title_started = False
|
||||||
|
met_article_start_char = False
|
||||||
|
for item in splitter.split(raw_html):
|
||||||
|
if item.startswith(u'\u3010'):
|
||||||
|
met_article_start_char = True
|
||||||
|
new_raw_html = new_raw_html + '</div><div class="content"><p>' + item + '<p>\n'
|
||||||
|
else:
|
||||||
|
if next_is_img_txt == False:
|
||||||
|
if item.startswith('='):
|
||||||
|
next_is_img_txt = True
|
||||||
|
new_raw_html += '<img src="' + str(item)[1:].strip() + '.jpg" /><p>\n'
|
||||||
|
else:
|
||||||
|
if met_article_start_char == False:
|
||||||
|
if title_started == False:
|
||||||
|
new_raw_html = new_raw_html + '</div><div class="heading">' + item + '\n'
|
||||||
|
title_started = True
|
||||||
|
else:
|
||||||
|
new_raw_html = new_raw_html + item + '\n'
|
||||||
|
else:
|
||||||
|
new_raw_html = new_raw_html + item + '<p>\n'
|
||||||
|
else:
|
||||||
|
next_is_img_txt = False
|
||||||
|
new_raw_html = new_raw_html + item + '\n'
|
||||||
|
return new_raw_html + '</div></body></html>'
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
def preprocess_html(self, soup):
|
||||||
for item in soup.findAll(style=True):
|
for item in soup.findAll(style=True):
|
||||||
del item['style']
|
del item['style']
|
||||||
@ -591,4 +658,3 @@ class MPRecipe(BasicNewsRecipe):
|
|||||||
|
|
||||||
with nested(open(opf_path, 'wb'), open(ncx_path, 'wb')) as (opf_file, ncx_file):
|
with nested(open(opf_path, 'wb'), open(ncx_path, 'wb')) as (opf_file, ncx_file):
|
||||||
opf.render(opf_file, ncx_file)
|
opf.render(opf_file, ncx_file)
|
||||||
|
|
||||||
|
@ -37,24 +37,24 @@ class NikkeiNet_paper_subscription(BasicNewsRecipe):
|
|||||||
#br.set_debug_responses(True)
|
#br.set_debug_responses(True)
|
||||||
|
|
||||||
if self.username is not None and self.password is not None:
|
if self.username is not None and self.password is not None:
|
||||||
print "----------------------------open top page----------------------------------------"
|
print "-------------------------open top page-------------------------------------"
|
||||||
br.open('http://www.nikkei.com/')
|
br.open('http://www.nikkei.com/')
|
||||||
print "----------------------------open first login form--------------------------------"
|
print "-------------------------open first login form-----------------------------"
|
||||||
link = br.links(url_regex="www.nikkei.com/etc/accounts/login").next()
|
link = br.links(url_regex="www.nikkei.com/etc/accounts/login").next()
|
||||||
br.follow_link(link)
|
br.follow_link(link)
|
||||||
#response = br.response()
|
#response = br.response()
|
||||||
#print response.get_data()
|
#print response.get_data()
|
||||||
print "----------------------------JS redirect(send autoPostForm)-----------------------"
|
print "-------------------------JS redirect(send autoPostForm)--------------------"
|
||||||
br.select_form(name='autoPostForm')
|
br.select_form(name='autoPostForm')
|
||||||
br.submit()
|
br.submit()
|
||||||
#response = br.response()
|
#response = br.response()
|
||||||
print "----------------------------got login form---------------------------------------"
|
print "-------------------------got login form------------------------------------"
|
||||||
br.select_form(name='LA0210Form01')
|
br.select_form(name='LA0210Form01')
|
||||||
br['LA0210Form01:LA0210Email'] = self.username
|
br['LA0210Form01:LA0210Email'] = self.username
|
||||||
br['LA0210Form01:LA0210Password'] = self.password
|
br['LA0210Form01:LA0210Password'] = self.password
|
||||||
br.submit()
|
br.submit()
|
||||||
#response = br.response()
|
#response = br.response()
|
||||||
print "----------------------------JS redirect------------------------------------------"
|
print "-------------------------JS redirect---------------------------------------"
|
||||||
br.select_form(nr=0)
|
br.select_form(nr=0)
|
||||||
br.submit()
|
br.submit()
|
||||||
|
|
||||||
@ -64,18 +64,23 @@ class NikkeiNet_paper_subscription(BasicNewsRecipe):
|
|||||||
return br
|
return br
|
||||||
|
|
||||||
def cleanup(self):
|
def cleanup(self):
|
||||||
print "----------------------------logout-----------------------------------------------"
|
print "-------------------------logout--------------------------------------------"
|
||||||
self.browser.open('https://regist.nikkei.com/ds/etc/accounts/logout')
|
self.browser.open('https://regist.nikkei.com/ds/etc/accounts/logout')
|
||||||
|
|
||||||
def parse_index(self):
|
def parse_index(self):
|
||||||
print "----------------------------get index of paper-----------------------------------"
|
print "-------------------------get index of paper--------------------------------"
|
||||||
result = []
|
result = []
|
||||||
soup = self.index_to_soup('http://www.nikkei.com/paper/')
|
soup = self.index_to_soup('http://www.nikkei.com/paper/')
|
||||||
#soup = self.index_to_soup(self.test_data())
|
#soup = self.index_to_soup(self.test_data())
|
||||||
for sect in soup.findAll('div', 'cmn-section kn-special JSID_baseSection'):
|
sections = soup.findAll('div', 'cmn-section kn-special JSID_baseSection')
|
||||||
|
if len(sections) == 0:
|
||||||
|
sections = soup.findAll('div', 'cmn-section kn-special')
|
||||||
|
for sect in sections:
|
||||||
sect_title = sect.find('h3', 'cmnc-title').string
|
sect_title = sect.find('h3', 'cmnc-title').string
|
||||||
sect_result = []
|
sect_result = []
|
||||||
for elem in sect.findAll(attrs={'class':['cmn-article_title']}):
|
for elem in sect.findAll(attrs={'class':['cmn-article_title']}):
|
||||||
|
if elem.span.a == None or elem.span.a['href'].startswith('javascript') :
|
||||||
|
continue
|
||||||
url = 'http://www.nikkei.com' + elem.span.a['href']
|
url = 'http://www.nikkei.com' + elem.span.a['href']
|
||||||
url = re.sub("/article/", "/print-article/", url) # print version.
|
url = re.sub("/article/", "/print-article/", url) # print version.
|
||||||
span = elem.span.a.span
|
span = elem.span.a.span
|
||||||
@ -84,6 +89,5 @@ class NikkeiNet_paper_subscription(BasicNewsRecipe):
|
|||||||
sect_result.append(dict(title=title, url=url, date='',
|
sect_result.append(dict(title=title, url=url, date='',
|
||||||
description='', content=''))
|
description='', content=''))
|
||||||
result.append([sect_title, sect_result])
|
result.append([sect_title, sect_result])
|
||||||
#pp.pprint(result)
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
34
recipes/ntv_spor.recipe
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class AdvancedUserRecipe1313512459(BasicNewsRecipe):
|
||||||
|
title = u'NTVSpor'
|
||||||
|
__author__ = 'A Erdogan'
|
||||||
|
description = 'News from Turkey'
|
||||||
|
publisher = 'NTVSpor.net'
|
||||||
|
category = 'sports, Turkey'
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
no_stylesheets = True
|
||||||
|
use_embedded_content = False
|
||||||
|
masthead_url = 'http://www.ntvspor.net/HTML/r/i/l.png'
|
||||||
|
language = 'tr'
|
||||||
|
|
||||||
|
extra_css ='''
|
||||||
|
body{font-family:Arial,Helvetica,sans-serif; font-size:small; align:left; color:#000000}
|
||||||
|
h1{font-size:large; color:#000000}
|
||||||
|
h2{font-size:small; color:#000000}
|
||||||
|
p{font-size:small; color:#000000}
|
||||||
|
'''
|
||||||
|
|
||||||
|
conversion_options = {
|
||||||
|
'comment' : description
|
||||||
|
, 'tags' : category
|
||||||
|
, 'publisher' : publisher
|
||||||
|
, 'language' : language
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_tags = [dict(name=['embed','il','ul','iframe','object','link','base']), dict(name='div', attrs={'id':'contentPhotoGallery'}), dict(name='div', attrs={'class':'SocialMediaWrapper'}), dict(name='div', attrs={'class':'grid2'}), dict(name='div', attrs={'class':'grid8'}), dict(name='div', attrs={'id':'anonsBar'}), dict(name='div', attrs={'id':'header'})]
|
||||||
|
remove_tags_before = dict(name='h1', attrs={'style':['margin-top: 6px;']})
|
||||||
|
remove_tags_after = dict(name='div', attrs={'id':'newsBody'})
|
||||||
|
feeds = [(u'NTVSpor', u'http://www.ntvspor.net/Rss/anasayfa')]
|
||||||
|
|
45
recipes/ntv_tr.recipe
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class NTVMSNBC(BasicNewsRecipe):
|
||||||
|
title = u'NTV'
|
||||||
|
__author__ = 'A Erdogan'
|
||||||
|
description = 'News from Turkey'
|
||||||
|
publisher = 'NTV'
|
||||||
|
category = 'news, politics, Turkey'
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
no_stylesheets = True
|
||||||
|
use_embedded_content = False
|
||||||
|
masthead_url = 'http://www.ntvmsnbc.com/images/MSNBC/msnbc_ban.gif'
|
||||||
|
language = 'tr'
|
||||||
|
|
||||||
|
|
||||||
|
remove_tags_before = dict(name='h1')
|
||||||
|
remove_tags_after = dict(attrs={'id':'haberDetayYazi'})
|
||||||
|
extra_css ='''
|
||||||
|
body{font-family:Arial,Helvetica,sans-serif; font-size:small; align:left; color:#000000}
|
||||||
|
h1{font-size:large; color:#000000}
|
||||||
|
h2{font-size:small; color:#000000}
|
||||||
|
p{font-size:small; color:#000000}
|
||||||
|
'''
|
||||||
|
|
||||||
|
conversion_options = {
|
||||||
|
'comment' : description
|
||||||
|
, 'tags' : category
|
||||||
|
, 'publisher' : publisher
|
||||||
|
, 'language' : language
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_tags = [dict(name=['embed','il','ul','iframe','object','link','base']), dict(name='div', attrs={'style':['padding: 0pt 10px 10px;']}), dict(name='div', attrs={'style':['padding: 0pt 10px 10px;']}), dict(name='div', attrs={'class':['textSmallGrey w320']}), dict(name='div', attrs={'style':['font-family:Arial; font-size:16px;font-weight:bold; font-color:#003366; margin-bottom:20px; margin-top:20px; border-bottom:solid 1px;border-color: #CCC; padding-bottom:2px;']})]
|
||||||
|
remove_tags_before = dict(name='h1')
|
||||||
|
remove_tags_after = dict(name='div', attrs={'style':['font-family:Arial; font-size:16px;font-weight:bold; font-color:#003366; margin-bottom:20px; margin-top:20px; border-bottom:solid 1px;border-color: #CCC; padding-bottom:2px;']})
|
||||||
|
|
||||||
|
feeds = [(u'NTV', u'http://www.ntvmsnbc.com/id/3032091/device/rss/rss.xml')]
|
||||||
|
|
||||||
|
def print_version(self, url):
|
||||||
|
articleid = url.rpartition('/id/')[2]
|
||||||
|
return 'http://www.ntvmsnbc.com/id/' + articleid + '/print/1/displaymode/1098/'
|
||||||
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
return self.adeify_images(soup)
|
||||||
|
|
95
recipes/pagina_12_print_ed.recipe
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
|
||||||
|
'''
|
||||||
|
pagina12.com.ar
|
||||||
|
'''
|
||||||
|
import re
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
from calibre.ebooks.BeautifulSoup import Tag, NavigableString
|
||||||
|
|
||||||
|
class Pagina12(BasicNewsRecipe):
|
||||||
|
|
||||||
|
title = 'Pagina/12 - Edicion Impresa'
|
||||||
|
__author__ = 'Pablo Marfil'
|
||||||
|
description = 'Diario argentino'
|
||||||
|
INDEX = 'http://www.pagina12.com.ar/diario/secciones/index.html'
|
||||||
|
language = 'es'
|
||||||
|
encoding = 'cp1252'
|
||||||
|
remove_tags_before = dict(id='fecha')
|
||||||
|
remove_tags_after = dict(id='fin')
|
||||||
|
remove_tags = [dict(id=['fecha', 'fin', 'pageControls','logo','logo_suple','fecha_suple','volver'])]
|
||||||
|
masthead_url = 'http://www.pagina12.com.ar/commons/imgs/logo-home.gif'
|
||||||
|
no_stylesheets = True
|
||||||
|
|
||||||
|
preprocess_regexps= [(re.compile(r'<!DOCTYPE[^>]+>', re.I), lambda m:'')]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def get_cover_url(self):
|
||||||
|
soup = self.index_to_soup('http://www.pagina12.com.ar/diario/principal/diario/index.html')
|
||||||
|
for image in soup.findAll('img',alt=True):
|
||||||
|
if image['alt'].startswith('Tapa de la fecha'):
|
||||||
|
return image['src']
|
||||||
|
print image
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def parse_index(self):
|
||||||
|
articles = []
|
||||||
|
numero = 1
|
||||||
|
raw = self.index_to_soup('http://www.pagina12.com.ar/diario/secciones/index.html', raw=True)
|
||||||
|
raw = re.sub(r'(?i)<!DOCTYPE[^>]+>', '', raw)
|
||||||
|
soup = self.index_to_soup(raw)
|
||||||
|
|
||||||
|
feeds = []
|
||||||
|
|
||||||
|
seen_titles = set([])
|
||||||
|
for section in soup.findAll('div','seccionx'):
|
||||||
|
numero+=1
|
||||||
|
print (numero)
|
||||||
|
section_title = self.tag_to_string(section.find('div','desplegable_titulo on_principal right'))
|
||||||
|
self.log('Found section:', section_title)
|
||||||
|
articles = []
|
||||||
|
for post in section.findAll('h2'):
|
||||||
|
h = post.find('a', href=True)
|
||||||
|
title = self.tag_to_string(h)
|
||||||
|
if title in seen_titles:
|
||||||
|
continue
|
||||||
|
seen_titles.add(title)
|
||||||
|
a = post.find('a', href=True)
|
||||||
|
url = a['href']
|
||||||
|
if url.startswith('/'):
|
||||||
|
url = 'http://pagina12.com.ar/imprimir'+url
|
||||||
|
p = post.find('div', attrs={'h2'})
|
||||||
|
desc = None
|
||||||
|
self.log('\tFound article:', title, 'at', url)
|
||||||
|
if p is not None:
|
||||||
|
desc = self.tag_to_string(p)
|
||||||
|
self.log('\t\t', desc)
|
||||||
|
articles.append({'title':title, 'url':url, 'description':desc,
|
||||||
|
'date':''})
|
||||||
|
if articles:
|
||||||
|
feeds.append((section_title, articles))
|
||||||
|
return feeds
|
||||||
|
|
||||||
|
|
||||||
|
def postprocess_html(self, soup, first):
|
||||||
|
for table in soup.findAll('table', align='right'):
|
||||||
|
img = table.find('img')
|
||||||
|
if img is not None:
|
||||||
|
img.extract()
|
||||||
|
caption = self.tag_to_string(table).strip()
|
||||||
|
div = Tag(soup, 'div')
|
||||||
|
div['style'] = 'text-align:center'
|
||||||
|
div.insert(0, img)
|
||||||
|
div.insert(1, Tag(soup, 'br'))
|
||||||
|
if caption:
|
||||||
|
div.insert(2, NavigableString(caption))
|
||||||
|
table.replaceWith(div)
|
||||||
|
|
||||||
|
return soup
|
||||||
|
|
@ -51,14 +51,13 @@ class pcWorld(BasicNewsRecipe):
|
|||||||
keep_only_tags = [
|
keep_only_tags = [
|
||||||
dict(name='div', attrs={'class':'article'})
|
dict(name='div', attrs={'class':'article'})
|
||||||
]
|
]
|
||||||
|
|
||||||
remove_tags = [
|
remove_tags = [
|
||||||
dict(name='div', attrs={'class':['toolBar','mac_tags','toolBar btmTools','recommend longRecommend','recommend shortRecommend','textAds']}),
|
dict(name='div', attrs={'class':['toolBar','mac_tags','toolBar btmTools','recommend longRecommend','recommend shortRecommend','textAds']}),
|
||||||
dict(name='div', attrs={'id':['sidebar','comments','mac_tags']}),
|
dict(name='div', attrs={'id':['sidebar','comments','mac_tags']}),
|
||||||
dict(name='ul', attrs={'class':'tools'}),
|
dict(name='ul', attrs={'class':['tools', 'tools clearfix']}),
|
||||||
dict(name='li', attrs={'class':'sub'})
|
dict(name='li', attrs={'class':'sub'}),
|
||||||
|
dict(name='p', attrs={'id':'userDesire'})
|
||||||
]
|
]
|
||||||
|
|
||||||
feeds = [
|
feeds = [
|
||||||
(u'PCWorld Headlines', u'http://feeds.pcworld.com/pcworld/latestnews'),
|
(u'PCWorld Headlines', u'http://feeds.pcworld.com/pcworld/latestnews'),
|
||||||
(u'How-To', u'http://feeds.pcworld.com/pcworld/update/howto'),
|
(u'How-To', u'http://feeds.pcworld.com/pcworld/update/howto'),
|
||||||
|
@ -14,54 +14,11 @@ class PeopleMag(BasicNewsRecipe):
|
|||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
oldest_article = 2
|
oldest_article = 2
|
||||||
max_articles_per_feed = 50
|
max_articles_per_feed = 50
|
||||||
|
use_embedded_content = False
|
||||||
|
|
||||||
extra_css = '''
|
no_stylesheets = True
|
||||||
h1{font-family:verdana,arial,helvetica,sans-serif; font-size: large;}
|
auto_cleanup = True
|
||||||
h2{font-family:verdana,arial,helvetica,sans-serif; font-size: small;}
|
auto_cleanup_keep = '//div[@id="article-image"]'
|
||||||
.body-content{font-family:verdana,arial,helvetica,sans-serif; font-size: small;}
|
|
||||||
.byline {font-size: small; color: #666666; font-style:italic; }
|
|
||||||
.lastline {font-size: small; color: #666666; font-style:italic;}
|
|
||||||
.contact {font-size: small; color: #666666;}
|
|
||||||
.contact p {font-size: small; color: #666666;}
|
|
||||||
.photoCaption { font-family:verdana,arial,helvetica,sans-serif; font-size:x-small;}
|
|
||||||
.photoCredit{ font-family:verdana,arial,helvetica,sans-serif; font-size:x-small; color:#666666;}
|
|
||||||
.article_timestamp{font-size:x-small; color:#666666;}
|
|
||||||
a {font-family:verdana,arial,helvetica,sans-serif; font-size: x-small;}
|
|
||||||
'''
|
|
||||||
|
|
||||||
|
|
||||||
keep_only_tags = [
|
|
||||||
dict(name='div', attrs={'class': 'panel_news_article_main'}),
|
|
||||||
dict(name='div', attrs={'class':'article_content'}),
|
|
||||||
dict(name='div', attrs={'class': 'headline'}),
|
|
||||||
dict(name='div', attrs={'class': 'post'}),
|
|
||||||
dict(name='div', attrs={'class': 'packageheadlines'}),
|
|
||||||
dict(name='div', attrs={'class': 'snap_preview'}),
|
|
||||||
dict(name='div', attrs={'id': 'articlebody'})
|
|
||||||
]
|
|
||||||
|
|
||||||
remove_tags = [
|
|
||||||
dict(name='div', attrs={'class':'share_comments'}),
|
|
||||||
dict(name='p', attrs={'class':'twitter_facebook'}),
|
|
||||||
dict(name='div', attrs={'class':'share_comments_bottom'}),
|
|
||||||
dict(name='h2', attrs={'id':'related_content'}),
|
|
||||||
dict(name='div', attrs={'class':'next_article'}),
|
|
||||||
dict(name='div', attrs={'class':'prev_article'}),
|
|
||||||
dict(name='ul', attrs={'id':'sharebar'}),
|
|
||||||
dict(name='div', attrs={'class':'sharelinkcont'}),
|
|
||||||
dict(name='div', attrs={'class':'categories'}),
|
|
||||||
dict(name='ul', attrs={'class':'categories'}),
|
|
||||||
dict(name='div', attrs={'class':'related_content'}),
|
|
||||||
dict(name='div', attrs={'id':'promo'}),
|
|
||||||
dict(name='div', attrs={'class':'linksWrapper'}),
|
|
||||||
dict(name='p', attrs={'class':'tag tvnews'}),
|
|
||||||
dict(name='p', attrs={'class':'tag movienews'}),
|
|
||||||
dict(name='p', attrs={'class':'tag musicnews'}),
|
|
||||||
dict(name='p', attrs={'class':'tag couples'}),
|
|
||||||
dict(name='p', attrs={'class':'tag gooddeeds'}),
|
|
||||||
dict(name='p', attrs={'class':'tag weddings'}),
|
|
||||||
dict(name='p', attrs={'class':'tag health'})
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
feeds = [
|
feeds = [
|
||||||
@ -69,26 +26,4 @@ class PeopleMag(BasicNewsRecipe):
|
|||||||
('US Headlines', 'http://www.usmagazine.com/celebrity_news/rss')
|
('US Headlines', 'http://www.usmagazine.com/celebrity_news/rss')
|
||||||
]
|
]
|
||||||
|
|
||||||
def get_article_url(self, article):
|
|
||||||
ans = article.link
|
|
||||||
|
|
||||||
try:
|
|
||||||
self.log('Looking for full story link in', ans)
|
|
||||||
soup = self.index_to_soup(ans)
|
|
||||||
x = soup.find(text="View All")
|
|
||||||
|
|
||||||
if x is not None:
|
|
||||||
ans = ans + '?viewAll=y'
|
|
||||||
self.log('Found full story link', ans)
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
return ans
|
|
||||||
|
|
||||||
def postprocess_html(self, soup,first):
|
|
||||||
|
|
||||||
for tag in soup.findAll(name='div',attrs={'class':"container_ate_qandatitle"}):
|
|
||||||
tag.extract()
|
|
||||||
for tag in soup.findAll(name='br'):
|
|
||||||
tag.extract()
|
|
||||||
|
|
||||||
return soup
|
|
||||||
|
@ -1,45 +1,35 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class AdvancedUserRecipe1308312288(BasicNewsRecipe):
|
class BasicUserRecipe1314970845(BasicNewsRecipe):
|
||||||
title = u'Philadelphia Inquirer'
|
title = u'Philadelphia Inquirer'
|
||||||
__author__ = 'sexymax15'
|
oldest_article = 3
|
||||||
language = 'en'
|
max_articles_per_feed = 50
|
||||||
description = 'Daily news from the Philadelphia Inquirer'
|
auto_cleanup = True
|
||||||
oldest_article = 15
|
language= 'en'
|
||||||
max_articles_per_feed = 20
|
__author__ = 'bing'
|
||||||
use_embedded_content = False
|
requires_version = (0, 8, 16)
|
||||||
remove_empty_feeds = True
|
|
||||||
no_stylesheets = True
|
|
||||||
remove_javascript = True
|
|
||||||
|
|
||||||
# remove_tags_before = {'class':'article_timestamp'}
|
feeds = [
|
||||||
#remove_tags_after = {'class':'graylabel'}
|
(u'Front Page', u'http://www.philly.com/inquirer_front_page.rss'),
|
||||||
keep_only_tags= [dict(name=['h1','p'])]
|
(u'Philly.com News', u'http://www.philly.com/philly_news.rss'),
|
||||||
remove_tags = [dict(name=['hr','dl','dt','img','meta','iframe','link','script','form','input','label']),
|
(u'National/World (Philly.com)', u'http://www.philly.com/philly_news_nation.rss'),
|
||||||
dict(id=['toggleConfirmEmailDiv','toggleTOS','toggleUsernameMsgDiv','toggleConfirmYear','navT1_philly','secondaryNav','navPlacement','globalPrimaryNav'
|
(u'Politics (Philly.com)', u'http://www.philly.com/philly_politics.rss'),
|
||||||
,'ugc-footer-philly','bv_footer_include','footer','header',
|
(u'Local (Philly.com)', u'http://www.philly.com/philly_news_local.rss'),
|
||||||
'container_rag_bottom','section_rectangle','contentrightside'])
|
(u'South Jersey News', u'http://www.philly.com/inq_news_south_jersey.rss'),
|
||||||
,{'class':['megamenu3 megamenu','container misc','container_inner misc_inner'
|
(u'Sports', u'http://www.philly.com/inquirer_sports.rss'),
|
||||||
,'misccontainer_left_32','headlineonly','misccontainer_middle_32'
|
(u'Tech News', u'http://www.philly.com/philly_tech.rss'),
|
||||||
,'misccontainer_right_32','headline formBegin',
|
(u'Daily Magazine', u'http://www.philly.com/inq_magazine_daily.rss'),
|
||||||
'post_balloon','relatedlist','linkssubhead','b_sq','dotted-rule-above'
|
(u'Weekend', u'http://www.philly.com/inq_entertainment_weekend.rss'),
|
||||||
,'container','headlines-digest','graylabel','container_inner'
|
(u'Business', u'http://www.philly.com/inq_business.rss'),
|
||||||
,'rlinks_colorbar1','rlinks_colorbar2','supercontainer','container_5col_left','container_image_left',
|
(u'Education', u'http://www.philly.com/inquirer_education.rss'),
|
||||||
'digest-headline2','digest-lead','container_5col_leftmiddle',
|
(u'Books', u'http://www.philly.com/inq_books.rss'),
|
||||||
'container_5col_middlemiddle','container_5col_rightmiddle'
|
(u'Entertainment', u'http://www.philly.com/inq_entertainment.rss'),
|
||||||
,'container_5col_right','divclear','supercontainer_outer force-width',
|
(u'Food', u'http://www.philly.com/inq_food.rss'),
|
||||||
'supercontainer','containertitle kicker-title',
|
(u'Health and Science', u'http://www.philly.com/inquirer_health_science.rss'),
|
||||||
'pollquestion','pollchoice','photomore','pollbutton','container rssbox','containertitle video ',
|
(u'Home and Design', u'http://www.philly.com/inq_home_design.rss'),
|
||||||
'containertitle_image ','container_tabtwo','selected'
|
(u'News Columnists', u'http://www.philly.com/inq_columnists.rss'),
|
||||||
,'shadetabs','selected','tabcontentstyle','tabcontent','inner_container'
|
(u'Editorial', u'http://www.philly.com/inq_news_editorial.rss'),
|
||||||
,'arrow','container_ad','containertitlespacer','adUnit','tracking','sitemsg_911 clearfix']}]
|
(u'Travel', u'http://www.philly.com/inquirer_travel.rss'),
|
||||||
|
(u'Obituaries', u'http://www.philly.com/inquirer_obituaries.rss')
|
||||||
extra_css = """
|
]
|
||||||
h1{font-family: Georgia,serif; font-size: xx-large}
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
feeds = [(u'News', u'http://www.philly.com/philly_news.rss')]
|
|
||||||
|
|
||||||
|
64
recipes/rtnews.recipe
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = '2011, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
|
'''
|
||||||
|
rt.com
|
||||||
|
'''
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class RT_eng(BasicNewsRecipe):
|
||||||
|
title = 'RT in English'
|
||||||
|
__author__ = 'Darko Miletic'
|
||||||
|
description = 'RT is the first Russian 24/7 English-language news channel which brings the Russian view on global news.'
|
||||||
|
publisher = 'Autonomous Nonprofit Organization "TV-Novosti"'
|
||||||
|
category = 'news, politics, economy, finances, Russia, world'
|
||||||
|
oldest_article = 2
|
||||||
|
no_stylesheets = True
|
||||||
|
encoding = 'utf8'
|
||||||
|
masthead_url = 'http://rt.com/s/css/img/printlogo.gif'
|
||||||
|
use_embedded_content = False
|
||||||
|
remove_empty_feeds = True
|
||||||
|
language = 'en_RU'
|
||||||
|
publication_type = 'newsportal'
|
||||||
|
extra_css = """
|
||||||
|
body{font-family: Arial,Helvetica,sans-serif}
|
||||||
|
h1{font-family: Georgia,"Times New Roman",Times,serif}
|
||||||
|
.grey{color: gray}
|
||||||
|
.fs12{font-size: small}
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
conversion_options = {
|
||||||
|
'comment' : description
|
||||||
|
, 'tags' : category
|
||||||
|
, 'publisher': publisher
|
||||||
|
, 'language' : language
|
||||||
|
}
|
||||||
|
|
||||||
|
keep_only_tags = [dict(name='div', attrs={'class':'all'})]
|
||||||
|
remove_tags = [
|
||||||
|
dict(name=['object','link','embed','iframe','meta','link'])
|
||||||
|
,dict(attrs={'class':'crumbs oh'})
|
||||||
|
]
|
||||||
|
remove_attributes = ['clear']
|
||||||
|
|
||||||
|
feeds = [
|
||||||
|
(u'Politics' , u'http://rt.com/politics/rss/' )
|
||||||
|
,(u'USA' , u'http://rt.com/usa/news/rss/' )
|
||||||
|
,(u'Business' , u'http://rt.com/business/news/rss/' )
|
||||||
|
,(u'Sport' , u'http://rt.com/sport/rss/' )
|
||||||
|
,(u'Art&Culture', u'http://rt.com/art-and-culture/news/rss/')
|
||||||
|
]
|
||||||
|
|
||||||
|
def print_version(self, url):
|
||||||
|
return url + 'print/'
|
||||||
|
|
||||||
|
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
|
@ -1,5 +1,5 @@
|
|||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2009-2011, Darko Miletic <darko.miletic at gmail.com>'
|
__copyright__ = '2011, M. Ching modified from work 2009-2011 Darko Miletic <darko.miletic at gmail.com>'
|
||||||
'''
|
'''
|
||||||
staradvertiser.com
|
staradvertiser.com
|
||||||
'''
|
'''
|
||||||
@ -7,12 +7,13 @@ staradvertiser.com
|
|||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class Starbulletin(BasicNewsRecipe):
|
class Starbulletin(BasicNewsRecipe):
|
||||||
title = 'Honolulu Star Advertiser'
|
title = 'Honolulu Star-Advertiser'
|
||||||
__author__ = 'Darko Miletic'
|
__author__ = 'Darko Miletic'
|
||||||
description = 'Latest national and local Hawaii sports news'
|
description = 'Latest national and local Hawaii sports news'
|
||||||
publisher = 'Honolulu Star-Advertiser'
|
publisher = 'Honolulu Star-Advertiser'
|
||||||
category = 'news, Honolulu, Hawaii'
|
category = 'news, Honolulu, Hawaii'
|
||||||
oldest_article = 2
|
oldest_article = 2
|
||||||
|
needs_subscription = True
|
||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
language = 'en'
|
language = 'en'
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
@ -20,12 +21,12 @@ class Starbulletin(BasicNewsRecipe):
|
|||||||
encoding = 'utf8'
|
encoding = 'utf8'
|
||||||
publication_type = 'newspaper'
|
publication_type = 'newspaper'
|
||||||
masthead_url = 'http://media.staradvertiser.com/designimages/star-advertiser-logo-small.gif'
|
masthead_url = 'http://media.staradvertiser.com/designimages/star-advertiser-logo-small.gif'
|
||||||
extra_css = """
|
# extra_css = """
|
||||||
body{font-family: Verdana,Arial,Helvetica,sans-serif}
|
# body{font-family: Verdana,Arial,Helvetica,sans-serif}
|
||||||
h1,.brown,.postCredit{color: #663300}
|
# h1,.brown,.hsa_postCredit{color: #663300}
|
||||||
.storyDeck{font-size: 1.2em; font-weight: bold}
|
# .storyDeck{font-size: 1.2em; font-weight: bold}
|
||||||
img{display: block}
|
# img{display: block}
|
||||||
"""
|
# """
|
||||||
|
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
'comment' : description
|
'comment' : description
|
||||||
@ -35,26 +36,38 @@ class Starbulletin(BasicNewsRecipe):
|
|||||||
, 'linearize_tables' : True
|
, 'linearize_tables' : True
|
||||||
}
|
}
|
||||||
keep_only_tags = [
|
keep_only_tags = [
|
||||||
dict(attrs={'id':'storyTitle'})
|
dict(attrs={'id':'hsa_storyTitle'})
|
||||||
,dict(attrs={'class':['storyDeck','postCredit']})
|
,dict(attrs={'id':'hsa_storyTitle article-important'})
|
||||||
,dict(name='span',attrs={'class':'brown'})
|
,dict(attrs={'class':['hsa_dateStamp','hsa_postCredit','storyDeck']})
|
||||||
|
,dict(name='span',attrs={'class':['hsa_dateStamp','hsa_postCredit']})
|
||||||
|
,dict(name='span',attrs={'class':['hsa_dateStamp article-important','hsa_postCredit article-important']})
|
||||||
|
,dict(name='div',attrs={'class':'storytext article-important'})
|
||||||
,dict(name='div',attrs={'class':'storytext'})
|
,dict(name='div',attrs={'class':'storytext'})
|
||||||
]
|
]
|
||||||
remove_tags = [
|
remove_tags = [
|
||||||
dict(name=['object','link','script','span','meta','base','iframe'])
|
dict(name=['object','link','script','meta','base','iframe'])
|
||||||
|
# removed 'span' from preceding list to permit keeping of author and timestamp
|
||||||
,dict(attrs={'class':['insideStoryImage','insideStoryAd']})
|
,dict(attrs={'class':['insideStoryImage','insideStoryAd']})
|
||||||
,dict(attrs={'name':'fb_share'})
|
,dict(attrs={'name':'fb_share'})
|
||||||
]
|
]
|
||||||
|
|
||||||
feeds = [
|
def get_browser(self):
|
||||||
(u'Headlines' , u'http://www.staradvertiser.com/staradvertiser_headlines.rss' )
|
br = BasicNewsRecipe.get_browser()
|
||||||
,(u'News' , u'http://www.staradvertiser.com/news/index.rss' )
|
if self.username is not None and self.password is not None:
|
||||||
,(u'Sports' , u'http://www.staradvertiser.com/sports/index.rss' )
|
br.open('http://www.staradvertiser.com/manage/Login/')
|
||||||
,(u'Features' , u'http://www.staradvertiser.com/features/index.rss' )
|
br.select_form(name='loginForm')
|
||||||
,(u'Editorials', u'http://www.staradvertiser.com/editorials/index.rss' )
|
br['email'] = self.username
|
||||||
,(u'Business' , u'http://www.staradvertiser.com/business/index.rss' )
|
br['password'] = self.password
|
||||||
,(u'Travel' , u'http://www.staradvertiser.com/travel/index.rss' )
|
br.submit()
|
||||||
]
|
return br
|
||||||
|
|
||||||
|
feeds = [
|
||||||
|
(u'Breaking News', u'http://www.staradvertiser.com/news/breaking/index.rss')
|
||||||
|
,(u'News', u'http://www.staradvertiser.com/newspremium/index.rss')
|
||||||
|
,(u'Business', u'http://www.staradvertiser.com/businesspremium/index.rss')
|
||||||
|
,(u'Sports', u'http://www.staradvertiser.com/sportspremium/index.rss')
|
||||||
|
,(u'Features', u'http://www.staradvertiser.com/featurespremium/index.rss')
|
||||||
|
]
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
def preprocess_html(self, soup):
|
||||||
for item in soup.findAll(style=True):
|
for item in soup.findAll(style=True):
|
||||||
@ -75,4 +88,4 @@ class Starbulletin(BasicNewsRecipe):
|
|||||||
if not item.has_key('alt'):
|
if not item.has_key('alt'):
|
||||||
item['alt'] = 'image'
|
item['alt'] = 'image'
|
||||||
return soup
|
return soup
|
||||||
|
|
||||||
|
12
recipes/tablety_pl.recipe
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Tablety_pl(BasicNewsRecipe):
|
||||||
|
title = u'Tablety.pl'
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = u'tablety.pl - latest tablet news'
|
||||||
|
cover_url = 'http://www.tablety.pl/wp-content/themes/kolektyw/img/logo.png'
|
||||||
|
category = 'IT'
|
||||||
|
language = 'pl'
|
||||||
|
oldest_article = 8
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
feeds = [(u'Najnowsze posty', u'http://www.tablety.pl/feed/')]
|
30
recipes/taipei.recipe
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class TN(BasicNewsRecipe):
|
||||||
|
title = u'Taipei Times'
|
||||||
|
language = 'en_CN'
|
||||||
|
__author__ = 'Krittika Goyal'
|
||||||
|
oldest_article = 1 #days
|
||||||
|
max_articles_per_feed = 25
|
||||||
|
use_embedded_content = False
|
||||||
|
|
||||||
|
no_stylesheets = True
|
||||||
|
auto_cleanup = True
|
||||||
|
auto_cleanup_keep = '//*[@class="main_ipic"]'
|
||||||
|
|
||||||
|
feeds = [
|
||||||
|
('Editorials',
|
||||||
|
'http://www.taipeitimes.com/xml/editorials.rss'),
|
||||||
|
('Taiwan',
|
||||||
|
'http://www.taipeitimes.com/xml/taiwan.rss'),
|
||||||
|
('Features',
|
||||||
|
'http://www.taipeitimes.com/xml/feat.rss'),
|
||||||
|
('Business',
|
||||||
|
'http://www.taipeitimes.com/xml/biz.rss'),
|
||||||
|
('World',
|
||||||
|
'http://www.taipeitimes.com/xml/world.rss'),
|
||||||
|
('Sports',
|
||||||
|
'http://www.taipeitimes.com/xml/sport.rss'),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
@ -15,12 +15,12 @@ class Time(BasicNewsRecipe):
|
|||||||
# ' publish complete articles on the web.')
|
# ' publish complete articles on the web.')
|
||||||
title = u'Time'
|
title = u'Time'
|
||||||
__author__ = 'Kovid Goyal'
|
__author__ = 'Kovid Goyal'
|
||||||
description = 'Weekly magazine'
|
description = ('Weekly US magazine.')
|
||||||
encoding = 'utf-8'
|
encoding = 'utf-8'
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
language = 'en'
|
language = 'en'
|
||||||
remove_javascript = True
|
remove_javascript = True
|
||||||
|
#needs_subscription = 'optional'
|
||||||
|
|
||||||
keep_only_tags = [
|
keep_only_tags = [
|
||||||
{
|
{
|
||||||
@ -41,6 +41,21 @@ class Time(BasicNewsRecipe):
|
|||||||
preprocess_regexps = [(re.compile(
|
preprocess_regexps = [(re.compile(
|
||||||
r'<meta .+/>'), lambda m:'')]
|
r'<meta .+/>'), lambda m:'')]
|
||||||
|
|
||||||
|
def get_browser(self):
|
||||||
|
br = BasicNewsRecipe.get_browser(self)
|
||||||
|
if False and self.username and self.password:
|
||||||
|
# This site uses javascript in its login process
|
||||||
|
res = br.open('http://www.time.com/time/magazine')
|
||||||
|
br.select_form(nr=1)
|
||||||
|
br['username'] = self.username
|
||||||
|
br['password'] = self.password
|
||||||
|
res = br.submit()
|
||||||
|
raw = res.read()
|
||||||
|
if '>Log Out<' not in raw:
|
||||||
|
raise ValueError('Failed to login to time.com, check'
|
||||||
|
' your username and password')
|
||||||
|
return br
|
||||||
|
|
||||||
def parse_index(self):
|
def parse_index(self):
|
||||||
raw = self.index_to_soup('http://www.time.com/time/magazine', raw=True)
|
raw = self.index_to_soup('http://www.time.com/time/magazine', raw=True)
|
||||||
root = html.fromstring(raw)
|
root = html.fromstring(raw)
|
||||||
|
@ -1,12 +1,9 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2009, Darko Miletic <darko.miletic at gmail.com>'
|
__copyright__ = '2009-2011, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
'''
|
'''
|
||||||
twitchfilm.net/site/
|
twitchfilm.net/news/
|
||||||
'''
|
'''
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
from calibre.ebooks.BeautifulSoup import Tag
|
|
||||||
|
|
||||||
class Twitchfilm(BasicNewsRecipe):
|
class Twitchfilm(BasicNewsRecipe):
|
||||||
title = 'Twitch Films'
|
title = 'Twitch Films'
|
||||||
@ -15,29 +12,46 @@ class Twitchfilm(BasicNewsRecipe):
|
|||||||
oldest_article = 30
|
oldest_article = 30
|
||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
use_embedded_content = True
|
use_embedded_content = False
|
||||||
encoding = 'utf-8'
|
encoding = 'utf-8'
|
||||||
publisher = 'Twitch'
|
publisher = 'Twitch'
|
||||||
|
masthead_url = 'http://twitchfilm.com/img/logo.png'
|
||||||
category = 'twitch, twitchfilm, movie news, movie reviews, cult cinema, independent cinema, anime, foreign cinema, geek talk'
|
category = 'twitch, twitchfilm, movie news, movie reviews, cult cinema, independent cinema, anime, foreign cinema, geek talk'
|
||||||
language = 'en'
|
language = 'en'
|
||||||
|
|
||||||
lang = 'en-US'
|
|
||||||
|
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
'comment' : description
|
'comment' : description
|
||||||
, 'tags' : category
|
, 'tags' : category
|
||||||
, 'publisher' : publisher
|
, 'publisher': publisher
|
||||||
, 'language' : lang
|
, 'language' : language
|
||||||
, 'pretty_print' : True
|
|
||||||
}
|
}
|
||||||
|
|
||||||
remove_tags = [dict(name='div', attrs={'class':'feedflare'})]
|
keep_only_tags=[dict(attrs={'class':'asset-header'})]
|
||||||
|
remove_tags_after=dict(attrs={'class':'asset-body'})
|
||||||
|
remove_tags = [ dict(name='div', attrs={'class':['social','categories']})
|
||||||
|
, dict(attrs={'id':'main-asset'})
|
||||||
|
, dict(name=['meta','link','iframe','embed','object'])
|
||||||
|
]
|
||||||
|
|
||||||
feeds = [(u'News', u'http://feedproxy.google.com/TwitchEverything')]
|
feeds = [(u'News', u'http://feeds.twitchfilm.net/TwitchEverything')]
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
def preprocess_html(self, soup):
|
||||||
mtag = Tag(soup,'meta',[('http-equiv','Content-Type'),('context','text/html; charset=utf-8')])
|
for item in soup.findAll(style=True):
|
||||||
soup.head.insert(0,mtag)
|
del item['style']
|
||||||
soup.html['lang'] = self.lang
|
for item in soup.findAll('a'):
|
||||||
return self.adeify_images(soup)
|
limg = item.find('img')
|
||||||
|
if item.string is not None:
|
||||||
|
str = item.string
|
||||||
|
item.replaceWith(str)
|
||||||
|
else:
|
||||||
|
if limg:
|
||||||
|
item.name = 'div'
|
||||||
|
item.attrs = []
|
||||||
|
else:
|
||||||
|
str = self.tag_to_string(item)
|
||||||
|
item.replaceWith(str)
|
||||||
|
for item in soup.findAll('img'):
|
||||||
|
if not item.has_key('alt'):
|
||||||
|
item['alt'] = 'image'
|
||||||
|
return soup
|
||||||
|
|
||||||
|
16
recipes/ubuntu_pl.recipe
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Ubuntu_pl(BasicNewsRecipe):
|
||||||
|
title = u'UBUNTU.pl'
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = 'UBUNTU.pl - polish ubuntu community site'
|
||||||
|
cover_url = 'http://ubuntu.pl/img/logo.jpg'
|
||||||
|
category = 'linux, IT'
|
||||||
|
language = 'pl'
|
||||||
|
no_stylesheets = True
|
||||||
|
oldest_article = 8
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
extra_css = '#main {text-align:left;}'
|
||||||
|
keep_only_tags= [dict(name='td', attrs={'class':'teaser-node-mc'}), dict(name='h3', attrs={'class':'entry-title'}), dict(name='div', attrs={'class':'entry-content'})]
|
||||||
|
remove_tags_after= [dict(name='div' , attrs={'class':'content'})]
|
||||||
|
feeds = [('Czytelnia Ubuntu', 'http://feeds.feedburner.com/ubuntu-czytelnia'), (u'WikiGames', u'http://feeds.feedburner.com/WikiGames')]
|
@ -13,6 +13,7 @@ class USAToday(BasicNewsRecipe):
|
|||||||
title = 'USA Today'
|
title = 'USA Today'
|
||||||
__author__ = 'Kovid Goyal'
|
__author__ = 'Kovid Goyal'
|
||||||
oldest_article = 1
|
oldest_article = 1
|
||||||
|
publication_type = 'newspaper'
|
||||||
timefmt = ''
|
timefmt = ''
|
||||||
max_articles_per_feed = 20
|
max_articles_per_feed = 20
|
||||||
language = 'en'
|
language = 'en'
|
||||||
|
@ -94,9 +94,11 @@ class WallStreetJournal(BasicNewsRecipe):
|
|||||||
if date is not None:
|
if date is not None:
|
||||||
self.timefmt = ' [%s]'%self.tag_to_string(date)
|
self.timefmt = ' [%s]'%self.tag_to_string(date)
|
||||||
|
|
||||||
cov = soup.find('a', attrs={'class':'icon pdf'}, href=True)
|
cov = soup.find('div', attrs={'class':'itpSectionHeaderPdf'})
|
||||||
if cov is not None:
|
if cov is not None:
|
||||||
self.cover_url = cov['href']
|
a = cov.find('a', href=True)
|
||||||
|
if a is not None:
|
||||||
|
self.cover_url = a['href']
|
||||||
|
|
||||||
feeds = []
|
feeds = []
|
||||||
div = soup.find('div', attrs={'class':'itpHeader'})
|
div = soup.find('div', attrs={'class':'itpHeader'})
|
||||||
|
@ -61,18 +61,27 @@ authors_completer_append_separator = False
|
|||||||
# selecting 'manage authors', and pressing 'Recalculate all author sort values'.
|
# selecting 'manage authors', and pressing 'Recalculate all author sort values'.
|
||||||
# The author name suffixes are words that are ignored when they occur at the
|
# The author name suffixes are words that are ignored when they occur at the
|
||||||
# end of an author name. The case of the suffix is ignored and trailing
|
# end of an author name. The case of the suffix is ignored and trailing
|
||||||
# periods are automatically handled.
|
# periods are automatically handled. The same is true for prefixes.
|
||||||
# The author name copy words are a set of words which if they occur in an
|
# The author name copy words are a set of words which if they occur in an
|
||||||
# author name cause the automatically geenrated author sort string to be
|
# author name cause the automatically generated author sort string to be
|
||||||
# identical to the author name. This means that the sort for a string like Acme
|
# identical to the author name. This means that the sort for a string like Acme
|
||||||
# Inc. will be Acme Inc. instead of Inc., Acme
|
# Inc. will be Acme Inc. instead of Inc., Acme
|
||||||
author_sort_copy_method = 'comma'
|
author_sort_copy_method = 'comma'
|
||||||
author_name_suffixes = ('Jr', 'Sr', 'Inc', 'Ph.D', 'Phd',
|
author_name_suffixes = ('Jr', 'Sr', 'Inc', 'Ph.D', 'Phd',
|
||||||
'MD', 'M.D', 'I', 'II', 'III', 'IV',
|
'MD', 'M.D', 'I', 'II', 'III', 'IV',
|
||||||
'Junior', 'Senior')
|
'Junior', 'Senior')
|
||||||
|
author_name_prefixes = ('Mr', 'Mrs', 'Ms', 'Dr', 'Prof')
|
||||||
author_name_copywords = ('Corporation', 'Company', 'Co.', 'Agency', 'Council',
|
author_name_copywords = ('Corporation', 'Company', 'Co.', 'Agency', 'Council',
|
||||||
'Committee', 'Inc.', 'Institute', 'Society', 'Club', 'Team')
|
'Committee', 'Inc.', 'Institute', 'Society', 'Club', 'Team')
|
||||||
|
|
||||||
|
#: Splitting multiple author names
|
||||||
|
# By default, calibre splits a string containing multiple author names on
|
||||||
|
# ampersands and the words "and" and "with". You can customize the splitting
|
||||||
|
# by changing the regular expression below. Strings are split on whatever the
|
||||||
|
# specified regular expression matches.
|
||||||
|
# Default: r'(?i),?\s+(and|with)\s+'
|
||||||
|
authors_split_regex = r'(?i),?\s+(and|with)\s+'
|
||||||
|
|
||||||
#: Use author sort in Tag Browser
|
#: Use author sort in Tag Browser
|
||||||
# Set which author field to display in the tags pane (the list of authors,
|
# Set which author field to display in the tags pane (the list of authors,
|
||||||
# series, publishers etc on the left hand side). The choices are author and
|
# series, publishers etc on the left hand side). The choices are author and
|
||||||
|
@ -98,7 +98,7 @@
|
|||||||
<xsl:apply-templates/>
|
<xsl:apply-templates/>
|
||||||
</emph>
|
</emph>
|
||||||
</xsl:when>
|
</xsl:when>
|
||||||
<xsl:when test = "@underlined">
|
<xsl:when test = "@underlined and @underlined != 'false'">
|
||||||
<emph rend = "paragraph-emph-underlined">
|
<emph rend = "paragraph-emph-underlined">
|
||||||
<xsl:apply-templates/>
|
<xsl:apply-templates/>
|
||||||
</emph>
|
</emph>
|
||||||
@ -220,7 +220,7 @@
|
|||||||
</xsl:template>
|
</xsl:template>
|
||||||
|
|
||||||
<xsl:template name="parse-styles-attrs">
|
<xsl:template name="parse-styles-attrs">
|
||||||
<!--<xsl:text>position:relative;</xsl:text>-->
|
<!--<xsl:text>position:relative;</xsl:text>
|
||||||
<xsl:if test="@space-before">
|
<xsl:if test="@space-before">
|
||||||
<xsl:text>padding-top:</xsl:text>
|
<xsl:text>padding-top:</xsl:text>
|
||||||
<xsl:value-of select="@space-before"/>
|
<xsl:value-of select="@space-before"/>
|
||||||
@ -230,7 +230,7 @@
|
|||||||
<xsl:text>padding-bottom:</xsl:text>
|
<xsl:text>padding-bottom:</xsl:text>
|
||||||
<xsl:value-of select="@space-after"/>
|
<xsl:value-of select="@space-after"/>
|
||||||
<xsl:text>pt;</xsl:text>
|
<xsl:text>pt;</xsl:text>
|
||||||
</xsl:if>
|
</xsl:if>-->
|
||||||
<xsl:if test="@left-indent">
|
<xsl:if test="@left-indent">
|
||||||
<xsl:text>padding-left:</xsl:text>
|
<xsl:text>padding-left:</xsl:text>
|
||||||
<xsl:value-of select="@left-indent"/>
|
<xsl:value-of select="@left-indent"/>
|
||||||
@ -256,15 +256,15 @@
|
|||||||
<xsl:value-of select="'italic'"/>
|
<xsl:value-of select="'italic'"/>
|
||||||
<xsl:text>;</xsl:text>
|
<xsl:text>;</xsl:text>
|
||||||
</xsl:if>
|
</xsl:if>
|
||||||
<xsl:if test="@underline and @underline != 'false'">
|
<xsl:if test="@underlined and @underlined != 'false'">
|
||||||
<xsl:text>text-decoration:underline</xsl:text>
|
<xsl:text>text-decoration:underline</xsl:text>
|
||||||
<xsl:text>;</xsl:text>
|
<xsl:text>;</xsl:text>
|
||||||
</xsl:if>
|
</xsl:if>
|
||||||
<xsl:if test="@line-spacing">
|
<!--<xsl:if test="@line-spacing">
|
||||||
<xsl:text>line-height:</xsl:text>
|
<xsl:text>line-height:</xsl:text>
|
||||||
<xsl:value-of select="@line-spacing"/>
|
<xsl:value-of select="@line-spacing"/>
|
||||||
<xsl:text>pt;</xsl:text>
|
<xsl:text>pt;</xsl:text>
|
||||||
</xsl:if>
|
</xsl:if>-->
|
||||||
<xsl:if test="(@align = 'just')">
|
<xsl:if test="(@align = 'just')">
|
||||||
<xsl:text>text-align: justify;</xsl:text>
|
<xsl:text>text-align: justify;</xsl:text>
|
||||||
</xsl:if>
|
</xsl:if>
|
||||||
@ -314,7 +314,6 @@
|
|||||||
</xsl:attribute>
|
</xsl:attribute>
|
||||||
<xsl:apply-templates/>
|
<xsl:apply-templates/>
|
||||||
</xsl:element>
|
</xsl:element>
|
||||||
|
|
||||||
</xsl:otherwise>
|
</xsl:otherwise>
|
||||||
</xsl:choose>
|
</xsl:choose>
|
||||||
</xsl:template>
|
</xsl:template>
|
||||||
@ -446,8 +445,15 @@
|
|||||||
|
|
||||||
<xsl:template match = "rtf:field[@type='hyperlink']">
|
<xsl:template match = "rtf:field[@type='hyperlink']">
|
||||||
<xsl:element name ="a">
|
<xsl:element name ="a">
|
||||||
<xsl:attribute name = "href">
|
<xsl:attribute name = "href"><xsl:if test="not(contains(@link, '/'))">#</xsl:if><xsl:value-of select = "@link"/></xsl:attribute>
|
||||||
<xsl:value-of select = "@link"/>
|
<xsl:apply-templates/>
|
||||||
|
</xsl:element>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match = "rtf:field[@type='bookmark-start']">
|
||||||
|
<xsl:element name ="a">
|
||||||
|
<xsl:attribute name = "id">
|
||||||
|
<xsl:value-of select = "@number"/>
|
||||||
</xsl:attribute>
|
</xsl:attribute>
|
||||||
<xsl:apply-templates/>
|
<xsl:apply-templates/>
|
||||||
</xsl:element>
|
</xsl:element>
|
||||||
|
@ -63,10 +63,10 @@ class Check(Command):
|
|||||||
for f in x[-1]:
|
for f in x[-1]:
|
||||||
y = self.j(x[0], f)
|
y = self.j(x[0], f)
|
||||||
mtime = os.stat(y).st_mtime
|
mtime = os.stat(y).st_mtime
|
||||||
if f.endswith('.py') and f not in ('ptempfile.py', 'feedparser.py',
|
if (f.endswith('.py') and f not in ('ptempfile.py', 'feedparser.py',
|
||||||
'pyparsing.py', 'markdown.py') and \
|
'pyparsing.py', 'markdown.py') and
|
||||||
'genshi' not in y and cache.get(y, 0) != mtime and \
|
'genshi' not in y and cache.get(y, 0) != mtime and
|
||||||
'prs500/driver.py' not in y:
|
'prs500/driver.py' not in y):
|
||||||
yield y, mtime
|
yield y, mtime
|
||||||
|
|
||||||
for x in os.walk(self.j(self.d(self.SRC), 'recipes')):
|
for x in os.walk(self.j(self.d(self.SRC), 'recipes')):
|
||||||
|
10269
setup/iso_639/af.po
6992
setup/iso_639/am.po
7568
setup/iso_639/ar.po
7656
setup/iso_639/az.po
@ -8,17 +8,18 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: iso_639_3\n"
|
"Project-Id-Version: iso_639_3\n"
|
||||||
"Report-Msgid-Bugs-To: Debian iso-codes team <pkg-isocodes-devel@lists.alioth."
|
"Report-Msgid-Bugs-To: Debian iso-codes team <pkg-isocodes-"
|
||||||
"debian.org>\n"
|
"devel@lists.alioth.debian.org>\n"
|
||||||
"POT-Creation-Date: 2011-05-27 14:59+0200\n"
|
"POT-Creation-Date: 2011-09-02 16:21+0000\n"
|
||||||
"PO-Revision-Date: 2011-07-10 19:40+0300\n"
|
"PO-Revision-Date: 2011-08-27 04:12+0000\n"
|
||||||
"Last-Translator: Roumen Petrov <transl@roumenpetrov.info>\n"
|
"Last-Translator: Roumen Petrov <Unknown>\n"
|
||||||
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
|
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
|
||||||
"Language: bg\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"X-Launchpad-Export-Date: 2011-09-03 04:56+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 13830)\n"
|
||||||
|
"Language: bg\n"
|
||||||
|
|
||||||
#. name for aaa
|
#. name for aaa
|
||||||
msgid "Ghotuo"
|
msgid "Ghotuo"
|
||||||
|
@ -9,16 +9,18 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: iso_639_3\n"
|
"Project-Id-Version: iso_639_3\n"
|
||||||
"Report-Msgid-Bugs-To: Debian iso-codes team <pkg-isocodes-devel@lists.alioth."
|
"Report-Msgid-Bugs-To: Debian iso-codes team <pkg-isocodes-"
|
||||||
"debian.org>\n"
|
"devel@lists.alioth.debian.org>\n"
|
||||||
"POT-Creation-Date: 2011-05-27 14:59+0200\n"
|
"POT-Creation-Date: 2011-09-02 16:21+0000\n"
|
||||||
"PO-Revision-Date: 2009-04-19 06:03+0000\n"
|
"PO-Revision-Date: 2011-08-27 07:57+0000\n"
|
||||||
"Last-Translator: Denis <Unknown>\n"
|
"Last-Translator: Kovid Goyal <Unknown>\n"
|
||||||
"Language-Team: Breton <brenux@free.fr>\n"
|
"Language-Team: Breton <brenux@free.fr>\n"
|
||||||
"Language: br\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"X-Launchpad-Export-Date: 2011-09-03 04:56+0000\n"
|
||||||
|
"X-Generator: Launchpad (build 13830)\n"
|
||||||
|
"Language: br\n"
|
||||||
|
|
||||||
#. name for aaa
|
#. name for aaa
|
||||||
msgid "Ghotuo"
|
msgid "Ghotuo"
|
||||||
@ -125,9 +127,8 @@ msgid "Ayta, Ambala"
|
|||||||
msgstr "Ayta, Ambala"
|
msgstr "Ayta, Ambala"
|
||||||
|
|
||||||
#. name for abd
|
#. name for abd
|
||||||
#, fuzzy
|
|
||||||
msgid "Manide"
|
msgid "Manide"
|
||||||
msgstr "Bade"
|
msgstr ""
|
||||||
|
|
||||||
#. name for abe
|
#. name for abe
|
||||||
msgid "Abnaki, Western"
|
msgid "Abnaki, Western"
|
||||||
@ -174,9 +175,8 @@ msgid "Abon"
|
|||||||
msgstr "Abon"
|
msgstr "Abon"
|
||||||
|
|
||||||
#. name for abp
|
#. name for abp
|
||||||
#, fuzzy
|
|
||||||
msgid "Ayta, Abellen"
|
msgid "Ayta, Abellen"
|
||||||
msgstr "Ayta, Abenlen"
|
msgstr ""
|
||||||
|
|
||||||
#. name for abq
|
#. name for abq
|
||||||
msgid "Abaza"
|
msgid "Abaza"
|
||||||
@ -599,9 +599,8 @@ msgid "Aguacateco"
|
|||||||
msgstr "Aguakateko"
|
msgstr "Aguakateko"
|
||||||
|
|
||||||
#. name for agv
|
#. name for agv
|
||||||
#, fuzzy
|
|
||||||
msgid "Dumagat, Remontado"
|
msgid "Dumagat, Remontado"
|
||||||
msgstr "Agta, Remontado"
|
msgstr ""
|
||||||
|
|
||||||
#. name for agw
|
#. name for agw
|
||||||
msgid "Kahua"
|
msgid "Kahua"
|
||||||
@ -1288,9 +1287,8 @@ msgid "Bukiyip"
|
|||||||
msgstr "Bukiyip"
|
msgstr "Bukiyip"
|
||||||
|
|
||||||
#. name for apf
|
#. name for apf
|
||||||
#, fuzzy
|
|
||||||
msgid "Agta, Pahanan"
|
msgid "Agta, Pahanan"
|
||||||
msgstr "Ayta, Bataan"
|
msgstr ""
|
||||||
|
|
||||||
#. name for apg
|
#. name for apg
|
||||||
msgid "Ampanang"
|
msgid "Ampanang"
|
||||||
@ -1325,9 +1323,8 @@ msgid "Apinayé"
|
|||||||
msgstr "Apinaye"
|
msgstr "Apinaye"
|
||||||
|
|
||||||
#. name for apo
|
#. name for apo
|
||||||
#, fuzzy
|
|
||||||
msgid "Ambul"
|
msgid "Ambul"
|
||||||
msgstr "Ambulas"
|
msgstr ""
|
||||||
|
|
||||||
#. name for app
|
#. name for app
|
||||||
msgid "Apma"
|
msgid "Apma"
|
||||||
@ -1402,9 +1399,8 @@ msgid "Arhâ"
|
|||||||
msgstr "Arhâ"
|
msgstr "Arhâ"
|
||||||
|
|
||||||
#. name for aqz
|
#. name for aqz
|
||||||
#, fuzzy
|
|
||||||
msgid "Akuntsu"
|
msgid "Akuntsu"
|
||||||
msgstr "Awutu"
|
msgstr ""
|
||||||
|
|
||||||
#. name for ara
|
#. name for ara
|
||||||
msgid "Arabic"
|
msgid "Arabic"
|
||||||
@ -2003,9 +1999,8 @@ msgid "Ayta, Sorsogon"
|
|||||||
msgstr "Ayta, Sorsogon"
|
msgstr "Ayta, Sorsogon"
|
||||||
|
|
||||||
#. name for ayt
|
#. name for ayt
|
||||||
#, fuzzy
|
|
||||||
msgid "Ayta, Magbukun"
|
msgid "Ayta, Magbukun"
|
||||||
msgstr "Ayta, Bataan"
|
msgstr ""
|
||||||
|
|
||||||
#. name for ayu
|
#. name for ayu
|
||||||
msgid "Ayu"
|
msgid "Ayu"
|
||||||
@ -2368,9 +2363,8 @@ msgid "Bade"
|
|||||||
msgstr "Bade"
|
msgstr "Bade"
|
||||||
|
|
||||||
#. name for bdf
|
#. name for bdf
|
||||||
#, fuzzy
|
|
||||||
msgid "Biage"
|
msgid "Biage"
|
||||||
msgstr "Bade"
|
msgstr ""
|
||||||
|
|
||||||
#. name for bdg
|
#. name for bdg
|
||||||
msgid "Bonggi"
|
msgid "Bonggi"
|
||||||
@ -2641,9 +2635,8 @@ msgid "Bondo"
|
|||||||
msgstr "Bondo"
|
msgstr "Bondo"
|
||||||
|
|
||||||
#. name for bfx
|
#. name for bfx
|
||||||
#, fuzzy
|
|
||||||
msgid "Bantayanon"
|
msgid "Bantayanon"
|
||||||
msgstr "Bantawa"
|
msgstr ""
|
||||||
|
|
||||||
#. name for bfy
|
#. name for bfy
|
||||||
msgid "Bagheli"
|
msgid "Bagheli"
|
||||||
@ -3110,9 +3103,8 @@ msgid "Bakumpai"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for bks
|
#. name for bks
|
||||||
#, fuzzy
|
|
||||||
msgid "Sorsoganon, Northern"
|
msgid "Sorsoganon, Northern"
|
||||||
msgstr "Bai, Kreisteiz"
|
msgstr ""
|
||||||
|
|
||||||
#. name for bkt
|
#. name for bkt
|
||||||
msgid "Boloki"
|
msgid "Boloki"
|
||||||
@ -3355,9 +3347,8 @@ msgid "Bookan"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for bnc
|
#. name for bnc
|
||||||
#, fuzzy
|
|
||||||
msgid "Bontok"
|
msgid "Bontok"
|
||||||
msgstr "Bondo"
|
msgstr ""
|
||||||
|
|
||||||
#. name for bnd
|
#. name for bnd
|
||||||
msgid "Banda (Indonesia)"
|
msgid "Banda (Indonesia)"
|
||||||
@ -4220,9 +4211,8 @@ msgid "Dibole"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for bvy
|
#. name for bvy
|
||||||
#, fuzzy
|
|
||||||
msgid "Baybayanon"
|
msgid "Baybayanon"
|
||||||
msgstr "Babango"
|
msgstr ""
|
||||||
|
|
||||||
#. name for bvz
|
#. name for bvz
|
||||||
msgid "Bauzi"
|
msgid "Bauzi"
|
||||||
@ -4453,9 +4443,8 @@ msgid "Baygo"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for byh
|
#. name for byh
|
||||||
#, fuzzy
|
|
||||||
msgid "Bhujel"
|
msgid "Bhujel"
|
||||||
msgstr "Bhele"
|
msgstr ""
|
||||||
|
|
||||||
#. name for byi
|
#. name for byi
|
||||||
msgid "Buyu"
|
msgid "Buyu"
|
||||||
@ -4794,9 +4783,8 @@ msgid "Cacua"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for cbw
|
#. name for cbw
|
||||||
#, fuzzy
|
|
||||||
msgid "Kinabalian"
|
msgid "Kinabalian"
|
||||||
msgstr "Ainbai"
|
msgstr ""
|
||||||
|
|
||||||
#. name for cby
|
#. name for cby
|
||||||
msgid "Carabayo"
|
msgid "Carabayo"
|
||||||
@ -6487,9 +6475,8 @@ msgid "Duma"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for dmb
|
#. name for dmb
|
||||||
#, fuzzy
|
|
||||||
msgid "Dogon, Mombo"
|
msgid "Dogon, Mombo"
|
||||||
msgstr "One, Molmo"
|
msgstr ""
|
||||||
|
|
||||||
#. name for dmc
|
#. name for dmc
|
||||||
msgid "Dimir"
|
msgid "Dimir"
|
||||||
@ -7008,9 +6995,8 @@ msgid "Ebughu"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for ebk
|
#. name for ebk
|
||||||
#, fuzzy
|
|
||||||
msgid "Bontok, Eastern"
|
msgid "Bontok, Eastern"
|
||||||
msgstr "Abnaki, Eastern"
|
msgstr ""
|
||||||
|
|
||||||
#. name for ebo
|
#. name for ebo
|
||||||
msgid "Teke-Ebo"
|
msgid "Teke-Ebo"
|
||||||
@ -7561,9 +7547,8 @@ msgid "Fars, Northwestern"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for fbl
|
#. name for fbl
|
||||||
#, fuzzy
|
|
||||||
msgid "Bikol, West Albay"
|
msgid "Bikol, West Albay"
|
||||||
msgstr "Bikolano, Albay"
|
msgstr ""
|
||||||
|
|
||||||
#. name for fcs
|
#. name for fcs
|
||||||
msgid "Quebec Sign Language"
|
msgid "Quebec Sign Language"
|
||||||
@ -7726,9 +7711,8 @@ msgid "French, Old (842-ca. 1400)"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for frp
|
#. name for frp
|
||||||
#, fuzzy
|
|
||||||
msgid "Arpitan"
|
msgid "Arpitan"
|
||||||
msgstr "Arta"
|
msgstr ""
|
||||||
|
|
||||||
#. name for frq
|
#. name for frq
|
||||||
msgid "Forak"
|
msgid "Forak"
|
||||||
@ -10823,9 +10807,8 @@ msgid "Ngile"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for jls
|
#. name for jls
|
||||||
#, fuzzy
|
|
||||||
msgid "Jamaican Sign Language"
|
msgid "Jamaican Sign Language"
|
||||||
msgstr "Yezh ar sinoù Amerika"
|
msgstr ""
|
||||||
|
|
||||||
#. name for jma
|
#. name for jma
|
||||||
msgid "Dima"
|
msgid "Dima"
|
||||||
@ -13540,9 +13523,8 @@ msgid "Kpatili"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for kyn
|
#. name for kyn
|
||||||
#, fuzzy
|
|
||||||
msgid "Binukidnon, Northern"
|
msgid "Binukidnon, Northern"
|
||||||
msgstr "Bai, Kreisteiz"
|
msgstr ""
|
||||||
|
|
||||||
#. name for kyo
|
#. name for kyo
|
||||||
msgid "Kelon"
|
msgid "Kelon"
|
||||||
@ -13697,9 +13679,8 @@ msgid "Kalabra"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for laa
|
#. name for laa
|
||||||
#, fuzzy
|
|
||||||
msgid "Subanen, Southern"
|
msgid "Subanen, Southern"
|
||||||
msgstr "Bai, Hanternoz"
|
msgstr ""
|
||||||
|
|
||||||
#. name for lab
|
#. name for lab
|
||||||
msgid "Linear A"
|
msgid "Linear A"
|
||||||
@ -13834,9 +13815,8 @@ msgid "Ladakhi"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for lbk
|
#. name for lbk
|
||||||
#, fuzzy
|
|
||||||
msgid "Bontok, Central"
|
msgid "Bontok, Central"
|
||||||
msgstr "Bicolano, Kreiz"
|
msgstr ""
|
||||||
|
|
||||||
#. name for lbl
|
#. name for lbl
|
||||||
msgid "Bikol, Libon"
|
msgid "Bikol, Libon"
|
||||||
@ -14567,9 +14547,8 @@ msgid "Lanoh"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for lni
|
#. name for lni
|
||||||
#, fuzzy
|
|
||||||
msgid "Daantanai'"
|
msgid "Daantanai'"
|
||||||
msgstr "Babatana"
|
msgstr ""
|
||||||
|
|
||||||
#. name for lnj
|
#. name for lnj
|
||||||
msgid "Leningitij"
|
msgid "Leningitij"
|
||||||
@ -14832,18 +14811,16 @@ msgid "Trinidad and Tobago Sign Language"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for lsy
|
#. name for lsy
|
||||||
#, fuzzy
|
|
||||||
msgid "Mauritian Sign Language"
|
msgid "Mauritian Sign Language"
|
||||||
msgstr "Yezh ar sinoù Aotrich"
|
msgstr ""
|
||||||
|
|
||||||
#. name for ltc
|
#. name for ltc
|
||||||
msgid "Chinese, Late Middle"
|
msgid "Chinese, Late Middle"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for ltg
|
#. name for ltg
|
||||||
#, fuzzy
|
|
||||||
msgid "Latgalian"
|
msgid "Latgalian"
|
||||||
msgstr "Katalaneg"
|
msgstr ""
|
||||||
|
|
||||||
#. name for lti
|
#. name for lti
|
||||||
msgid "Leti (Indonesia)"
|
msgid "Leti (Indonesia)"
|
||||||
@ -14974,9 +14951,8 @@ msgid "Lavukaleve"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for lvs
|
#. name for lvs
|
||||||
#, fuzzy
|
|
||||||
msgid "Latvian, Standard"
|
msgid "Latvian, Standard"
|
||||||
msgstr "Arabeg dre ziouer"
|
msgstr ""
|
||||||
|
|
||||||
#. name for lvu
|
#. name for lvu
|
||||||
msgid "Levuka"
|
msgid "Levuka"
|
||||||
@ -16127,9 +16103,8 @@ msgid "Kituba (Congo)"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for mkx
|
#. name for mkx
|
||||||
#, fuzzy
|
|
||||||
msgid "Manobo, Kinamiging"
|
msgid "Manobo, Kinamiging"
|
||||||
msgstr "Manobo, Ata"
|
msgstr ""
|
||||||
|
|
||||||
#. name for mky
|
#. name for mky
|
||||||
msgid "Makian, East"
|
msgid "Makian, East"
|
||||||
@ -16476,9 +16451,8 @@ msgid "Morori"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for mom
|
#. name for mom
|
||||||
#, fuzzy
|
|
||||||
msgid "Mangue"
|
msgid "Mangue"
|
||||||
msgstr "Mapudungun"
|
msgstr ""
|
||||||
|
|
||||||
#. name for mon
|
#. name for mon
|
||||||
msgid "Mongolian"
|
msgid "Mongolian"
|
||||||
@ -16829,9 +16803,8 @@ msgid "Maremgi"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for mry
|
#. name for mry
|
||||||
#, fuzzy
|
|
||||||
msgid "Mandaya"
|
msgid "Mandaya"
|
||||||
msgstr "Makayam"
|
msgstr ""
|
||||||
|
|
||||||
#. name for mrz
|
#. name for mrz
|
||||||
msgid "Marind"
|
msgid "Marind"
|
||||||
@ -17026,9 +16999,8 @@ msgid "Asaro'o"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for mtw
|
#. name for mtw
|
||||||
#, fuzzy
|
|
||||||
msgid "Binukidnon, Southern"
|
msgid "Binukidnon, Southern"
|
||||||
msgstr "Bai, Hanternoz"
|
msgstr ""
|
||||||
|
|
||||||
#. name for mtx
|
#. name for mtx
|
||||||
msgid "Mixtec, Tidaá"
|
msgid "Mixtec, Tidaá"
|
||||||
@ -18327,9 +18299,8 @@ msgid "Nias"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for nib
|
#. name for nib
|
||||||
#, fuzzy
|
|
||||||
msgid "Nakame"
|
msgid "Nakame"
|
||||||
msgstr "Barama"
|
msgstr ""
|
||||||
|
|
||||||
#. name for nid
|
#. name for nid
|
||||||
msgid "Ngandi"
|
msgid "Ngandi"
|
||||||
@ -18892,9 +18863,8 @@ msgid "Noiri"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for noj
|
#. name for noj
|
||||||
#, fuzzy
|
|
||||||
msgid "Nonuya"
|
msgid "Nonuya"
|
||||||
msgstr "Nanubae"
|
msgstr ""
|
||||||
|
|
||||||
#. name for nok
|
#. name for nok
|
||||||
msgid "Nooksack"
|
msgid "Nooksack"
|
||||||
@ -18985,9 +18955,8 @@ msgid "Napu"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for nqg
|
#. name for nqg
|
||||||
#, fuzzy
|
|
||||||
msgid "Nago, Southern"
|
msgid "Nago, Southern"
|
||||||
msgstr "Bai, Hanternoz"
|
msgstr ""
|
||||||
|
|
||||||
#. name for nqk
|
#. name for nqk
|
||||||
msgid "Ede Nago, Kura"
|
msgid "Ede Nago, Kura"
|
||||||
@ -19558,9 +19527,8 @@ msgid "Obispeño"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for obk
|
#. name for obk
|
||||||
#, fuzzy
|
|
||||||
msgid "Bontok, Southern"
|
msgid "Bontok, Southern"
|
||||||
msgstr "Bai, Hanternoz"
|
msgstr ""
|
||||||
|
|
||||||
#. name for obl
|
#. name for obl
|
||||||
msgid "Oblo"
|
msgid "Oblo"
|
||||||
@ -20523,9 +20491,8 @@ msgid "Pomo, Southern"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for pes
|
#. name for pes
|
||||||
#, fuzzy
|
|
||||||
msgid "Persian, Iranian"
|
msgid "Persian, Iranian"
|
||||||
msgstr "Paranan"
|
msgstr ""
|
||||||
|
|
||||||
#. name for pev
|
#. name for pev
|
||||||
msgid "Pémono"
|
msgid "Pémono"
|
||||||
@ -21564,9 +21531,8 @@ msgid "Poyanáwa"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for pys
|
#. name for pys
|
||||||
#, fuzzy
|
|
||||||
msgid "Paraguayan Sign Language"
|
msgid "Paraguayan Sign Language"
|
||||||
msgstr "Yezh ar sinoù Afganistan"
|
msgstr ""
|
||||||
|
|
||||||
#. name for pyu
|
#. name for pyu
|
||||||
msgid "Puyuma"
|
msgid "Puyuma"
|
||||||
@ -21921,9 +21887,8 @@ msgid "Palaung, Rumai"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for rbk
|
#. name for rbk
|
||||||
#, fuzzy
|
|
||||||
msgid "Bontok, Northern"
|
msgid "Bontok, Northern"
|
||||||
msgstr "Bai, Kreisteiz"
|
msgstr ""
|
||||||
|
|
||||||
#. name for rbl
|
#. name for rbl
|
||||||
msgid "Bikol, Miraya"
|
msgid "Bikol, Miraya"
|
||||||
@ -22890,9 +22855,8 @@ msgid "Irish, Old (to 900)"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for sgb
|
#. name for sgb
|
||||||
#, fuzzy
|
|
||||||
msgid "Ayta, Mag-antsi"
|
msgid "Ayta, Mag-antsi"
|
||||||
msgstr "Ayta, Bataan"
|
msgstr ""
|
||||||
|
|
||||||
#. name for sgc
|
#. name for sgc
|
||||||
msgid "Kipsigis"
|
msgid "Kipsigis"
|
||||||
@ -22959,9 +22923,8 @@ msgid "Sierra Leone Sign Language"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for sgy
|
#. name for sgy
|
||||||
#, fuzzy
|
|
||||||
msgid "Sanglechi"
|
msgid "Sanglechi"
|
||||||
msgstr "Balouchi"
|
msgstr ""
|
||||||
|
|
||||||
#. name for sgz
|
#. name for sgz
|
||||||
msgid "Sursurunga"
|
msgid "Sursurunga"
|
||||||
@ -23912,9 +23875,8 @@ msgid "Suruí"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for srv
|
#. name for srv
|
||||||
#, fuzzy
|
|
||||||
msgid "Sorsoganon, Southern"
|
msgid "Sorsoganon, Southern"
|
||||||
msgstr "Aymara, Hanternoz"
|
msgstr ""
|
||||||
|
|
||||||
#. name for srw
|
#. name for srw
|
||||||
msgid "Serua"
|
msgid "Serua"
|
||||||
@ -25009,9 +24971,8 @@ msgid "Tagalog"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for tgn
|
#. name for tgn
|
||||||
#, fuzzy
|
|
||||||
msgid "Tandaganon"
|
msgid "Tandaganon"
|
||||||
msgstr "Inabaknon"
|
msgstr ""
|
||||||
|
|
||||||
#. name for tgo
|
#. name for tgo
|
||||||
msgid "Sudest"
|
msgid "Sudest"
|
||||||
@ -26750,9 +26711,8 @@ msgid "Uma' Lung"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for ulw
|
#. name for ulw
|
||||||
#, fuzzy
|
|
||||||
msgid "Ulwa"
|
msgid "Ulwa"
|
||||||
msgstr "Alawa"
|
msgstr ""
|
||||||
|
|
||||||
#. name for uma
|
#. name for uma
|
||||||
msgid "Umatilla"
|
msgid "Umatilla"
|
||||||
@ -27115,9 +27075,8 @@ msgid "Babar, Southeast"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for vbk
|
#. name for vbk
|
||||||
#, fuzzy
|
|
||||||
msgid "Bontok, Southwestern"
|
msgid "Bontok, Southwestern"
|
||||||
msgstr "Bai, Hanternoz"
|
msgstr ""
|
||||||
|
|
||||||
#. name for vec
|
#. name for vec
|
||||||
msgid "Venetian"
|
msgid "Venetian"
|
||||||
@ -28352,9 +28311,8 @@ msgid "Breton, Middle"
|
|||||||
msgstr "Krennvrezhoneg"
|
msgstr "Krennvrezhoneg"
|
||||||
|
|
||||||
#. name for xbn
|
#. name for xbn
|
||||||
#, fuzzy
|
|
||||||
msgid "Kenaboi"
|
msgid "Kenaboi"
|
||||||
msgstr "Karnai"
|
msgstr ""
|
||||||
|
|
||||||
#. name for xbo
|
#. name for xbo
|
||||||
msgid "Bolgarian"
|
msgid "Bolgarian"
|
||||||
@ -28581,9 +28539,8 @@ msgid "Kalkoti"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for xkb
|
#. name for xkb
|
||||||
#, fuzzy
|
|
||||||
msgid "Nago, Northern"
|
msgid "Nago, Northern"
|
||||||
msgstr "Bai, Kreisteiz"
|
msgstr ""
|
||||||
|
|
||||||
#. name for xkc
|
#. name for xkc
|
||||||
msgid "Kho'ini"
|
msgid "Kho'ini"
|
||||||
@ -28742,9 +28699,8 @@ msgid "Makhuwa-Marrevone"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for xmd
|
#. name for xmd
|
||||||
#, fuzzy
|
|
||||||
msgid "Mbudum"
|
msgid "Mbudum"
|
||||||
msgstr "Buduma"
|
msgstr ""
|
||||||
|
|
||||||
#. name for xme
|
#. name for xme
|
||||||
msgid "Median"
|
msgid "Median"
|
||||||
@ -29335,9 +29291,8 @@ msgid "Banda-Yangere"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for yak
|
#. name for yak
|
||||||
#, fuzzy
|
|
||||||
msgid "Yakama"
|
msgid "Yakama"
|
||||||
msgstr "Barama"
|
msgstr ""
|
||||||
|
|
||||||
#. name for yal
|
#. name for yal
|
||||||
msgid "Yalunka"
|
msgid "Yalunka"
|
||||||
@ -29348,9 +29303,8 @@ msgid "Yamba"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for yan
|
#. name for yan
|
||||||
#, fuzzy
|
|
||||||
msgid "Mayangna"
|
msgid "Mayangna"
|
||||||
msgstr "Ginyanga"
|
msgstr ""
|
||||||
|
|
||||||
#. name for yao
|
#. name for yao
|
||||||
msgid "Yao"
|
msgid "Yao"
|
||||||
@ -29705,9 +29659,8 @@ msgid "Yaul"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for ylb
|
#. name for ylb
|
||||||
#, fuzzy
|
|
||||||
msgid "Yaleba"
|
msgid "Yaleba"
|
||||||
msgstr "Baba"
|
msgstr ""
|
||||||
|
|
||||||
#. name for yle
|
#. name for yle
|
||||||
msgid "Yele"
|
msgid "Yele"
|
||||||
@ -29898,9 +29851,8 @@ msgid "Yombe"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for yon
|
#. name for yon
|
||||||
#, fuzzy
|
|
||||||
msgid "Yongkom"
|
msgid "Yongkom"
|
||||||
msgstr "Bobongko"
|
msgstr ""
|
||||||
|
|
||||||
#. name for yor
|
#. name for yor
|
||||||
msgid "Yoruba"
|
msgid "Yoruba"
|
||||||
|
6704
setup/iso_639/bs.po
6992
setup/iso_639/byn.po
9789
setup/iso_639/ca.po
@ -6,20 +6,18 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: iso_639_3\n"
|
"Project-Id-Version: iso_639_3\n"
|
||||||
"Report-Msgid-Bugs-To: Debian iso-codes team <pkg-isocodes-devel@lists.alioth."
|
"Report-Msgid-Bugs-To: Debian iso-codes team <pkg-isocodes-"
|
||||||
"debian.org>\n"
|
"devel@lists.alioth.debian.org>\n"
|
||||||
"POT-Creation-Date: 2011-05-27 14:59+0200\n"
|
"POT-Creation-Date: 2011-09-02 16:21+0000\n"
|
||||||
"PO-Revision-Date: 2009-03-01 03:27-0600\n"
|
"PO-Revision-Date: 2011-08-27 03:17+0000\n"
|
||||||
"Last-Translator: Reşat SABIQ <tilde.birlik@gmail.com>\n"
|
"Last-Translator: Reşat SABIQ <tilde.birlik@gmail.com>\n"
|
||||||
"Language-Team: Crimean Tatar <tilde-birlik-tercime@lists.sourceforge.net>\n"
|
"Language-Team: Crimean Tatar <tilde-birlik-tercime@lists.sourceforge.net>\n"
|
||||||
"Language: crh\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"X-Generator: KBabel 1.11.4\n"
|
"X-Launchpad-Export-Date: 2011-09-03 04:58+0000\n"
|
||||||
"X-Launchpad-Export-Date: 2009-03-01 08:44+0000\n"
|
"X-Generator: Launchpad (build 13830)\n"
|
||||||
"X-Generator: Launchpad (build Unknown)\n"
|
"Language: crh\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
|
||||||
|
|
||||||
#. name for aaa
|
#. name for aaa
|
||||||
msgid "Ghotuo"
|
msgid "Ghotuo"
|
||||||
@ -126,9 +124,8 @@ msgid "Ayta, Ambala"
|
|||||||
msgstr "Ayta, Ambala"
|
msgstr "Ayta, Ambala"
|
||||||
|
|
||||||
#. name for abd
|
#. name for abd
|
||||||
#, fuzzy
|
|
||||||
msgid "Manide"
|
msgid "Manide"
|
||||||
msgstr "Mander"
|
msgstr ""
|
||||||
|
|
||||||
#. name for abe
|
#. name for abe
|
||||||
msgid "Abnaki, Western"
|
msgid "Abnaki, Western"
|
||||||
@ -175,9 +172,8 @@ msgid "Abon"
|
|||||||
msgstr "Abon"
|
msgstr "Abon"
|
||||||
|
|
||||||
#. name for abp
|
#. name for abp
|
||||||
#, fuzzy
|
|
||||||
msgid "Ayta, Abellen"
|
msgid "Ayta, Abellen"
|
||||||
msgstr "Ayta, Abenlen"
|
msgstr ""
|
||||||
|
|
||||||
#. name for abq
|
#. name for abq
|
||||||
msgid "Abaza"
|
msgid "Abaza"
|
||||||
@ -600,9 +596,8 @@ msgid "Aguacateco"
|
|||||||
msgstr "Aguacateco"
|
msgstr "Aguacateco"
|
||||||
|
|
||||||
#. name for agv
|
#. name for agv
|
||||||
#, fuzzy
|
|
||||||
msgid "Dumagat, Remontado"
|
msgid "Dumagat, Remontado"
|
||||||
msgstr "Agta, Remontado"
|
msgstr ""
|
||||||
|
|
||||||
#. name for agw
|
#. name for agw
|
||||||
msgid "Kahua"
|
msgid "Kahua"
|
||||||
@ -1289,9 +1284,8 @@ msgid "Bukiyip"
|
|||||||
msgstr "Bukiyip"
|
msgstr "Bukiyip"
|
||||||
|
|
||||||
#. name for apf
|
#. name for apf
|
||||||
#, fuzzy
|
|
||||||
msgid "Agta, Pahanan"
|
msgid "Agta, Pahanan"
|
||||||
msgstr "Ayta, Bataan"
|
msgstr ""
|
||||||
|
|
||||||
#. name for apg
|
#. name for apg
|
||||||
msgid "Ampanang"
|
msgid "Ampanang"
|
||||||
@ -1326,9 +1320,8 @@ msgid "Apinayé"
|
|||||||
msgstr "Apinayé"
|
msgstr "Apinayé"
|
||||||
|
|
||||||
#. name for apo
|
#. name for apo
|
||||||
#, fuzzy
|
|
||||||
msgid "Ambul"
|
msgid "Ambul"
|
||||||
msgstr "Ambulas"
|
msgstr ""
|
||||||
|
|
||||||
#. name for app
|
#. name for app
|
||||||
msgid "Apma"
|
msgid "Apma"
|
||||||
@ -1379,9 +1372,8 @@ msgid "Archi"
|
|||||||
msgstr "Archi"
|
msgstr "Archi"
|
||||||
|
|
||||||
#. name for aqd
|
#. name for aqd
|
||||||
#, fuzzy
|
|
||||||
msgid "Dogon, Ampari"
|
msgid "Dogon, Ampari"
|
||||||
msgstr "Dogon, Jamsay"
|
msgstr ""
|
||||||
|
|
||||||
#. name for aqg
|
#. name for aqg
|
||||||
msgid "Arigidi"
|
msgid "Arigidi"
|
||||||
@ -1404,9 +1396,8 @@ msgid "Arhâ"
|
|||||||
msgstr "Arhâ"
|
msgstr "Arhâ"
|
||||||
|
|
||||||
#. name for aqz
|
#. name for aqz
|
||||||
#, fuzzy
|
|
||||||
msgid "Akuntsu"
|
msgid "Akuntsu"
|
||||||
msgstr "Awutu"
|
msgstr ""
|
||||||
|
|
||||||
#. name for ara
|
#. name for ara
|
||||||
msgid "Arabic"
|
msgid "Arabic"
|
||||||
@ -2005,9 +1996,8 @@ msgid "Ayta, Sorsogon"
|
|||||||
msgstr "Ayta, Sorsogon"
|
msgstr "Ayta, Sorsogon"
|
||||||
|
|
||||||
#. name for ayt
|
#. name for ayt
|
||||||
#, fuzzy
|
|
||||||
msgid "Ayta, Magbukun"
|
msgid "Ayta, Magbukun"
|
||||||
msgstr "Ayta, Mag-Indi"
|
msgstr ""
|
||||||
|
|
||||||
#. name for ayu
|
#. name for ayu
|
||||||
msgid "Ayu"
|
msgid "Ayu"
|
||||||
@ -2370,9 +2360,8 @@ msgid "Bade"
|
|||||||
msgstr "Bade"
|
msgstr "Bade"
|
||||||
|
|
||||||
#. name for bdf
|
#. name for bdf
|
||||||
#, fuzzy
|
|
||||||
msgid "Biage"
|
msgid "Biage"
|
||||||
msgstr "Bitare"
|
msgstr ""
|
||||||
|
|
||||||
#. name for bdg
|
#. name for bdg
|
||||||
msgid "Bonggi"
|
msgid "Bonggi"
|
||||||
@ -2643,9 +2632,8 @@ msgid "Bondo"
|
|||||||
msgstr "Bondo"
|
msgstr "Bondo"
|
||||||
|
|
||||||
#. name for bfx
|
#. name for bfx
|
||||||
#, fuzzy
|
|
||||||
msgid "Bantayanon"
|
msgid "Bantayanon"
|
||||||
msgstr "Bantoanon"
|
msgstr ""
|
||||||
|
|
||||||
#. name for bfy
|
#. name for bfy
|
||||||
msgid "Bagheli"
|
msgid "Bagheli"
|
||||||
@ -3112,9 +3100,8 @@ msgid "Bakumpai"
|
|||||||
msgstr "Bakumpai"
|
msgstr "Bakumpai"
|
||||||
|
|
||||||
#. name for bks
|
#. name for bks
|
||||||
#, fuzzy
|
|
||||||
msgid "Sorsoganon, Northern"
|
msgid "Sorsoganon, Northern"
|
||||||
msgstr "Sorsogon, Masbate"
|
msgstr ""
|
||||||
|
|
||||||
#. name for bkt
|
#. name for bkt
|
||||||
msgid "Boloki"
|
msgid "Boloki"
|
||||||
@ -3129,9 +3116,8 @@ msgid "Bekwarra"
|
|||||||
msgstr "Bekwarra"
|
msgstr "Bekwarra"
|
||||||
|
|
||||||
#. name for bkw
|
#. name for bkw
|
||||||
#, fuzzy
|
|
||||||
msgid "Bekwel"
|
msgid "Bekwel"
|
||||||
msgstr "Bekwil"
|
msgstr ""
|
||||||
|
|
||||||
#. name for bkx
|
#. name for bkx
|
||||||
msgid "Baikeno"
|
msgid "Baikeno"
|
||||||
@ -3358,9 +3344,8 @@ msgid "Bookan"
|
|||||||
msgstr "Bookan"
|
msgstr "Bookan"
|
||||||
|
|
||||||
#. name for bnc
|
#. name for bnc
|
||||||
#, fuzzy
|
|
||||||
msgid "Bontok"
|
msgid "Bontok"
|
||||||
msgstr "Bondo"
|
msgstr ""
|
||||||
|
|
||||||
#. name for bnd
|
#. name for bnd
|
||||||
msgid "Banda (Indonesia)"
|
msgid "Banda (Indonesia)"
|
||||||
@ -4223,9 +4208,8 @@ msgid "Dibole"
|
|||||||
msgstr "Dibole"
|
msgstr "Dibole"
|
||||||
|
|
||||||
#. name for bvy
|
#. name for bvy
|
||||||
#, fuzzy
|
|
||||||
msgid "Baybayanon"
|
msgid "Baybayanon"
|
||||||
msgstr "Babango"
|
msgstr ""
|
||||||
|
|
||||||
#. name for bvz
|
#. name for bvz
|
||||||
msgid "Bauzi"
|
msgid "Bauzi"
|
||||||
@ -4456,9 +4440,8 @@ msgid "Baygo"
|
|||||||
msgstr "Baygo"
|
msgstr "Baygo"
|
||||||
|
|
||||||
#. name for byh
|
#. name for byh
|
||||||
#, fuzzy
|
|
||||||
msgid "Bhujel"
|
msgid "Bhujel"
|
||||||
msgstr "Bhele"
|
msgstr ""
|
||||||
|
|
||||||
#. name for byi
|
#. name for byi
|
||||||
msgid "Buyu"
|
msgid "Buyu"
|
||||||
@ -4621,9 +4604,8 @@ msgid "Basa (Nigeria)"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for bzx
|
#. name for bzx
|
||||||
#, fuzzy
|
|
||||||
msgid "Bozo, Kɛlɛngaxo"
|
msgid "Bozo, Kɛlɛngaxo"
|
||||||
msgstr "Bozo, Hainyaxo"
|
msgstr ""
|
||||||
|
|
||||||
#. name for bzy
|
#. name for bzy
|
||||||
msgid "Obanliku"
|
msgid "Obanliku"
|
||||||
@ -4798,9 +4780,8 @@ msgid "Cacua"
|
|||||||
msgstr "Cacua"
|
msgstr "Cacua"
|
||||||
|
|
||||||
#. name for cbw
|
#. name for cbw
|
||||||
#, fuzzy
|
|
||||||
msgid "Kinabalian"
|
msgid "Kinabalian"
|
||||||
msgstr "Kabardian"
|
msgstr ""
|
||||||
|
|
||||||
#. name for cby
|
#. name for cby
|
||||||
msgid "Carabayo"
|
msgid "Carabayo"
|
||||||
@ -6491,9 +6472,8 @@ msgid "Duma"
|
|||||||
msgstr "Duma"
|
msgstr "Duma"
|
||||||
|
|
||||||
#. name for dmb
|
#. name for dmb
|
||||||
#, fuzzy
|
|
||||||
msgid "Dogon, Mombo"
|
msgid "Dogon, Mombo"
|
||||||
msgstr "Dogon, Kolum So"
|
msgstr ""
|
||||||
|
|
||||||
#. name for dmc
|
#. name for dmc
|
||||||
msgid "Dimir"
|
msgid "Dimir"
|
||||||
@ -6688,9 +6668,8 @@ msgid "Dair"
|
|||||||
msgstr "Dair"
|
msgstr "Dair"
|
||||||
|
|
||||||
#. name for drc
|
#. name for drc
|
||||||
#, fuzzy
|
|
||||||
msgid "Minderico"
|
msgid "Minderico"
|
||||||
msgstr "Mindiri"
|
msgstr ""
|
||||||
|
|
||||||
#. name for drd
|
#. name for drd
|
||||||
msgid "Darmiya"
|
msgid "Darmiya"
|
||||||
@ -7013,9 +6992,8 @@ msgid "Ebughu"
|
|||||||
msgstr "Ebughu"
|
msgstr "Ebughu"
|
||||||
|
|
||||||
#. name for ebk
|
#. name for ebk
|
||||||
#, fuzzy
|
|
||||||
msgid "Bontok, Eastern"
|
msgid "Bontok, Eastern"
|
||||||
msgstr "Abnaki, Şarqiy"
|
msgstr ""
|
||||||
|
|
||||||
#. name for ebo
|
#. name for ebo
|
||||||
msgid "Teke-Ebo"
|
msgid "Teke-Ebo"
|
||||||
@ -7230,9 +7208,8 @@ msgid "Emplawas"
|
|||||||
msgstr "Emplawas"
|
msgstr "Emplawas"
|
||||||
|
|
||||||
#. name for emx
|
#. name for emx
|
||||||
#, fuzzy
|
|
||||||
msgid "Erromintxela"
|
msgid "Erromintxela"
|
||||||
msgstr "Edomite"
|
msgstr ""
|
||||||
|
|
||||||
#. name for emy
|
#. name for emy
|
||||||
msgid "Mayan, Epigraphic"
|
msgid "Mayan, Epigraphic"
|
||||||
@ -7567,9 +7544,8 @@ msgid "Fars, Northwestern"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for fbl
|
#. name for fbl
|
||||||
#, fuzzy
|
|
||||||
msgid "Bikol, West Albay"
|
msgid "Bikol, West Albay"
|
||||||
msgstr "Bicolano, Albay"
|
msgstr ""
|
||||||
|
|
||||||
#. name for fcs
|
#. name for fcs
|
||||||
msgid "Quebec Sign Language"
|
msgid "Quebec Sign Language"
|
||||||
@ -7732,9 +7708,8 @@ msgid "French, Old (842-ca. 1400)"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for frp
|
#. name for frp
|
||||||
#, fuzzy
|
|
||||||
msgid "Arpitan"
|
msgid "Arpitan"
|
||||||
msgstr "Arta"
|
msgstr ""
|
||||||
|
|
||||||
#. name for frq
|
#. name for frq
|
||||||
msgid "Forak"
|
msgid "Forak"
|
||||||
@ -10401,9 +10376,8 @@ msgid "Nkem-Nkum"
|
|||||||
msgstr "Nkem-Nkum"
|
msgstr "Nkem-Nkum"
|
||||||
|
|
||||||
#. name for isk
|
#. name for isk
|
||||||
#, fuzzy
|
|
||||||
msgid "Ishkashimi"
|
msgid "Ishkashimi"
|
||||||
msgstr "Sanglechi-Ishkashimi"
|
msgstr ""
|
||||||
|
|
||||||
#. name for isl
|
#. name for isl
|
||||||
msgid "Icelandic"
|
msgid "Icelandic"
|
||||||
@ -10830,9 +10804,8 @@ msgid "Ngile"
|
|||||||
msgstr "Ngile"
|
msgstr "Ngile"
|
||||||
|
|
||||||
#. name for jls
|
#. name for jls
|
||||||
#, fuzzy
|
|
||||||
msgid "Jamaican Sign Language"
|
msgid "Jamaican Sign Language"
|
||||||
msgstr "Zambiyalı İşaret Tili"
|
msgstr ""
|
||||||
|
|
||||||
#. name for jma
|
#. name for jma
|
||||||
msgid "Dima"
|
msgid "Dima"
|
||||||
@ -11215,9 +11188,8 @@ msgid "Keliko"
|
|||||||
msgstr "Keliko"
|
msgstr "Keliko"
|
||||||
|
|
||||||
#. name for kbp
|
#. name for kbp
|
||||||
#, fuzzy
|
|
||||||
msgid "Kabiyè"
|
msgid "Kabiyè"
|
||||||
msgstr "Kabiyé"
|
msgstr ""
|
||||||
|
|
||||||
#. name for kbq
|
#. name for kbq
|
||||||
msgid "Kamano"
|
msgid "Kamano"
|
||||||
@ -12192,9 +12164,8 @@ msgid "Kendeje"
|
|||||||
msgstr "Kendeje"
|
msgstr "Kendeje"
|
||||||
|
|
||||||
#. name for klg
|
#. name for klg
|
||||||
#, fuzzy
|
|
||||||
msgid "Tagakaulo"
|
msgid "Tagakaulo"
|
||||||
msgstr "Tagalog"
|
msgstr ""
|
||||||
|
|
||||||
#. name for klh
|
#. name for klh
|
||||||
msgid "Weliki"
|
msgid "Weliki"
|
||||||
@ -12217,9 +12188,8 @@ msgid "Kalagan, Kagan"
|
|||||||
msgstr "Kalagan, Kagan"
|
msgstr "Kalagan, Kagan"
|
||||||
|
|
||||||
#. name for klm
|
#. name for klm
|
||||||
#, fuzzy
|
|
||||||
msgid "Migum"
|
msgid "Migum"
|
||||||
msgstr "Mogum"
|
msgstr ""
|
||||||
|
|
||||||
#. name for kln
|
#. name for kln
|
||||||
msgid "Kalenjin"
|
msgid "Kalenjin"
|
||||||
@ -12286,9 +12256,8 @@ msgid "Dong, Southern"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for kmd
|
#. name for kmd
|
||||||
#, fuzzy
|
|
||||||
msgid "Kalinga, Majukayang"
|
msgid "Kalinga, Majukayang"
|
||||||
msgstr "Kalinga, Madukayang"
|
msgstr ""
|
||||||
|
|
||||||
#. name for kme
|
#. name for kme
|
||||||
msgid "Bakole"
|
msgid "Bakole"
|
||||||
@ -13551,9 +13520,8 @@ msgid "Kpatili"
|
|||||||
msgstr "Kpatili"
|
msgstr "Kpatili"
|
||||||
|
|
||||||
#. name for kyn
|
#. name for kyn
|
||||||
#, fuzzy
|
|
||||||
msgid "Binukidnon, Northern"
|
msgid "Binukidnon, Northern"
|
||||||
msgstr "Özbekçe, Şimaliy"
|
msgstr ""
|
||||||
|
|
||||||
#. name for kyo
|
#. name for kyo
|
||||||
msgid "Kelon"
|
msgid "Kelon"
|
||||||
@ -13708,9 +13676,8 @@ msgid "Kalabra"
|
|||||||
msgstr "Kalabra"
|
msgstr "Kalabra"
|
||||||
|
|
||||||
#. name for laa
|
#. name for laa
|
||||||
#, fuzzy
|
|
||||||
msgid "Subanen, Southern"
|
msgid "Subanen, Southern"
|
||||||
msgstr "Özbekçe, Cenübiy"
|
msgstr ""
|
||||||
|
|
||||||
#. name for lab
|
#. name for lab
|
||||||
msgid "Linear A"
|
msgid "Linear A"
|
||||||
@ -13849,9 +13816,8 @@ msgid "Bontok, Central"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for lbl
|
#. name for lbl
|
||||||
#, fuzzy
|
|
||||||
msgid "Bikol, Libon"
|
msgid "Bikol, Libon"
|
||||||
msgstr "Biao Mon"
|
msgstr ""
|
||||||
|
|
||||||
#. name for lbm
|
#. name for lbm
|
||||||
msgid "Lodhi"
|
msgid "Lodhi"
|
||||||
@ -14578,9 +14544,8 @@ msgid "Lanoh"
|
|||||||
msgstr "Lanoh"
|
msgstr "Lanoh"
|
||||||
|
|
||||||
#. name for lni
|
#. name for lni
|
||||||
#, fuzzy
|
|
||||||
msgid "Daantanai'"
|
msgid "Daantanai'"
|
||||||
msgstr "Lantanai"
|
msgstr ""
|
||||||
|
|
||||||
#. name for lnj
|
#. name for lnj
|
||||||
msgid "Leningitij"
|
msgid "Leningitij"
|
||||||
@ -14843,18 +14808,16 @@ msgid "Trinidad and Tobago Sign Language"
|
|||||||
msgstr "Trinidad Tobago İşaret Tili"
|
msgstr "Trinidad Tobago İşaret Tili"
|
||||||
|
|
||||||
#. name for lsy
|
#. name for lsy
|
||||||
#, fuzzy
|
|
||||||
msgid "Mauritian Sign Language"
|
msgid "Mauritian Sign Language"
|
||||||
msgstr "Maritime İşaret Tili"
|
msgstr ""
|
||||||
|
|
||||||
#. name for ltc
|
#. name for ltc
|
||||||
msgid "Chinese, Late Middle"
|
msgid "Chinese, Late Middle"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for ltg
|
#. name for ltg
|
||||||
#, fuzzy
|
|
||||||
msgid "Latgalian"
|
msgid "Latgalian"
|
||||||
msgstr "Katalanca"
|
msgstr ""
|
||||||
|
|
||||||
#. name for lti
|
#. name for lti
|
||||||
msgid "Leti (Indonesia)"
|
msgid "Leti (Indonesia)"
|
||||||
@ -14985,9 +14948,8 @@ msgid "Lavukaleve"
|
|||||||
msgstr "Lavukaleve"
|
msgstr "Lavukaleve"
|
||||||
|
|
||||||
#. name for lvs
|
#. name for lvs
|
||||||
#, fuzzy
|
|
||||||
msgid "Latvian, Standard"
|
msgid "Latvian, Standard"
|
||||||
msgstr "Letonyalı İşaret Tili"
|
msgstr ""
|
||||||
|
|
||||||
#. name for lvu
|
#. name for lvu
|
||||||
msgid "Levuka"
|
msgid "Levuka"
|
||||||
@ -15378,9 +15340,8 @@ msgid "Massalat"
|
|||||||
msgstr "Massalat"
|
msgstr "Massalat"
|
||||||
|
|
||||||
#. name for mdh
|
#. name for mdh
|
||||||
#, fuzzy
|
|
||||||
msgid "Maguindanaon"
|
msgid "Maguindanaon"
|
||||||
msgstr "Maguindanao"
|
msgstr ""
|
||||||
|
|
||||||
#. name for mdi
|
#. name for mdi
|
||||||
msgid "Mamvu"
|
msgid "Mamvu"
|
||||||
@ -16139,9 +16100,8 @@ msgid "Kituba (Congo)"
|
|||||||
msgstr "Kituba (Kongo)"
|
msgstr "Kituba (Kongo)"
|
||||||
|
|
||||||
#. name for mkx
|
#. name for mkx
|
||||||
#, fuzzy
|
|
||||||
msgid "Manobo, Kinamiging"
|
msgid "Manobo, Kinamiging"
|
||||||
msgstr "Manobo, Cinamiguin"
|
msgstr ""
|
||||||
|
|
||||||
#. name for mky
|
#. name for mky
|
||||||
msgid "Makian, East"
|
msgid "Makian, East"
|
||||||
@ -16488,9 +16448,8 @@ msgid "Morori"
|
|||||||
msgstr "Morori"
|
msgstr "Morori"
|
||||||
|
|
||||||
#. name for mom
|
#. name for mom
|
||||||
#, fuzzy
|
|
||||||
msgid "Mangue"
|
msgid "Mangue"
|
||||||
msgstr "Mang"
|
msgstr ""
|
||||||
|
|
||||||
#. name for mon
|
#. name for mon
|
||||||
msgid "Mongolian"
|
msgid "Mongolian"
|
||||||
@ -16769,9 +16728,8 @@ msgid "Elseng"
|
|||||||
msgstr "Elseng"
|
msgstr "Elseng"
|
||||||
|
|
||||||
#. name for mrg
|
#. name for mrg
|
||||||
#, fuzzy
|
|
||||||
msgid "Mising"
|
msgid "Mising"
|
||||||
msgstr "Maisin"
|
msgstr ""
|
||||||
|
|
||||||
#. name for mrh
|
#. name for mrh
|
||||||
msgid "Chin, Mara"
|
msgid "Chin, Mara"
|
||||||
@ -16842,9 +16800,8 @@ msgid "Maremgi"
|
|||||||
msgstr "Maremgi"
|
msgstr "Maremgi"
|
||||||
|
|
||||||
#. name for mry
|
#. name for mry
|
||||||
#, fuzzy
|
|
||||||
msgid "Mandaya"
|
msgid "Mandaya"
|
||||||
msgstr "Mandara"
|
msgstr ""
|
||||||
|
|
||||||
#. name for mrz
|
#. name for mrz
|
||||||
msgid "Marind"
|
msgid "Marind"
|
||||||
@ -17039,9 +16996,8 @@ msgid "Asaro'o"
|
|||||||
msgstr "Asaro'o"
|
msgstr "Asaro'o"
|
||||||
|
|
||||||
#. name for mtw
|
#. name for mtw
|
||||||
#, fuzzy
|
|
||||||
msgid "Binukidnon, Southern"
|
msgid "Binukidnon, Southern"
|
||||||
msgstr "Sesotho"
|
msgstr ""
|
||||||
|
|
||||||
#. name for mtx
|
#. name for mtx
|
||||||
msgid "Mixtec, Tidaá"
|
msgid "Mixtec, Tidaá"
|
||||||
@ -18340,9 +18296,8 @@ msgid "Nias"
|
|||||||
msgstr "Nias"
|
msgstr "Nias"
|
||||||
|
|
||||||
#. name for nib
|
#. name for nib
|
||||||
#, fuzzy
|
|
||||||
msgid "Nakame"
|
msgid "Nakame"
|
||||||
msgstr "Nakama"
|
msgstr ""
|
||||||
|
|
||||||
#. name for nid
|
#. name for nid
|
||||||
msgid "Ngandi"
|
msgid "Ngandi"
|
||||||
@ -18905,9 +18860,8 @@ msgid "Noiri"
|
|||||||
msgstr "Noiri"
|
msgstr "Noiri"
|
||||||
|
|
||||||
#. name for noj
|
#. name for noj
|
||||||
#, fuzzy
|
|
||||||
msgid "Nonuya"
|
msgid "Nonuya"
|
||||||
msgstr "Nkonya"
|
msgstr ""
|
||||||
|
|
||||||
#. name for nok
|
#. name for nok
|
||||||
msgid "Nooksack"
|
msgid "Nooksack"
|
||||||
@ -18998,9 +18952,8 @@ msgid "Napu"
|
|||||||
msgstr "Napu"
|
msgstr "Napu"
|
||||||
|
|
||||||
#. name for nqg
|
#. name for nqg
|
||||||
#, fuzzy
|
|
||||||
msgid "Nago, Southern"
|
msgid "Nago, Southern"
|
||||||
msgstr "Sesotho"
|
msgstr ""
|
||||||
|
|
||||||
#. name for nqk
|
#. name for nqk
|
||||||
msgid "Ede Nago, Kura"
|
msgid "Ede Nago, Kura"
|
||||||
@ -19067,9 +19020,8 @@ msgid "Kalapuya, Northern"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for nru
|
#. name for nru
|
||||||
#, fuzzy
|
|
||||||
msgid "Narua"
|
msgid "Narua"
|
||||||
msgstr "Sarua"
|
msgstr ""
|
||||||
|
|
||||||
#. name for nrx
|
#. name for nrx
|
||||||
msgid "Ngurmbur"
|
msgid "Ngurmbur"
|
||||||
@ -19272,9 +19224,8 @@ msgid "Niuafo'ou"
|
|||||||
msgstr "Niuafo'ou"
|
msgstr "Niuafo'ou"
|
||||||
|
|
||||||
#. name for nun
|
#. name for nun
|
||||||
#, fuzzy
|
|
||||||
msgid "Anong"
|
msgid "Anong"
|
||||||
msgstr "Konongo"
|
msgstr ""
|
||||||
|
|
||||||
#. name for nuo
|
#. name for nuo
|
||||||
msgid "Nguôn"
|
msgid "Nguôn"
|
||||||
@ -19549,9 +19500,8 @@ msgid "Nzakambay"
|
|||||||
msgstr "Nzakambay"
|
msgstr "Nzakambay"
|
||||||
|
|
||||||
#. name for nzz
|
#. name for nzz
|
||||||
#, fuzzy
|
|
||||||
msgid "Dogon, Nanga Dama"
|
msgid "Dogon, Nanga Dama"
|
||||||
msgstr "Dogon, Yanda Dom"
|
msgstr ""
|
||||||
|
|
||||||
#. name for oaa
|
#. name for oaa
|
||||||
msgid "Orok"
|
msgid "Orok"
|
||||||
@ -19574,9 +19524,8 @@ msgid "Obispeño"
|
|||||||
msgstr "Obispeño"
|
msgstr "Obispeño"
|
||||||
|
|
||||||
#. name for obk
|
#. name for obk
|
||||||
#, fuzzy
|
|
||||||
msgid "Bontok, Southern"
|
msgid "Bontok, Southern"
|
||||||
msgstr "Sesotho"
|
msgstr ""
|
||||||
|
|
||||||
#. name for obl
|
#. name for obl
|
||||||
msgid "Oblo"
|
msgid "Oblo"
|
||||||
@ -20539,9 +20488,8 @@ msgid "Pomo, Southern"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for pes
|
#. name for pes
|
||||||
#, fuzzy
|
|
||||||
msgid "Persian, Iranian"
|
msgid "Persian, Iranian"
|
||||||
msgstr "Paranan"
|
msgstr ""
|
||||||
|
|
||||||
#. name for pev
|
#. name for pev
|
||||||
msgid "Pémono"
|
msgid "Pémono"
|
||||||
@ -20588,9 +20536,8 @@ msgid "Rerep"
|
|||||||
msgstr "Rerep"
|
msgstr "Rerep"
|
||||||
|
|
||||||
#. name for pgl
|
#. name for pgl
|
||||||
#, fuzzy
|
|
||||||
msgid "Irish, Primitive"
|
msgid "Irish, Primitive"
|
||||||
msgstr "Türkçe, Qırım; Qırımtatarca"
|
msgstr ""
|
||||||
|
|
||||||
#. name for pgn
|
#. name for pgn
|
||||||
msgid "Paelignian"
|
msgid "Paelignian"
|
||||||
@ -21293,9 +21240,8 @@ msgid "Puri"
|
|||||||
msgstr "Puri"
|
msgstr "Puri"
|
||||||
|
|
||||||
#. name for prs
|
#. name for prs
|
||||||
#, fuzzy
|
|
||||||
msgid "Persian, Afghan"
|
msgid "Persian, Afghan"
|
||||||
msgstr "Farsça"
|
msgstr ""
|
||||||
|
|
||||||
#. name for prt
|
#. name for prt
|
||||||
msgid "Phai"
|
msgid "Phai"
|
||||||
@ -21582,9 +21528,8 @@ msgid "Poyanáwa"
|
|||||||
msgstr "Poyanáwa"
|
msgstr "Poyanáwa"
|
||||||
|
|
||||||
#. name for pys
|
#. name for pys
|
||||||
#, fuzzy
|
|
||||||
msgid "Paraguayan Sign Language"
|
msgid "Paraguayan Sign Language"
|
||||||
msgstr "Uruguaylı İşaret Tili"
|
msgstr ""
|
||||||
|
|
||||||
#. name for pyu
|
#. name for pyu
|
||||||
msgid "Puyuma"
|
msgid "Puyuma"
|
||||||
@ -21939,14 +21884,12 @@ msgid "Palaung, Rumai"
|
|||||||
msgstr "Palaung, Rumai"
|
msgstr "Palaung, Rumai"
|
||||||
|
|
||||||
#. name for rbk
|
#. name for rbk
|
||||||
#, fuzzy
|
|
||||||
msgid "Bontok, Northern"
|
msgid "Bontok, Northern"
|
||||||
msgstr "Sesotho"
|
msgstr ""
|
||||||
|
|
||||||
#. name for rbl
|
#. name for rbl
|
||||||
#, fuzzy
|
|
||||||
msgid "Bikol, Miraya"
|
msgid "Bikol, Miraya"
|
||||||
msgstr "Samo, Maya"
|
msgstr ""
|
||||||
|
|
||||||
#. name for rcf
|
#. name for rcf
|
||||||
msgid "Creole French, Réunion"
|
msgid "Creole French, Réunion"
|
||||||
@ -22909,9 +22852,8 @@ msgid "Irish, Old (to 900)"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for sgb
|
#. name for sgb
|
||||||
#, fuzzy
|
|
||||||
msgid "Ayta, Mag-antsi"
|
msgid "Ayta, Mag-antsi"
|
||||||
msgstr "Ayta, Mag-Indi"
|
msgstr ""
|
||||||
|
|
||||||
#. name for sgc
|
#. name for sgc
|
||||||
msgid "Kipsigis"
|
msgid "Kipsigis"
|
||||||
@ -22958,9 +22900,8 @@ msgid "Sangisari"
|
|||||||
msgstr "Sangisari"
|
msgstr "Sangisari"
|
||||||
|
|
||||||
#. name for sgs
|
#. name for sgs
|
||||||
#, fuzzy
|
|
||||||
msgid "Samogitian"
|
msgid "Samogitian"
|
||||||
msgstr "Samoan"
|
msgstr ""
|
||||||
|
|
||||||
#. name for sgt
|
#. name for sgt
|
||||||
msgid "Brokpake"
|
msgid "Brokpake"
|
||||||
@ -22979,9 +22920,8 @@ msgid "Sierra Leone Sign Language"
|
|||||||
msgstr "Sierra Leone İşaret Tili"
|
msgstr "Sierra Leone İşaret Tili"
|
||||||
|
|
||||||
#. name for sgy
|
#. name for sgy
|
||||||
#, fuzzy
|
|
||||||
msgid "Sanglechi"
|
msgid "Sanglechi"
|
||||||
msgstr "Shangzhai"
|
msgstr ""
|
||||||
|
|
||||||
#. name for sgz
|
#. name for sgz
|
||||||
msgid "Sursurunga"
|
msgid "Sursurunga"
|
||||||
@ -23000,9 +22940,8 @@ msgid "Sonde"
|
|||||||
msgstr "Sonde"
|
msgstr "Sonde"
|
||||||
|
|
||||||
#. name for shd
|
#. name for shd
|
||||||
#, fuzzy
|
|
||||||
msgid "Kundal Shahi"
|
msgid "Kundal Shahi"
|
||||||
msgstr "Kudmali"
|
msgstr ""
|
||||||
|
|
||||||
#. name for she
|
#. name for she
|
||||||
msgid "Sheko"
|
msgid "Sheko"
|
||||||
@ -23933,9 +23872,8 @@ msgid "Suruí"
|
|||||||
msgstr "Suruí"
|
msgstr "Suruí"
|
||||||
|
|
||||||
#. name for srv
|
#. name for srv
|
||||||
#, fuzzy
|
|
||||||
msgid "Sorsoganon, Southern"
|
msgid "Sorsoganon, Southern"
|
||||||
msgstr "Sesotho"
|
msgstr ""
|
||||||
|
|
||||||
#. name for srw
|
#. name for srw
|
||||||
msgid "Serua"
|
msgid "Serua"
|
||||||
@ -23966,9 +23904,8 @@ msgid "Siroi"
|
|||||||
msgstr "Siroi"
|
msgstr "Siroi"
|
||||||
|
|
||||||
#. name for sse
|
#. name for sse
|
||||||
#, fuzzy
|
|
||||||
msgid "Sama, Bangingih"
|
msgid "Sama, Bangingih"
|
||||||
msgstr "Sama, Pangutaran"
|
msgstr ""
|
||||||
|
|
||||||
#. name for ssf
|
#. name for ssf
|
||||||
msgid "Thao"
|
msgid "Thao"
|
||||||
@ -24799,9 +24736,8 @@ msgid "Tai Nüa"
|
|||||||
msgstr "Tai Nüa"
|
msgstr "Tai Nüa"
|
||||||
|
|
||||||
#. name for tde
|
#. name for tde
|
||||||
#, fuzzy
|
|
||||||
msgid "Dogon, Tiranige Diga"
|
msgid "Dogon, Tiranige Diga"
|
||||||
msgstr "Dogon, Tene Kan"
|
msgstr ""
|
||||||
|
|
||||||
#. name for tdf
|
#. name for tdf
|
||||||
msgid "Talieng"
|
msgid "Talieng"
|
||||||
@ -25032,9 +24968,8 @@ msgid "Tagalog"
|
|||||||
msgstr "Tagalog"
|
msgstr "Tagalog"
|
||||||
|
|
||||||
#. name for tgn
|
#. name for tgn
|
||||||
#, fuzzy
|
|
||||||
msgid "Tandaganon"
|
msgid "Tandaganon"
|
||||||
msgstr "Tondano"
|
msgstr ""
|
||||||
|
|
||||||
#. name for tgo
|
#. name for tgo
|
||||||
msgid "Sudest"
|
msgid "Sudest"
|
||||||
@ -25317,9 +25252,8 @@ msgid "Tukumanféd"
|
|||||||
msgstr "Tukumanféd"
|
msgstr "Tukumanféd"
|
||||||
|
|
||||||
#. name for tkg
|
#. name for tkg
|
||||||
#, fuzzy
|
|
||||||
msgid "Malagasy, Tesaka"
|
msgid "Malagasy, Tesaka"
|
||||||
msgstr "Malagasy, Bara"
|
msgstr ""
|
||||||
|
|
||||||
#. name for tkl
|
#. name for tkl
|
||||||
msgid "Tokelau"
|
msgid "Tokelau"
|
||||||
@ -26774,9 +26708,8 @@ msgid "Uma' Lung"
|
|||||||
msgstr "Uma' Lung"
|
msgstr "Uma' Lung"
|
||||||
|
|
||||||
#. name for ulw
|
#. name for ulw
|
||||||
#, fuzzy
|
|
||||||
msgid "Ulwa"
|
msgid "Ulwa"
|
||||||
msgstr "Ukwa"
|
msgstr ""
|
||||||
|
|
||||||
#. name for uma
|
#. name for uma
|
||||||
msgid "Umatilla"
|
msgid "Umatilla"
|
||||||
@ -27139,9 +27072,8 @@ msgid "Babar, Southeast"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for vbk
|
#. name for vbk
|
||||||
#, fuzzy
|
|
||||||
msgid "Bontok, Southwestern"
|
msgid "Bontok, Southwestern"
|
||||||
msgstr "Sesotho"
|
msgstr ""
|
||||||
|
|
||||||
#. name for vec
|
#. name for vec
|
||||||
msgid "Venetian"
|
msgid "Venetian"
|
||||||
@ -28376,9 +28308,8 @@ msgid "Breton, Middle"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#. name for xbn
|
#. name for xbn
|
||||||
#, fuzzy
|
|
||||||
msgid "Kenaboi"
|
msgid "Kenaboi"
|
||||||
msgstr "Kenati"
|
msgstr ""
|
||||||
|
|
||||||
#. name for xbo
|
#. name for xbo
|
||||||
msgid "Bolgarian"
|
msgid "Bolgarian"
|
||||||
@ -28605,9 +28536,8 @@ msgid "Kalkoti"
|
|||||||
msgstr "Kalkoti"
|
msgstr "Kalkoti"
|
||||||
|
|
||||||
#. name for xkb
|
#. name for xkb
|
||||||
#, fuzzy
|
|
||||||
msgid "Nago, Northern"
|
msgid "Nago, Northern"
|
||||||
msgstr "Naga, Nocte"
|
msgstr ""
|
||||||
|
|
||||||
#. name for xkc
|
#. name for xkc
|
||||||
msgid "Kho'ini"
|
msgid "Kho'ini"
|
||||||
@ -28766,9 +28696,8 @@ msgid "Makhuwa-Marrevone"
|
|||||||
msgstr "Makhuwa-Marrevone"
|
msgstr "Makhuwa-Marrevone"
|
||||||
|
|
||||||
#. name for xmd
|
#. name for xmd
|
||||||
#, fuzzy
|
|
||||||
msgid "Mbudum"
|
msgid "Mbudum"
|
||||||
msgstr "Buduma"
|
msgstr ""
|
||||||
|
|
||||||
#. name for xme
|
#. name for xme
|
||||||
msgid "Median"
|
msgid "Median"
|
||||||
@ -28835,9 +28764,8 @@ msgid "Kamu"
|
|||||||
msgstr "Kamu"
|
msgstr "Kamu"
|
||||||
|
|
||||||
#. name for xmv
|
#. name for xmv
|
||||||
#, fuzzy
|
|
||||||
msgid "Malagasy, Tankarana"
|
msgid "Malagasy, Tankarana"
|
||||||
msgstr "Malagasy, Antankarana"
|
msgstr ""
|
||||||
|
|
||||||
#. name for xmw
|
#. name for xmw
|
||||||
msgid "Malagasy, Tsimihety"
|
msgid "Malagasy, Tsimihety"
|
||||||
@ -28888,9 +28816,8 @@ msgid "Kanashi"
|
|||||||
msgstr "Kanashi"
|
msgstr "Kanashi"
|
||||||
|
|
||||||
#. name for xnt
|
#. name for xnt
|
||||||
#, fuzzy
|
|
||||||
msgid "Narragansett"
|
msgid "Narragansett"
|
||||||
msgstr "Karagas"
|
msgstr ""
|
||||||
|
|
||||||
#. name for xoc
|
#. name for xoc
|
||||||
msgid "O'chi'chi'"
|
msgid "O'chi'chi'"
|
||||||
@ -29361,9 +29288,8 @@ msgid "Banda-Yangere"
|
|||||||
msgstr "Banda-Yangere"
|
msgstr "Banda-Yangere"
|
||||||
|
|
||||||
#. name for yak
|
#. name for yak
|
||||||
#, fuzzy
|
|
||||||
msgid "Yakama"
|
msgid "Yakama"
|
||||||
msgstr "Nakama"
|
msgstr ""
|
||||||
|
|
||||||
#. name for yal
|
#. name for yal
|
||||||
msgid "Yalunka"
|
msgid "Yalunka"
|
||||||
@ -29374,9 +29300,8 @@ msgid "Yamba"
|
|||||||
msgstr "Yamba"
|
msgstr "Yamba"
|
||||||
|
|
||||||
#. name for yan
|
#. name for yan
|
||||||
#, fuzzy
|
|
||||||
msgid "Mayangna"
|
msgid "Mayangna"
|
||||||
msgstr "Mayaguduna"
|
msgstr ""
|
||||||
|
|
||||||
#. name for yao
|
#. name for yao
|
||||||
msgid "Yao"
|
msgid "Yao"
|
||||||
@ -29731,9 +29656,8 @@ msgid "Yaul"
|
|||||||
msgstr "Yaul"
|
msgstr "Yaul"
|
||||||
|
|
||||||
#. name for ylb
|
#. name for ylb
|
||||||
#, fuzzy
|
|
||||||
msgid "Yaleba"
|
msgid "Yaleba"
|
||||||
msgstr "Yareba"
|
msgstr ""
|
||||||
|
|
||||||
#. name for yle
|
#. name for yle
|
||||||
msgid "Yele"
|
msgid "Yele"
|
||||||
@ -29924,9 +29848,8 @@ msgid "Yombe"
|
|||||||
msgstr "Yombe"
|
msgstr "Yombe"
|
||||||
|
|
||||||
#. name for yon
|
#. name for yon
|
||||||
#, fuzzy
|
|
||||||
msgid "Yongkom"
|
msgid "Yongkom"
|
||||||
msgstr "Yonggom"
|
msgstr ""
|
||||||
|
|
||||||
#. name for yor
|
#. name for yor
|
||||||
msgid "Yoruba"
|
msgid "Yoruba"
|
||||||
@ -30777,9 +30700,8 @@ msgid "Mirgan"
|
|||||||
msgstr "Mirgan"
|
msgstr "Mirgan"
|
||||||
|
|
||||||
#. name for zrn
|
#. name for zrn
|
||||||
#, fuzzy
|
|
||||||
msgid "Zerenkel"
|
msgid "Zerenkel"
|
||||||
msgstr "Zirenkel"
|
msgstr ""
|
||||||
|
|
||||||
#. name for zro
|
#. name for zro
|
||||||
msgid "Záparo"
|
msgid "Záparo"
|
||||||
|