From 2288b241370fe249f2f25f1f0e14a896811ab742 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 10 May 2010 07:51:30 -0600 Subject: [PATCH] Various Russian News surces by Darko Miletic --- resources/images/news/aif_ru.png | Bin 0 -> 1003 bytes resources/images/news/izvestia.png | Bin 0 -> 475 bytes resources/images/news/kommersant.png | Bin 0 -> 353 bytes resources/images/news/ria_ru.png | Bin 0 -> 534 bytes resources/recipes/aif_ru.recipe | 31 +++++++++++++++++++ resources/recipes/izvestia.recipe | 28 +++++++++++++++++ resources/recipes/kommersant.recipe | 42 ++++++++++++++++++++++++++ resources/recipes/ria_ru.recipe | 43 +++++++++++++++++++++++++++ src/calibre/library/db/__init__.py | 9 ++++++ src/calibre/library/db/base.py | 37 +++++++++++++++++++++++ 10 files changed, 190 insertions(+) create mode 100644 resources/images/news/aif_ru.png create mode 100644 resources/images/news/izvestia.png create mode 100644 resources/images/news/kommersant.png create mode 100644 resources/images/news/ria_ru.png create mode 100644 resources/recipes/aif_ru.recipe create mode 100644 resources/recipes/izvestia.recipe create mode 100644 resources/recipes/kommersant.recipe create mode 100644 resources/recipes/ria_ru.recipe create mode 100644 src/calibre/library/db/__init__.py create mode 100644 src/calibre/library/db/base.py diff --git a/resources/images/news/aif_ru.png b/resources/images/news/aif_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..57d98f383291318e642dbef3bfd1f99f9cbda20a GIT binary patch literal 1003 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zK-vS0-A-oPfdtD69Mgd`SU*F|v9*U87??#oT^vI!PPmQRU(>nkAz3=y|of{u6 z?on7eWm?h(p{X|nIzkq!g+*WfC77(GEo|=gc>bco$9}?#xo4Yo-Ez}jXfZ*{DTA{q zpv~}dSDA)^v&6H&H2c1YG`ZaqnZ^mR2^F4FO6atL)}Ie^eo-#wEbwp4q`5KNKr9$gV z|Qy@UZ{AE(33oMp>)d^`HQW#|6Ptn8&b7mH40Sj(fq+S0(vZZlh< z<$(UfBRTWa<@MG#_QBbJk zoX(NM{Vso_!AIfE$&dH^e#S8`C_(esy10c;8=Eg&V~R?g&YjWYuUg*!bM|GPFZOI- zIhWc0Z8^F!^WJWQrr9})zdq}&m|(lV~x1}vNuxmeh>FsaG< zdhm|hm2YmjU79UDN4}ET^aIOJ?faXayW9MJ_4-2TlxyAbMafx0XTuurzKMM$m=+wo z#oX+HyP|J9|HQc1hqFHx{@QLHIWs<~RQL44_-7sZI-57t%-(m<(S&=u<~@CZ?7Rn0 zRt7)WZoVV@-qV%e?=LL;XI?kYXXCz!>ff)6eckGL>KB9M{RuJ>i@qPqesS}s>z)*A zTW594A9pS3;E7?>b}FB5dH&(^ zc!kPE>@l<5{q~=^*j|0GB0#t~tMjYDl6BkLlh5-wC+pUk9@;8v!05F~X~kc|g-R>l zG>SWKac9Y3>R1)<)lnqqa>II&cl-H&uv=`7@0#m>ZZj~msFt`!l%yn|N12ZcFgN9olmY`_J%}>cpt3=jdXkZ0I24)Zqb=hLa Qff^V*UHx3vIVCg!0B&xyv;Y7A literal 0 HcmV?d00001 diff --git a/resources/images/news/izvestia.png b/resources/images/news/izvestia.png new file mode 100644 index 0000000000000000000000000000000000000000..d80a2a06f061ec5c34b2e4a863747ef3f4e608ed GIT binary patch literal 475 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6n3BBRT^Rni_n+Ah2>S z4={E+nQaFWEGuwK2hw1@3^B*n9%f)*uX4CANmg+BfuQ1I~KnDm|9fPw4v!xwfJg%Hiy1v(MGf#Tivons? zX0hMyZS(cN8X2uuk;|}Zrf#XOfV+!|mlnfelO0bR8>(uU*Rx!D-m%_7!oXivf@PJ} zyA3;!bQFK}u?gGCVK#rt4d!DFZZ8cKpZU49%kMsC@z(q1BDHlp~AxZyT5NaYL)wdvw_KBRYT#Q6Vk4$B;SAFO<~xx$+2>S z4={E+nQaFWEGuwK2hw1@3^B*n9tLvyJY5_^G|uM+9u#Cz(yOuPOC*hbCZp96H6YKdz^NlIc#s#S7PDv)9@GB7mIH89mR zGzc*;w=y=fGPKk+Ftai+Xt?!Z35tf?{FKbJN@NX&23AH!R)!`J4LdwH`T#XBc)I$z JtaD0e0svJ)cf9}r literal 0 HcmV?d00001 diff --git a/resources/images/news/ria_ru.png b/resources/images/news/ria_ru.png new file mode 100644 index 0000000000000000000000000000000000000000..069c37f72e5bf74cc65ecf52049972ebf5102b80 GIT binary patch literal 534 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zK-vS0-A-oPfdtD69Mgd`SU*F|v9*U87#Qt6T^vI!P9L4L*3ZRIz|B8DLDz zb>*@OzOX9~Dw$77KQL5n40qsXsuxY-b#|JNa?v};<^6rV38pGN8JGO_85`dh`DcCS z$E5JnHJ@)JnC+?LmzyDbeZ%H(mvcMw8=ej9U7>WT`)o$^ z!*YhT;))^*^VV!LzV6vkIp>d=UvUO_QmvAUQh^kMk%6Isu7Rnpp+Sg&xs|b*m7%4sfti(oLBp*N nOHefA=BH$)RU&IJG_V39Qxk}Wg(93?Kn)C@u6{1-oD!Mj literal 0 HcmV?d00001 diff --git a/resources/recipes/aif_ru.recipe b/resources/recipes/aif_ru.recipe new file mode 100644 index 0000000000..b5d6015d0c --- /dev/null +++ b/resources/recipes/aif_ru.recipe @@ -0,0 +1,31 @@ +__license__ = 'GPL v3' +__copyright__ = '2010, Darko Miletic ' +''' +www.aif.ru +''' + +from calibre.web.feeds.news import BasicNewsRecipe + +class AIF_ru(BasicNewsRecipe): + title = 'Arguments & Facts - Russian' + __author__ = 'Darko Miletic' + description = 'News from Russia' + publisher = 'AIF' + category = 'news, politics, Russia' + oldest_article = 2 + max_articles_per_feed = 100 + no_stylesheets = True + use_embedded_content = False + encoding = 'cp1251' + language = 'ru' + publication_type = 'magazine' + extra_css = ' @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: Verdana,Arial,Helvetica,sans1,sans-serif} ' + keep_only_tags = [dict(name='div',attrs={'id':'inner'})] + remove_tags = [ + dict(name=['iframe','object','link','base','input','img']) + ,dict(name='div',attrs={'class':'photo'}) + ,dict(name='p',attrs={'class':'resizefont'}) + ] + + feeds = [(u'News', u'http://www.aif.ru/rss/all.php')] + diff --git a/resources/recipes/izvestia.recipe b/resources/recipes/izvestia.recipe new file mode 100644 index 0000000000..7d04ab7b07 --- /dev/null +++ b/resources/recipes/izvestia.recipe @@ -0,0 +1,28 @@ +__license__ = 'GPL v3' +__copyright__ = '2010, Darko Miletic ' +''' +izvestia.ru +''' + +from calibre.web.feeds.news import BasicNewsRecipe + +class Izvestia(BasicNewsRecipe): + title = 'Izvestia' + __author__ = 'Darko Miletic' + description = 'News from Russia' + publisher = 'Izvestia' + category = 'news, politics, Russia' + oldest_article = 5 + max_articles_per_feed = 100 + no_stylesheets = True + use_embedded_content = False + encoding = 'cp1251' + language = 'ru' + publication_type = 'newspaper' + masthead_url = 'http://images.izvestia.ru/izv/sys/logo.gif' + extra_css = ' @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: Verdana,Arial,Helvetica,sans1,sans-serif} ' + keep_only_tags = [dict(name='div', attrs={'class':'newsFull'})] + remove_tags = [dict(name=['iframe','object','img','link','base'])] + remove_tags_before = dict(name='h1', attrs={'class':'statya'}) + + feeds = [(u'Daily edition', u'http://rss.feedsportal.com/c/32171/f/424076/index.rss')] diff --git a/resources/recipes/kommersant.recipe b/resources/recipes/kommersant.recipe new file mode 100644 index 0000000000..f24a5da909 --- /dev/null +++ b/resources/recipes/kommersant.recipe @@ -0,0 +1,42 @@ +__license__ = 'GPL v3' +__copyright__ = '2010, Darko Miletic ' +''' +www.kommersant.ru +''' + +from calibre.web.feeds.news import BasicNewsRecipe + +class Kommersant_ru(BasicNewsRecipe): + title = 'Kommersant' + __author__ = 'Darko Miletic' + description = 'News from Russia' + publisher = 'Kommersant' + category = 'news, politics, Russia' + oldest_article = 5 + max_articles_per_feed = 100 + no_stylesheets = True + use_embedded_content = False + encoding = 'cp1251' + language = 'ru' + publication_type = 'newspaper' + masthead_url = 'http://www.kommersant.ru/CorpPics/logo_daily_1.gif' + extra_css = ' @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: Arial, sans1, sans-serif} span#ctl00_ContentPlaceHolderStyle_LabelSubTitle{margin-bottom: 1em; display: block} .author{margin-bottom: 1em; display: block} .paragraph{margin-bottom: 1em; display: block} .vvodka{font-weight: bold; margin-bottom: 1em} ' + + conversion_options = { + 'comment' : description + , 'tags' : category + , 'publisher' : publisher + , 'language' : language + } + + keep_only_tags = [ + dict(attrs={'id':'ctl00_ContentPlaceHolderStyle_PanelHeader'}) + ,dict(attrs={'class':['vvodka','paragraph','author']}) + ] + remove_tags = [dict(name=['iframe','object','link','img','base'])] + + feeds = [(u'Articles', u'http://feeds.kommersant.ru/RSS_Export/RU/daily.xml')] + + def print_version(self, url): + return url.replace('doc-rss.aspx','doc.aspx') + '&print=true' + diff --git a/resources/recipes/ria_ru.recipe b/resources/recipes/ria_ru.recipe new file mode 100644 index 0000000000..ad01b02db0 --- /dev/null +++ b/resources/recipes/ria_ru.recipe @@ -0,0 +1,43 @@ +__license__ = 'GPL v3' +__copyright__ = '2010, Darko Miletic ' +''' +www.rian.ru +''' + +from calibre.web.feeds.news import BasicNewsRecipe + +class RIANovosti(BasicNewsRecipe): + title = 'RIA Novosti - Russian' + __author__ = 'Darko Miletic' + description = 'News from Russia' + publisher = 'RIA' + category = 'news, politics, Russia' + oldest_article = 2 + max_articles_per_feed = 100 + no_stylesheets = True + use_embedded_content = False + encoding = 'utf8' + language = 'ru' + publication_type = 'newsportal' + masthead_url = 'http://img.beta.rian.ru/images/22868/43/228684314.jpg' + extra_css = ' @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: Arial,Helvetica,sans1,sans-serif} ' + remove_tags_before = dict(name='h1') + remove_tags_after = dict(name='div', attrs={'class':'text'}) + remove_tags = [dict(name=['iframe','object','link','img','base'])] + + feeds = [ + (u'Frontpage', u'http://www.rian.ru/export/rss2/lenta/index.xml') + ,(u'Politics', u'http://www.rian.ru/export/rss2/politics/index.xml') + ,(u'World', u'http://www.rian.ru/export/rss2/world/index.xml') + ,(u'Economy', u'http://www.rian.ru/export/rss2/economy/index.xml') + ,(u'Society', u'http://www.rian.ru/export/rss2/society/index.xml') + ,(u'Moscow', u'http://www.rian.ru/export/rss2/moscow/index.xml') + ,(u'Defense', u'http://www.rian.ru/export/rss2/defense_safety/index.xml') + ,(u'Science', u'http://www.rian.ru/export/rss2/science/index.xml') + ,(u'Turism', u'http://www.rian.ru/export/rss2/tourism/index.xml') + ,(u'Culture', u'http://www.rian.ru/export/rss2/culture/index.xml') + ] + + def print_version(self, url): + return url.replace('.html','-print.html') + diff --git a/src/calibre/library/db/__init__.py b/src/calibre/library/db/__init__.py new file mode 100644 index 0000000000..0080175bfa --- /dev/null +++ b/src/calibre/library/db/__init__.py @@ -0,0 +1,9 @@ +#!/usr/bin/env python +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai + +__license__ = 'GPL v3' +__copyright__ = '2010, Kovid Goyal ' +__docformat__ = 'restructuredtext en' + + + diff --git a/src/calibre/library/db/base.py b/src/calibre/library/db/base.py new file mode 100644 index 0000000000..a2374583eb --- /dev/null +++ b/src/calibre/library/db/base.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai + +__license__ = 'GPL v3' +__copyright__ = '2010, Kovid Goyal ' +__docformat__ = 'restructuredtext en' + + +''' Design documentation {{{ + + Storage paradigm {{{ + * Agnostic to storage paradigm (i.e. no book per folder assumptions) + * Two separate concepts: A store and collection + A store is a backend, like a sqlite database associated with a path on + the local filesystem, or a cloud based storage solution. + A collection is a user defined group of stores. Most of the logic for + data manipulation sorting/searching/restrictions should be in the collection + class. The collection class should transparently handle the + conversion from store name + id to row number in the collection. + * Not sure how feasible it is to allow many-many maps between stores + and collections. + }}} + + Event system {{{ + * Comprehensive event system that other components can subscribe to + * Subscribers should be able to temporarily block receiving events + * Should event dispatch be asynchronous? + * Track last modified time for metadata and each format + }}} +}}}''' + +# Imports {{{ +# }}} + + + +