mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
merge from trunk
This commit is contained in:
commit
f9efe4995a
@ -2,6 +2,7 @@
|
|||||||
.check-cache.pickle
|
.check-cache.pickle
|
||||||
src/calibre/plugins
|
src/calibre/plugins
|
||||||
resources/images.qrc
|
resources/images.qrc
|
||||||
|
src/calibre/ebooks/oeb/display/test/*.js
|
||||||
src/calibre/manual/.build/
|
src/calibre/manual/.build/
|
||||||
src/calibre/manual/cli/
|
src/calibre/manual/cli/
|
||||||
src/calibre/manual/template_ref.rst
|
src/calibre/manual/template_ref.rst
|
||||||
@ -15,6 +16,7 @@ resources/ebook-convert-complete.pickle
|
|||||||
resources/builtin_recipes.xml
|
resources/builtin_recipes.xml
|
||||||
resources/builtin_recipes.zip
|
resources/builtin_recipes.zip
|
||||||
resources/template-functions.json
|
resources/template-functions.json
|
||||||
|
resources/display/*.js
|
||||||
setup/installer/windows/calibre/build.log
|
setup/installer/windows/calibre/build.log
|
||||||
src/calibre/translations/.errors
|
src/calibre/translations/.errors
|
||||||
src/cssutils/.svn/
|
src/cssutils/.svn/
|
||||||
|
12
COPYRIGHT
12
COPYRIGHT
@ -9,6 +9,12 @@ License: GPL-2 or later
|
|||||||
The full text of the GPL is distributed as in
|
The full text of the GPL is distributed as in
|
||||||
/usr/share/common-licenses/GPL-2 on Debian systems.
|
/usr/share/common-licenses/GPL-2 on Debian systems.
|
||||||
|
|
||||||
|
Files: setup/iso_639/*
|
||||||
|
Copyright: Various
|
||||||
|
License: LGPL 2.1
|
||||||
|
The full text of the LGPL is distributed as in
|
||||||
|
/usr/share/common-licenses/LGPL-2.1 on Debian systems.
|
||||||
|
|
||||||
Files: src/calibre/ebooks/BeautifulSoup.py
|
Files: src/calibre/ebooks/BeautifulSoup.py
|
||||||
Copyright: Copyright (c) 2004-2007, Leonard Richardson
|
Copyright: Copyright (c) 2004-2007, Leonard Richardson
|
||||||
License: BSD
|
License: BSD
|
||||||
@ -28,6 +34,12 @@ License: other
|
|||||||
are permitted in any medium without royalty provided the copyright
|
are permitted in any medium without royalty provided the copyright
|
||||||
notice and this notice are preserved.
|
notice and this notice are preserved.
|
||||||
|
|
||||||
|
Files: src/calibre/ebooks/readability/*
|
||||||
|
Copyright: Unknown
|
||||||
|
License: Apache 2.0
|
||||||
|
The full text of the Apache 2.0 license is available at:
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
Files: /src/cherrypy/*
|
Files: /src/cherrypy/*
|
||||||
Copyright: Copyright (c) 2004-2007, CherryPy Team (team@cherrypy.org)
|
Copyright: Copyright (c) 2004-2007, CherryPy Team (team@cherrypy.org)
|
||||||
Copyright: Copyright (C) 2005, Tiago Cogumbreiro <cogumbreiro@users.sf.net>
|
Copyright: Copyright (C) 2005, Tiago Cogumbreiro <cogumbreiro@users.sf.net>
|
||||||
|
4210
Changelog.old.yaml
4210
Changelog.old.yaml
File diff suppressed because it is too large
Load Diff
6362
Changelog.yaml
6362
Changelog.yaml
File diff suppressed because it is too large
Load Diff
@ -118,7 +118,7 @@ EBVS
|
|||||||
<0x 00 00 00 00>
|
<0x 00 00 00 00>
|
||||||
<0x 00 00 00 10>
|
<0x 00 00 00 10>
|
||||||
...(rest of size of DATA block)
|
...(rest of size of DATA block)
|
||||||
<0x FD EA = PAD? (ýê)>
|
<0x FD EA = PAD? (ýê)>
|
||||||
DATA
|
DATA
|
||||||
<0x 4 bytes = size of <marked text (see 3rd note)> >
|
<0x 4 bytes = size of <marked text (see 3rd note)> >
|
||||||
<marked text (see 3rd note)>
|
<marked text (see 3rd note)>
|
||||||
@ -155,7 +155,7 @@ EBVS
|
|||||||
<0x 00 00 00 00>
|
<0x 00 00 00 00>
|
||||||
<0x 00 00 00 10>
|
<0x 00 00 00 10>
|
||||||
...(rest of size of DATA block)
|
...(rest of size of DATA block)
|
||||||
<0x FD EA = PAD? (ýê)>
|
<0x FD EA = PAD? (ýê)>
|
||||||
[fi MARK || BOOKMARK]
|
[fi MARK || BOOKMARK]
|
||||||
//-------------------------------
|
//-------------------------------
|
||||||
[if CORRECTION]
|
[if CORRECTION]
|
||||||
@ -174,7 +174,7 @@ EBVS
|
|||||||
<0x 00 00 00 00>
|
<0x 00 00 00 00>
|
||||||
<0x 00 00 00 10>
|
<0x 00 00 00 10>
|
||||||
...(rest of size of DATA block)
|
...(rest of size of DATA block)
|
||||||
<0x FD EA = PAD? (ýê)>
|
<0x FD EA = PAD? (ýê)>
|
||||||
DATA
|
DATA
|
||||||
<0x 4 bytes = size of <marked text (see 3rd note)> >
|
<0x 4 bytes = size of <marked text (see 3rd note)> >
|
||||||
<marked text (see 3rd note)>
|
<marked text (see 3rd note)>
|
||||||
@ -246,7 +246,7 @@ EBVS
|
|||||||
<0x 00 00 00 00>
|
<0x 00 00 00 00>
|
||||||
<0x 00 00 00 10>
|
<0x 00 00 00 10>
|
||||||
...(size of DATA block - 30)
|
...(size of DATA block - 30)
|
||||||
<0x FD EA = PAD? (ýê)>
|
<0x FD EA = PAD? (ýê)>
|
||||||
[fi DRAWING]
|
[fi DRAWING]
|
||||||
//-------------------------------
|
//-------------------------------
|
||||||
[next {NOTE,MARK,CORRECTION,DRAWING}]
|
[next {NOTE,MARK,CORRECTION,DRAWING}]
|
||||||
@ -308,7 +308,7 @@ EBVS
|
|||||||
...4
|
...4
|
||||||
...4
|
...4
|
||||||
...4
|
...4
|
||||||
<0x FD EA = PAD? (ýê)>
|
<0x FD EA = PAD? (ýê)>
|
||||||
//--------------------------------------------------------------------
|
//--------------------------------------------------------------------
|
||||||
|
|
||||||
// CATEGORY (if any)
|
// CATEGORY (if any)
|
||||||
|
152
imgsrc/calibreSymbols.spd
Normal file
152
imgsrc/calibreSymbols.spd
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
SplineFontDB: 3.0
|
||||||
|
FontName: calibreSymbols
|
||||||
|
FullName: calibre Symbols
|
||||||
|
FamilyName: calibre Symbols
|
||||||
|
Weight: Medium
|
||||||
|
Copyright: Created by Kovid Goyal with FontForge 2.0 (http://fontforge.sf.net)
|
||||||
|
UComments: "2012-2-27: Created."
|
||||||
|
Version: 001.000
|
||||||
|
ItalicAngle: 0
|
||||||
|
UnderlinePosition: -100
|
||||||
|
UnderlineWidth: 50
|
||||||
|
Ascent: 800
|
||||||
|
Descent: 200
|
||||||
|
LayerCount: 2
|
||||||
|
Layer: 0 0 "Back" 1
|
||||||
|
Layer: 1 0 "Fore" 0
|
||||||
|
NeedsXUIDChange: 1
|
||||||
|
XUID: [1021 913 325894820 11538708]
|
||||||
|
FSType: 0
|
||||||
|
OS2Version: 0
|
||||||
|
OS2_WeightWidthSlopeOnly: 0
|
||||||
|
OS2_UseTypoMetrics: 1
|
||||||
|
CreationTime: 1330331997
|
||||||
|
ModificationTime: 1330487767
|
||||||
|
OS2TypoAscent: 0
|
||||||
|
OS2TypoAOffset: 1
|
||||||
|
OS2TypoDescent: 0
|
||||||
|
OS2TypoDOffset: 1
|
||||||
|
OS2TypoLinegap: 90
|
||||||
|
OS2WinAscent: 0
|
||||||
|
OS2WinAOffset: 1
|
||||||
|
OS2WinDescent: 0
|
||||||
|
OS2WinDOffset: 1
|
||||||
|
HheadAscent: 0
|
||||||
|
HheadAOffset: 1
|
||||||
|
HheadDescent: 0
|
||||||
|
HheadDOffset: 1
|
||||||
|
MarkAttachClasses: 1
|
||||||
|
DEI: 91125
|
||||||
|
Encoding: UnicodeFull
|
||||||
|
UnicodeInterp: none
|
||||||
|
NameList: Adobe Glyph List
|
||||||
|
DisplaySize: -24
|
||||||
|
AntiAlias: 1
|
||||||
|
FitToEm: 1
|
||||||
|
WidthSeparation: 150
|
||||||
|
WinInfo: 9600 75 22
|
||||||
|
BeginPrivate: 0
|
||||||
|
EndPrivate
|
||||||
|
BeginChars: 1114112 3
|
||||||
|
|
||||||
|
StartChar: uni2605
|
||||||
|
Encoding: 9733 9733 0
|
||||||
|
Width: 979
|
||||||
|
VWidth: -26
|
||||||
|
Flags: W
|
||||||
|
LayerCount: 2
|
||||||
|
Fore
|
||||||
|
SplineSet
|
||||||
|
551.923 352.862 m 1
|
||||||
|
749.497 369.592 l 2
|
||||||
|
804.954 374.123 833.379 376.389 834.765 376.389 c 0
|
||||||
|
852.095 376.389 860.761 368.896 860.761 353.907 c 0
|
||||||
|
860.761 347.981 859.028 343.363 855.562 340.052 c 0
|
||||||
|
852.095 336.74 825.578 319.225 776.012 287.506 c 2
|
||||||
|
609.635 180.323 l 1
|
||||||
|
716.22 -88.417 l 2
|
||||||
|
717.606 -91.2051 718.301 -95.3877 718.301 -100.965 c 0
|
||||||
|
718.301 -106.193 716.394 -110.725 712.58 -114.558 c 0
|
||||||
|
708.769 -118.393 704.608 -120.31 700.104 -120.31 c 0
|
||||||
|
695.943 -120.31 691.61 -118.828 687.103 -115.866 c 0
|
||||||
|
682.598 -112.902 658.162 -92.251 613.795 -53.9082 c 2
|
||||||
|
466.134 74.71 l 1
|
||||||
|
320.554 -51.8184 l 2
|
||||||
|
274.802 -91.5547 249.758 -112.902 245.426 -115.866 c 0
|
||||||
|
241.092 -118.828 236.846 -120.31 232.688 -120.31 c 0
|
||||||
|
227.835 -120.31 223.415 -118.306 219.429 -114.297 c 0
|
||||||
|
215.442 -110.289 213.449 -105.844 213.449 -100.965 c 0
|
||||||
|
213.449 -97.8281 223.329 -71.3379 243.087 -21.4932 c 2
|
||||||
|
322.115 180.323 l 1
|
||||||
|
152.618 289.598 l 2
|
||||||
|
104.783 320.271 79.2217 337.176 75.9297 340.313 c 0
|
||||||
|
72.6357 343.45 70.9893 347.981 70.9893 353.907 c 0
|
||||||
|
70.9893 369.243 79.8291 376.912 97.5059 376.912 c 0
|
||||||
|
98.8926 376.912 123.155 374.82 170.296 370.638 c 2
|
||||||
|
379.825 352.862 l 1
|
||||||
|
427.14 555.201 l 2
|
||||||
|
439.271 607.834 446.811 636.764 449.757 641.992 c 0
|
||||||
|
452.702 647.221 458.162 649.834 466.134 649.834 c 0
|
||||||
|
474.454 649.834 480 646.96 482.772 641.208 c 0
|
||||||
|
485.545 635.457 493.518 604.173 506.689 547.357 c 2
|
||||||
|
551.923 352.862 l 1
|
||||||
|
EndSplineSet
|
||||||
|
Validated: 524289
|
||||||
|
EndChar
|
||||||
|
|
||||||
|
StartChar: zero
|
||||||
|
Encoding: 48 48 1
|
||||||
|
Width: 1303
|
||||||
|
VWidth: 2048
|
||||||
|
Flags: W
|
||||||
|
HStem: -43.3789 76.7998<582.097 721.09> 623.341 76.7998<582.097 721.091>
|
||||||
|
VStem: 403.82 97.4395<148.044 508.66> 802.221 96.959<148.044 508.659>
|
||||||
|
LayerCount: 2
|
||||||
|
Fore
|
||||||
|
SplineSet
|
||||||
|
651.5 623.341 m 0
|
||||||
|
601.58 623.341 564.061 598.78 538.939 549.66 c 0
|
||||||
|
513.82 500.541 501.26 426.7 501.26 328.141 c 0
|
||||||
|
501.26 229.9 513.82 156.221 538.939 107.101 c 0
|
||||||
|
564.061 57.9805 601.58 33.4209 651.5 33.4209 c 0
|
||||||
|
701.74 33.4209 739.42 57.9805 764.54 107.101 c 0
|
||||||
|
789.66 156.221 802.221 229.9 802.221 328.141 c 0
|
||||||
|
802.221 426.7 789.66 500.541 764.54 549.66 c 0
|
||||||
|
739.42 598.78 701.74 623.341 651.5 623.341 c 0
|
||||||
|
651.5 700.141 m 0
|
||||||
|
731.82 700.141 793.18 668.38 835.58 604.859 c 0
|
||||||
|
877.979 541.341 899.18 449.101 899.18 328.141 c 0
|
||||||
|
899.18 207.5 877.979 115.421 835.58 51.9004 c 0
|
||||||
|
793.18 -11.6201 731.819 -43.3789 651.5 -43.3789 c 0
|
||||||
|
571.18 -43.3789 509.82 -11.6201 467.42 51.9004 c 0
|
||||||
|
425.021 115.421 403.82 207.5 403.82 328.141 c 0
|
||||||
|
403.82 449.101 425.021 541.341 467.42 604.859 c 0
|
||||||
|
509.82 668.38 571.18 700.141 651.5 700.141 c 0
|
||||||
|
EndSplineSet
|
||||||
|
Validated: 1
|
||||||
|
EndChar
|
||||||
|
|
||||||
|
StartChar: period
|
||||||
|
Encoding: 46 46 2
|
||||||
|
Width: 516
|
||||||
|
VWidth: 2048
|
||||||
|
Flags: W
|
||||||
|
HStem: 53.4004 166.199<203.263 309.297>
|
||||||
|
VStem: 174.6 163.801<82.9501 190.955>
|
||||||
|
LayerCount: 2
|
||||||
|
Fore
|
||||||
|
SplineSet
|
||||||
|
338.4 142.8 m 0
|
||||||
|
338.4 119.2 330.5 98.4004 314.7 80.4004 c 0
|
||||||
|
298.9 62.4004 277 53.4004 249 53.4004 c 0
|
||||||
|
225.4 53.4004 207.1 61.2002 194.1 76.7998 c 0
|
||||||
|
181.1 92.4004 174.6 111 174.6 132.6 c 0
|
||||||
|
174.6 155.8 182.6 176.1 198.6 193.5 c 0
|
||||||
|
214.6 210.9 236.8 219.6 265.2 219.6 c 0
|
||||||
|
288.8 219.6 306.9 212.2 319.5 197.4 c 0
|
||||||
|
332.1 182.6 338.4 164.4 338.4 142.8 c 0
|
||||||
|
EndSplineSet
|
||||||
|
Validated: 1
|
||||||
|
EndChar
|
||||||
|
EndChars
|
||||||
|
EndSplineFont
|
912
imgsrc/keyboard-prefs.svg
Normal file
912
imgsrc/keyboard-prefs.svg
Normal file
@ -0,0 +1,912 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 12.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 51448) -->
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://web.resource.org/cc/"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
version="1.0"
|
||||||
|
id="Livello_1"
|
||||||
|
width="128"
|
||||||
|
height="128"
|
||||||
|
viewBox="0 0 144 94"
|
||||||
|
overflow="visible"
|
||||||
|
enable-background="new 0 0 144 94"
|
||||||
|
xml:space="preserve"
|
||||||
|
sodipodi:version="0.32"
|
||||||
|
inkscape:version="0.45+devel"
|
||||||
|
sodipodi:docname="preferences-desktop-keyboard.svgz"
|
||||||
|
inkscape:output_extension="org.inkscape.output.svgz.inkscape"
|
||||||
|
style="overflow:visible"><metadata
|
||||||
|
id="metadata224"><rdf:RDF><cc:Work
|
||||||
|
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
|
||||||
|
id="defs222"><linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#XMLID_35_"
|
||||||
|
id="linearGradient2719"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(1.1250094,0,0,1.125,-4.5001124,-11.275)"
|
||||||
|
x1="72.000504"
|
||||||
|
y1="83.799797"
|
||||||
|
x2="72.000504"
|
||||||
|
y2="5.8003001" /><linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#rect3941_1_"
|
||||||
|
id="linearGradient2721"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.474754,0,0,-0.465075,-255.92554,-542.49842)"
|
||||||
|
x1="780.77576"
|
||||||
|
y1="-1248.1824"
|
||||||
|
x2="780.81049"
|
||||||
|
y2="-1195.5962" /><linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#rect3941_1_"
|
||||||
|
id="linearGradient2723"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.474754,0,0,-0.465075,-263.1733,-542.49842)"
|
||||||
|
x1="708.36438"
|
||||||
|
y1="-1248.1824"
|
||||||
|
x2="708.39648"
|
||||||
|
y2="-1195.5962" /><linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#rect3941_1_"
|
||||||
|
id="linearGradient2725"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.474754,0,0,-0.465075,-270.42218,-542.49842)"
|
||||||
|
x1="635.95538"
|
||||||
|
y1="-1248.1824"
|
||||||
|
x2="635.9834"
|
||||||
|
y2="-1195.5962" /><linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#rect3941_1_"
|
||||||
|
id="linearGradient2727"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.474754,0,0,-0.465075,-253.92268,-535.12325)"
|
||||||
|
x1="790.77502"
|
||||||
|
y1="-1324.245"
|
||||||
|
x2="790.81049"
|
||||||
|
y2="-1271.6509" /><linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#rect3941_1_"
|
||||||
|
id="linearGradient2729"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.474754,0,0,-0.465075,-261.17157,-535.12325)"
|
||||||
|
x1="718.36609"
|
||||||
|
y1="-1324.245"
|
||||||
|
x2="718.39838"
|
||||||
|
y2="-1271.6509" /><linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#rect3941_1_"
|
||||||
|
id="linearGradient2731"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.474754,0,0,-0.465075,-268.41933,-535.12325)"
|
||||||
|
x1="645.95471"
|
||||||
|
y1="-1324.245"
|
||||||
|
x2="645.9834"
|
||||||
|
y2="-1271.6509" /><filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
x="-0.36659993"
|
||||||
|
width="1.7331999"
|
||||||
|
y="-0.17839379"
|
||||||
|
height="1.3567876"
|
||||||
|
id="filter3416"><feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="0.51430916"
|
||||||
|
id="feGaussianBlur3418" /></filter><filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
x="-0.36972603"
|
||||||
|
width="1.7394521"
|
||||||
|
y="-0.17766281"
|
||||||
|
height="1.3553256"
|
||||||
|
id="filter3424"><feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="0.51984026"
|
||||||
|
id="feGaussianBlur3426" /></filter><filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
x="-0.22179123"
|
||||||
|
width="1.4435825"
|
||||||
|
y="-0.10660794"
|
||||||
|
height="1.2132159"
|
||||||
|
id="filter3444"><feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="0.31193415"
|
||||||
|
id="feGaussianBlur3446" /></filter><filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
x="-0.21995996"
|
||||||
|
width="1.4399199"
|
||||||
|
y="-0.10703628"
|
||||||
|
height="1.2140726"
|
||||||
|
id="filter3448"><feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="0.30858549"
|
||||||
|
id="feGaussianBlur3450" /></filter><filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
x="-0.22183562"
|
||||||
|
width="1.4436712"
|
||||||
|
y="-0.10659768"
|
||||||
|
height="1.2131954"
|
||||||
|
id="filter3452"><feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="0.31190415"
|
||||||
|
id="feGaussianBlur3454" /></filter><filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
x="-0.21995996"
|
||||||
|
width="1.4399199"
|
||||||
|
y="-0.10703628"
|
||||||
|
height="1.2140726"
|
||||||
|
id="filter3456"><feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="0.30858549"
|
||||||
|
id="feGaussianBlur3458" /></filter><filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
x="-0.22179123"
|
||||||
|
width="1.4435825"
|
||||||
|
y="-0.10660794"
|
||||||
|
height="1.2132159"
|
||||||
|
id="filter3460"><feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="0.31193415"
|
||||||
|
id="feGaussianBlur3462" /></filter><filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
x="-0.21991603"
|
||||||
|
width="1.4398321"
|
||||||
|
y="-0.10704668"
|
||||||
|
height="1.2140934"
|
||||||
|
id="filter3464"><feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="0.30861549"
|
||||||
|
id="feGaussianBlur3466" /></filter><filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
x="-0.22179123"
|
||||||
|
width="1.4435825"
|
||||||
|
y="-0.10660794"
|
||||||
|
height="1.2132159"
|
||||||
|
id="filter3468"><feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="0.31193415"
|
||||||
|
id="feGaussianBlur3470" /></filter><filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
x="-0.21995996"
|
||||||
|
width="1.4399199"
|
||||||
|
y="-0.10703628"
|
||||||
|
height="1.2140726"
|
||||||
|
id="filter3472"><feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="0.30858549"
|
||||||
|
id="feGaussianBlur3474" /></filter><filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
x="-0.22183562"
|
||||||
|
width="1.4436712"
|
||||||
|
y="-0.10659768"
|
||||||
|
height="1.2131954"
|
||||||
|
id="filter3476"><feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="0.31190415"
|
||||||
|
id="feGaussianBlur3478" /></filter><filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
x="-0.21995996"
|
||||||
|
width="1.4399199"
|
||||||
|
y="-0.10703628"
|
||||||
|
height="1.2140726"
|
||||||
|
id="filter3484"><feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="0.30858549"
|
||||||
|
id="feGaussianBlur3486" /></filter><filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
x="-0.02891983"
|
||||||
|
width="1.0578397"
|
||||||
|
y="-0.14107949"
|
||||||
|
height="1.282159"
|
||||||
|
id="filter3492"><feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="0.33591005"
|
||||||
|
id="feGaussianBlur3494" /></filter><filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
x="-0.02891983"
|
||||||
|
width="1.0578397"
|
||||||
|
y="-0.14107949"
|
||||||
|
height="1.282159"
|
||||||
|
id="filter3496"><feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="0.33591005"
|
||||||
|
id="feGaussianBlur3498" /></filter><filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
x="-0.028919654"
|
||||||
|
width="1.0578393"
|
||||||
|
y="-0.14108369"
|
||||||
|
height="1.2821674"
|
||||||
|
id="filter3500"><feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="0.33592005"
|
||||||
|
id="feGaussianBlur3502" /></filter><filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
x="-0.02891983"
|
||||||
|
width="1.0578397"
|
||||||
|
y="-0.14107949"
|
||||||
|
height="1.282159"
|
||||||
|
id="filter3504"><feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="0.33591005"
|
||||||
|
id="feGaussianBlur3506" /></filter><filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
x="-0.02891983"
|
||||||
|
width="1.0578397"
|
||||||
|
y="-0.14107949"
|
||||||
|
height="1.282159"
|
||||||
|
id="filter3508"><feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="0.33591005"
|
||||||
|
id="feGaussianBlur3510" /></filter><filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
x="-0.02891983"
|
||||||
|
width="1.0578397"
|
||||||
|
y="-0.14107949"
|
||||||
|
height="1.282159"
|
||||||
|
id="filter3512"><feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="0.33591005"
|
||||||
|
id="feGaussianBlur3514" /></filter><linearGradient
|
||||||
|
id="XMLID_31_"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="69.333504"
|
||||||
|
y1="17.6504"
|
||||||
|
x2="69.333504"
|
||||||
|
y2="9.7958002"
|
||||||
|
xlink:href="#XMLID_32_">
|
||||||
|
<stop
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#FFFFFF"
|
||||||
|
id="stop169" />
|
||||||
|
<stop
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#DDDDDD"
|
||||||
|
id="stop171" />
|
||||||
|
</linearGradient><linearGradient
|
||||||
|
id="XMLID_32_"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="106.334"
|
||||||
|
y1="17.6504"
|
||||||
|
x2="106.334"
|
||||||
|
y2="9.7958002">
|
||||||
|
<stop
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#FFFFFF"
|
||||||
|
id="stop186" />
|
||||||
|
<stop
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#DDDDDD"
|
||||||
|
id="stop188" />
|
||||||
|
</linearGradient><linearGradient
|
||||||
|
id="XMLID_30_"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="31.742201"
|
||||||
|
y1="17.6504"
|
||||||
|
x2="31.742201"
|
||||||
|
y2="9.7958002">
|
||||||
|
<stop
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#FFFFFF"
|
||||||
|
id="stop152" /><stop
|
||||||
|
id="stop3366"
|
||||||
|
style="stop-color:#eaeaea;stop-opacity:1;"
|
||||||
|
offset="0.68235296" />
|
||||||
|
<stop
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#c8c8c8;stop-opacity:1;"
|
||||||
|
id="stop154" />
|
||||||
|
</linearGradient><linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#XMLID_30_"
|
||||||
|
id="linearGradient2945"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="69.333504"
|
||||||
|
y1="17.6504"
|
||||||
|
x2="69.333504"
|
||||||
|
y2="9.7958002" /><linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#XMLID_30_"
|
||||||
|
id="linearGradient2947"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="106.334"
|
||||||
|
y1="17.6504"
|
||||||
|
x2="106.334"
|
||||||
|
y2="9.7958002" /><linearGradient
|
||||||
|
xlink:href="#XMLID_30_"
|
||||||
|
id="XMLID_28_"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="38.033699"
|
||||||
|
y1="55.649399"
|
||||||
|
x2="38.033699"
|
||||||
|
y2="47.795502"
|
||||||
|
spreadMethod="pad">
|
||||||
|
<stop
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#FFFFFF"
|
||||||
|
id="stop118" />
|
||||||
|
<stop
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#DDDDDD"
|
||||||
|
id="stop120" />
|
||||||
|
</linearGradient><linearGradient
|
||||||
|
id="XMLID_29_"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="75.333"
|
||||||
|
y1="55.649399"
|
||||||
|
x2="75.333"
|
||||||
|
y2="47.795502">
|
||||||
|
<stop
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#FFFFFF"
|
||||||
|
id="stop135" />
|
||||||
|
<stop
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#DDDDDD"
|
||||||
|
id="stop137" />
|
||||||
|
</linearGradient><linearGradient
|
||||||
|
id="XMLID_33_"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="112.334"
|
||||||
|
y1="55.649399"
|
||||||
|
x2="112.334"
|
||||||
|
y2="47.795502">
|
||||||
|
<stop
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#FFFFFF"
|
||||||
|
id="stop203" />
|
||||||
|
<stop
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#DDDDDD"
|
||||||
|
id="stop205" />
|
||||||
|
</linearGradient><linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#XMLID_30_"
|
||||||
|
id="linearGradient2979"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
spreadMethod="pad"
|
||||||
|
x1="38.033699"
|
||||||
|
y1="55.649399"
|
||||||
|
x2="38.033699"
|
||||||
|
y2="47.795502" /><linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#XMLID_30_"
|
||||||
|
id="linearGradient2981"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="75.333"
|
||||||
|
y1="55.649399"
|
||||||
|
x2="75.333"
|
||||||
|
y2="47.795502" /><linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#XMLID_30_"
|
||||||
|
id="linearGradient2983"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="112.334"
|
||||||
|
y1="55.649399"
|
||||||
|
x2="112.334"
|
||||||
|
y2="47.795502" /><filter
|
||||||
|
inkscape:collect="always"
|
||||||
|
id="filter3372"><feGaussianBlur
|
||||||
|
inkscape:collect="always"
|
||||||
|
stdDeviation="0.3179705"
|
||||||
|
id="feGaussianBlur3374" /></filter><linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#XMLID_30_"
|
||||||
|
id="linearGradient3378"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="106.334"
|
||||||
|
y1="17.6504"
|
||||||
|
x2="106.334"
|
||||||
|
y2="9.7958002" /><linearGradient
|
||||||
|
inkscape:collect="always"
|
||||||
|
xlink:href="#XMLID_30_"
|
||||||
|
id="linearGradient3380"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="31.742201"
|
||||||
|
y1="17.6504"
|
||||||
|
x2="31.742201"
|
||||||
|
y2="9.7958002" /></defs><sodipodi:namedview
|
||||||
|
inkscape:window-height="696"
|
||||||
|
inkscape:window-width="998"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:pageopacity="0.0"
|
||||||
|
guidetolerance="10.0"
|
||||||
|
gridtolerance="10.0"
|
||||||
|
objecttolerance="10.0"
|
||||||
|
borderopacity="1.0"
|
||||||
|
bordercolor="#666666"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
id="base"
|
||||||
|
height="128px"
|
||||||
|
width="128px"
|
||||||
|
inkscape:zoom="2.8284271"
|
||||||
|
inkscape:cx="65.761733"
|
||||||
|
inkscape:cy="68.182683"
|
||||||
|
inkscape:window-x="26"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:current-layer="g2620" />
|
||||||
|
<filter
|
||||||
|
id="AI_Sfocatura_2">
|
||||||
|
<feGaussianBlur
|
||||||
|
stdDeviation="2"
|
||||||
|
id="feGaussianBlur4" />
|
||||||
|
</filter>
|
||||||
|
<path
|
||||||
|
display="none"
|
||||||
|
d="M 89.758,1.8 C 88.983,1.8 88.229,1.945 87.501,2.17 C 86.774,1.945 86.022,1.8 85.248,1.8 L 52.752,1.8 C 51.978,1.8 51.226,1.945 50.499,2.17 C 49.772,1.944 49.02,1.8 48.245,1.8 L 15.755,1.8 C 11.479,1.8 8,5.275 8,9.546 L 8,42.054 C 8,45.72 10.57,48.783 14,49.582 C 14,53.16 14,80.057 14,80.057 C 14,84.327 17.478,87.8 21.752,87.8 L 54.248,87.8 C 55.022,87.8 55.774,87.655 56.5,87.431 C 57.227,87.656 57.979,87.8 58.754,87.8 L 91.241,87.8 C 92.017,87.8 92.77,87.655 93.498,87.431 C 94.225,87.655 94.977,87.8 95.751,87.8 L 128.241,87.8 C 132.518,87.8 135.999,84.326 135.999,80.057 L 135.999,47.546 C 135.999,43.881 133.43,40.818 129.999,40.019 C 129.999,36.442 129.999,9.546 129.999,9.546 C 129.999,5.275 126.521,1.8 122.247,1.8 L 89.758,1.8 L 89.758,1.8 z"
|
||||||
|
id="path6"
|
||||||
|
style="fill:#ff00bf;display:none" />
|
||||||
|
|
||||||
|
<linearGradient
|
||||||
|
id="XMLID_35_"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="72.000504"
|
||||||
|
y1="83.799797"
|
||||||
|
x2="72.000504"
|
||||||
|
y2="5.8003001">
|
||||||
|
<stop
|
||||||
|
offset="0.0059"
|
||||||
|
style="stop-color:#888888"
|
||||||
|
id="stop13" />
|
||||||
|
<stop
|
||||||
|
offset="0.5"
|
||||||
|
style="stop-color:#555555"
|
||||||
|
id="stop15" />
|
||||||
|
<stop
|
||||||
|
offset="0.54"
|
||||||
|
style="stop-color:#888888"
|
||||||
|
id="stop17" />
|
||||||
|
<stop
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#555555"
|
||||||
|
id="stop19" />
|
||||||
|
</linearGradient>
|
||||||
|
|
||||||
|
<linearGradient
|
||||||
|
id="rect3785_1_"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="780.81049"
|
||||||
|
y1="-1240.9404"
|
||||||
|
x2="780.81049"
|
||||||
|
y2="-1195.5962"
|
||||||
|
gradientTransform="matrix(0.422,0,0,-0.4134,-223.4874,-472.1986)">
|
||||||
|
<stop
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#BEBEBE"
|
||||||
|
id="stop24" />
|
||||||
|
<stop
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#EDEDED"
|
||||||
|
id="stop26" />
|
||||||
|
</linearGradient>
|
||||||
|
|
||||||
|
|
||||||
|
<linearGradient
|
||||||
|
id="rect3791_1_"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="708.39648"
|
||||||
|
y1="-1240.9404"
|
||||||
|
x2="708.39648"
|
||||||
|
y2="-1195.5962"
|
||||||
|
gradientTransform="matrix(0.422,0,0,-0.4134,-229.9298,-472.1986)">
|
||||||
|
<stop
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#BEBEBE"
|
||||||
|
id="stop38" />
|
||||||
|
<stop
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#EDEDED"
|
||||||
|
id="stop40" />
|
||||||
|
</linearGradient>
|
||||||
|
|
||||||
|
|
||||||
|
<linearGradient
|
||||||
|
id="rect3797_1_"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="635.9834"
|
||||||
|
y1="-1240.9404"
|
||||||
|
x2="635.9834"
|
||||||
|
y2="-1195.5962"
|
||||||
|
gradientTransform="matrix(0.422,0,0,-0.4134,-236.3732,-472.1986)">
|
||||||
|
<stop
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#BEBEBE"
|
||||||
|
id="stop52" />
|
||||||
|
<stop
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#EDEDED"
|
||||||
|
id="stop54" />
|
||||||
|
</linearGradient>
|
||||||
|
|
||||||
|
|
||||||
|
<linearGradient
|
||||||
|
id="rect3929_1_"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="790.81049"
|
||||||
|
y1="-1316.9951"
|
||||||
|
x2="790.81049"
|
||||||
|
y2="-1271.6509"
|
||||||
|
gradientTransform="matrix(0.422,0,0,-0.4134,-221.7071,-465.6429)">
|
||||||
|
<stop
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#BEBEBE"
|
||||||
|
id="stop66" />
|
||||||
|
<stop
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#EDEDED"
|
||||||
|
id="stop68" />
|
||||||
|
</linearGradient>
|
||||||
|
|
||||||
|
|
||||||
|
<linearGradient
|
||||||
|
id="rect3935_1_"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="718.39838"
|
||||||
|
y1="-1316.9951"
|
||||||
|
x2="718.39838"
|
||||||
|
y2="-1271.6509"
|
||||||
|
gradientTransform="matrix(0.422,0,0,-0.4134,-228.1505,-465.6429)">
|
||||||
|
<stop
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#BEBEBE"
|
||||||
|
id="stop80" />
|
||||||
|
<stop
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#EDEDED"
|
||||||
|
id="stop82" />
|
||||||
|
</linearGradient>
|
||||||
|
|
||||||
|
|
||||||
|
<linearGradient
|
||||||
|
id="rect3941_1_"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="645.9834"
|
||||||
|
y1="-1316.9951"
|
||||||
|
x2="645.9834"
|
||||||
|
y2="-1271.6509"
|
||||||
|
gradientTransform="matrix(0.422,0,0,-0.4134,-234.5929,-465.6429)">
|
||||||
|
<stop
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#e4e4e4;stop-opacity:1;"
|
||||||
|
id="stop94" /><stop
|
||||||
|
id="stop3516"
|
||||||
|
style="stop-color:#bebebe;stop-opacity:1;"
|
||||||
|
offset="0.18012393" /><stop
|
||||||
|
offset="0.61417598"
|
||||||
|
style="stop-color:#cdcdcd;stop-opacity:1;"
|
||||||
|
id="stop3376" />
|
||||||
|
<stop
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#b3b3b3;stop-opacity:1;"
|
||||||
|
id="stop96" />
|
||||||
|
</linearGradient>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<g
|
||||||
|
id="g8"
|
||||||
|
style="opacity:0.8;filter:url(#AI_Sfocatura_2)"
|
||||||
|
transform="matrix(1.1250094,0,0,1.125,-9.0001128,-12.4)">
|
||||||
|
<path
|
||||||
|
d="M 128.242,45.8 L 125.547,45.8 C 125.826,45.276 126,44.688 126,44.054 L 126,11.546 C 126,9.481 124.316,7.8 122.248,7.8 L 89.758,7.8 C 88.907,7.8 88.131,8.093 87.501,8.57 C 86.872,8.093 86.097,7.8 85.248,7.8 L 52.752,7.8 C 51.903,7.8 51.128,8.093 50.499,8.57 C 49.869,8.094 49.094,7.8 48.245,7.8 L 15.755,7.8 C 13.685,7.8 12,9.48 12,11.546 L 12,44.054 C 12,46.119 13.685,47.8 15.755,47.8 L 18.453,47.8 C 18.173,48.323 18,48.912 18,49.546 L 18,82.057 C 18,84.121 19.683,85.8 21.752,85.8 L 54.248,85.8 C 55.097,85.8 55.872,85.507 56.5,85.031 C 57.13,85.507 57.905,85.8 58.754,85.8 L 91.241,85.8 C 92.092,85.8 92.868,85.507 93.498,85.03 C 94.127,85.507 94.902,85.8 95.751,85.8 L 128.241,85.8 C 130.313,85.8 131.999,84.121 131.999,82.057 L 131.999,49.546 C 132,47.48 130.314,45.8 128.242,45.8 z"
|
||||||
|
id="path10"
|
||||||
|
style="opacity:0.8" />
|
||||||
|
</g><g
|
||||||
|
id="g2620"
|
||||||
|
transform="translate(-4.5,0)"><path
|
||||||
|
style="fill:url(#linearGradient2721);fill-opacity:1"
|
||||||
|
d="M 96.478481,-2.5 L 133.03004,-2.5 C 134.11905,-2.5 135.00105,-1.621375 135.00105,-0.53575 L 135.00105,36.03575 C 135.00105,37.121374 134.11905,38 133.03004,38 L 96.478481,38 C 95.382722,38 94.500715,37.121374 94.500715,36.03575 L 94.500715,-0.53575 C 94.500715,-1.621375 95.382722,-2.5 96.478481,-2.5 z"
|
||||||
|
id="rect3785" /><g
|
||||||
|
transform="matrix(1.1250094,0,0,1.125,-4.5001124,-11.275)"
|
||||||
|
nodetypes="cccsssssscccc"
|
||||||
|
id="path3787">
|
||||||
|
|
||||||
|
<radialGradient
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.6404,-8.5e-3,-7.7e-3,-0.6279,-240.4975,-567.9111)"
|
||||||
|
r="40.036301"
|
||||||
|
cy="-971.75677"
|
||||||
|
cx="527.62299"
|
||||||
|
id="XMLID_17_">
|
||||||
|
<stop
|
||||||
|
id="stop31"
|
||||||
|
style="stop-color:#E8E8E8"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop33"
|
||||||
|
style="stop-color:#FFFFFF"
|
||||||
|
offset="1" />
|
||||||
|
</radialGradient>
|
||||||
|
<path
|
||||||
|
style="fill:url(#XMLID_17_)"
|
||||||
|
id="path35"
|
||||||
|
d="M 91.145,9.856 L 89.924,35.848 L 89.852,37.041 C 91.107,37.752 92.344,38.38 93.661,38.908 C 93.683,38.914 93.717,38.9 93.738,38.908 C 97.663,40.465 101.819,41.179 105.966,41.145 C 106.662,41.14 107.359,41.12 108.055,41.072 C 109.436,40.973 110.852,40.816 112.223,40.55 C 113.593,40.285 114.914,39.932 116.252,39.504 C 118.259,38.861 120.26,38.043 122.15,37.042 L 122.077,35.849 L 120.928,9.857 L 91.145,9.857 L 91.145,9.856 z" />
|
||||||
|
</g><path
|
||||||
|
style="fill:url(#linearGradient2723);fill-opacity:1"
|
||||||
|
d="M 54.846383,-2.5 L 91.404689,-2.5 C 92.492573,-2.5 93.375705,-1.621375 93.375705,-0.53575 L 93.375705,36.03575 C 93.375705,37.121374 92.492573,38 91.404689,38 L 54.846383,38 C 53.758499,38 52.875367,37.121374 52.875367,36.03575 L 52.875367,-0.53575 C 52.875367,-1.621375 53.758499,-2.5 54.846383,-2.5 z"
|
||||||
|
id="rect3791" /><g
|
||||||
|
transform="matrix(1.1250094,0,0,1.125,-4.5001124,-11.275)"
|
||||||
|
nodetypes="cccsssssscccc"
|
||||||
|
id="path3793">
|
||||||
|
|
||||||
|
<radialGradient
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.6404,-8.5e-3,-7.7e-3,-0.6279,-247.2058,-567.9111)"
|
||||||
|
r="40.036098"
|
||||||
|
cy="-971.12653"
|
||||||
|
cx="480.29791"
|
||||||
|
id="XMLID_19_">
|
||||||
|
<stop
|
||||||
|
id="stop45"
|
||||||
|
style="stop-color:#E8E8E8"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop47"
|
||||||
|
style="stop-color:#FFFFFF"
|
||||||
|
offset="1" />
|
||||||
|
</radialGradient>
|
||||||
|
<path
|
||||||
|
style="fill:url(#XMLID_19_)"
|
||||||
|
id="path49"
|
||||||
|
d="M 54.145,9.856 L 52.921,35.848 L 52.849,37.041 C 54.109,37.752 55.348,38.38 56.663,38.908 C 56.682,38.914 56.715,38.9 56.734,38.908 C 60.662,40.465 64.821,41.179 68.962,41.145 C 69.658,41.14 70.355,41.12 71.048,41.072 C 72.433,40.973 73.848,40.816 75.218,40.55 C 76.589,40.285 77.909,39.932 79.253,39.504 C 81.254,38.861 83.255,38.043 85.147,37.042 L 85.08,35.849 L 83.927,9.856 L 54.145,9.856 z" />
|
||||||
|
</g><path
|
||||||
|
style="fill:url(#linearGradient2725);fill-opacity:1"
|
||||||
|
d="M 13.224411,-2.5 L 49.775966,-2.5 C 50.867225,-2.5 51.750357,-1.621375 51.750357,-0.53575 L 51.750357,36.03575 C 51.750357,37.121374 50.867225,38 49.775966,38 L 13.224411,38 C 12.133151,38 11.250019,37.121374 11.250019,36.03575 L 11.250019,-0.53575 C 11.250019,-1.621375 12.133151,-2.5 13.224411,-2.5 z"
|
||||||
|
id="rect3797" /><g
|
||||||
|
transform="matrix(1.1250094,0,0,1.125,-4.5001124,-11.275)"
|
||||||
|
nodetypes="cccsssssscccc"
|
||||||
|
id="path3799">
|
||||||
|
|
||||||
|
<radialGradient
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.6403,-8.5e-3,-7.7e-3,-0.6279,-253.8748,-567.9111)"
|
||||||
|
r="40.033199"
|
||||||
|
cy="-970.48578"
|
||||||
|
cx="432.98141"
|
||||||
|
id="XMLID_24_">
|
||||||
|
<stop
|
||||||
|
id="stop59"
|
||||||
|
style="stop-color:#E8E8E8"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop61"
|
||||||
|
style="stop-color:#FFFFFF"
|
||||||
|
offset="1" />
|
||||||
|
</radialGradient>
|
||||||
|
<path
|
||||||
|
style="fill:url(#XMLID_24_)"
|
||||||
|
id="path63"
|
||||||
|
d="M 17.146,9.856 L 15.924,35.848 L 15.852,37.041 C 17.109,37.752 18.348,38.38 19.663,38.908 C 19.682,38.914 19.716,38.9 19.735,38.908 C 23.662,40.465 27.821,41.179 31.964,41.145 C 32.657,41.14 33.357,41.12 34.05,41.072 C 35.435,40.973 36.85,40.816 38.22,40.55 C 39.591,40.285 40.909,39.932 42.249,39.504 C 44.258,38.861 46.254,38.043 48.146,37.042 L 48.075,35.849 L 46.925,9.857 L 17.146,9.857 L 17.146,9.856 z" />
|
||||||
|
</g><path
|
||||||
|
style="fill:url(#linearGradient2727);fill-opacity:1"
|
||||||
|
d="M 103.22179,40.25 L 139.77334,40.25 C 140.8691,40.25 141.75111,41.128625 141.75111,42.21425 L 141.75111,78.789125 C 141.75111,79.87475 140.8691,80.75 139.77334,80.75 L 103.22179,80.75 C 102.13278,80.75 101.25077,79.873625 101.25077,78.789125 L 101.25077,42.21425 C 101.25077,41.128625 102.13278,40.25 103.22179,40.25 z"
|
||||||
|
id="rect3929" /><g
|
||||||
|
transform="matrix(1.1250094,0,0,1.125,-4.5001124,-11.275)"
|
||||||
|
nodetypes="cccsssssscccc"
|
||||||
|
id="path3931">
|
||||||
|
|
||||||
|
<radialGradient
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.6404,-8.5e-3,-7.7e-3,-0.6279,-238.6489,-561.7972)"
|
||||||
|
r="40.036499"
|
||||||
|
cy="-1022.5366"
|
||||||
|
cx="533.49512"
|
||||||
|
id="XMLID_25_">
|
||||||
|
<stop
|
||||||
|
id="stop73"
|
||||||
|
style="stop-color:#E8E8E8"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop75"
|
||||||
|
style="stop-color:#FFFFFF"
|
||||||
|
offset="1" />
|
||||||
|
</radialGradient>
|
||||||
|
<path
|
||||||
|
style="fill:url(#XMLID_25_)"
|
||||||
|
id="path77"
|
||||||
|
d="M 97.145,47.856 L 95.918,73.85 L 95.851,75.04 C 97.113,75.751 98.35,76.383 99.665,76.908 C 99.682,76.914 99.716,76.902 99.731,76.908 C 103.661,78.47 107.824,79.181 111.963,79.148 C 112.654,79.142 113.357,79.125 114.047,79.075 C 115.434,78.979 116.849,78.821 118.221,78.55 C 119.591,78.29 120.912,77.936 122.25,77.506 C 124.262,76.863 126.252,76.045 128.147,75.04 L 128.075,73.85 L 126.926,47.857 L 97.145,47.857 L 97.145,47.856 z" />
|
||||||
|
</g><path
|
||||||
|
style="fill:url(#linearGradient2729);fill-opacity:1"
|
||||||
|
d="M 61.599815,40.25 L 98.148,40.25 C 99.24263,40.25 100.12576,41.128625 100.12576,42.21425 L 100.12576,78.789125 C 100.12576,79.87475 99.24263,80.75 98.148,80.75 L 61.599815,80.75 C 60.511931,80.75 59.625423,79.873625 59.625423,78.789125 L 59.625423,42.21425 C 59.625423,41.128625 60.511931,40.25 61.599815,40.25 z"
|
||||||
|
id="rect3935" /><g
|
||||||
|
transform="matrix(1.1250094,0,0,1.125,-4.5001124,-11.275)"
|
||||||
|
nodetypes="cccsssssscccc"
|
||||||
|
id="path3937">
|
||||||
|
|
||||||
|
<radialGradient
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.6403,-8.5e-3,-7.7e-3,-0.6279,-245.3333,-561.7972)"
|
||||||
|
r="40.038898"
|
||||||
|
cy="-1021.9087"
|
||||||
|
cx="486.17969"
|
||||||
|
id="XMLID_26_">
|
||||||
|
<stop
|
||||||
|
id="stop87"
|
||||||
|
style="stop-color:#E8E8E8"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop89"
|
||||||
|
style="stop-color:#FFFFFF"
|
||||||
|
offset="1" />
|
||||||
|
</radialGradient>
|
||||||
|
<path
|
||||||
|
style="fill:url(#XMLID_26_)"
|
||||||
|
id="path91"
|
||||||
|
d="M 60.145,47.856 L 58.923,73.85 L 58.852,75.04 C 60.112,75.751 61.347,76.383 62.663,76.908 C 62.684,76.914 62.715,76.902 62.735,76.908 C 66.662,78.47 70.824,79.181 74.964,79.148 C 75.654,79.142 76.357,79.125 77.048,79.075 C 78.441,78.979 79.856,78.821 81.227,78.55 C 82.597,78.29 83.913,77.936 85.25,77.506 C 87.263,76.863 89.258,76.045 91.153,75.04 L 91.076,73.85 L 89.926,47.857 L 60.145,47.857 L 60.145,47.856 z" />
|
||||||
|
</g><path
|
||||||
|
style="fill:url(#linearGradient2731)"
|
||||||
|
d="M 19.971092,40.25 L 56.529397,40.25 C 57.617282,40.25 58.500414,41.128625 58.500414,42.21425 L 58.500414,78.789125 C 58.500414,79.87475 57.617282,80.75 56.529397,80.75 L 19.971092,80.75 C 18.883208,80.75 18.000075,79.873625 18.000075,78.789125 L 18.000075,42.21425 C 18.000075,41.128625 18.883208,40.25 19.971092,40.25 z"
|
||||||
|
id="rect3941" /><g
|
||||||
|
transform="matrix(1.1250094,0,0,1.125,-4.5001124,-11.275)"
|
||||||
|
nodetypes="cccsssssscccc"
|
||||||
|
id="path3943"
|
||||||
|
style="filter:url(#filter3372)">
|
||||||
|
|
||||||
|
<radialGradient
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
gradientTransform="matrix(0.6404,-8.5e-3,-7.7e-3,-0.6279,-252.0475,-561.7972)"
|
||||||
|
r="40.039001"
|
||||||
|
cy="-1021.27"
|
||||||
|
cx="438.85059"
|
||||||
|
id="XMLID_27_">
|
||||||
|
<stop
|
||||||
|
id="stop101"
|
||||||
|
style="stop-color:#E8E8E8"
|
||||||
|
offset="0" />
|
||||||
|
<stop
|
||||||
|
id="stop103"
|
||||||
|
style="stop-color:#FFFFFF"
|
||||||
|
offset="0.5858" />
|
||||||
|
</radialGradient>
|
||||||
|
<path
|
||||||
|
style="fill:url(#XMLID_27_)"
|
||||||
|
id="path105"
|
||||||
|
d="M 23.146,47.856 L 21.921,73.85 L 21.849,75.04 C 23.11,75.751 24.348,76.383 25.663,76.908 C 25.682,76.914 25.715,76.902 25.734,76.908 C 29.662,78.47 33.821,79.181 37.965,79.148 C 38.658,79.142 39.358,79.125 40.049,79.075 C 41.436,78.979 42.851,78.821 44.222,78.55 C 45.593,78.29 46.911,77.936 48.252,77.506 C 50.262,76.863 52.257,76.045 54.15,75.04 L 54.078,73.85 L 52.926,47.857 L 23.146,47.857 L 23.146,47.856 z" />
|
||||||
|
</g><g
|
||||||
|
style="filter:url(#filter3460)"
|
||||||
|
id="g109"
|
||||||
|
transform="matrix(1.1250094,0,0,1.125,-4.5001124,-11.275)">
|
||||||
|
<path
|
||||||
|
d="M 22.213,81.018 L 23.666,76.231 C 23.666,76.231 23.743,74.036 21.849,75.041 L 21.921,76.231 L 20.291,81.018 C 20.605,81.49 21.142,81.8 21.752,81.8 L 23.515,81.8 C 22.971,81.8 22.493,81.489 22.213,81.018 z"
|
||||||
|
id="path111"
|
||||||
|
style="fill:#ffffff" />
|
||||||
|
</g><g
|
||||||
|
style="filter:url(#filter3464)"
|
||||||
|
id="g113"
|
||||||
|
transform="matrix(1.1250094,0,0,1.125,-4.5001124,-11.275)">
|
||||||
|
<path
|
||||||
|
d="M 54.079,76.23 L 54.151,75.04 C 52.89,74.329 52.333,76.23 52.333,76.23 L 53.779,81.033 C 53.498,81.496 53.023,81.8 52.485,81.8 L 54.249,81.8 C 54.853,81.8 55.386,81.496 55.701,81.033 L 54.079,76.23 z"
|
||||||
|
id="path115"
|
||||||
|
style="fill:#ffffff" />
|
||||||
|
</g><path
|
||||||
|
d="M 24.1,48.856 C 23.693,57.45 52.262,55.434 51.971,48.856 C 42.68,48.856 33.39,48.856 24.1,48.856"
|
||||||
|
id="path122"
|
||||||
|
style="fill:url(#linearGradient2979);fill-opacity:1;filter:url(#filter3500)"
|
||||||
|
transform="matrix(1.1250094,0,0,1.7718407,-4.5001124,-41.815049)" /><g
|
||||||
|
style="filter:url(#filter3468)"
|
||||||
|
id="g126"
|
||||||
|
transform="matrix(1.1250094,0,0,1.125,-4.5001124,-11.275)">
|
||||||
|
<path
|
||||||
|
d="M 59.513,81.018 L 60.966,76.231 C 60.966,76.231 61.043,74.036 59.149,75.041 L 59.221,76.231 L 57.591,81.018 C 57.905,81.49 58.442,81.8 59.052,81.8 L 60.815,81.8 C 60.271,81.8 59.792,81.489 59.513,81.018 z"
|
||||||
|
id="path128"
|
||||||
|
style="fill:#ffffff" />
|
||||||
|
</g><g
|
||||||
|
style="filter:url(#filter3472)"
|
||||||
|
id="g130"
|
||||||
|
transform="matrix(1.1250094,0,0,1.125,-4.5001124,-11.275)">
|
||||||
|
<path
|
||||||
|
d="M 91.379,76.23 L 91.451,75.04 C 90.189,74.329 89.633,76.23 89.633,76.23 L 91.078,81.033 C 90.797,81.496 90.322,81.8 89.784,81.8 L 91.548,81.8 C 92.152,81.8 92.685,81.496 93,81.033 L 91.379,76.23 z"
|
||||||
|
id="path132"
|
||||||
|
style="fill:#ffffff" />
|
||||||
|
</g><path
|
||||||
|
d="M 61.399,48.856 C 60.992,57.45 89.56,55.434 89.269,48.856 C 79.98,48.856 70.689,48.856 61.399,48.856"
|
||||||
|
id="path139"
|
||||||
|
style="fill:url(#linearGradient2981);filter:url(#filter3496)"
|
||||||
|
transform="matrix(1.1250094,0,0,1.7718407,-4.5001124,-41.815049)" /><g
|
||||||
|
id="g143"
|
||||||
|
transform="matrix(1.1250094,0,0,1.125,-4.5001124,-11.275)">
|
||||||
|
<path
|
||||||
|
d="M 15.921,43.018 L 17.374,38.231 C 17.374,38.231 17.451,36.036 15.557,37.041 L 15.629,38.231 L 14,43.018 C 14.314,43.49 14.851,43.8 15.461,43.8 L 17.224,43.8 C 16.68,43.8 16.201,43.489 15.921,43.018 z"
|
||||||
|
id="path145"
|
||||||
|
style="fill:#ffffff;filter:url(#filter3424)" />
|
||||||
|
</g><path
|
||||||
|
id="path149"
|
||||||
|
d="M 47.788,38.23 L 47.86,37.04 C 46.598,36.329 46.042,38.23 46.042,38.23 L 47.487,43.033 C 47.206,43.496 46.731,43.8 46.193,43.8 L 47.957,43.8 C 48.561,43.8 49.094,43.496 49.409,43.033 L 47.788,38.23 z"
|
||||||
|
style="fill:#ffffff;filter:url(#filter3416)"
|
||||||
|
transform="matrix(1.1250094,0,0,1.125,-4.5001124,-11.275)" /><path
|
||||||
|
d="M 17.808,10.856 C 17.401,19.45 45.969,17.434 45.678,10.856 C 36.389,10.856 27.098,10.856 17.808,10.856"
|
||||||
|
id="path156"
|
||||||
|
style="fill:url(#linearGradient3380);fill-opacity:1;filter:url(#filter3504)"
|
||||||
|
transform="matrix(1.1250094,0,0,1.7718407,-4.5001124,-17.235103)" /><g
|
||||||
|
style="filter:url(#filter3444)"
|
||||||
|
id="g160"
|
||||||
|
transform="matrix(1.1250094,0,0,1.125,-4.5001124,-11.275)">
|
||||||
|
<path
|
||||||
|
d="M 53.513,43.018 L 54.966,38.231 C 54.966,38.231 55.043,36.036 53.149,37.041 L 53.221,38.231 L 51.591,43.018 C 51.905,43.49 52.442,43.8 53.052,43.8 L 54.815,43.8 C 54.271,43.8 53.792,43.489 53.513,43.018 z"
|
||||||
|
id="path162"
|
||||||
|
style="fill:#ffffff" />
|
||||||
|
</g><g
|
||||||
|
style="filter:url(#filter3448)"
|
||||||
|
id="g164"
|
||||||
|
transform="matrix(1.1250094,0,0,1.125,-4.5001124,-11.275)">
|
||||||
|
<path
|
||||||
|
d="M 85.379,38.23 L 85.451,37.04 C 84.189,36.329 83.633,38.23 83.633,38.23 L 85.078,43.033 C 84.797,43.496 84.322,43.8 83.784,43.8 L 85.548,43.8 C 86.152,43.8 86.685,43.496 87,43.033 L 85.379,38.23 z"
|
||||||
|
id="path166"
|
||||||
|
style="fill:#ffffff" />
|
||||||
|
</g><path
|
||||||
|
d="M 55.399,10.856 C 54.992,19.45 83.56,17.434 83.269,10.856 C 73.98,10.856 64.689,10.856 55.399,10.856"
|
||||||
|
id="path173"
|
||||||
|
style="fill:url(#linearGradient2945);fill-opacity:1;filter:url(#filter3508)"
|
||||||
|
transform="matrix(1.1250094,0,0,1.7718407,-4.5001124,-17.235103)" /><g
|
||||||
|
style="filter:url(#filter3452)"
|
||||||
|
id="g177"
|
||||||
|
transform="matrix(1.1250094,0,0,1.125,-4.5001124,-11.275)">
|
||||||
|
<path
|
||||||
|
d="M 90.513,43.018 L 91.966,38.231 C 91.966,38.231 92.043,36.036 90.149,37.041 L 90.221,38.231 L 88.592,43.018 C 88.905,43.49 89.442,43.8 90.053,43.8 L 91.815,43.8 C 91.271,43.8 90.793,43.489 90.513,43.018 z"
|
||||||
|
id="path179"
|
||||||
|
style="fill:#ffffff" />
|
||||||
|
</g><g
|
||||||
|
style="filter:url(#filter3456)"
|
||||||
|
id="g181"
|
||||||
|
transform="matrix(1.1250094,0,0,1.125,-4.5001124,-11.275)">
|
||||||
|
<path
|
||||||
|
d="M 122.379,38.23 L 122.451,37.04 C 121.189,36.329 120.633,38.23 120.633,38.23 L 122.078,43.033 C 121.797,43.496 121.322,43.8 120.784,43.8 L 122.548,43.8 C 123.152,43.8 123.685,43.496 124,43.033 L 122.379,38.23 z"
|
||||||
|
id="path183"
|
||||||
|
style="fill:#ffffff" />
|
||||||
|
</g><path
|
||||||
|
d="M 92.399,10.856 C 91.992,19.45 120.56,17.434 120.269,10.856 C 110.98,10.856 101.689,10.856 92.399,10.856"
|
||||||
|
id="path190"
|
||||||
|
style="fill:url(#linearGradient3378);fill-opacity:1;filter:url(#filter3512)"
|
||||||
|
transform="matrix(1.1250094,0,0,1.7718407,-4.5001124,-17.235103)" /><g
|
||||||
|
style="filter:url(#filter3476)"
|
||||||
|
id="g194"
|
||||||
|
transform="matrix(1.1250094,0,0,1.125,-4.5001124,-11.275)">
|
||||||
|
<path
|
||||||
|
d="M 96.513,81.018 L 97.966,76.231 C 97.966,76.231 98.043,74.036 96.149,75.041 L 96.221,76.231 L 94.592,81.018 C 94.905,81.49 95.442,81.8 96.053,81.8 L 97.815,81.8 C 97.271,81.8 96.793,81.489 96.513,81.018 z"
|
||||||
|
id="path196"
|
||||||
|
style="fill:#ffffff" />
|
||||||
|
</g><g
|
||||||
|
style="filter:url(#filter3484)"
|
||||||
|
id="g198"
|
||||||
|
transform="matrix(1.1250094,0,0,1.125,-4.5001124,-11.275)">
|
||||||
|
<path
|
||||||
|
d="M 128.379,76.23 L 128.451,75.04 C 127.189,74.329 126.633,76.23 126.633,76.23 L 128.078,81.033 C 127.797,81.496 127.322,81.8 126.784,81.8 L 128.548,81.8 C 129.152,81.8 129.685,81.496 130,81.033 L 128.379,76.23 z"
|
||||||
|
id="path200"
|
||||||
|
style="fill:#ffffff" />
|
||||||
|
</g><path
|
||||||
|
d="M 98.399,48.856 C 97.992,57.45 126.56,55.434 126.269,48.856 C 116.98,48.856 107.689,48.856 98.399,48.856"
|
||||||
|
id="path207"
|
||||||
|
style="fill:url(#linearGradient2983);filter:url(#filter3492)"
|
||||||
|
transform="matrix(1.1250094,0,0,1.7718407,-4.5001124,-41.815049)" /><path
|
||||||
|
style="fill:#323232"
|
||||||
|
id="path209"
|
||||||
|
d="M 21.99503,12.125 L 19.778139,23.842759 C 19.61869,24.635599 19.540614,25.268992 19.540614,25.848502 C 19.540614,27.088895 20.172912,27.749779 21.150501,27.749779 C 22.470079,27.749779 23.261827,26.799689 23.788558,23.974716 L 26.058233,12.125 L 28.723782,12.125 L 26.533281,23.632728 C 25.715142,27.960908 24.079966,30.125 20.832702,30.125 C 18.27382,30.125 16.875066,28.645985 16.875066,26.112415 C 16.875066,25.399849 16.981732,24.502542 17.166473,23.47328 L 19.330582,12.125 L 21.99503,12.125 L 21.99503,12.125 z" /><path
|
||||||
|
style="fill:#323232"
|
||||||
|
id="path211"
|
||||||
|
d="M 64.643632,12.125 L 61.198712,30.125 L 58.500414,30.125 L 61.918629,12.125 L 64.643632,12.125 L 64.643632,12.125 z" /><path
|
||||||
|
style="fill:#323232"
|
||||||
|
id="path213"
|
||||||
|
d="M 111.34148,17.759442 C 111.34148,21.280968 110.11546,26.238278 107.82102,28.532705 C 106.7515,29.602206 105.57766,30.125 104.19402,30.125 C 100.56813,30.125 100.12576,26.368704 100.12576,24.464472 C 100.12576,20.995117 101.35178,16.037807 103.77666,13.664038 C 104.79508,12.672793 105.99394,12.125 107.35038,12.125 C 110.95129,12.125 111.34148,15.62044 111.34148,17.759442 z M 105.60374,15.124819 C 103.82883,16.899712 102.83867,21.985274 102.83867,24.593812 C 102.83867,25.793739 102.94301,27.802314 104.58532,27.802314 C 105.05486,27.802314 105.4983,27.567546 105.91676,27.15018 C 107.76775,25.270946 108.60358,19.585419 108.60358,17.629015 C 108.60358,16.089978 108.47315,14.446599 106.98627,14.446599 C 106.48956,14.447686 106.0211,14.681367 105.60374,15.124819 z" /><path
|
||||||
|
style="fill:#323232"
|
||||||
|
id="path215"
|
||||||
|
d="M 30.011882,54.875 L 32.678531,54.875 L 30.223015,67.727587 C 29.431267,71.819347 27.794991,72.875 25.182225,72.875 C 24.522435,72.875 23.91543,72.768335 23.625122,72.663868 L 24.073779,70.288648 C 24.443261,70.394213 24.785251,70.420605 25.287791,70.420605 C 26.450121,70.420605 27.161593,69.681647 27.531075,67.728687 L 30.011882,54.875 z" /><path
|
||||||
|
style="fill:#323232"
|
||||||
|
id="path217"
|
||||||
|
d="M 68.668474,54.876125 L 71.338789,54.876125 L 69.683194,63.422176 L 69.763303,63.422176 C 70.350773,62.407464 70.804726,61.659781 71.285383,60.885397 L 75.156227,54.877238 L 78.146981,54.877238 L 72.512615,62.72901 L 74.782383,72.876125 L 71.978553,72.876125 L 70.428657,64.732844 L 69.148018,66.387312 L 67.895195,72.875012 L 65.25047,72.875012 L 68.668474,54.876125 z" /><path
|
||||||
|
style="fill:#323232"
|
||||||
|
id="path219"
|
||||||
|
d="M 110.29425,54.873875 L 113.0183,54.873875 L 110.02717,70.523727 L 114.67522,70.523727 L 114.22121,72.873875 L 106.87582,72.873875 L 110.29425,54.873875 z" /></g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 34 KiB |
98
imgsrc/languages.svg
Normal file
98
imgsrc/languages.svg
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" height="128" width="128" version="1.0" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 256 256">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="b" y2="158.07" gradientUnits="userSpaceOnUse" x2="141.27" gradientTransform="matrix(1.68, 0, 0, 1.68, -86.7, -86.7)" y1="70.428" x1="141.27">
|
||||||
|
<stop stop-color="#FFF" offset="0"/>
|
||||||
|
<stop stop-color="#00a200" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="a" y2="158.07" gradientUnits="userSpaceOnUse" y1="70.428" gradientTransform="matrix(1.68, 0, 0, 1.68, -86.7, -86.7)" x2="141.27" x1="141.27">
|
||||||
|
<stop stop-color="#FFF" offset="0"/>
|
||||||
|
<stop stop-color="#00a100" offset="0.5"/>
|
||||||
|
<stop stop-color="#000" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="c" y2="397.34" gradientUnits="userSpaceOnUse" x2="12.991" gradientTransform="matrix(2.573, 0, 0, -2.573, 207.924, 1307.73)" y1="397.34" x1="-117">
|
||||||
|
<stop stop-color="#0053BD" offset="0"/>
|
||||||
|
<stop stop-color="#0032A4" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
<radialGradient id="d" gradientUnits="userSpaceOnUse" cy="439.63" cx="-57.022" gradientTransform="matrix(2.573, 0, 0, -2.573, 207.924, 1307.73)" r="98">
|
||||||
|
<stop stop-color="#FFF" offset="0"/>
|
||||||
|
<stop stop-color="#57ADFF" offset="0.6"/>
|
||||||
|
<stop stop-color="#C9E6FF" offset="1"/>
|
||||||
|
</radialGradient>
|
||||||
|
<linearGradient id="e" y2="183.37" gradientUnits="userSpaceOnUse" x2="127.66" gradientTransform="matrix(2.573, 0, 0, 2.573, -251.365, -39.26)" y1="63.215" x1="127.66">
|
||||||
|
<stop stop-color="#006a00" offset="0"/>
|
||||||
|
<stop stop-color="#004000" offset="0.2"/>
|
||||||
|
<stop stop-color="#00d000" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="f" y2="361.42" gradientUnits="userSpaceOnUse" x2="-52.251" gradientTransform="matrix(2.573, 0, 0, -2.573, 207.924, 1307.73)" y1="457.03" x1="-52.251">
|
||||||
|
<stop stop-color="#FFF" offset="0"/>
|
||||||
|
<stop stop-color="#94CAFF" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="g" y2="158.07" xlink:href="#a" gradientUnits="userSpaceOnUse" x2="141.27" gradientTransform="matrix(2.573, 0, 0, 2.573, -251.365, -39.26)" y1="70.428" x1="141.27"/>
|
||||||
|
<linearGradient id="h" y2="130.03" xlink:href="#a" gradientUnits="userSpaceOnUse" x2="100.51" gradientTransform="matrix(2.573, 0, 0, 2.573, -251.365, -39.26)" y1="70.033" x1="100.51"/>
|
||||||
|
<linearGradient id="i" y2="85.32" xlink:href="#b" gradientUnits="userSpaceOnUse" x2="120.48" gradientTransform="matrix(2.573, 0, 0, 2.573, -251.365, -39.26)" y1="68.117" x1="120.48"/>
|
||||||
|
<linearGradient id="j" y2="79.161" xlink:href="#b" gradientUnits="userSpaceOnUse" x2="124.57" y1="73.444" x1="124.57"/>
|
||||||
|
<linearGradient id="k" y2="73.865" xlink:href="#b" gradientUnits="userSpaceOnUse" x2="132.78" y1="67.756" x1="132.78"/>
|
||||||
|
<linearGradient id="l" y2="323.36" gradientUnits="userSpaceOnUse" x2="258.77" gradientTransform="translate(5.58, -12.8322)" y1="408.7" x1="258.77">
|
||||||
|
<stop stop-color="#3434ff" offset="0"/>
|
||||||
|
<stop stop-color="#b9b9b9" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="m" y2="85.792" gradientUnits="userSpaceOnUse" x2="-60.735" gradientTransform="translate(2.16, -1.33)" y1="171.13" x1="-60.735">
|
||||||
|
<stop stop-color="#ffff01" offset="0"/>
|
||||||
|
<stop stop-color="#b9b9b9" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="n" y2="298.71" gradientUnits="userSpaceOnUse" x2="-105.42" y1="384.04" x1="-105.42">
|
||||||
|
<stop stop-color="red" offset="0"/>
|
||||||
|
<stop stop-color="#b9b9b9" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="o" y2="408.7" gradientUnits="userSpaceOnUse" x2="32.595" gradientTransform="translate(-3.45, -0.43)" y1="494.61" x1="32.595">
|
||||||
|
<stop stop-color="lime" offset="0"/>
|
||||||
|
<stop stop-color="#b9b9b9" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="p" y2="99.849" gradientUnits="userSpaceOnUse" x2="230.67" gradientTransform="translate(1.59, 1.61)" y1="171.13" x1="230.67">
|
||||||
|
<stop stop-color="#F0F" offset="0"/>
|
||||||
|
<stop stop-color="#b9b9b9" offset="1"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(-3.417, 1.068)">
|
||||||
|
<g transform="matrix(0.6, 0, 0, 0.6, 83.43, -47.62)">
|
||||||
|
<path fill-opacity="0.3" d="M-39.634,171.47c-31.743,31.66-49.227,73.53-49.227,117.89,0,92.35,75.02,167.48,167.23,167.48,92.218,0,167.25-75.13,167.25-167.48,0-92.06-75.03-166.96-167.25-166.96-44.38,0.01-86.288,17.43-118.01,49.07z" fill="#000"/>
|
||||||
|
<path d="M-43.9,167.2c-31.744,31.66-49.228,73.53-49.228,117.89,0,92.35,75.02,167.48,167.23,167.48,92.225,0,167.24-75.13,167.24-167.48,0-92.06-75.02-166.96-167.24-166.96-44.38,0.01-86.287,17.43-118,49.07z" fill="url(#c)"/>
|
||||||
|
<path d="M-39.03,172.09c-30.439,30.35-47.207,70.49-47.207,113,0,88.55,71.929,160.59,160.34,160.59,88.42,0,160.35-72.04,160.35-160.59,0-88.25-71.93-160.06-160.35-160.06-42.533,0.01-82.714,16.72-113.13,47.06z" fill="#b0d9ff"/>
|
||||||
|
<path d="M74.105,440.51c85.675,0,155.18-69.8,155.18-155.42,0-85.08-69.51-154.88-155.18-154.88-85.068,0-155.16,69.8-155.16,154.88,0,85.62,70.098,155.42,155.16,155.42z" fill="#FFF"/>
|
||||||
|
<path d="M74.105,440.51c85.675,0,155.18-69.8,155.18-155.42,0-85.08-69.51-154.88-155.18-154.88-85.068,0-155.16,69.8-155.16,154.88,0,85.62,70.098,155.42,155.16,155.42z" fill="url(#d)"/>
|
||||||
|
<path d="M22.564,147.28c-0.767,0-1.608,0.31-2.467,0.8,2.019-0.59,2.969-0.8,2.467-0.8m49.961,9.74l0.502-7.31-7.712,0.49,1.019,6.82h6.191m-87.044,126.31c-1.554-1.46-0.512-7.81-0.512-7.81s-23.183-12.18-48.417-19.5c-3.111-0.9-1.541-7.31,1.539-9.74l-1.022-6.84c-0.512-3.41,5.157-19.99,10.82-21.44,5.669-1.47-0.517,9.74-0.517,9.74l-5.661,3.41s6.693,7.8,8.244,7.8c1.542,0,4.117-3.9,4.117-3.9l-7.207-4.87,6.695-2.93,0.422-2.57,1.125-0.36,11.087-16.79c7.662-3.14,17.08-7.02,18.276-7.59,2.064-0.97,16.478-9.26,19.056-11.2,2.5833-1.97,8.2368-1.47,10.292-1.47,2.072,0,5.157-0.98,5.669-6.35,0.514-5.36,2.578-6.34,4.127-4.87,1.549,1.45-1.549,3.9,2.061,4.87,3.602,0.98,6.69,3.42,9.273,0.98,1.881-1.78-0.638-3.82-2.336-5.35h28.599l3.096-8.8-6.695-0.97-24.735-2.43v-2.93l-1.971,0.33c2.679-14.71,18.58-12.29,6.608-20.8-0.729-0.53-11.203,16.5-13.869,16.17-4.83-0.64-11.067-0.69-12.395,0.88-1.7595,2.08,3.95-7.13,8.862-9.92-7.845,2.31-32.626,10.79-58.82,38.7-25.046,26.67-35.032,62.62-35.032,63.88,0,2.43,5.156,3.41,5.668,6.34,0.518,2.91-9.785,12.68-9.785,17.55,0,2.25-2.426,32.3,6.17,57.06,10.051,28.89,31.505,53.03,34.001,54.62l5.146-2.44s-11.847-20.97-12.359-22.93c-0.509-1.94,13.391-30.23,20.093-29.24,6.693,0.95,5.152,2.92,9.271,0.48,4.122-2.43,6.6951-22.44,11.332-24.38,4.6392-1.96,9.7853-4.39,9.2733-9.27-0.5378-4.89-18.047-13.66-19.589-15.12m111.77-143.37l-13.905-4.88,2.578,7.81,11.327-2.93m-52.022,18.04c1.552,0,32.449-20.47,29.359-20.96-3.08-0.49-3.598,0-11.854-0.98-8.229-0.98-16.993,11.7-19.049,13.66-2.061,1.95-1.366,8.28,1.544,8.28m141.8,147.04l3.99-5.18-3.99-1.4-2.99,3.76-3.48,5.16,2.99,1.41,3.48-3.75m17.45,16.93l-1-7.53h-6.48l-0.5,5.64-5.99-0.93-1.48-6.12-2.99-1.88-3.5,4.23-3.48-0.94-1,3.29,3.99,0.95v30.54l14.11,3.4c-0.33,0.56-0.57,1.03-0.65,1.29-1.01,3.29,3.98,4.72,7.46,3.29,1.3-0.51,5.4-4.66,7.98-10.8,3.59-8.54,6.73-19.82,7.36-23.8l1.61-3.45-9.97,3.75-5.49-0.93h0.02m20.94-56.88l-2.61-5.04c-3.08-17.39-10.15-39.64-25.3-62.64-22.8-34.57-86.26-54.51-86.26-54.51l-3.48,4.22-2-3.28-4.99-1.89v4.24l4.5,3.76-2.99,1.41-11.476,0.93-25.918,14.11,2.488,11.28-2.997,0.94-1.483,2.35,8.474,12.68,0.496,4.24-6.978,1.41v8.45l-3.986,0.94,0.5,6.58-33.906,23.52,0.999,13.14c2.488,3.29,21.935,23.04,21.935,23.04s22.429,0.92,27.413-1.88c4.987-2.82,1.493,2.82,2.995,4.23,1.488,1.42,1.989,11.28,3.482,12.22,1.495,0.93,0,6.57,1.994,8.46,1.991,1.87,1.991,24.44,1.991,24.44s11.967,20.2,11.967,25.37c0,5.18-0.504,4.7,8.97,4.24,9.48-0.47,11.47-4.24,13.45-5.64,2.01-1.41,2.01-4.7,4-7.52,2-2.83,5.48-13.63,9.98-17.39,4.48-3.77,16.45-6.59,17.43-13.16,1-6.58,5.49-11.75,5.49-11.75l21.55-22.8-0.6,3.06-0.5,11.74,6.48-2.34-0.49-12.7-2.33-2.46,0.33-0.36s-1.49-2.82-3.48-2.82-13.97,2.82-15.95,2.35c-2-0.47-10.48-23.03-11.97-23.96-1.5-0.94-10.97-16.46-10.97-16.46s21.93,26.32,25.43,36.66c2.02,6.02,9.63,0.41,15.82-5.87l1.64,4,3.98-0.95-0.5-4.7h4.48v7.05l-1.49,3.76-0.51,6.1,3.99,3.77,2-3.28,6.47-6.12,7.48-3.76,2,3.76,1,5.18-2,5.63-3.99,3.29-1.99,8.46v4.23l-4.48-2.82-0.49-8.93-6.49,0.48-2.99,7.98,4.49,6.59,10.46,1.41,8.48-8,1-15.49,3.77-4.98c2.45,6.31,4.21,12.92,4.21,19.08,0,6.74,3.08-4.68,0.46-25.26l1.52-2.02m-125.63-47.94l-26.917-0.95,11.46-9.39h5.983l9.474,6.57v3.77m32.913-3.29v4.23h-11.46l0.99,2.83-6.98,0.95-0.49,2.34-4.99-0.93-8.98-1.89,1.5-2.34,1.5-2.84,4.98-5.16,2,3.76,7.48-0.48,3.98-4.23,15.46,2.82-4.99,0.94m0.98-6.11l-5.97,0.94-1-4.24,7.47-0.93,1-4.23,5.5,5.65-7,2.8v0.01m28.93,146.16l-3.5,2.82,0.5,7.06h4.49v-6.1l3.99-5.18v-10.81l-2.5-0.48-2.98,12.69m-33.4-14.08s-3.49,0.91,0.49,2.33,19.94-23.01,19.94-23.01l-13.46,8.45-6.98,12.23h0.01m-27.14,90.07l-2.978-2.84-5.985-0.95-0.991,2.84-7.976-0.94-0.499-3.78h-5.98l-6.476,3.78h-11.458l-0.996-2.84-18.433-1.9-2.995,2.84-7.462-1.88-1.001-6.63-3.487-0.49-3.988,7.12-13.452-0.47c2.4088,1.13,22.491,13.12,53.301,15.61,40.856,3.31,60.296-6.62,60.296-6.62l-1.5-1.43-17.94-1.41v-0.01z" fill="url(#e)"/>
|
||||||
|
<path d="M73.583,254c53.147,0,99.387-18.31,123.18-45.31-23.96-45.72-70.24-76.92-123.41-76.92-52.699,0-99.045,31.1-123.15,76.69,23.726,27.12,70.075,45.54,123.38,45.54z" fill="url(#f)"/>
|
||||||
|
<path d="M141.67,229.84s3.61,4.33,8.13,10.17c19.53-7.86,35.75-18.61,46.96-31.32-7.94-15.15-18.35-28.7-30.64-40.06-25.84-16.6-54.87-25.73-54.87-25.73l-3.48,4.22-2-3.28-4.99-1.89v4.24l4.5,3.76-2.99,1.41-11.476,0.93-25.918,14.11,2.488,11.28-2.997,0.94-1.483,2.35,8.474,12.68,0.496,4.24-6.978,1.41v8.45l-3.986,0.94,0.5,6.58-33.906,23.52,0.803,10.55c14.209,3,29.423,4.66,45.276,4.66,27.537,0,53.187-4.94,74.847-13.44-3.12-4.76-6.76-10.72-6.76-10.72zm-41.883-12.69l-26.917-0.95,11.46-9.39h5.983l9.474,6.57v3.77zm32.913-3.29v4.23h-11.46l0.99,2.83-6.98,0.95-0.49,2.34-4.99-0.93-8.98-1.89,1.5-2.34,1.5-2.84,4.98-5.16,2,3.76,7.48-0.48,3.98-4.23,15.46,2.82-4.99,0.94zm0.98-6.12v0.01l-5.97,0.94-1-4.24,7.47-0.93,1-4.23,5.5,5.65-7,2.8z" fill="url(#g)"/>
|
||||||
|
<path d="M-15.54,199.94c2.063-0.97,16.478-9.26,19.056-11.2,2.5833-1.97,8.2361-1.47,10.292-1.47,2.071,0,5.156-0.98,5.669-6.35,0.514-5.36,2.578-6.34,4.127-4.87,1.549,1.45-1.549,3.9,2.061,4.87,3.602,0.98,6.69,3.42,9.273,0.98,1.881-1.78-0.638-3.82-2.336-5.35h28.599l3.095-8.8-6.695-0.97-24.734-2.43v-2.93l-1.971,0.33c2.678-14.71,18.58-12.29,6.607-20.8-0.728-0.53-11.203,16.5-13.868,16.17-4.83-0.64-11.067-0.69-12.395,0.88-1.7598,2.08,3.95-7.13,8.862-9.92-6.106,1.8-22.478,7.38-41.781,22.9-11.17,10.8-20.701,23.45-28.121,37.48,2.789,3.19,5.918,6.25,9.309,9.18l6.674-10.11c7.663-3.13,17.083-7.02,18.277-7.59z" fill="url(#h)"/>
|
||||||
|
<path d="M43.679,149.72c-2.059,1.95-1.364,8.28,1.546,8.28,1.552,0,32.449-20.47,29.359-20.96-3.08-0.49-3.598,0-11.854-0.98-8.232-0.98-16.996,11.7-19.051,13.66z" fill="url(#i)"/>
|
||||||
|
<polygon points="126.07,73.444,123.08,73.631,123.47,76.284,125.88,76.284,125.88,76.285,126.07,73.444" transform="matrix(2.573, 0, 0, 2.573, -251.365, -39.26)" fill="url(#j)"/>
|
||||||
|
<polygon points="135.49,69.653,130.08,67.756,131.08,70.792,135.49,69.653" transform="matrix(2.573, 0, 0, 2.573, -251.365, -39.26)" fill="url(#k)"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(0.6, 0, 0, 0.6, 83.43, -47.62)">
|
||||||
|
<path d="M247.4,375.48l15.77,2.64c-2.02,5.79-5.23,10.19-9.6,13.21-4.38,3.02-9.85,4.54-16.42,4.54-10.4,0-18.1-3.4-23.09-10.2-3.95-5.44-5.92-12.32-5.92-20.61,0-9.92,2.59-17.68,7.78-23.3,5.18-5.61,11.73-8.42,19.65-8.42,8.9,0,15.92,2.94,21.07,8.82,5.14,5.88,7.6,14.88,7.38,27.01h-39.66c0.12,4.69,1.39,8.34,3.83,10.95,2.45,2.61,5.49,3.92,9.13,3.92,2.48,0,4.56-0.68,6.25-2.03s2.97-3.53,3.83-6.53zm0.9-16c-0.11-4.58-1.29-8.07-3.55-10.45-2.25-2.38-4.99-3.58-8.22-3.58-3.45,0-6.31,1.26-8.56,3.78-2.25,2.51-3.36,5.93-3.32,10.25h23.65zm-20.22-32.11l7.78-16.84h17.74l-15.49,16.84h-10.03z" stroke="#000064" stroke-width="10" fill="none"/>
|
||||||
|
<path fill-opacity="0.3" d="M236.03,308.41l-1.72,3.71-7.78,16.85-3.06,6.62c-2.91,1.64-5.67,3.57-8,6.1-6.46,6.99-9.47,16.59-9.47,27.62,0,9.31,2.28,17.68,7.12,24.38l0.04,0.03c6.25,8.5,16.45,12.81,28.25,12.81,7.55,0,14.45-1.78,20.06-5.65,5.56-3.85,9.61-9.57,12-16.38l2.53-7.16-1.38-0.25,0.07-3.53c0.24-13.05-2.36-23.79-8.97-31.34-4.14-4.73-9.57-7.82-15.66-9.5l12.5-13.6,9.88-10.71h-36.41zm-2.75,36.59c-2.2,1.01-4.2,2.42-5.81,4.22-3.48,3.88-5.02,9.15-4.97,14.59l0.03,3.22h-0.47l0.16,6.56c0.14,5.78,1.85,11.19,5.56,15.16,1.5,1.6,3.33,2.86,5.28,3.84-4.13-1.16-7.22-3.21-9.59-6.43-3.04-4.2-4.66-9.56-4.66-16.85,0-8.8,2.16-14.7,6.07-18.93,2.5-2.72,5.24-4.41,8.4-5.38zm15.94,0.59c0.6,0.25,1.1,0.64,1.66,0.94-0.53-0.36-1.1-0.63-1.66-0.94zm1.72,0.97c1.9,1.05,3.63,2.35,5.15,4.1,2.93,3.34,4.95,8.71,5.57,16.37h-2.6l-0.09-3.44c-0.14-5.6-1.66-10.85-5.28-14.68-0.83-0.88-1.77-1.66-2.75-2.35zm-10.13,9.56c1.43,0.01,2.18,0.34,3.13,1.22h-6.44c0.91-0.86,1.7-1.21,3.31-1.22zm-3.78,23.72h7.75c-0.38,0.77-0.75,1.3-0.94,1.44-0.49,0.4-0.93,0.63-2.25,0.63-2.11,0-3.11-0.43-4.47-1.88-0.04-0.04-0.05-0.14-0.09-0.19zm18.53,7.07l1.97,0.31c-1,1.18-2.09,2.26-3.34,3.12-1.14,0.79-2.44,1.38-3.85,1.91,0.51-0.31,1.04-0.6,1.5-0.97,1.54-1.23,2.75-2.72,3.72-4.37z" fill="#000"/>
|
||||||
|
<path d="M247.4,375.48l15.77,2.64c-2.02,5.79-5.23,10.19-9.6,13.21-4.38,3.02-9.85,4.54-16.42,4.54-10.4,0-18.1-3.4-23.09-10.2-3.95-5.44-5.92-12.32-5.92-20.61,0-9.92,2.59-17.68,7.78-23.3,5.18-5.61,11.73-8.42,19.65-8.42,8.9,0,15.92,2.94,21.07,8.82,5.14,5.88,7.6,14.88,7.38,27.01h-39.66c0.12,4.69,1.39,8.34,3.83,10.95,2.45,2.61,5.49,3.92,9.13,3.92,2.48,0,4.56-0.68,6.25-2.03s2.97-3.53,3.83-6.53zm0.9-16c-0.11-4.58-1.29-8.07-3.55-10.45-2.25-2.38-4.99-3.58-8.22-3.58-3.45,0-6.31,1.26-8.56,3.78-2.25,2.51-3.36,5.93-3.32,10.25h23.65zm-20.22-32.11l7.78-16.84h17.74l-15.49,16.84h-10.03z" fill="url(#l)"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(0.6, 0, 0, 0.6, 83.43, -47.62)">
|
||||||
|
<path fill-opacity="0.3" d="M25.844,80.688c-3.427,0.201-6.099,1.831-7.969,3.968-0.97,1.099-1.8,2.437-2.344,4-2.276,0.558-4.235,1.611-5.656,3.032l-0.0312-0.032c-0.1083,0.101-0.2094,0.206-0.3126,0.313-0.0412,0.042-0.0845,0.081-0.125,0.125l-0.1562,0.156-0.125,0.156c-1.8144,2.203-3.1928,5.222-2.5625,9.034,0.4099,2.47,1.6306,4.23,2.9063,5.62-0.4704-0.02-0.9399-0.09-1.4063-0.09h-14.75c-0.0153-1.66-0.0326-3.43-0.0937-6.13v-2.871c0.0081-0.22,0.0081-0.218,0-0.438v-0.219c-0.2142-2.996-1.4385-6.385-4.5628-8.781-2.742-2.103-5.854-2.492-8.312-2.406v-0.063h-0.313c-2.23,0.081-5.351,0.632-8,2.782-3.122,2.534-4.187,5.874-4.187,9.125-0.004,0.146-0.004,0.135,0,0.281v0.188c0.148,2.732,0.27,5.532,0.344,8.342,0.001,0.07-0.002,0.12,0,0.19h-17.563c-2.952,0-6.189,0.93-8.719,3.78-2.285,2.57-2.885,5.66-2.968,7.91v0.03c-0.077,2.15,0.238,5.34,2.343,8.12,2.478,3.27,5.856,4.32,9,4.31h15.875c-1.561,6.33-4.261,11.82-8.281,16.69-3.494,4.25-8.049,8.02-13.844,11.28-2.61,1.47-5.285,3.91-6.437,7.66-0.904,2.94-0.651,5.87,0.594,8.59,0.075,0.17,0.135,0.34,0.218,0.5,0.133,0.32,0.25,0.63,0.25,0.63l0.063,0.09c0.007,0.01,0.024,0.02,0.031,0.03l0.031,0.07c-0.541-0.91-0.521-0.79,0.157,0.28l3.093,4.87,1.563-0.78c0.986,0.54,1.933,1.15,3.062,1.41,3.446,0.79,6.763,0.03,9.406-1.38l0.219-0.12,0.125-0.1c0.021-0.01,0.042-0.02,0.063-0.03,0.111-0.07,0.235-0.14,0.343-0.22v-0.03c10.4-6.22,18.697-14.33,24.75-24.03h0.376l1.812-3.34c3.595-6.66,6.063-14.07,7.6875-22.07h9.5625c-0.44,5.74-0.9,11.66-1.1562,14.1v0.09l-0.03,0.22c-0.5064,5.19-1.1158,9.15-1.5625,10.94-0.2162,0.78-0.4454,1.14-0.625,1.47h-6.4688c-2.9742,0-6.5122,0.82-9.3122,3.62-2.488,2.49-3.5,5.52-3.5,8.63-0.011,0.25-0.011,0.24,0,0.5v0.25c0.061,0.73,0.386,1.33,0.562,2l-1.344,1.34,4.532,4.53c1.718,1.72,1.831,1.74,0.187,0.16-0.202-0.2-0.188-0.18,0.063,0.06,2.71,2.56,6.053,3.5,9.156,3.5l7.2812,0.13h0.1876c6.6615,0,12.942-2.73,17.25-7.57h0.719l1.812-3.15,0.031-0.03c2.821-4.91,4.094-11.02,5.313-19.07l0.156-0.31,0.125-1.06c0.479-4.07,0.943-9.08,1.406-15.09,0.467-5.21,0.696-8.98,0.781-11.72,0.104-1.87-0.192-3.7-0.687-5.5,2.84,0.2,5.131-0.73,7.031-2l0.032,0.06c0.073-0.04,0.146-0.06,0.218-0.1l0.688-0.37,0.625-0.53c1.368-1.22,2.599-2.87,3.343-4.94,1.367-0.35,2.474-0.98,3.532-1.69l0.031,0.07c0.073-0.04,0.146-0.06,0.219-0.1l0.687-0.37,0.625-0.53c2.042-1.82,3.909-4.57,4.032-8.32,0.116-3.585-1.544-6.502-3.188-8.34l-0.062-0.062-0.094-0.094c-0.072-0.075-0.144-0.147-0.219-0.219-1.61-1.691-2.862-2.91-4.094-4.063l-0.093-0.093-0.094-0.094c-1.897-1.724-3.728-3.203-5.625-4.469-1.827-1.279-4.511-2.402-7.625-2.218zm-17.75,37.752c0.1539,0.02,0.9063,0.12,0.9062,0.12-0.0002,0,0.3432,0.11,0.625,0.19-0.3653-0.07-1.4337-0.29-1.5312-0.31zm-4.2188,1.34h0.1875c-0.3096,0.23-0.3931,0.27-0.625,0.44,0.0494-0.07,0.25-0.35,0.25-0.34,0,0,0.1622-0.09,0.1875-0.1zm8.063,0.78c0.02,0.01,0.042,0.02,0.062,0.03l-0.625,0.53,0.563-0.56zm0.843,0.53c0.027,0.03,0.037,0.07,0.063,0.1l-0.938,0.65,0.875-0.75zm0.5,0.69c0.093,0.16,0.184,0.31,0.25,0.5-0.048-0.08-0.113-0.26-0.25-0.5zm-11.594,1.03c-0.0233,0.11-0.0516,0.24-0.0937,0.44,0.0065-0.07,0.0312-0.34,0.0312-0.34s0.0587-0.09,0.0625-0.1zm11.906,4.28c-0.003,0.06-0.028,0.16-0.032,0.22-0.137,0.23-1,1.72-1,1.72,0.001,0-0.369,0.28-0.593,0.44,0.331-0.49,1.323-1.94,1.625-2.38zm-10.938,1.6c0.1258,0.16,0.316,0.33,0.4688,0.5l-0.0625,0.06c-0.0913-0.1-0.2038-0.23-0.25-0.28-0.1353-0.16-0.1402-0.2-0.1563-0.22-0.004,0-0.0291-0.03-0.0312-0.03l0.0312-0.03zm0.6876,0.75c0.1283,0.12,0.1857,0.25,0.3437,0.37-0.1548-0.12-0.3158-0.25-0.4063-0.34l0.0626-0.03zm0.5312,0.53c0.2412,0.19,0.5718,0.42,1.25,0.72-0.1829-0.08-0.3407-0.14-0.5938-0.28-0.0098-0.01-0.0212-0.03-0.0312-0.03,0.0002,0-0.4694-0.29-0.625-0.41zm7.031,0.25c-0.319,0.23-0.75,0.53-0.75,0.53s-0.3648,0.06-0.531,0.09c0.399-0.19,0.73-0.35,1.281-0.62z" fill="#000"/>
|
||||||
|
<path d="M21.968,82.795c-1.392,0.082-2.666,0.824-3.531,1.812-0.889,1.008-1.555,2.502-1.312,4,0.242,1.499,1.174,2.603,2.218,3.438,1.879,1.503,3.31,2.692,4.219,3.531,1.214,1.143,2.159,2.174,2.906,3.125,0.021,0.032,0.041,0.063,0.063,0.094,0.933,1.088,2.154,1.985,3.687,2.185,1.534,0.21,3.014-0.43,4.094-1.341,0.021-0.01,0.042-0.021,0.063-0.032,1.018-0.905,1.857-2.235,1.906-3.75,0.049-1.514-0.646-2.818-1.563-3.843-0.02-0.021-0.041-0.042-0.062-0.063-1.559-1.636-2.918-2.965-4.094-4.062-0.01-0.011-0.021-0.021-0.031-0.032-1.741-1.582-3.356-2.893-4.875-3.906-1.063-0.744-2.266-1.24-3.688-1.156zm-45.968,5.406c-1.526,0.055-2.976,0.36-4.188,1.344-1.228,0.997-1.844,2.662-1.844,4.156-0.001,0.042-0.001,0.084,0,0.125,0.151,2.794,0.269,5.661,0.344,8.534,0.055,2.48,0.026,4.61,0,6.75h-23.969c-1.377,0-2.914,0.51-3.906,1.62-0.992,1.12-1.323,2.52-1.375,3.91-0.05,1.4,0.145,2.82,1.063,4.03,0.917,1.21,2.503,1.78,3.875,1.78h23.5c-1.118,10.52-4.697,19.55-10.969,27.16-4.045,4.91-9.235,9.18-15.625,12.78-1.585,0.89-2.932,2.22-3.469,3.97-0.472,1.53-0.261,3.32,0.563,4.72,0.003,0-0.004,0.02,0,0.03,0.023,0.04,0.037,0.08,0.062,0.12l0.063-0.03c0.814,1.38,2.219,2.37,3.718,2.72,1.664,0.38,3.407,0.04,4.938-0.78,0.032-0.02,0.063-0.04,0.094-0.06,10.928-6.45,19.303-14.87,24.937-25.19h0.031c3.976-7.36,6.576-15.91,8-25.44h20.688c0.9846,0,0.952,0.2,0.875,0.09,0.0205,0.03,0.0413,0.05,0.0625,0.07-0.1075-0.15,0.1515,0.24,0.0937,1.28-0.6844,9.66-1.2515,16.24-1.625,19.75v0.03c-0.5275,5.5-1.1278,9.6-1.75,12.09-0.76,2.76-1.7441,4.35-2.5937,5.07-0.021,0.01-0.0418,0.02-0.0625,0.03-0.8088,0.72-2.0336,1.22-4.125,1.22h-6.5309c-1.748,0-3.534,0.5-4.782,1.75-1.062,1.06-1.625,2.63-1.625,4.09-0.003,0.07-0.003,0.15,0,0.22,0.123,1.47,0.862,2.86,1.907,3.84l-0.032,0.03c0.027,0.03,0.067,0.04,0.094,0.07,0.011,0.01,0.021,0.02,0.031,0.03,1.262,1.19,3.032,1.75,4.75,1.75l7.4066,0.12h0.0313c6.2648,0,11.418-2.61,14.281-7.53h0.0313c2.1206-3.69,3.5126-9.5,4.7496-17.94,0.011-0.02,0.022-0.04,0.032-0.06,0.462-3.93,0.916-8.88,1.375-14.84,0.459-5.13,0.702-8.88,0.781-11.41,0.184-3.32-0.967-6.4-3.406-8.44v-0.03c-2.262-1.85-5.2882-2.62-8.7191-2.62h-21.188c0.036-1.59,0.094-3.12,0.094-4.88,0-1.65-0.049-4.14-0.125-7.498v-3.031c0.002-0.062,0.002-0.125,0-0.187-0.11-1.546-0.755-3.154-2.062-4.157-1.29-0.989-2.871-1.245-4.438-1.156h-0.062zm37.406,2.094c-1.368,0.121-2.581,0.835-3.4689,1.781-0.0431,0.04-0.0848,0.082-0.125,0.125-0.8348,1.014-1.4285,2.481-1.1875,3.938,0.2411,1.457,1.1663,2.537,2.1874,3.343,1.792,1.498,3.121,2.698,4.156,3.658,0.011,0.01,0.021,0.02,0.032,0.03,1.298,1.15,2.297,2.17,3,3.06,0.02,0.03,0.041,0.07,0.062,0.1,0.934,1.09,2.159,2,3.688,2.21,1.529,0.22,3.029-0.42,4.125-1.34,0.021-0.01,0.041-0.02,0.062-0.03,1.026-0.91,1.875-2.27,1.906-3.78,0.032-1.52-0.683-2.8-1.593-3.814-0.021-0.021-0.042-0.042-0.063-0.062-1.547-1.625-2.9-2.98-4.094-4.094-0.01-0.011-0.02-0.021-0.031-0.031-1.727-1.57-3.347-2.912-4.937-4-1.059-0.725-2.349-1.215-3.719-1.094z" stroke="#3c3c00" stroke-width="10" fill="none"/>
|
||||||
|
<path d="M21.968,82.795c-1.392,0.082-2.666,0.824-3.531,1.812-0.889,1.008-1.555,2.502-1.312,4,0.242,1.499,1.174,2.603,2.218,3.438,1.879,1.503,3.31,2.692,4.219,3.531,1.214,1.143,2.159,2.174,2.906,3.125,0.021,0.032,0.041,0.063,0.063,0.094,0.933,1.088,2.154,1.985,3.687,2.185,1.534,0.21,3.014-0.43,4.094-1.341,0.021-0.01,0.042-0.021,0.063-0.032,1.018-0.905,1.857-2.235,1.906-3.75,0.049-1.514-0.646-2.818-1.563-3.843-0.02-0.021-0.041-0.042-0.062-0.063-1.559-1.636-2.918-2.965-4.094-4.062-0.01-0.011-0.021-0.021-0.031-0.032-1.741-1.582-3.356-2.893-4.875-3.906-1.063-0.744-2.266-1.24-3.688-1.156zm-45.968,5.406c-1.526,0.055-2.976,0.36-4.188,1.344-1.228,0.997-1.844,2.662-1.844,4.156-0.001,0.042-0.001,0.084,0,0.125,0.151,2.794,0.269,5.661,0.344,8.534,0.055,2.48,0.026,4.61,0,6.75h-23.969c-1.377,0-2.914,0.51-3.906,1.62-0.992,1.12-1.323,2.52-1.375,3.91-0.05,1.4,0.145,2.82,1.063,4.03,0.917,1.21,2.503,1.78,3.875,1.78h23.5c-1.118,10.52-4.697,19.55-10.969,27.16-4.045,4.91-9.235,9.18-15.625,12.78-1.585,0.89-2.932,2.22-3.469,3.97-0.472,1.53-0.261,3.32,0.563,4.72,0.003,0-0.004,0.02,0,0.03,0.023,0.04,0.037,0.08,0.062,0.12l0.063-0.03c0.814,1.38,2.219,2.37,3.718,2.72,1.664,0.38,3.407,0.04,4.938-0.78,0.032-0.02,0.063-0.04,0.094-0.06,10.928-6.45,19.303-14.87,24.937-25.19h0.031c3.976-7.36,6.576-15.91,8-25.44h20.688c0.9846,0,0.952,0.2,0.875,0.09,0.0205,0.03,0.0413,0.05,0.0625,0.07-0.1075-0.15,0.1515,0.24,0.0937,1.28-0.6844,9.66-1.2515,16.24-1.625,19.75v0.03c-0.5275,5.5-1.1278,9.6-1.75,12.09-0.76,2.76-1.7441,4.35-2.5937,5.07-0.021,0.01-0.0418,0.02-0.0625,0.03-0.8088,0.72-2.0336,1.22-4.125,1.22h-6.5309c-1.748,0-3.534,0.5-4.782,1.75-1.062,1.06-1.625,2.63-1.625,4.09-0.003,0.07-0.003,0.15,0,0.22,0.123,1.47,0.862,2.86,1.907,3.84l-0.032,0.03c0.027,0.03,0.067,0.04,0.094,0.07,0.011,0.01,0.021,0.02,0.031,0.03,1.262,1.19,3.032,1.75,4.75,1.75l7.4066,0.12h0.0313c6.2648,0,11.418-2.61,14.281-7.53h0.0313c2.1206-3.69,3.5126-9.5,4.7496-17.94,0.011-0.02,0.022-0.04,0.032-0.06,0.462-3.93,0.916-8.88,1.375-14.84,0.459-5.13,0.702-8.88,0.781-11.41,0.184-3.32-0.967-6.4-3.406-8.44v-0.03c-2.262-1.85-5.2882-2.62-8.7191-2.62h-21.188c0.036-1.59,0.094-3.12,0.094-4.88,0-1.65-0.049-4.14-0.125-7.498v-3.031c0.002-0.062,0.002-0.125,0-0.187-0.11-1.546-0.755-3.154-2.062-4.157-1.29-0.989-2.871-1.245-4.438-1.156h-0.062zm37.406,2.094c-1.368,0.121-2.581,0.835-3.4689,1.781-0.0431,0.04-0.0848,0.082-0.125,0.125-0.8348,1.014-1.4285,2.481-1.1875,3.938,0.2411,1.457,1.1663,2.537,2.1874,3.343,1.792,1.498,3.121,2.698,4.156,3.658,0.011,0.01,0.021,0.02,0.032,0.03,1.298,1.15,2.297,2.17,3,3.06,0.02,0.03,0.041,0.07,0.062,0.1,0.934,1.09,2.159,2,3.688,2.21,1.529,0.22,3.029-0.42,4.125-1.34,0.021-0.01,0.041-0.02,0.062-0.03,1.026-0.91,1.875-2.27,1.906-3.78,0.032-1.52-0.683-2.8-1.593-3.814-0.021-0.021-0.042-0.042-0.063-0.062-1.547-1.625-2.9-2.98-4.094-4.094-0.01-0.011-0.02-0.021-0.031-0.031-1.727-1.57-3.347-2.912-4.937-4-1.059-0.725-2.349-1.215-3.719-1.094z" fill="url(#m)"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(0.6, 0, 0, 0.6, 83.43, -47.62)">
|
||||||
|
<path fill-opacity="0.3" d="M-61.025,286.89c-3.782,0-7.29,2.17-8.968,5.56-2.725,5.45-4,11.45-4,17.66,0.002,2.9,1.311,5.59,3.437,7.47l1,6.03c1.254,7.88,2.268,14.86,3.125,21.22,0.957,7.16,1.294,11.61,1.406,14.46-0.503,0.33-0.753,0.54-2.125,1.1-3.979,1.6-8.262,2.44-13.218,2.44-4.428,0-6.878-0.95-7.75-1.57-1.089-0.76-0.594,0.48-0.594-1.93,0-1.31,0.182-2.78,0.656-4.47,0.403-1.41,1.087-3.24,2.094-5.41,0.778-1.65,1.762-3.55,3.031-5.84,2.602-4.68,0.949-10.72-3.656-13.44l-1.688-1.03c-2.324-1.4-5.099-1.77-7.718-1.06-2.619,0.7-4.847,2.43-6.157,4.81-1.99,3.6-3.62,6.73-4.91,9.56-1.75,3.83-3.1,7.47-4.03,10.97-1.11,4.12-1.68,8.22-1.68,12.28,0,7.05,2.85,13.72,7.9,18.47v0.62l2.81,1.88c6.143,4.11,13.616,5.53,21.785,5.53,6.2,0,11.614-0.55,16.532-1.75h0.437l0.656-0.19,0.125-0.03,0.063-0.03c6.188-1.71,11.792-4.84,15.781-9.78l0.031-0.03c4.435-5.56,6.282-12.64,6.282-20.03,0-4.72-0.518-10.68-1.407-18.38-0.561-4.86-1.368-11.12-2.5-18.75v-0.03c-0.239-1.59-0.264-1.84-0.375-2.59,0.733-1.01,1.337-2.11,1.657-3.35,0.59-2.28,1.016-4.12,1.281-5.81,0.335-2.15,0.406-4.35,0.406-7.09-0.003-3.79-2.172-7.29-5.562-8.97-0.744-0.37-1.617-0.81-2.657-1.31-0.48-0.24-0.886-0.39-1.343-0.6-1.431-3.8-4.989-6.58-9.188-6.59h-0.969zm2.5,11.25h0.032c-0.007,0.01-0.025,0.02-0.032,0.03v-0.03zm1,6.37c0.79,0.35,1.549,0.68,2.407,1.1h0.031v0.03c0.334,0.16,0.597,0.28,0.906,0.44-0.038,1.29-0.061,2.76-0.156,3.37-0.103,0.66-0.436,1.97-0.719,3.16l-3.187,1.09-0.157-0.97-0.531-3.09-2.094-1.13c0.071-1.36,0.191-2.7,0.438-3.97l3.062-0.03zm4.938,2.35h0.031v0.03c-0.013-0.01-0.018-0.03-0.031-0.03zm-47.344,59.28c1.065,2.28,2.593,4.26,4.438,5.56,3.942,2.78,8.992,3.94,15.125,3.94,6.437,0,12.488-1.14,18.031-3.38,3.08-1.24,5.327-2.45,7.312-4.37,0.407-0.4,0.767-1.03,1.157-1.53-0.585,2.41-1.505,4.43-2.782,6.03-1.939,2.4-4.919,4.22-9.062,5.4l-0.188,0.07c-3.645,0.99-8.417,1.53-14.375,1.53-6.53,0-11.23-1.15-14.437-3.22l-0.219-0.16c-3.183-2.14-4.887-5.42-5-9.87z" fill="#000"/>
|
||||||
|
<path d="M-63.656,295.12c-1.366,0.01-2.613,0.78-3.219,2-2.252,4.51-3.344,9.49-3.344,14.82,0.001,1.34,0.748,2.57,1.938,3.18l0.937,0.5,1.469,8.76c1.262,7.93,2.292,15.03,3.156,21.43,1.113,8.33,1.656,14.29,1.657,17.41-0.001,0.55-0.107,1.01-1.032,1.9-0.924,0.9-2.69,1.99-5.281,3.04-4.761,1.91-9.928,2.9-15.625,2.9-5.28,0-9.03-1.05-11.438-2.75-2.331-1.64-3.312-3.57-3.312-7.15,0-1.96,0.297-4.01,0.906-6.19,0.512-1.79,1.306-3.94,2.438-6.38,0.868-1.84,1.945-3.88,3.25-6.25,0.948-1.7,0.365-3.85-1.313-4.84l-1.719-1.03c-0.836-0.5-1.842-0.65-2.785-0.39-0.943,0.25-1.743,0.88-2.215,1.73-1.942,3.52-3.502,6.53-4.692,9.13-1.62,3.55-2.83,6.87-3.65,9.97-0.98,3.63-1.47,7.17-1.47,10.62,0,6.5,2.76,12.18,7.88,15.63-0.01,0.01-0.01,0.02,0,0.03,4.669,3.13,10.796,4.44,18.214,4.43,6.324,0,11.633-0.54,16.062-1.74h0.032c5.224-1.45,9.549-3.97,12.531-7.66,3.326-4.17,4.875-9.67,4.875-16.03,0-4.25-0.468-10.07-1.344-17.66-0.55-4.76-1.375-10.95-2.5-18.53-0.547-3.63-0.617-4.16-0.875-6,1.142-0.39,2.01-1.33,2.313-2.5,0.563-2.18,0.948-3.89,1.156-5.22,0.239-1.53,0.312-3.47,0.312-6.09-0.001-1.37-0.776-2.62-2-3.22-0.754-0.38-1.612-0.81-2.594-1.28-1.378-0.67-2.668-1.25-3.874-1.75h-0.032c0.001-0.03-0.201-0.54-0.312-1.6-0.193-1.82-1.728-3.21-3.563-3.22h-0.937z" transform="translate(-1.63, -6.1)" stroke="#510000" stroke-width="10" fill="none"/>
|
||||||
|
<path transform="translate(-1.63, -6.1)" d="M-63.656,295.12c-1.366,0.01-2.613,0.78-3.219,2-2.252,4.51-3.344,9.49-3.344,14.82,0.001,1.34,0.748,2.57,1.938,3.18l0.937,0.5,1.469,8.76c1.262,7.93,2.292,15.03,3.156,21.43,1.113,8.33,1.656,14.29,1.657,17.41-0.001,0.55-0.107,1.01-1.032,1.9-0.924,0.9-2.69,1.99-5.281,3.04-4.761,1.91-9.928,2.9-15.625,2.9-5.28,0-9.03-1.05-11.438-2.75-2.331-1.64-3.312-3.57-3.312-7.15,0-1.96,0.297-4.01,0.906-6.19,0.512-1.79,1.306-3.94,2.438-6.38,0.868-1.84,1.945-3.88,3.25-6.25,0.948-1.7,0.365-3.85-1.313-4.84l-1.719-1.03c-0.836-0.5-1.842-0.65-2.785-0.39-0.943,0.25-1.743,0.88-2.215,1.73-1.942,3.52-3.502,6.53-4.692,9.13-1.62,3.55-2.83,6.87-3.65,9.97-0.98,3.63-1.47,7.17-1.47,10.62,0,6.5,2.76,12.18,7.88,15.63-0.01,0.01-0.01,0.02,0,0.03,4.669,3.13,10.796,4.44,18.214,4.43,6.324,0,11.633-0.54,16.062-1.74h0.032c5.224-1.45,9.549-3.97,12.531-7.66,3.326-4.17,4.875-9.67,4.875-16.03,0-4.25-0.468-10.07-1.344-17.66-0.55-4.76-1.375-10.95-2.5-18.53-0.547-3.63-0.617-4.16-0.875-6,1.142-0.39,2.01-1.33,2.313-2.5,0.563-2.18,0.948-3.89,1.156-5.22,0.239-1.53,0.312-3.47,0.312-6.09-0.001-1.37-0.776-2.62-2-3.22-0.754-0.38-1.612-0.81-2.594-1.28-1.378-0.67-2.668-1.25-3.874-1.75h-0.032c0.001-0.03-0.201-0.54-0.312-1.6-0.193-1.82-1.728-3.21-3.563-3.22h-0.937z" fill="url(#n)"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(0.6, 0, 0, 0.6, 83.43, -47.62)">
|
||||||
|
<path fill-opacity="0.3" d="M84.844,406.06c-1.134,0.12-2.236,0.56-3.25,1.25-2.029,1.38-3.196,3.74-3.063,6.19,0.174,5.03,0.324,11.84,0.5,18.62h-3.937l-1.406-1.24c0.945-0.89,1.658-2.03,2-3.32,0.671-2.53-0.141-5.28-2.094-7.03l-0.094-0.09-0.125-0.1-6.156-5.06c-1.462-1.3-3.212-1.76-5.157-1.56-0.608-0.95-1.353-1.81-2.374-2.38l-7.032-4.25c-1.169-0.73-2.433-1.03-3.812-1h-0.032c-3.379,0.1-6.28,2.69-6.75,6.03,0.078-0.54-0.176,0.75-0.812,2.35-0.636,1.59-1.628,3.76-2.906,6.44-2.398,5.01-6.437,11.81-12.094,20.06-1.892,2.72-1.551,6.46,0.75,8.84l0.031,0.03,0.031,0.04,1.094,1.09c1.083,1.09,2.488,1.66,3.938,1.87-0.042,8.6-0.07,18.19-0.219,22.94v0.03c-0.029,1.03,0.291,1.99,0.687,2.91-0.999,3.22-2.13,5.28-2.093,5.25-1.466,1.29-3.047,2.89-3.907,5.47-1.038,3.11-0.225,6.71,2.126,9.06,2.968,2.97,8.227,3.76,11.937,1.91,1.539-0.77,2.807-1.85,3.875-3.07,2.082,1.47,4.625,1.82,6.625,1.54,1.928-0.28,3.638-1.36,5.094-2.69,0.346,0.2,0.676,0.45,1.031,0.59-0.108,1.44,0.166,2.93,0.969,4.25l0.062,0.09,0.063,0.1,0.718,1.09c2.045,3.15,6.379,4.08,9.563,2.1,7.964-4.74,14.225-11.13,18.937-18.88v2.44c0,3.22,0.735,6.66,3.094,9.47,2.405,2.86,5.991,4.2,9.282,4.4h0.252c0.12,0.01,0.23,0.01,0.34,0h11.06c5.8,0,11.08-4.17,13.29-9.31,0.95-2.06,0.78-4.28-0.35-6.25-0.64-1.12-1.61-1.95-2.72-2.56-0.19-2.55-0.31-5.72-0.31-9.84,0.02-1.89-0.73-3.64-2.06-4.97-1.34-1.34-3.18-2.09-5.06-2.07h-1.72c-2.79-0.03-5.22,1.65-6.35,4.07v-22.94h12.13c2.86,0.05,5.41-1.69,6.5-4.35,1.09-2.65,0.44-5.73-1.63-7.71l-6.03-6.07c-0.43-0.43-0.98-0.69-1.5-1-0.14-2.99-1.36-5.84-3.06-7.96-3-3.75-7.01-5.8-12.69-8.38-0.143-0.07-0.294-0.04-0.436-0.09-0.658-0.82-1.432-1.58-2.406-2.03l-0.126-0.07-0.124-0.03-8.688-3.62c-1.113-0.52-2.272-0.72-3.406-0.6zm-5.813,42.6c-0.196,5.17-0.706,10.05-1.75,14.46-0.072-4-0.164-8.36-0.187-14.12,0.509-0.04,0.999-0.09,1.5-0.25l0.062-0.03h0.063c0.085-0.03,0.225-0.04,0.312-0.06z" fill="#000"/>
|
||||||
|
<path d="M44.734,408.22c-0.301,0.01-0.552,0.23-0.593,0.53-0.21,1.47-1.637,5.13-4.282,10.66-2.628,5.5-6.819,12.48-12.593,20.91-0.169,0.24-0.143,0.56,0.062,0.78l1.094,1.09c0.229,0.23,0.598,0.25,0.844,0.03,1.939-1.74,3.586-3.5,5.062-5.25-0.009,15.45-0.083,27.42-0.312,34.75-0.007,0.22,0.104,0.43,0.291,0.54,0.187,0.12,0.421,0.13,0.615,0.02l4.687-2.53c0.204-0.1,0.336-0.3,0.344-0.53v-2.62h20.438v3.97c-0.06-0.03-0.097-0.07-0.157-0.1-0.286-0.15-0.641-0.05-0.812,0.22l-0.719,1.09c-0.152,0.24-0.126,0.55,0.063,0.75,1.673,1.92,2.84,3.45,3.531,4.6,0.687,1.14,1.345,2.7,1.937,4.59,0.325,1.04,0.759,1.82,1.469,2.22s1.604,0.24,2.375-0.25c0.324-0.21,0.57-0.47,0.813-0.75-2.695,3.53-5.749,6.78-9.313,9.69-0.253,0.19-0.32,0.54-0.156,0.81l0.719,1.09c0.183,0.29,0.558,0.37,0.843,0.19,17.903-10.64,26.682-29.9,26.344-57.4h2.375v46.37c0,2.26,0.507,4.08,1.594,5.38,1.086,1.29,2.737,1.99,4.781,2.12h11.252c3.35,0,5.9-1.92,7.4-5.44,0.09-0.18,0.08-0.39-0.02-0.56-0.1-0.18-0.28-0.29-0.48-0.31-0.95-0.11-1.59-0.47-2.09-1.13s-0.82-1.66-0.94-3.03c-0.24-2.87-0.37-6.56-0.37-11.12,0-0.17-0.07-0.33-0.18-0.45-0.12-0.12-0.28-0.18-0.45-0.18h-1.81c-0.33,0-0.61,0.26-0.62,0.6-0.25,5.29-0.55,9.38-0.91,12.25-0.17,1.37-0.53,2.34-1,2.93s-1,0.85-1.81,0.85h-4.03c-1.827,0.22-2.995-0.07-3.661-0.78-0.666-0.72-0.949-2.02-0.718-3.97,0.001-0.02,0.001-0.05,0-0.07v-43.46h18.529c0.26,0,0.49-0.15,0.58-0.39,0.1-0.23,0.04-0.5-0.14-0.68l-6.13-6.15c-0.11-0.12-0.27-0.19-0.43-0.19-0.17,0-0.32,0.07-0.44,0.19l-4.16,4.15h-16.122v-19.31l2.969-1.97c0.179-0.13,0.278-0.34,0.258-0.56-0.019-0.22-0.153-0.41-0.352-0.5l-8.687-3.63c-0.197-0.09-0.427-0.07-0.606,0.05s-0.281,0.33-0.269,0.55c0.235,6.82,0.482,15.34,0.718,25.37h-12c-0.238,0-0.457,0.13-0.562,0.35l-5.188-4.53c-0.128-0.11-0.292-0.16-0.457-0.14-0.164,0.02-0.315,0.1-0.418,0.23l-2.718,3.37h-7.094c2.095-2.77,3.962-5.22,5.312-6.84,1.548-1.86,2.694-2.98,3.094-3.22,1.15-0.69,2.306-1.15,3.438-1.37,0.226-0.05,0.406-0.22,0.465-0.45,0.06-0.22-0.012-0.46-0.184-0.62l-6.156-5.06c-0.13-0.11-0.302-0.17-0.474-0.15-0.173,0.02-0.33,0.11-0.433,0.25l-2.343,3h-8.688c0.965-1.64,1.886-3,2.688-3.85,0.961-1.02,1.763-1.4,2.343-1.4,0.284,0,0.534-0.19,0.608-0.46s-0.048-0.56-0.295-0.7l-7.219-4.34c-0.103-0.07-0.222-0.1-0.344-0.1zm48.094,5.78c-0.154,0.01-0.299,0.08-0.406,0.19l-1.094,1.09c-0.119,0.13-0.179,0.3-0.168,0.47,0.012,0.17,0.096,0.33,0.231,0.44,3.795,3.08,6.048,6.14,6.843,9.09,0.432,1.61,0.907,2.79,1.5,3.6,0.296,0.4,0.626,0.72,1.036,0.9,0.4,0.19,0.88,0.23,1.31,0.1,1.44-0.44,2.42-1.73,2.94-3.53,0.54-1.9-0.04-3.85-1.57-5.75-1.59-1.99-5.003-4.11-10.341-6.53-0.087-0.05-0.184-0.07-0.281-0.07zm-47.75,8.13h9.531l-5.562,11.4h-8.094l-2.562-1.71c2.227-2.93,4.462-6.15,6.687-9.69zm24.438,13.81l2.281,2.28c0.162,0.17,0.404,0.23,0.625,0.16,2.098-0.7,4.468-1.06,7.062-1.06h1.907c0.622,18.59-3.482,33.69-12.282,45.37,0.239-0.33,0.435-0.72,0.563-1.12,0.278-0.89,0.285-1.89,0.094-3.04-0.221-1.32-1.188-2.59-2.782-3.9-1.344-1.11-3.247-2.29-5.531-3.5l4.875-2.06c0.236-0.11,0.386-0.34,0.375-0.6-0.238-6.18-0.342-16.38-0.344-30.37l2.969-2c0.072-0.04,0.136-0.1,0.188-0.16zm-29.563,0.66h7.438v11.75h-7.438v-11.75zm13.031,0h7.407v11.75h-7.407v-11.75zm-13.031,14.81h7.438v12.12h-7.438v-12.12zm13.031,0h7.407v12.12h-7.407v-12.12zm-1.812,20.09c-0.089,0.02-0.175,0.05-0.25,0.1l-1.094,0.72c-0.282,0.18-0.365,0.55-0.187,0.84,0.953,1.67,1.786,3.33,2.5,5,0.7,1.63,1.238,3.49,1.593,5.62,0.193,1.16,0.497,2.05,1.157,2.57,0.659,0.52,1.595,0.48,2.437,0.06,1.68-0.84,2.471-2.67,2.344-5.09-0.072-1.37-0.845-2.79-2.188-4.38s-3.29-3.37-5.843-5.31c-0.133-0.11-0.302-0.15-0.469-0.13zm-8.656,1.44c-0.144,0.02-0.276,0.08-0.375,0.19l-0.719,0.72c-0.167,0.17-0.216,0.43-0.125,0.65,0.466,1.17,0.894,2.59,1.25,4.25,0.345,1.62,0.431,3.56,0.312,5.82-0.064,1.22,0.113,2.2,0.657,2.9,0.543,0.7,1.46,0.95,2.437,0.81,0.993-0.14,1.811-0.67,2.344-1.5,0.532-0.82,0.811-1.91,0.875-3.25,0.137-2.88-2.012-6.26-6.156-10.4-0.13-0.14-0.314-0.21-0.5-0.19zm-6.875,0.72c-0.256,0.04-0.455,0.24-0.5,0.5-1.192,5.24-2.85,8.69-4.719,10.34-1.067,0.94-1.765,1.8-2.063,2.69s-0.075,1.86,0.594,2.53c1.23,1.23,2.914,1.5,4.531,0.69,1.597-0.8,2.767-2.25,3.532-4.16,0.816-2.04,1.023-5.81,0.781-11.62-0.016-0.27-0.206-0.5-0.469-0.56l-1.437-0.38c-0.081-0.03-0.166-0.04-0.25-0.03z" stroke="#003c00" stroke-width="10" fill="none"/>
|
||||||
|
<path d="M44.734,408.22c-0.301,0.01-0.552,0.23-0.593,0.53-0.21,1.47-1.637,5.13-4.282,10.66-2.628,5.5-6.819,12.48-12.593,20.91-0.169,0.24-0.143,0.56,0.062,0.78l1.094,1.09c0.229,0.23,0.598,0.25,0.844,0.03,1.939-1.74,3.586-3.5,5.062-5.25-0.009,15.45-0.083,27.42-0.312,34.75-0.007,0.22,0.104,0.43,0.291,0.54,0.187,0.12,0.421,0.13,0.615,0.02l4.687-2.53c0.204-0.1,0.336-0.3,0.344-0.53v-2.62h20.438v3.97c-0.06-0.03-0.097-0.07-0.157-0.1-0.286-0.15-0.641-0.05-0.812,0.22l-0.719,1.09c-0.152,0.24-0.126,0.55,0.063,0.75,1.673,1.92,2.84,3.45,3.531,4.6,0.687,1.14,1.345,2.7,1.937,4.59,0.325,1.04,0.759,1.82,1.469,2.22s1.604,0.24,2.375-0.25c0.324-0.21,0.57-0.47,0.813-0.75-2.695,3.53-5.749,6.78-9.313,9.69-0.253,0.19-0.32,0.54-0.156,0.81l0.719,1.09c0.183,0.29,0.558,0.37,0.843,0.19,17.903-10.64,26.682-29.9,26.344-57.4h2.375v46.37c0,2.26,0.507,4.08,1.594,5.38,1.086,1.29,2.737,1.99,4.781,2.12h11.252c3.35,0,5.9-1.92,7.4-5.44,0.09-0.18,0.08-0.39-0.02-0.56-0.1-0.18-0.28-0.29-0.48-0.31-0.95-0.11-1.59-0.47-2.09-1.13s-0.82-1.66-0.94-3.03c-0.24-2.87-0.37-6.56-0.37-11.12,0-0.17-0.07-0.33-0.18-0.45-0.12-0.12-0.28-0.18-0.45-0.18h-1.81c-0.33,0-0.61,0.26-0.62,0.6-0.25,5.29-0.55,9.38-0.91,12.25-0.17,1.37-0.53,2.34-1,2.93s-1,0.85-1.81,0.85h-4.03c-1.827,0.22-2.995-0.07-3.661-0.78-0.666-0.72-0.949-2.02-0.718-3.97,0.001-0.02,0.001-0.05,0-0.07v-43.46h18.529c0.26,0,0.49-0.15,0.58-0.39,0.1-0.23,0.04-0.5-0.14-0.68l-6.13-6.15c-0.11-0.12-0.27-0.19-0.43-0.19-0.17,0-0.32,0.07-0.44,0.19l-4.16,4.15h-16.122v-19.31l2.969-1.97c0.179-0.13,0.278-0.34,0.258-0.56-0.019-0.22-0.153-0.41-0.352-0.5l-8.687-3.63c-0.197-0.09-0.427-0.07-0.606,0.05s-0.281,0.33-0.269,0.55c0.235,6.82,0.482,15.34,0.718,25.37h-12c-0.238,0-0.457,0.13-0.562,0.35l-5.188-4.53c-0.128-0.11-0.292-0.16-0.457-0.14-0.164,0.02-0.315,0.1-0.418,0.23l-2.718,3.37h-7.094c2.095-2.77,3.962-5.22,5.312-6.84,1.548-1.86,2.694-2.98,3.094-3.22,1.15-0.69,2.306-1.15,3.438-1.37,0.226-0.05,0.406-0.22,0.465-0.45,0.06-0.22-0.012-0.46-0.184-0.62l-6.156-5.06c-0.13-0.11-0.302-0.17-0.474-0.15-0.173,0.02-0.33,0.11-0.433,0.25l-2.343,3h-8.688c0.965-1.64,1.886-3,2.688-3.85,0.961-1.02,1.763-1.4,2.343-1.4,0.284,0,0.534-0.19,0.608-0.46s-0.048-0.56-0.295-0.7l-7.219-4.34c-0.103-0.07-0.222-0.1-0.344-0.1zm48.094,5.78c-0.154,0.01-0.299,0.08-0.406,0.19l-1.094,1.09c-0.119,0.13-0.179,0.3-0.168,0.47,0.012,0.17,0.096,0.33,0.231,0.44,3.795,3.08,6.048,6.14,6.843,9.09,0.432,1.61,0.907,2.79,1.5,3.6,0.296,0.4,0.626,0.72,1.036,0.9,0.4,0.19,0.88,0.23,1.31,0.1,1.44-0.44,2.42-1.73,2.94-3.53,0.54-1.9-0.04-3.85-1.57-5.75-1.59-1.99-5.003-4.11-10.341-6.53-0.087-0.05-0.184-0.07-0.281-0.07zm-47.75,8.13h9.531l-5.562,11.4h-8.094l-2.562-1.71c2.227-2.93,4.462-6.15,6.687-9.69zm24.438,13.81l2.281,2.28c0.162,0.17,0.404,0.23,0.625,0.16,2.098-0.7,4.468-1.06,7.062-1.06h1.907c0.622,18.59-3.482,33.69-12.282,45.37,0.239-0.33,0.435-0.72,0.563-1.12,0.278-0.89,0.285-1.89,0.094-3.04-0.221-1.32-1.188-2.59-2.782-3.9-1.344-1.11-3.247-2.29-5.531-3.5l4.875-2.06c0.236-0.11,0.386-0.34,0.375-0.6-0.238-6.18-0.342-16.38-0.344-30.37l2.969-2c0.072-0.04,0.136-0.1,0.188-0.16zm-29.563,0.66h7.438v11.75h-7.438v-11.75zm13.031,0h7.407v11.75h-7.407v-11.75zm-13.031,14.81h7.438v12.12h-7.438v-12.12zm13.031,0h7.407v12.12h-7.407v-12.12zm-1.812,20.09c-0.089,0.02-0.175,0.05-0.25,0.1l-1.094,0.72c-0.282,0.18-0.365,0.55-0.187,0.84,0.953,1.67,1.786,3.33,2.5,5,0.7,1.63,1.238,3.49,1.593,5.62,0.193,1.16,0.497,2.05,1.157,2.57,0.659,0.52,1.595,0.48,2.437,0.06,1.68-0.84,2.471-2.67,2.344-5.09-0.072-1.37-0.845-2.79-2.188-4.38s-3.29-3.37-5.843-5.31c-0.133-0.11-0.302-0.15-0.469-0.13zm-8.656,1.44c-0.144,0.02-0.276,0.08-0.375,0.19l-0.719,0.72c-0.167,0.17-0.216,0.43-0.125,0.65,0.466,1.17,0.894,2.59,1.25,4.25,0.345,1.62,0.431,3.56,0.312,5.82-0.064,1.22,0.113,2.2,0.657,2.9,0.543,0.7,1.46,0.95,2.437,0.81,0.993-0.14,1.811-0.67,2.344-1.5,0.532-0.82,0.811-1.91,0.875-3.25,0.137-2.88-2.012-6.26-6.156-10.4-0.13-0.14-0.314-0.21-0.5-0.19zm-6.875,0.72c-0.256,0.04-0.455,0.24-0.5,0.5-1.192,5.24-2.85,8.69-4.719,10.34-1.067,0.94-1.765,1.8-2.063,2.69s-0.075,1.86,0.594,2.53c1.23,1.23,2.914,1.5,4.531,0.69,1.597-0.8,2.767-2.25,3.532-4.16,0.816-2.04,1.023-5.81,0.781-11.62-0.016-0.27-0.206-0.5-0.469-0.56l-1.437-0.38c-0.081-0.03-0.166-0.04-0.25-0.03z" fill="url(#o)"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(0.6, 0, 0, 0.6, 83.43, -47.62)">
|
||||||
|
<path fill-opacity="0.3" d="M208.28,99.312c-9.25,0.001-16.95,1.548-22.87,5.718-5.68,4-9.54,10.17-11.6,17.53l-1.87,6.78,6.9,1.25,7.72,1.41c-0.33,0.15-0.77,0.25-1.09,0.41-4.18,2.02-7.7,5.14-10.09,9.06-2.4,3.92-3.57,8.51-3.57,13.22,0,7.06,2.76,13.73,7.81,18.5,5.22,4.91,12.4,7.19,20.29,7.19,4.61,0,9.11-0.88,13.28-2.66,1.26-0.54,2.42-1.31,3.62-2l1.25,3.19h31.69l-4.47-9.19c-1.33-2.73-2.17-5.18-2.59-7.25-0.38-1.87-0.69-5.87-0.69-11.41l0.16-20.12v-0.06c0-7.95-0.41-13.62-3.1-18.54-2.31-4.23-6.15-7.42-10.78-9.65-5.31-2.57-11.79-3.377-20-3.378zm0,12.808c7.2,0.01,12.2,1.02,14.44,2.1,2.92,1.41,4.36,2.86,5.12,4.25,0.39,0.7,1.53,5.34,1.54,12.41l-0.19,20.12v0.06c0,5.95,0.24,10.39,0.97,13.97,0.07,0.36,0.22,0.73,0.31,1.09h-3.41c-0.06-0.22-0.09-0.26-0.15-0.5-0.31-1.08-0.44-1.65-0.75-2.5l-2.6-6.9c0.2-0.49,0.54-0.9,0.69-1.41,0.94-3.07,0.94-5.84,0.94-10.22v-16.43c0-4.38-1.17-8.91-4.69-11.94-3.86-3.33-8.22-3.69-13.44-3.69-3.91,0-7.68,0.76-10.87,3-1.72,1.21-3.04,2.73-4.13,4.44l-3.03-0.56c1.08-1.63,2.34-2.91,3.75-3.91,2.69-1.89,7.78-3.37,15.5-3.38zm-1.22,13.22c1.61,0,2.63,0.2,3.5,0.38-2.14,0.54-5.01,1.15-8.03,1.75,0.47-0.85,0.89-1.39,1-1.47,0.26-0.18,1.3-0.66,3.53-0.66zm-13.47,17.66c-2.66,2.57-4.5,6.2-4.5,9.91,0,4.01,1.78,8.05,4.63,10.84,1.89,1.84,4.29,3.08,6.84,3.78-0.22,0.01-0.42,0.06-0.65,0.06-5.57,0-8.97-1.36-11.5-3.75-2.69-2.53-3.82-5.06-3.82-9.15,0-2.67,0.59-4.71,1.72-6.57,1.14-1.86,2.57-3.13,4.75-4.18,0.61-0.3,1.67-0.63,2.53-0.94zm18.5,6.44c-0.03,0.33-0.1,1.75-0.09,1.72v0.03l-0.03,0.03c-0.26,0.88-0.62,1.51-1.78,2.37-1.93,1.4-3.38,1.82-5.1,1.82-1.44,0-1.81-0.21-2.43-0.82-0.76-0.74-0.78-0.86-0.78-1.68,0-0.51-0.31-0.18,0.68-0.88-0.33,0.22,2.55-1,7.06-1.97,1.09-0.23,1.51-0.41,2.47-0.62z" fill="#000"/>
|
||||||
|
<path d="M191.4,122.86l-15.68-2.83c1.76-6.31,4.8-10.99,9.1-14.02,4.31-3.04,10.7-4.55,19.19-4.55,7.71,0,13.45,0.91,17.22,2.73,3.77,1.83,6.43,4.14,7.97,6.95,1.53,2.81,2.3,7.97,2.3,15.47l-0.18,20.17c0,5.74,0.28,9.98,0.83,12.7,0.55,2.73,1.59,5.65,3.1,8.77h-17.09c-0.45-1.15-1.01-2.85-1.66-5.11-0.29-1.02-0.5-1.7-0.62-2.03-2.95,2.87-6.11,5.03-9.47,6.46-3.36,1.44-6.95,2.15-10.76,2.15-6.73,0-12.03-1.82-15.9-5.47-3.88-3.65-5.81-8.26-5.81-13.84,0-3.69,0.88-6.98,2.64-9.87,1.77-2.89,4.24-5.1,7.41-6.64,3.18-1.54,7.76-2.88,13.75-4.03,8.08-1.52,13.67-2.93,16.79-4.24v-1.73c0-3.32-0.82-5.68-2.46-7.1-1.64-1.41-4.74-2.12-9.29-2.12-3.07,0-5.47,0.6-7.19,1.81-1.73,1.21-3.12,3.33-4.19,6.37zm23.13,14.02c-2.22,0.74-5.72,1.62-10.52,2.65-4.8,1.02-7.93,2.03-9.41,3.01-2.25,1.6-3.38,3.63-3.38,6.09,0,2.42,0.9,4.51,2.71,6.27,1.8,1.76,4.1,2.65,6.88,2.65,3.12,0,6.09-1.03,8.92-3.08,2.09-1.56,3.47-3.46,4.12-5.72,0.45-1.48,0.68-4.28,0.68-8.42v-3.45z" stroke="#500050" stroke-width="10" fill="none"/>
|
||||||
|
<path d="M191.4,122.86l-15.68-2.83c1.76-6.31,4.8-10.99,9.1-14.02,4.31-3.04,10.7-4.55,19.19-4.55,7.71,0,13.45,0.91,17.22,2.73,3.77,1.83,6.43,4.14,7.97,6.95,1.53,2.81,2.3,7.97,2.3,15.47l-0.18,20.17c0,5.74,0.28,9.98,0.83,12.7,0.55,2.73,1.59,5.65,3.1,8.77h-17.09c-0.45-1.15-1.01-2.85-1.66-5.11-0.29-1.02-0.5-1.7-0.62-2.03-2.95,2.87-6.11,5.03-9.47,6.46-3.36,1.44-6.95,2.15-10.76,2.15-6.73,0-12.03-1.82-15.9-5.47-3.88-3.65-5.81-8.26-5.81-13.84,0-3.69,0.88-6.98,2.64-9.87,1.77-2.89,4.24-5.1,7.41-6.64,3.18-1.54,7.76-2.88,13.75-4.03,8.08-1.52,13.67-2.93,16.79-4.24v-1.73c0-3.32-0.82-5.68-2.46-7.1-1.64-1.41-4.74-2.12-9.29-2.12-3.07,0-5.47,0.6-7.19,1.81-1.73,1.21-3.12,3.33-4.19,6.37zm23.13,14.02c-2.22,0.74-5.72,1.62-10.52,2.65-4.8,1.02-7.93,2.03-9.41,3.01-2.25,1.6-3.38,3.63-3.38,6.09,0,2.42,0.9,4.51,2.71,6.27,1.8,1.76,4.1,2.65,6.88,2.65,3.12,0,6.09-1.03,8.92-3.08,2.09-1.56,3.47-3.46,4.12-5.72,0.45-1.48,0.68-4.28,0.68-8.42v-3.45z" fill="url(#p)"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 41 KiB |
70
recipes/20minutes.recipe
Normal file
70
recipes/20minutes.recipe
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = '2011 Aurélien Chabot <contact@aurelienchabot.fr>'
|
||||||
|
'''
|
||||||
|
20minutes.fr
|
||||||
|
'''
|
||||||
|
from calibre.web.feeds.recipes import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Minutes(BasicNewsRecipe):
|
||||||
|
|
||||||
|
title = '20 minutes'
|
||||||
|
__author__ = 'calibre'
|
||||||
|
description = 'Actualités'
|
||||||
|
encoding = 'cp1252'
|
||||||
|
publisher = '20minutes.fr'
|
||||||
|
category = 'Actualités, France, Monde'
|
||||||
|
language = 'fr'
|
||||||
|
|
||||||
|
use_embedded_content = False
|
||||||
|
timefmt = ' [%d %b %Y]'
|
||||||
|
max_articles_per_feed = 15
|
||||||
|
no_stylesheets = True
|
||||||
|
remove_empty_feeds = True
|
||||||
|
filterDuplicates = True
|
||||||
|
|
||||||
|
extra_css = '''
|
||||||
|
h1 {font-size:xx-large; font-family:Arial,Helvetica,sans-serif;}
|
||||||
|
.mna-details {font-size:xx-small; color:#4D4D4D; font-family:Arial,Helvetica,sans-serif;}
|
||||||
|
.mna-image {font-size:xx-small; color:#4D4D4D; font-family:Arial,Helvetica,sans-serif;}
|
||||||
|
.mna-body {font-size:medium; font-family:Arial,Helvetica,sans-serif;}
|
||||||
|
'''
|
||||||
|
|
||||||
|
remove_tags = [
|
||||||
|
dict(name='iframe'),
|
||||||
|
dict(name='div', attrs={'class':['mn-section-heading']}),
|
||||||
|
dict(name='a', attrs={'href':['#commentaires']}),
|
||||||
|
dict(name='div', attrs={'class':['mn-right']}),
|
||||||
|
dict(name='div', attrs={'class':['mna-box']}),
|
||||||
|
dict(name='div', attrs={'class':['mna-comment-call']}),
|
||||||
|
dict(name='div', attrs={'class':['mna-tools']}),
|
||||||
|
dict(name='div', attrs={'class':['mn-trilist']})
|
||||||
|
]
|
||||||
|
|
||||||
|
keep_only_tags = [dict(id='mn-article')]
|
||||||
|
|
||||||
|
remove_tags_after = dict(name='div', attrs={'class':['mna-body','mna-signature']})
|
||||||
|
|
||||||
|
|
||||||
|
feeds = [
|
||||||
|
('France', 'http://www.20minutes.fr/rss/actu-france.xml'),
|
||||||
|
('International', 'http://www.20minutes.fr/rss/monde.xml'),
|
||||||
|
('Tech/Web', 'http://www.20minutes.fr/rss/hightech.xml'),
|
||||||
|
('Sciences', 'http://www.20minutes.fr/rss/sciences.xml'),
|
||||||
|
('Economie', 'http://www.20minutes.fr/rss/economie.xml'),
|
||||||
|
('Politique', 'http://www.20minutes.fr/rss/politique.xml'),
|
||||||
|
(u'Médias', 'http://www.20minutes.fr/rss/media.xml'),
|
||||||
|
('Cinema', 'http://www.20minutes.fr/rss/cinema.xml'),
|
||||||
|
('People', 'http://www.20minutes.fr/rss/people.xml'),
|
||||||
|
('Culture', 'http://www.20minutes.fr/rss/culture.xml'),
|
||||||
|
('Sport', 'http://www.20minutes.fr/rss/sport.xml'),
|
||||||
|
('Paris', 'http://www.20minutes.fr/rss/paris.xml'),
|
||||||
|
('Lyon', 'http://www.20minutes.fr/rss/lyon.xml'),
|
||||||
|
('Toulouse', 'http://www.20minutes.fr/rss/toulouse.xml')
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
for item in soup.findAll(style=True):
|
||||||
|
del item['style']
|
||||||
|
return soup
|
@ -1,5 +1,5 @@
|
|||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2010, Dean Cording'
|
__copyright__ = '2011, Pat Stapleton <pat.stapleton at gmail.com>'
|
||||||
'''
|
'''
|
||||||
abc.net.au/news
|
abc.net.au/news
|
||||||
'''
|
'''
|
||||||
@ -8,7 +8,7 @@ from calibre.web.feeds.recipes import BasicNewsRecipe
|
|||||||
|
|
||||||
class ABCNews(BasicNewsRecipe):
|
class ABCNews(BasicNewsRecipe):
|
||||||
title = 'ABC News'
|
title = 'ABC News'
|
||||||
__author__ = 'Dean Cording'
|
__author__ = 'Pat Stapleton, Dean Cording'
|
||||||
description = 'News from Australia'
|
description = 'News from Australia'
|
||||||
masthead_url = 'http://www.abc.net.au/news/assets/v5/images/common/logo-news.png'
|
masthead_url = 'http://www.abc.net.au/news/assets/v5/images/common/logo-news.png'
|
||||||
cover_url = 'http://www.abc.net.au/news/assets/v5/images/common/logo-news.png'
|
cover_url = 'http://www.abc.net.au/news/assets/v5/images/common/logo-news.png'
|
||||||
@ -23,7 +23,9 @@ class ABCNews(BasicNewsRecipe):
|
|||||||
category = 'News, Australia, World'
|
category = 'News, Australia, World'
|
||||||
language = 'en_AU'
|
language = 'en_AU'
|
||||||
publication_type = 'newsportal'
|
publication_type = 'newsportal'
|
||||||
preprocess_regexps = [(re.compile(r'<!--.*?-->', re.DOTALL), lambda m: '')]
|
# preprocess_regexps = [(re.compile(r'<!--.*?-->', re.DOTALL), lambda m: '')]
|
||||||
|
#Remove annoying map links (inline-caption class is also used for some image captions! hence regex to match maps.google)
|
||||||
|
preprocess_regexps = [(re.compile(r'<a class="inline-caption" href="http://maps\.google\.com.*?/a>', re.DOTALL), lambda m: '')]
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
'comments' : description
|
'comments' : description
|
||||||
,'tags' : category
|
,'tags' : category
|
||||||
@ -32,23 +34,23 @@ class ABCNews(BasicNewsRecipe):
|
|||||||
,'linearize_tables': False
|
,'linearize_tables': False
|
||||||
}
|
}
|
||||||
|
|
||||||
keep_only_tags = dict(id='article')
|
keep_only_tags = [dict(attrs={'class':['article section']})]
|
||||||
|
|
||||||
remove_tags = [dict(attrs={'class':['related', 'tags']}),
|
remove_tags = [dict(attrs={'class':['related', 'tags', 'tools', 'attached-content ready',
|
||||||
dict(id='statepromo')
|
'inline-content story left', 'inline-content map left contracted', 'published',
|
||||||
]
|
'story-map', 'statepromo', 'topics', ]})]
|
||||||
|
|
||||||
remove_attributes = ['width','height']
|
remove_attributes = ['width','height']
|
||||||
|
|
||||||
feeds = [
|
feeds = [
|
||||||
('Top Stories', 'http://www.abc.net.au/news/syndicate/topstoriesrss.xml'),
|
('Top Stories', 'http://www.abc.net.au/news/feed/45910/rss.xml'),
|
||||||
('Canberra', 'http://www.abc.net.au/news/indexes/idx-act/rss.xml'),
|
('Canberra', 'http://www.abc.net.au/news/feed/6910/rss.xml'),
|
||||||
('Sydney', 'http://www.abc.net.au/news/indexes/sydney/rss.xml'),
|
('Sydney', 'http://www.abc.net.au/news/feed/10232/rss.xml'),
|
||||||
('Melbourne', 'http://www.abc.net.au/news/indexes/melbourne/rss.xml'),
|
('Melbourne', 'http://www.abc.net.au/news/feed/21708/rss.xml'),
|
||||||
('Brisbane', 'http://www.abc.net.au/news/indexes/brisbane/rss.xml'),
|
('Brisbane', 'http://www.abc.net.au/news/feed/12858/rss.xml'),
|
||||||
('Perth', 'http://www.abc.net.au/news/indexes/perth/rss.xml'),
|
('Perth', 'feed://www.abc.net.au/news/feed/24886/rss.xml'),
|
||||||
('Australia', 'http://www.abc.net.au/news/indexes/idx-australia/rss.xml'),
|
('Australia', 'http://www.abc.net.au/news/feed/46182/rss.xml'),
|
||||||
('World', 'http://www.abc.net.au/news/indexes/world/rss.xml'),
|
('World', 'http://www.abc.net.au/news/feed/52278/rss.xml'),
|
||||||
('Business', 'http://www.abc.net.au/news/indexes/business/rss.xml'),
|
('Business', 'http://www.abc.net.au/news/feed/51892/rss.xml'),
|
||||||
('Science and Technology', 'http://www.abc.net.au/news/tag/science-and-technology/rss.xml'),
|
('Science and Technology', 'http://www.abc.net.au/news/feed/2298/rss.xml'),
|
||||||
]
|
]
|
||||||
|
27
recipes/acim_bilim_dergisi.recipe
Normal file
27
recipes/acim_bilim_dergisi.recipe
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class AdvancedUserRecipe1334868409(BasicNewsRecipe):
|
||||||
|
title = u'AÇIK BİLİM DERGİSİ'
|
||||||
|
description = ' Aylık çevrimiçi bilim dergisi'
|
||||||
|
__author__ = u'thomass'
|
||||||
|
oldest_article = 30
|
||||||
|
max_articles_per_feed = 300
|
||||||
|
auto_cleanup = True
|
||||||
|
encoding = 'UTF-8'
|
||||||
|
publisher = 'açık bilim'
|
||||||
|
category = 'haber, bilim,TR,dergi'
|
||||||
|
language = 'tr'
|
||||||
|
publication_type = 'magazine '
|
||||||
|
conversion_options = {
|
||||||
|
'tags' : category
|
||||||
|
,'language' : language
|
||||||
|
,'publisher' : publisher
|
||||||
|
,'linearize_tables': True
|
||||||
|
}
|
||||||
|
cover_img_url = 'http://www.acikbilim.com/wp-content/themes/Equilibrium/images/logodene.jpg'
|
||||||
|
masthead_url = 'http://www.acikbilim.com/wp-content/themes/Equilibrium/images/logodene.jpg'
|
||||||
|
|
||||||
|
|
||||||
|
feeds = [(u'Tüm Yayınlar', u'http://www.acikbilim.com/feed')]
|
64
recipes/adventure_zone_pl.recipe
Normal file
64
recipes/adventure_zone_pl.recipe
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
import re
|
||||||
|
class Adventure_zone(BasicNewsRecipe):
|
||||||
|
title = u'Adventure Zone'
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = 'Adventure zone - adventure games from A to Z'
|
||||||
|
category = 'games'
|
||||||
|
language = 'pl'
|
||||||
|
no_stylesheets = True
|
||||||
|
oldest_article = 20
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
index='http://www.adventure-zone.info/fusion/'
|
||||||
|
use_embedded_content=False
|
||||||
|
preprocess_regexps = [(re.compile(r"<td class='capmain'>Komentarze</td>", re.IGNORECASE), lambda m: '')]
|
||||||
|
remove_tags_before= dict(name='td', attrs={'class':'main-bg'})
|
||||||
|
remove_tags= [dict(name='img', attrs={'alt':'Drukuj'})]
|
||||||
|
remove_tags_after= dict(id='comments')
|
||||||
|
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 parse_feeds (self):
|
||||||
|
feeds = BasicNewsRecipe.parse_feeds(self)
|
||||||
|
soup=self.index_to_soup(u'http://www.adventure-zone.info/fusion/feeds/news.php')
|
||||||
|
tag=soup.find(name='channel')
|
||||||
|
titles=[]
|
||||||
|
for r in tag.findAll(name='image'):
|
||||||
|
r.extract()
|
||||||
|
art=tag.findAll(name='item')
|
||||||
|
for i in art:
|
||||||
|
titles.append(i.title.string)
|
||||||
|
for feed in feeds:
|
||||||
|
for article in feed.articles[:]:
|
||||||
|
article.title=titles[feed.articles.index(article)]
|
||||||
|
return feeds
|
||||||
|
|
||||||
|
|
||||||
|
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.find(name='td', attrs={'class':'main-bg'})
|
||||||
|
skip_tag = skip_tag.findAll(name='a')
|
||||||
|
for r in skip_tag:
|
||||||
|
if r.strong:
|
||||||
|
word=r.strong.string.lower()
|
||||||
|
if word and (('zapowied' in word) or ('recenzj' in word) or ('solucj' in word) or ('poradnik' in word)):
|
||||||
|
return self.index_to_soup('http://www.adventure-zone.info/fusion/print.php?type=A&item'+r['href'][r['href'].find('article_id')+7:], raw=True)
|
||||||
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
footer=soup.find(attrs={'class':'news-footer middle-border'})
|
||||||
|
if footer and len(footer('a'))>=2:
|
||||||
|
footer('a')[1].extract()
|
||||||
|
for item in soup.findAll(style=True):
|
||||||
|
del item['style']
|
||||||
|
for a in soup('a'):
|
||||||
|
if a.has_key('href') and 'http://' not in a['href'] and 'https://' not in a['href']:
|
||||||
|
a['href']=self.index + a['href']
|
||||||
|
return soup
|
||||||
|
|
||||||
|
|
50
recipes/al_masry_al_youm.recipe
Normal file
50
recipes/al_masry_al_youm.recipe
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = '2011, Pat Stapleton <pat.stapleton at gmail.com>'
|
||||||
|
'''
|
||||||
|
abc.net.au/news
|
||||||
|
'''
|
||||||
|
import re
|
||||||
|
from calibre.web.feeds.recipes import BasicNewsRecipe
|
||||||
|
|
||||||
|
class TheDailyNewsEG(BasicNewsRecipe):
|
||||||
|
title = u'al-masry al-youm'
|
||||||
|
__author__ = 'Omm Mishmishah'
|
||||||
|
description = 'Independent News from Egypt'
|
||||||
|
masthead_url = 'http://www.almasryalyoum.com/sites/default/files/img/english_logo.png'
|
||||||
|
cover_url = 'http://www.almasryalyoum.com/sites/default/files/img/english_logo.png'
|
||||||
|
|
||||||
|
auto_cleanup = True
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
no_stylesheets = False
|
||||||
|
#delay = 1
|
||||||
|
use_embedded_content = False
|
||||||
|
encoding = 'utf8'
|
||||||
|
publisher = 'Independent News Egypt'
|
||||||
|
category = 'News, Egypt, World'
|
||||||
|
language = 'en_EG'
|
||||||
|
publication_type = 'newsportal'
|
||||||
|
# preprocess_regexps = [(re.compile(r'<!--.*?-->', re.DOTALL), lambda m: '')]
|
||||||
|
#Remove annoying map links (inline-caption class is also used for some image captions! hence regex to match maps.google)
|
||||||
|
preprocess_regexps = [(re.compile(r'<a class="inline-caption" href="http://maps\.google\.com.*?/a>', re.DOTALL), lambda m: '')]
|
||||||
|
conversion_options = {
|
||||||
|
'comments' : description
|
||||||
|
,'tags' : category
|
||||||
|
,'language' : language
|
||||||
|
,'publisher' : publisher
|
||||||
|
,'linearize_tables': False
|
||||||
|
}
|
||||||
|
|
||||||
|
keep_only_tags = [dict(attrs={'class':['article section']})]
|
||||||
|
|
||||||
|
remove_tags = [dict(attrs={'class':['related', 'tags', 'tools', 'attached-content ready',
|
||||||
|
'inline-content story left', 'inline-content map left contracted', 'published',
|
||||||
|
'story-map', 'statepromo', 'topics', ]})]
|
||||||
|
|
||||||
|
remove_attributes = ['width','height']
|
||||||
|
|
||||||
|
feeds = [(u'English News', u'http://www.almasryalyoum.com/en/rss_feed_term/113/rss.xml'),
|
||||||
|
(u'News Features', u'http://www.almasryalyoum.com/en/rss_feed_term/115/rss.xml'),
|
||||||
|
(u'Culture', u'http://www.almasryalyoum.com/en/rss_feed_term/133/rss.xml'),
|
||||||
|
(u'Cinema', u'http://www.almasryalyoum.com/en/rss_feed_term/134/rss.xml')
|
||||||
|
]
|
18
recipes/albert_mohler.recipe
Normal file
18
recipes/albert_mohler.recipe
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = '2012, Peter Grungi <p dot grungi at gmail dot com>'
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class AlbertMohlersBlog(BasicNewsRecipe):
|
||||||
|
title = u'Albert Mohler\'s Blog'
|
||||||
|
__author__ = 'Peter Grungi'
|
||||||
|
language = 'en'
|
||||||
|
oldest_article = 90
|
||||||
|
max_articles_per_feed = 10
|
||||||
|
auto_cleanup = True
|
||||||
|
cover_url = 'http://www.albertmohler.com/wp-content/themes/albert-mohler-v5/img/logo-am-lg.gif'
|
||||||
|
publisher = 'Albert Mohler'
|
||||||
|
language = 'en'
|
||||||
|
author = 'Albert Mohler'
|
||||||
|
|
||||||
|
feeds = [(u'Albert Mohler\'s Blog', u'http://feeds.feedburner.com/AlbertMohlersBlog?format=xml')]
|
@ -10,11 +10,11 @@ class Alternet(BasicNewsRecipe):
|
|||||||
category = 'News, Magazine'
|
category = 'News, Magazine'
|
||||||
description = 'News magazine and online community'
|
description = 'News magazine and online community'
|
||||||
feeds = [
|
feeds = [
|
||||||
(u'Front Page', u'http://feeds.feedblitz.com/alternet'),
|
(u'Front Page', u'http://feeds.feedblitz.com/alternet'),
|
||||||
(u'Breaking News', u'http://feeds.feedblitz.com/alternet_breaking_news'),
|
(u'Breaking News', u'http://feeds.feedblitz.com/alternet_breaking_news'),
|
||||||
(u'Top Ten Campaigns', u'http://feeds.feedblitz.com/alternet_top_10_campaigns'),
|
(u'Top Ten Campaigns', u'http://feeds.feedblitz.com/alternet_top_10_campaigns'),
|
||||||
(u'Special Coverage Areas', u'http://feeds.feedblitz.com/alternet_coverage')
|
(u'Special Coverage Areas', u'http://feeds.feedblitz.com/alternet_coverage')
|
||||||
]
|
]
|
||||||
remove_attributes = ['width', 'align','cellspacing']
|
remove_attributes = ['width', 'align','cellspacing']
|
||||||
remove_javascript = True
|
remove_javascript = True
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
@ -36,3 +36,5 @@ class Alternet(BasicNewsRecipe):
|
|||||||
self.temp_files[-1].write(html)
|
self.temp_files[-1].write(html)
|
||||||
self.temp_files[-1].close()
|
self.temp_files[-1].close()
|
||||||
return self.temp_files[-1].name
|
return self.temp_files[-1].name
|
||||||
|
|
||||||
|
conversion_options = {'linearize_tables': True}
|
||||||
|
@ -18,6 +18,8 @@ class TheAmericanSpectator(BasicNewsRecipe):
|
|||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
language = 'en'
|
language = 'en'
|
||||||
INDEX = 'http://spectator.org'
|
INDEX = 'http://spectator.org'
|
||||||
|
auto_cleanup = True
|
||||||
|
encoding = 'utf-8'
|
||||||
|
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
'comments' : description
|
'comments' : description
|
||||||
@ -26,17 +28,6 @@ class TheAmericanSpectator(BasicNewsRecipe):
|
|||||||
,'publisher' : publisher
|
,'publisher' : publisher
|
||||||
}
|
}
|
||||||
|
|
||||||
keep_only_tags = [
|
|
||||||
dict(name='div', attrs={'class':'post inner'})
|
|
||||||
,dict(name='div', attrs={'class':'author-bio'})
|
|
||||||
]
|
|
||||||
|
|
||||||
remove_tags = [
|
|
||||||
dict(name='object')
|
|
||||||
,dict(name='div', attrs={'class':['col3','post-options','social']})
|
|
||||||
,dict(name='p' , attrs={'class':['letter-editor','meta']})
|
|
||||||
]
|
|
||||||
|
|
||||||
feeds = [ (u'Articles', u'http://feeds.feedburner.com/amspecarticles')]
|
feeds = [ (u'Articles', u'http://feeds.feedburner.com/amspecarticles')]
|
||||||
|
|
||||||
def get_cover_url(self):
|
def get_cover_url(self):
|
||||||
|
13
recipes/android_com_pl.recipe
Normal file
13
recipes/android_com_pl.recipe
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Android_com_pl(BasicNewsRecipe):
|
||||||
|
title = u'Android.com.pl'
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = 'Android.com.pl - biggest polish Android site'
|
||||||
|
category = 'Android, mobile'
|
||||||
|
language = 'pl'
|
||||||
|
use_embedded_content=True
|
||||||
|
cover_url =u'http://upload.wikimedia.org/wikipedia/commons/thumb/d/d7/Android_robot.svg/220px-Android_robot.svg.png'
|
||||||
|
oldest_article = 8
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
feeds = [(u'Android', u'http://android.com.pl/component/content/frontpage/frontpage.feed?type=rss')]
|
@ -11,7 +11,6 @@ class AssociatedPress(BasicNewsRecipe):
|
|||||||
language = 'en'
|
language = 'en'
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
max_articles_per_feed = 15
|
max_articles_per_feed = 15
|
||||||
html2lrf_options = ['--force-page-break-before-tag="chapter"']
|
|
||||||
|
|
||||||
|
|
||||||
preprocess_regexps = [ (re.compile(i[0], re.IGNORECASE | re.DOTALL), i[1]) for i in
|
preprocess_regexps = [ (re.compile(i[0], re.IGNORECASE | re.DOTALL), i[1]) for i in
|
||||||
|
@ -1,26 +1,18 @@
|
|||||||
import re
|
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class AmericanProspect(BasicNewsRecipe):
|
class AmericanProspect(BasicNewsRecipe):
|
||||||
title = u'American Prospect'
|
title = u'American Prospect'
|
||||||
__author__ = u'Michael Heinz'
|
__author__ = u'Michael Heinz, a.peter'
|
||||||
oldest_article = 30
|
version = 2
|
||||||
language = 'en'
|
|
||||||
max_articles_per_feed = 100
|
|
||||||
recursions = 0
|
|
||||||
no_stylesheets = True
|
|
||||||
remove_javascript = True
|
|
||||||
|
|
||||||
preprocess_regexps = [
|
oldest_article = 30
|
||||||
(re.compile(r'<body.*?<div class="pad_10L10R">', re.DOTALL|re.IGNORECASE), lambda match: '<body><div>'),
|
language = 'en'
|
||||||
(re.compile(r'</div>.*</body>', re.DOTALL|re.IGNORECASE), lambda match: '</div></body>'),
|
max_articles_per_feed = 100
|
||||||
(re.compile('\r'),lambda match: ''),
|
recursions = 0
|
||||||
(re.compile(r'<!-- .+? -->', re.DOTALL|re.IGNORECASE), lambda match: ''),
|
no_stylesheets = True
|
||||||
(re.compile(r'<link .+?>', re.DOTALL|re.IGNORECASE), lambda match: ''),
|
remove_javascript = True
|
||||||
(re.compile(r'<script.*?</script>', re.DOTALL|re.IGNORECASE), lambda match: ''),
|
|
||||||
(re.compile(r'<noscript.*?</noscript>', re.DOTALL|re.IGNORECASE), lambda match: ''),
|
keep_only_tags = [dict(name='div', attrs={'class':'pad_10L10R'})]
|
||||||
(re.compile(r'<meta .*?/>', re.DOTALL|re.IGNORECASE), lambda match: ''),
|
remove_tags = [dict(name='form'), dict(name='div', attrs={'class':['bkt_caption','sharebox noprint','badgebox']})]
|
||||||
]
|
|
||||||
|
|
||||||
feeds = [(u'Articles', u'feed://www.prospect.org/articles_rss.jsp')]
|
feeds = [(u'Articles', u'feed://www.prospect.org/articles_rss.jsp')]
|
||||||
|
|
||||||
|
32
recipes/archeowiesci.recipe
Normal file
32
recipes/archeowiesci.recipe
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Archeowiesci(BasicNewsRecipe):
|
||||||
|
title = u'Archeowiesci'
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
category = 'archeology'
|
||||||
|
language = 'pl'
|
||||||
|
cover_url='http://archeowiesci.pl/wp-content/uploads/2011/05/Archeowiesci2-115x115.jpg'
|
||||||
|
oldest_article = 7
|
||||||
|
needs_subscription='optional'
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
auto_cleanup = True
|
||||||
|
remove_tags=[dict(name='span', attrs={'class':['post-ratings', 'post-ratings-loading']})]
|
||||||
|
feeds = [(u'Archeowieści', u'http://archeowiesci.pl/feed/')]
|
||||||
|
|
||||||
|
def parse_feeds (self):
|
||||||
|
feeds = BasicNewsRecipe.parse_feeds(self)
|
||||||
|
for feed in feeds:
|
||||||
|
for article in feed.articles[:]:
|
||||||
|
if self.username is None and 'subskrypcja' in article.title:
|
||||||
|
feed.articles.remove(article)
|
||||||
|
return feeds
|
||||||
|
|
||||||
|
def get_browser(self):
|
||||||
|
br = BasicNewsRecipe.get_browser()
|
||||||
|
if self.username is not None and self.password is not None:
|
||||||
|
br.open('http://archeowiesci.pl/wp-login.php')
|
||||||
|
br.select_form(name='loginform')
|
||||||
|
br['log'] = self.username
|
||||||
|
br['pwd'] = self.password
|
||||||
|
br.submit()
|
||||||
|
return br
|
51
recipes/asianreviewofbooks.recipe
Normal file
51
recipes/asianreviewofbooks.recipe
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
|
||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = '2012, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
|
'''
|
||||||
|
www.asianreviewofbooks.com
|
||||||
|
'''
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class AsianReviewOfBooks(BasicNewsRecipe):
|
||||||
|
title = 'The Asian Review of Books'
|
||||||
|
__author__ = 'Darko Miletic'
|
||||||
|
description = 'In addition to reviewing books about or of relevance to Asia, the Asian Review of Books also features long-format essays by leading Asian writers and thinkers, to providing an unparalleled forum for discussion of key contemporary issues by Asians for Asia and a vehicle of intellectual depth and breadth where leading thinkers can write on the books, arts and ideas of the day. Widely quoted and referenced, with an archive of more than one thousand book reviews, it is the only web resource dedicated to Asian books. And now, with the addition of the new premium content, the Asian Review of Books, is a must-read publication.'
|
||||||
|
publisher = 'The Asian Review of Books'
|
||||||
|
category = 'literature, books, reviews, Asia'
|
||||||
|
oldest_article = 30
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
no_stylesheets = True
|
||||||
|
use_embedded_content = False
|
||||||
|
encoding = 'cp1252'
|
||||||
|
language = 'en_HK'
|
||||||
|
publication_type = 'magazine'
|
||||||
|
masthead_url = 'http://www.asianreviewofbooks.com/new/images/mob_arb.png'
|
||||||
|
extra_css = """
|
||||||
|
body{font-family: serif}
|
||||||
|
.big {font-size: xx-large}
|
||||||
|
.bold {font-weight: bold}
|
||||||
|
.italic {font-style: italic}
|
||||||
|
.small {font-size: small}
|
||||||
|
img {display: block}
|
||||||
|
"""
|
||||||
|
|
||||||
|
conversion_options = {
|
||||||
|
'comment' : description
|
||||||
|
, 'tags' : category
|
||||||
|
, 'publisher' : publisher
|
||||||
|
, 'language' : language
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
remove_tags = [dict(name=['object','script','iframe','embed'])]
|
||||||
|
remove_attributes = ['style', 'onclick']
|
||||||
|
feeds = [(u'Articles' , u'http://www.asianreviewofbooks.com/new/rss.php')]
|
||||||
|
|
||||||
|
def print_version(self, url):
|
||||||
|
root, sep, artid = url.rpartition('?ID=')
|
||||||
|
return root + 'getarticle.php?articleID=' + artid + '&stats=web'
|
||||||
|
|
||||||
|
def preprocess_raw_html(self, raw, url):
|
||||||
|
return '<html><head><title>title</title></head><body>' + raw + '</body></html>'
|
||||||
|
|
22
recipes/astro_news_pl.recipe
Normal file
22
recipes/astro_news_pl.recipe
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
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
|
||||||
|
#extra_css= 'table {text-align: left;}'
|
||||||
|
no_stylesheets=True
|
||||||
|
cover_url='http://news.astronet.pl/img/logo_news.jpg'
|
||||||
|
remove_tags=[dict(name='hr')]
|
||||||
|
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?')
|
||||||
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
for item in soup.findAll(align=True):
|
||||||
|
del item['align']
|
||||||
|
return soup
|
18
recipes/astronomia_pl.recipe
Normal file
18
recipes/astronomia_pl.recipe
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
import re
|
||||||
|
class Astronomia_pl(BasicNewsRecipe):
|
||||||
|
title = u'Astronomia.pl'
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = 'Astronomia - polish astronomy site'
|
||||||
|
masthead_url = 'http://www.astronomia.pl/grafika/logo.gif'
|
||||||
|
cover_url = 'http://www.astronomia.pl/grafika/logo.gif'
|
||||||
|
category = 'astronomy, science'
|
||||||
|
language = 'pl'
|
||||||
|
oldest_article = 8
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
extra_css='#h2 {font-size: 18px;}'
|
||||||
|
no_stylesheets=True
|
||||||
|
preprocess_regexps = [(re.compile(ur'<b>Przeczytaj także:.*?</BODY>', re.DOTALL), lambda match: '</BODY>') ]
|
||||||
|
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/')]
|
@ -10,27 +10,15 @@ class autogids(BasicNewsRecipe):
|
|||||||
publisher = 'AutomatiseringGids'
|
publisher = 'AutomatiseringGids'
|
||||||
category = 'Nieuws, IT, Nederlandstalig'
|
category = 'Nieuws, IT, Nederlandstalig'
|
||||||
simultaneous_downloads = 5
|
simultaneous_downloads = 5
|
||||||
#delay = 1
|
timefmt = ' [%a, %d %B, %Y]'
|
||||||
timefmt = ' [%A, %d %B, %Y]'
|
|
||||||
#timefmt = ''
|
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
remove_javascript = True
|
remove_javascript = True
|
||||||
remove_empty_feeds = True
|
remove_empty_feeds = True
|
||||||
publication_type = 'newspaper'
|
publication_type = 'newspaper'
|
||||||
encoding = 'utf-8'
|
encoding = 'utf-8'
|
||||||
cover_url = 'http://www.automatiseringgids.nl/siteimg/header_logo.gif'
|
cover_url = 'http://www.automatiseringgids.nl/binaries/content/gallery/ag/marketing/ag-avatar-100x50.jpg'
|
||||||
keep_only_tags = [dict(id=['content'])]
|
keep_only_tags = [dict(name='div', attrs={'class':['content']})]
|
||||||
extra_css = '.artikelheader {font-size:0.8em; color: #666;} .artikelintro {font-weight:bold} div.imgArticle {float: right; margin: 0 0em 1em 1em; display: block; position: relative; } \
|
|
||||||
h2 { margin: 0 0 0.5em; min-height: 30px; font-size: 1.5em; letter-spacing: -0.2px; margin: 0 0 0.5em; color: black; font-weight: bold; line-height: 1.2em; padding: 4px 3px 0; }'
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
remove_tags = [dict(name='div', attrs={'id':['loginbox','reactiecollapsible','reactiebox']}),
|
|
||||||
dict(name='div', attrs={'class':['column_a','column_c','bannerfullsize','reactieheader','reactiecollapsible','formulier','artikel_headeroptions']}),
|
|
||||||
dict(name='ul', attrs={'class':['highlightlist']}),
|
|
||||||
dict(name='input', attrs={'type':['button']}),
|
|
||||||
dict(name='div', attrs={'style':['display:block; width:428px; height:30px; float:left;']}),
|
|
||||||
]
|
|
||||||
preprocess_regexps = [
|
preprocess_regexps = [
|
||||||
(re.compile(r'(<h3>Reacties</h3>|<h2>Zie ook:</h2>|<div style=".*</div>|<a[^>]*>|</a>)', re.DOTALL|re.IGNORECASE),
|
(re.compile(r'(<h3>Reacties</h3>|<h2>Zie ook:</h2>|<div style=".*</div>|<a[^>]*>|</a>)', re.DOTALL|re.IGNORECASE),
|
||||||
lambda match: ''),
|
lambda match: ''),
|
||||||
|
52
recipes/b365realitatea.recipe
Normal file
52
recipes/b365realitatea.recipe
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = u'2011, Silviu Cotoar\u0103'
|
||||||
|
'''
|
||||||
|
b365.realitatea.net
|
||||||
|
'''
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class b365Realitatea(BasicNewsRecipe):
|
||||||
|
title = u'b365 Realitatea'
|
||||||
|
__author__ = u'Silviu Cotoar\u0103'
|
||||||
|
publisher = u'b365 Realitatea'
|
||||||
|
description = u'b365 Realitatea'
|
||||||
|
oldest_article = 5
|
||||||
|
language = 'ro'
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
no_stylesheets = True
|
||||||
|
use_embedded_content = False
|
||||||
|
category = 'Ziare,Romania,Bucuresti'
|
||||||
|
encoding = 'utf-8'
|
||||||
|
cover_url = 'http://b365.realitatea.net/wp-content/themes/b/images/b365-logo.png'
|
||||||
|
|
||||||
|
conversion_options = {
|
||||||
|
'comments' : description
|
||||||
|
,'tags' : category
|
||||||
|
,'language' : language
|
||||||
|
,'publisher' : publisher
|
||||||
|
}
|
||||||
|
|
||||||
|
keep_only_tags = [
|
||||||
|
dict(name='div', attrs={'class':'newsArticle'})
|
||||||
|
]
|
||||||
|
|
||||||
|
remove_tags = [
|
||||||
|
dict(name='div', attrs={'class':'date'})
|
||||||
|
, dict(name='dic', attrs={'class':'addthis_toolbox addthis_default_style'})
|
||||||
|
, dict(name='div', attrs={'class':'related_posts'})
|
||||||
|
, dict(name='div', attrs={'id':'RelevantiWidget'})
|
||||||
|
]
|
||||||
|
|
||||||
|
remove_tags_after = [
|
||||||
|
dict(name='div', attrs={'id':'RelevantiWidget'})
|
||||||
|
]
|
||||||
|
feeds = [
|
||||||
|
(u'\u0218tiri', u'http://b365.realitatea.net/rss-full/')
|
||||||
|
]
|
||||||
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
return self.adeify_images(soup)
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2008-2011, Darko Miletic <darko.miletic at gmail.com>'
|
__copyright__ = '2008-2012, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
'''
|
'''
|
||||||
b92.net
|
b92.net
|
||||||
'''
|
'''
|
||||||
@ -20,13 +20,13 @@ class B92(BasicNewsRecipe):
|
|||||||
encoding = 'cp1250'
|
encoding = 'cp1250'
|
||||||
language = 'sr'
|
language = 'sr'
|
||||||
publication_type = 'newsportal'
|
publication_type = 'newsportal'
|
||||||
masthead_url = 'http://www.b92.net/images/fp/logo.gif'
|
masthead_url = 'http://b92s.net/v4/img/new-logo.png'
|
||||||
extra_css = """
|
extra_css = """
|
||||||
@font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)}
|
|
||||||
@font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)}
|
@font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)}
|
||||||
body{font-family: Arial,Helvetica,sans1,sans-serif}
|
body{font-family: Arial,Helvetica,sans1,sans-serif}
|
||||||
.articledescription{font-family: serif1, serif}
|
|
||||||
.article-info2,.article-info1{text-transform: uppercase; font-size: small}
|
.article-info2,.article-info1{text-transform: uppercase; font-size: small}
|
||||||
|
img{display: block}
|
||||||
|
.sms{font-weight: bold}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
@ -37,11 +37,17 @@ class B92(BasicNewsRecipe):
|
|||||||
, 'linearize_tables' : True
|
, 'linearize_tables' : True
|
||||||
}
|
}
|
||||||
|
|
||||||
preprocess_regexps = [(re.compile(u'\u0110'), lambda match: u'\u00D0')]
|
preprocess_regexps = [
|
||||||
|
(re.compile(u'\u0110'), lambda match: u'\u00D0'),
|
||||||
|
(re.compile(r'<html.*?<body>', re.DOTALL|re.IGNORECASE), lambda match: '<html><head><title>something</title></head><body>')
|
||||||
|
]
|
||||||
|
|
||||||
keep_only_tags = [dict(attrs={'class':['article-info1','article-text']})]
|
keep_only_tags = [dict(attrs={'class':['article-info1','article-text']})]
|
||||||
remove_attributes = ['width','height','align','hspace','vspace','border']
|
remove_attributes = ['width','height','align','hspace','vspace','border','lang','xmlns:fb']
|
||||||
remove_tags = [dict(name=['embed','link','base','meta'])]
|
remove_tags = [
|
||||||
|
dict(name=['embed','link','base','meta','iframe'])
|
||||||
|
,dict(attrs={'id':'social'})
|
||||||
|
]
|
||||||
|
|
||||||
feeds = [
|
feeds = [
|
||||||
(u'Vesti' , u'http://www.b92.net/info/rss/vesti.xml' )
|
(u'Vesti' , u'http://www.b92.net/info/rss/vesti.xml' )
|
||||||
|
80
recipes/ba_herald.recipe
Normal file
80
recipes/ba_herald.recipe
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = '2012, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
|
'''
|
||||||
|
www.buenosairesherald.com
|
||||||
|
'''
|
||||||
|
|
||||||
|
from calibre import strftime
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class BuenosAiresHerald(BasicNewsRecipe):
|
||||||
|
title = 'Buenos Aires Herald'
|
||||||
|
__author__ = 'Darko Miletic'
|
||||||
|
description = 'A world of information in a few words'
|
||||||
|
publisher = 'Editorial Nefir S.A.'
|
||||||
|
category = 'news, politics, Argentina'
|
||||||
|
oldest_article = 2
|
||||||
|
max_articles_per_feed = 200
|
||||||
|
no_stylesheets = True
|
||||||
|
encoding = 'utf8'
|
||||||
|
use_embedded_content = False
|
||||||
|
language = 'en_AR'
|
||||||
|
remove_empty_feeds = True
|
||||||
|
publication_type = 'newspaper'
|
||||||
|
masthead_url = 'http://www.buenosairesherald.com/img/logo.jpg'
|
||||||
|
INDEX = 'http://www.buenosairesherald.com'
|
||||||
|
extra_css = """
|
||||||
|
body{font-family: Arial,Helvetica,sans-serif }
|
||||||
|
img{margin-bottom: 0.4em; display:block}
|
||||||
|
h1{font-family: Georgia,serif}
|
||||||
|
#fecha{text-align: right; font-size: small}
|
||||||
|
"""
|
||||||
|
|
||||||
|
conversion_options = {
|
||||||
|
'comment' : description
|
||||||
|
, 'tags' : category
|
||||||
|
, 'publisher' : publisher
|
||||||
|
, 'language' : language
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_tags = [dict(name=['meta','link','iframe'])]
|
||||||
|
keep_only_tags = [dict(attrs={'class':'nota_texto p'})]
|
||||||
|
|
||||||
|
|
||||||
|
feeds = [
|
||||||
|
(u'Argentina' , u'http://www.buenosairesherald.com/argentina' )
|
||||||
|
,(u'World' , u'http://www.buenosairesherald.com/world' )
|
||||||
|
,(u'Latin America' , u'http://www.buenosairesherald.com/latin-america' )
|
||||||
|
,(u'Entertainment' , u'http://www.buenosairesherald.com/entertainment' )
|
||||||
|
,(u'Sports' , u'http://www.buenosairesherald.com/sports' )
|
||||||
|
]
|
||||||
|
|
||||||
|
def print_version(self, url):
|
||||||
|
artidraw = url.rpartition('/article/')[2]
|
||||||
|
artid = artidraw.partition('/')[0]
|
||||||
|
return 'http://www.buenosairesherald.com/articles/print.aspx?ix=' + artid
|
||||||
|
|
||||||
|
|
||||||
|
def parse_index(self):
|
||||||
|
totalfeeds = []
|
||||||
|
lfeeds = self.get_feeds()
|
||||||
|
for feedobj in lfeeds:
|
||||||
|
feedtitle, feedurl = feedobj
|
||||||
|
self.report_progress(0, ('Fetching feed')+' %s...'%(feedtitle if feedtitle else feedurl))
|
||||||
|
articles = []
|
||||||
|
soup = self.index_to_soup(feedurl)
|
||||||
|
for item in soup.findAll('div', attrs={'class':'nota_texto_seccion'}):
|
||||||
|
description = self.tag_to_string(item.h2)
|
||||||
|
atag = item.h2.find('a')
|
||||||
|
if atag and atag.has_key('href'):
|
||||||
|
url = self.INDEX + atag['href']
|
||||||
|
title = description
|
||||||
|
date = strftime(self.timefmt)
|
||||||
|
articles.append({
|
||||||
|
'title' :title
|
||||||
|
,'date' :date
|
||||||
|
,'url' :url
|
||||||
|
,'description':description
|
||||||
|
})
|
||||||
|
totalfeeds.append((feedtitle, articles))
|
||||||
|
return totalfeeds
|
52
recipes/bash_org_pl.recipe
Normal file
52
recipes/bash_org_pl.recipe
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Bash_org_pl(BasicNewsRecipe):
|
||||||
|
title = u'Bash.org.pl'
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = 'Bash.org.pl - funny quotations from IRC discussions'
|
||||||
|
category = 'funny quotations, humour'
|
||||||
|
language = 'pl'
|
||||||
|
cover_url = u'http://userlogos.org/files/logos/dzikiosiol/none_0.png'
|
||||||
|
max_articles_per_feed = 50
|
||||||
|
no_stylesheets= True
|
||||||
|
keep_only_tags= [dict(name='a', attrs={'class':'qid click'}),
|
||||||
|
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
|
@ -1,60 +1,648 @@
|
|||||||
__license__ = 'GPL v3'
|
##
|
||||||
__copyright__ = '2010, Darko Miletic <darko.miletic at gmail.com>'
|
## Title: BBC News, Sport, and Blog Calibre Recipe
|
||||||
|
## Contact: mattst - jmstanfield@gmail.com
|
||||||
|
##
|
||||||
|
## License: GNU General Public License v3 - http://www.gnu.org/copyleft/gpl.html
|
||||||
|
## Copyright: mattst - jmstanfield@gmail.com
|
||||||
|
##
|
||||||
|
## Written: November 2011
|
||||||
|
## Last Edited: 2011-11-19
|
||||||
|
##
|
||||||
|
|
||||||
|
__license__ = 'GNU General Public License v3 - http://www.gnu.org/copyleft/gpl.html'
|
||||||
|
__copyright__ = 'mattst - jmstanfield@gmail.com'
|
||||||
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
news.bbc.co.uk
|
BBC News, Sport, and Blog Calibre Recipe
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
# Import the regular expressions module.
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
# Import the BasicNewsRecipe class which this class extends.
|
||||||
from calibre.web.feeds.recipes import BasicNewsRecipe
|
from calibre.web.feeds.recipes import BasicNewsRecipe
|
||||||
|
|
||||||
class BBC(BasicNewsRecipe):
|
class BBCNewsSportBlog(BasicNewsRecipe):
|
||||||
title = 'BBC News'
|
|
||||||
__author__ = 'Darko Miletic, Starson17'
|
#
|
||||||
description = 'News from UK. '
|
# **** IMPORTANT USERS READ ME ****
|
||||||
oldest_article = 2
|
#
|
||||||
max_articles_per_feed = 100
|
# First select the feeds you want then scroll down below the feeds list
|
||||||
no_stylesheets = True
|
# and select the values you want for the other user preferences, like
|
||||||
#delay = 1
|
# oldest_article and such like.
|
||||||
use_embedded_content = False
|
#
|
||||||
encoding = 'utf8'
|
#
|
||||||
publisher = 'BBC'
|
# Select the BBC rss feeds which you want in your ebook.
|
||||||
category = 'news, UK, world'
|
# Selected feed have NO '#' at their start, de-selected feeds begin with a '#'.
|
||||||
language = 'en_GB'
|
#
|
||||||
publication_type = 'newsportal'
|
# Eg. ("News Home", "http://feeds.bbci.co.uk/... - include feed.
|
||||||
extra_css = ' body{ font-family: Verdana,Helvetica,Arial,sans-serif } .introduction{font-weight: bold} .story-feature{display: block; padding: 0; border: 1px solid; width: 40%; font-size: small} .story-feature h2{text-align: center; text-transform: uppercase} '
|
# Eg. #("News Home", "http://feeds.bbci.co.uk/... - do not include feed.
|
||||||
preprocess_regexps = [(re.compile(r'<!--.*?-->', re.DOTALL), lambda m: '')]
|
#
|
||||||
conversion_options = {
|
# There are 68 feeds below which constitute the bulk of the available rss
|
||||||
'comments' : description
|
# feeds on the BBC web site. These include 5 blogs by editors and
|
||||||
,'tags' : category
|
# correspondants, 16 sports feeds, 15 'sub' regional feeds (Eg. North West
|
||||||
,'language' : language
|
# Wales, Scotland Business), and 7 Welsh language feeds.
|
||||||
,'publisher' : publisher
|
#
|
||||||
,'linearize_tables': True
|
# Some of the feeds are low volume (Eg. blogs), or very low volume (Eg. Click)
|
||||||
|
# so if "oldest_article = 1.5" (only articles published in the last 36 hours)
|
||||||
|
# you may get some 'empty feeds' which will not then be included in the ebook.
|
||||||
|
#
|
||||||
|
# The 15 feeds currently selected below are simply my default ones.
|
||||||
|
#
|
||||||
|
# Note: With all 68 feeds selected, oldest_article set to 2,
|
||||||
|
# max_articles_per_feed set to 100, and simultaneous_downloads set to 10,
|
||||||
|
# the ebook creation took 29 minutes on my speedy 100 mbps net connection,
|
||||||
|
# fairly high-end desktop PC running Linux (Ubuntu Lucid-Lynx).
|
||||||
|
# More realistically with 15 feeds selected, oldest_article set to 1.5,
|
||||||
|
# max_articles_per_feed set to 100, and simultaneous_downloads set to 20,
|
||||||
|
# it took 6 minutes. If that's too slow increase 'simultaneous_downloads'.
|
||||||
|
#
|
||||||
|
# Select / de-select the feeds you want in your ebook.
|
||||||
|
#
|
||||||
|
feeds = [
|
||||||
|
("News Home", "http://feeds.bbci.co.uk/news/rss.xml"),
|
||||||
|
("UK", "http://feeds.bbci.co.uk/news/uk/rss.xml"),
|
||||||
|
("World", "http://feeds.bbci.co.uk/news/world/rss.xml"),
|
||||||
|
#("England", "http://feeds.bbci.co.uk/news/england/rss.xml"),
|
||||||
|
#("Scotland", "http://feeds.bbci.co.uk/news/scotland/rss.xml"),
|
||||||
|
#("Wales", "http://feeds.bbci.co.uk/news/wales/rss.xml"),
|
||||||
|
#("N. Ireland", "http://feeds.bbci.co.uk/news/northern_ireland/rss.xml"),
|
||||||
|
#("Africa", "http://feeds.bbci.co.uk/news/world/africa/rss.xml"),
|
||||||
|
#("Asia", "http://feeds.bbci.co.uk/news/world/asia/rss.xml"),
|
||||||
|
#("Europe", "http://feeds.bbci.co.uk/news/world/europe/rss.xml"),
|
||||||
|
#("Latin America", "http://feeds.bbci.co.uk/news/world/latin_america/rss.xml"),
|
||||||
|
#("Middle East", "http://feeds.bbci.co.uk/news/world/middle_east/rss.xml"),
|
||||||
|
("US & Canada", "http://feeds.bbci.co.uk/news/world/us_and_canada/rss.xml"),
|
||||||
|
("Politics", "http://feeds.bbci.co.uk/news/politics/rss.xml"),
|
||||||
|
("Science/Environment", "http://feeds.bbci.co.uk/news/science_and_environment/rss.xml"),
|
||||||
|
("Technology", "http://feeds.bbci.co.uk/news/technology/rss.xml"),
|
||||||
|
("Magazine", "http://feeds.bbci.co.uk/news/magazine/rss.xml"),
|
||||||
|
("Entertainment/Arts", "http://feeds.bbci.co.uk/news/entertainment_and_arts/rss.xml"),
|
||||||
|
#("Health", "http://feeds.bbci.co.uk/news/health/rss.xml"),
|
||||||
|
#("Education/Family", "http://feeds.bbci.co.uk/news/education/rss.xml"),
|
||||||
|
("Business", "http://feeds.bbci.co.uk/news/business/rss.xml"),
|
||||||
|
("Special Reports", "http://feeds.bbci.co.uk/news/special_reports/rss.xml"),
|
||||||
|
("Also in the News", "http://feeds.bbci.co.uk/news/also_in_the_news/rss.xml"),
|
||||||
|
#("Newsbeat", "http://www.bbc.co.uk/newsbeat/rss.xml"),
|
||||||
|
#("Click", "http://newsrss.bbc.co.uk/rss/newsonline_uk_edition/programmes/click_online/rss.xml"),
|
||||||
|
("Blog: Nick Robinson (Political Editor)", "http://feeds.bbci.co.uk/news/correspondents/nickrobinson/rss.sxml"),
|
||||||
|
#("Blog: Mark D'Arcy (Parliamentary Correspondent)", "http://feeds.bbci.co.uk/news/correspondents/markdarcy/rss.sxml"),
|
||||||
|
#("Blog: Robert Peston (Business Editor)", "http://feeds.bbci.co.uk/news/correspondents/robertpeston/rss.sxml"),
|
||||||
|
#("Blog: Stephanie Flanders (Economics Editor)", "http://feeds.bbci.co.uk/news/correspondents/stephanieflanders/rss.sxml"),
|
||||||
|
("Blog: Rory Cellan-Jones (Technology correspondent)", "http://feeds.bbci.co.uk/news/correspondents/rorycellanjones/rss.sxml"),
|
||||||
|
("Sport Front Page", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/front_page/rss.xml"),
|
||||||
|
#("Football", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/football/rss.xml"),
|
||||||
|
#("Cricket", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/cricket/rss.xml"),
|
||||||
|
#("Rugby Union", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/rugby_union/rss.xml"),
|
||||||
|
#("Rugby League", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/rugby_league/rss.xml"),
|
||||||
|
#("Tennis", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/tennis/rss.xml"),
|
||||||
|
#("Golf", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/golf/rss.xml"),
|
||||||
|
#("Motorsport", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/motorsport/rss.xml"),
|
||||||
|
#("Boxing", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/boxing/rss.xml"),
|
||||||
|
#("Athletics", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/athletics/rss.xml"),
|
||||||
|
#("Snooker", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/other_sports/snooker/rss.xml"),
|
||||||
|
#("Horse Racing", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/other_sports/horse_racing/rss.xml"),
|
||||||
|
#("Cycling", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/other_sports/cycling/rss.xml"),
|
||||||
|
#("Disability Sport", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/other_sports/disability_sport/rss.xml"),
|
||||||
|
#("Other Sport", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/other_sports/rss.xml"),
|
||||||
|
#("Olympics 2012", "http://newsrss.bbc.co.uk/rss/sportonline_uk_edition/other_sports/olympics_2012/rss.xml"),
|
||||||
|
#("N. Ireland Politics", "http://feeds.bbci.co.uk/news/northern_ireland/northern_ireland_politics/rss.xml"),
|
||||||
|
#("Scotland Politics", "http://feeds.bbci.co.uk/news/scotland/scotland_politics/rss.xml"),
|
||||||
|
#("Scotland Business", "http://feeds.bbci.co.uk/news/scotland/scotland_business/rss.xml"),
|
||||||
|
#("E. Scotland, Edinburgh & Fife", "http://feeds.bbci.co.uk/news/scotland/edinburgh_east_and_fife/rss.xml"),
|
||||||
|
#("W. Scotland & Glasgow", "http://feeds.bbci.co.uk/news/scotland/glasgow_and_west/rss.xml"),
|
||||||
|
#("Highlands & Islands", "http://feeds.bbci.co.uk/news/scotland/highlands_and_islands/rss.xml"),
|
||||||
|
#("NE. Scotland, Orkney & Shetland", "http://feeds.bbci.co.uk/news/scotland/north_east_orkney_and_shetland/rss.xml"),
|
||||||
|
#("South Scotland", "http://feeds.bbci.co.uk/news/scotland/south_scotland/rss.xml"),
|
||||||
|
#("Central Scotland & Tayside", "http://feeds.bbci.co.uk/news/scotland/tayside_and_central/rss.xml"),
|
||||||
|
#("Wales Politics", "http://feeds.bbci.co.uk/news/wales/wales_politics/rss.xml"),
|
||||||
|
#("NW. Wales", "http://feeds.bbci.co.uk/news/wales/north_west_wales/rss.xml"),
|
||||||
|
#("NE. Wales", "http://feeds.bbci.co.uk/news/wales/north_east_wales/rss.xml"),
|
||||||
|
#("Mid. Wales", "http://feeds.bbci.co.uk/news/wales/mid_wales/rss.xml"),
|
||||||
|
#("SW. Wales", "http://feeds.bbci.co.uk/news/wales/south_west_wales/rss.xml"),
|
||||||
|
#("SE. Wales", "http://feeds.bbci.co.uk/news/wales/south_east_wales/rss.xml"),
|
||||||
|
#("Newyddion - News in Welsh", "http://feeds.bbci.co.uk/newyddion/rss.xml"),
|
||||||
|
#("Gwleidyddiaeth", "http://feeds.bbci.co.uk/newyddion/gwleidyddiaeth/rss.xml"),
|
||||||
|
#("Gogledd-Ddwyrain", "http://feeds.bbci.co.uk/newyddion/gogledd-ddwyrain/rss.xml"),
|
||||||
|
#("Gogledd-Orllewin", "http://feeds.bbci.co.uk/newyddion/gogledd-orllewin/rss.xml"),
|
||||||
|
#("Canolbarth", "http://feeds.bbci.co.uk/newyddion/canolbarth/rss.xml"),
|
||||||
|
#("De-Ddwyrain", "http://feeds.bbci.co.uk/newyddion/de-ddwyrain/rss.xml"),
|
||||||
|
#("De-Orllewin", "http://feeds.bbci.co.uk/newyddion/de-orllewin/rss.xml"),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# **** SELECT YOUR USER PREFERENCES ****
|
||||||
|
|
||||||
|
# Title to use for the ebook.
|
||||||
|
#
|
||||||
|
title = 'BBC News'
|
||||||
|
|
||||||
|
# A brief description for the ebook.
|
||||||
|
#
|
||||||
|
description = u'BBC web site ebook created using rss feeds.'
|
||||||
|
|
||||||
|
# The max number of articles which may be downloaded from each feed.
|
||||||
|
# I've never seen more than about 70 articles in a single feed in the
|
||||||
|
# BBC feeds.
|
||||||
|
#
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
|
||||||
|
# The max age of articles which may be downloaded from each feed. This is
|
||||||
|
# specified in days - note fractions of days are allowed, Eg. 2.5 (2 and a
|
||||||
|
# half days). My default of 1.5 days is the last 36 hours, the point at
|
||||||
|
# which I've decided 'news' becomes 'old news', but be warned this is not
|
||||||
|
# so good for the blogs, technology, magazine, etc., and sports feeds.
|
||||||
|
# You may wish to extend this to 2-5 but watch out ebook creation time will
|
||||||
|
# increase as well. Setting this to 30 will get everything (AFAICT) as long
|
||||||
|
# as max_articles_per_feed remains set high (except for 'Click' which is
|
||||||
|
# v. low volume and its currently oldest article is 4th Feb 2011).
|
||||||
|
#
|
||||||
|
oldest_article = 1.5
|
||||||
|
|
||||||
|
# Number of simultaneous downloads. 20 is consistantly working fine on the
|
||||||
|
# BBC News feeds with no problems. Speeds things up from the defualt of 5.
|
||||||
|
# If you have a lot of feeds and/or have increased oldest_article above 2
|
||||||
|
# then you may wish to try increasing simultaneous_downloads to 25-30,
|
||||||
|
# Or, of course, if you are in a hurry. [I've not tried beyond 20.]
|
||||||
|
#
|
||||||
|
simultaneous_downloads = 20
|
||||||
|
|
||||||
|
# Timeout for fetching files from the server in seconds. The default of
|
||||||
|
# 120 seconds, seems somewhat excessive.
|
||||||
|
#
|
||||||
|
timeout = 30
|
||||||
|
|
||||||
|
# The format string for the date shown on the ebook's first page.
|
||||||
|
# List of all values: http://docs.python.org/library/time.html
|
||||||
|
# Default in news.py has a leading space so that's mirrored here.
|
||||||
|
# As with 'feeds' select/de-select by adding/removing the initial '#',
|
||||||
|
# only one timefmt should be selected, here's a few to choose from.
|
||||||
|
#
|
||||||
|
timefmt = ' [%a, %d %b %Y]' # [Fri, 14 Nov 2011] (Calibre default)
|
||||||
|
#timefmt = ' [%a, %d %b %Y %H:%M]' # [Fri, 14 Nov 2011 18:30]
|
||||||
|
#timefmt = ' [%a, %d %b %Y %I:%M %p]' # [Fri, 14 Nov 2011 06:30 PM]
|
||||||
|
#timefmt = ' [%d %b %Y]' # [14 Nov 2011]
|
||||||
|
#timefmt = ' [%d %b %Y %H:%M]' # [14 Nov 2011 18.30]
|
||||||
|
#timefmt = ' [%Y-%m-%d]' # [2011-11-14]
|
||||||
|
#timefmt = ' [%Y-%m-%d-%H-%M]' # [2011-11-14-18-30]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# **** IMPORTANT ****
|
||||||
|
#
|
||||||
|
# DO NOT EDIT BELOW HERE UNLESS YOU KNOW WHAT YOU ARE DOING.
|
||||||
|
#
|
||||||
|
# DO NOT EDIT BELOW HERE UNLESS YOU KNOW WHAT YOU ARE DOING.
|
||||||
|
#
|
||||||
|
# I MEAN IT, YES I DO, ABSOLUTELY, AT YOU OWN RISK. :)
|
||||||
|
#
|
||||||
|
# **** IMPORTANT ****
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Author of this recipe.
|
||||||
|
__author__ = 'mattst'
|
||||||
|
|
||||||
|
# Specify English as the language of the RSS feeds (ISO-639 code).
|
||||||
|
language = 'en_GB'
|
||||||
|
|
||||||
|
# Set tags.
|
||||||
|
tags = 'news, sport, blog'
|
||||||
|
|
||||||
|
# Set publisher and publication type.
|
||||||
|
publisher = 'BBC'
|
||||||
|
publication_type = 'newspaper'
|
||||||
|
|
||||||
|
# Disable stylesheets from site.
|
||||||
|
no_stylesheets = True
|
||||||
|
|
||||||
|
# Specifies an override encoding for sites that have an incorrect charset
|
||||||
|
# specified. Default of 'None' says to auto-detect. Some other BBC recipes
|
||||||
|
# use 'utf8', which works fine (so use that if necessary) but auto-detecting
|
||||||
|
# with None is working fine, so stick with that for robustness.
|
||||||
|
encoding = None
|
||||||
|
|
||||||
|
# Sets whether a feed has full articles embedded in it. The BBC feeds do not.
|
||||||
|
use_embedded_content = False
|
||||||
|
|
||||||
|
# Removes empty feeds - why keep them!?
|
||||||
|
remove_empty_feeds = True
|
||||||
|
|
||||||
|
# Create a custom title which fits nicely in the Kindle title list.
|
||||||
|
# Requires "import time" above class declaration, and replacing
|
||||||
|
# title with custom_title in conversion_options (right column only).
|
||||||
|
# Example of string below: "BBC News - 14 Nov 2011"
|
||||||
|
#
|
||||||
|
# custom_title = "BBC News - " + time.strftime('%d %b %Y')
|
||||||
|
|
||||||
|
'''
|
||||||
|
# Conversion options for advanced users, but don't forget to comment out the
|
||||||
|
# current conversion_options below. Avoid setting 'linearize_tables' as that
|
||||||
|
# plays havoc with the 'old style' table based pages.
|
||||||
|
#
|
||||||
|
conversion_options = { 'title' : title,
|
||||||
|
'comments' : description,
|
||||||
|
'tags' : tags,
|
||||||
|
'language' : language,
|
||||||
|
'publisher' : publisher,
|
||||||
|
'authors' : publisher,
|
||||||
|
'smarten_punctuation' : True
|
||||||
}
|
}
|
||||||
|
'''
|
||||||
|
|
||||||
keep_only_tags = [
|
conversion_options = { 'smarten_punctuation' : True }
|
||||||
dict(name='div', attrs={'class':['layout-block-a layout-block']})
|
|
||||||
,dict(attrs={'class':['story-body','storybody']})
|
|
||||||
]
|
|
||||||
|
|
||||||
remove_tags = [
|
# Specify extra CSS - overrides ALL other CSS (IE. Added last).
|
||||||
dict(name='div', attrs={'class':['story-feature related narrow', 'share-help', 'embedded-hyper', \
|
extra_css = 'body { font-family: verdana, helvetica, sans-serif; } \
|
||||||
'story-feature wide ', 'story-feature narrow']})
|
.introduction, .first { font-weight: bold; } \
|
||||||
]
|
.cross-head { font-weight: bold; font-size: 125%; } \
|
||||||
|
.cap, .caption { display: block; font-size: 80%; font-style: italic; } \
|
||||||
|
.cap, .caption, .caption img, .caption span { display: block; text-align: center; margin: 5px auto; } \
|
||||||
|
.byl, .byd, .byline img, .byline-name, .byline-title, .author-name, .author-position, \
|
||||||
|
.correspondent-portrait img, .byline-lead-in, .name, .bbc-role { display: block; \
|
||||||
|
text-align: center; font-size: 80%; font-style: italic; margin: 1px auto; } \
|
||||||
|
.story-date, .published { font-size: 80%; } \
|
||||||
|
table { width: 100%; } \
|
||||||
|
td img { display: block; margin: 5px auto; } \
|
||||||
|
ul { padding-top: 10px; } \
|
||||||
|
ol { padding-top: 10px; } \
|
||||||
|
li { padding-top: 5px; padding-bottom: 5px; } \
|
||||||
|
h1 { text-align: center; font-size: 175%; font-weight: bold; } \
|
||||||
|
h2 { text-align: center; font-size: 150%; font-weight: bold; } \
|
||||||
|
h3 { text-align: center; font-size: 125%; font-weight: bold; } \
|
||||||
|
h4, h5, h6 { text-align: center; font-size: 100%; font-weight: bold; }'
|
||||||
|
|
||||||
remove_attributes = ['width','height']
|
# Remove various tag attributes to improve the look of the ebook pages.
|
||||||
|
remove_attributes = [ 'border', 'cellspacing', 'align', 'cellpadding', 'colspan',
|
||||||
|
'valign', 'vspace', 'hspace', 'alt', 'width', 'height' ]
|
||||||
|
|
||||||
feeds = [
|
# Remove the (admittedly rarely used) line breaks, "<br />", which sometimes
|
||||||
('News Front Page', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/front_page/rss.xml'),
|
# cause a section of the ebook to start in an unsightly fashion or, more
|
||||||
('Science/Nature', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/science/nature/rss.xml'),
|
# frequently, a "<br />" will muck up the formatting of a correspondant's byline.
|
||||||
('Technology', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/technology/rss.xml'),
|
# "<br />" and "<br clear/>" are far more frequently used on the table formatted
|
||||||
('Entertainment', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/entertainment/rss.xml'),
|
# style of pages, and really spoil the look of the ebook pages.
|
||||||
('Magazine', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/uk_news/magazine/rss.xml'),
|
preprocess_regexps = [(re.compile(r'<br[ ]*/>', re.IGNORECASE), lambda m: ''),
|
||||||
('Business', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/business/rss.xml'),
|
(re.compile(r'<br[ ]*clear.*/>', re.IGNORECASE), lambda m: '')]
|
||||||
('Health', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/health/rss.xml'),
|
|
||||||
('Americas', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/americas/rss.xml'),
|
|
||||||
('Europe', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/europe/rss.xml'),
|
|
||||||
('South Asia', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/south_asia/rss.xml'),
|
|
||||||
('UK', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/uk_news/rss.xml'),
|
|
||||||
('Asia-Pacific', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/asia-pacific/rss.xml'),
|
|
||||||
('Africa', 'http://newsrss.bbc.co.uk/rss/newsonline_world_edition/africa/rss.xml'),
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
|
# Create regular expressions for tag keeping and removal to make the matches more
|
||||||
|
# robust against minor changes and errors in the HTML, Eg. double spaces, leading
|
||||||
|
# and trailing spaces, missing hyphens, and such like.
|
||||||
|
# Python regular expression ('re' class) page: http://docs.python.org/library/re.html
|
||||||
|
|
||||||
|
# ***************************************
|
||||||
|
# Regular expressions for keep_only_tags:
|
||||||
|
# ***************************************
|
||||||
|
|
||||||
|
# The BBC News HTML pages use variants of 'storybody' to denote the section of a HTML
|
||||||
|
# page which contains the main text of the article. Match storybody variants: 'storybody',
|
||||||
|
# 'story-body', 'story body','storybody ', etc.
|
||||||
|
storybody_reg_exp = '^.*story[_ -]*body.*$'
|
||||||
|
|
||||||
|
# The BBC sport and 'newsbeat' (features) HTML pages use 'blq_content' to hold the title
|
||||||
|
# and published date. This is one level above the usual news pages which have the title
|
||||||
|
# and date within 'story-body'. This is annoying since 'blq_content' must also be kept,
|
||||||
|
# resulting in a lot of extra things to be removed by remove_tags.
|
||||||
|
blq_content_reg_exp = '^.*blq[_ -]*content.*$'
|
||||||
|
|
||||||
|
# The BBC has an alternative page design structure, which I suspect is an out-of-date
|
||||||
|
# design but which is still used in some articles, Eg. 'Click' (technology), 'FastTrack'
|
||||||
|
# (travel), and in some sport pages. These alternative pages are table based (which is
|
||||||
|
# why I think they are an out-of-date design) and account for -I'm guesstimaking- less
|
||||||
|
# than 1% of all articles. They use a table class 'storycontent' to hold the article
|
||||||
|
# and like blq_content (above) have required lots of extra removal by remove_tags.
|
||||||
|
story_content_reg_exp = '^.*story[_ -]*content.*$'
|
||||||
|
|
||||||
|
# Keep the sections of the HTML which match the list below. The HTML page created by
|
||||||
|
# Calibre will fill <body> with those sections which are matched. Note that the
|
||||||
|
# blq_content_reg_exp must be listed before storybody_reg_exp in keep_only_tags due to
|
||||||
|
# it being the parent of storybody_reg_exp, that is to say the div class/id 'story-body'
|
||||||
|
# will be inside div class/id 'blq_content' in the HTML (if 'blq_content' is there at
|
||||||
|
# all). If they are the other way around in keep_only_tags then blq_content_reg_exp
|
||||||
|
# will end up being discarded.
|
||||||
|
keep_only_tags = [ dict(name='table', attrs={'class':re.compile(story_content_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(blq_content_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'id':re.compile(blq_content_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(storybody_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'id':re.compile(storybody_reg_exp, re.IGNORECASE)}) ]
|
||||||
|
|
||||||
|
# ************************************
|
||||||
|
# Regular expressions for remove_tags:
|
||||||
|
# ************************************
|
||||||
|
|
||||||
|
# Regular expression to remove share-help and variant tags. The share-help class
|
||||||
|
# is used by the site for a variety of 'sharing' type links, Eg. Facebook, delicious,
|
||||||
|
# twitter, email. Removed to avoid page clutter.
|
||||||
|
share_help_reg_exp = '^.*share[_ -]*help.*$'
|
||||||
|
|
||||||
|
# Regular expression to remove embedded-hyper and variant tags. This class is used to
|
||||||
|
# display links to other BBC News articles on the same/similar subject.
|
||||||
|
embedded_hyper_reg_exp = '^.*embed*ed[_ -]*hyper.*$'
|
||||||
|
|
||||||
|
# Regular expression to remove hypertabs and variant tags. This class is used to
|
||||||
|
# display a tab bar at the top of an article which allows the user to switch to
|
||||||
|
# an article (viewed on the same page) providing further info., 'in depth' analysis,
|
||||||
|
# an editorial, a correspondant's blog entry, and such like. The ability to handle
|
||||||
|
# a tab bar of this nature is currently beyond the scope of this recipe and
|
||||||
|
# possibly of Calibre itself (not sure about that - TO DO - check!).
|
||||||
|
hypertabs_reg_exp = '^.*hyper[_ -]*tabs.*$'
|
||||||
|
|
||||||
|
# Regular expression to remove story-feature and variant tags. Eg. 'story-feature',
|
||||||
|
# 'story-feature related narrow', 'story-feature wide', 'story-feature narrow'.
|
||||||
|
# This class is used to add additional info. boxes, or small lists, outside of
|
||||||
|
# the main story. TO DO: Work out a way to incorporate these neatly.
|
||||||
|
story_feature_reg_exp = '^.*story[_ -]*feature.*$'
|
||||||
|
|
||||||
|
# Regular expression to remove video and variant tags, Eg. 'videoInStoryB',
|
||||||
|
# 'videoInStoryC'. This class is used to embed video.
|
||||||
|
video_reg_exp = '^.*video.*$'
|
||||||
|
|
||||||
|
# Regular expression to remove audio and variant tags, Eg. 'audioInStoryD'.
|
||||||
|
# This class is used to embed audio.
|
||||||
|
audio_reg_exp = '^.*audio.*$'
|
||||||
|
|
||||||
|
# Regular expression to remove pictureGallery and variant tags, Eg. 'pictureGallery'.
|
||||||
|
# This class is used to embed a photo slideshow. See also 'slideshow' below.
|
||||||
|
picture_gallery_reg_exp = '^.*picture.*$'
|
||||||
|
|
||||||
|
# Regular expression to remove slideshow and variant tags, Eg. 'dslideshow-enclosure'.
|
||||||
|
# This class is used to embed a slideshow (not necessarily photo) but both
|
||||||
|
# 'slideshow' and 'pictureGallery' are used for slideshows.
|
||||||
|
slideshow_reg_exp = '^.*slide[_ -]*show.*$'
|
||||||
|
|
||||||
|
# Regular expression to remove social-links and variant tags. This class is used to
|
||||||
|
# display links to a BBC bloggers main page, used in various columnist's blogs
|
||||||
|
# (Eg. Nick Robinson, Robert Preston).
|
||||||
|
social_links_reg_exp = '^.*social[_ -]*links.*$'
|
||||||
|
|
||||||
|
# Regular expression to remove quote and (multi) variant tags, Eg. 'quote',
|
||||||
|
# 'endquote', 'quote-credit', 'quote-credit-title', etc. These are usually
|
||||||
|
# removed by 'story-feature' removal (as they are usually within them), but
|
||||||
|
# not always. The quotation removed is always (AFAICT) in the article text
|
||||||
|
# as well but a 2nd copy is placed in a quote tag to draw attention to it.
|
||||||
|
# The quote class tags may or may not appear in div's.
|
||||||
|
quote_reg_exp = '^.*quote.*$'
|
||||||
|
|
||||||
|
# Regular expression to remove hidden and variant tags, Eg. 'hidden'.
|
||||||
|
# The purpose of these is unclear, they seem to be an internal link to a
|
||||||
|
# section within the article, but the text of the link (Eg. 'Continue reading
|
||||||
|
# the main story') never seems to be displayed anyway. Removed to avoid clutter.
|
||||||
|
# The hidden class tags may or may not appear in div's.
|
||||||
|
hidden_reg_exp = '^.*hidden.*$'
|
||||||
|
|
||||||
|
# Regular expression to remove comment and variant tags, Eg. 'comment-introduction'.
|
||||||
|
# Used on the site to display text about registered users entering comments.
|
||||||
|
comment_reg_exp = '^.*comment.*$'
|
||||||
|
|
||||||
|
# Regular expression to remove form and variant tags, Eg. 'comment-form'.
|
||||||
|
# Used on the site to allow registered BBC users to fill in forms, typically
|
||||||
|
# for entering comments about an article.
|
||||||
|
form_reg_exp = '^.*form.*$'
|
||||||
|
|
||||||
|
# Extra things to remove due to the addition of 'blq_content' in keep_only_tags.
|
||||||
|
|
||||||
|
#<div class="story-actions"> Used on sports pages for 'email' and 'print'.
|
||||||
|
story_actions_reg_exp = '^.*story[_ -]*actions.*$'
|
||||||
|
|
||||||
|
#<div class="bookmark-list"> Used on sports pages instead of 'share-help' (for
|
||||||
|
# social networking links).
|
||||||
|
bookmark_list_reg_exp = '^.*bookmark[_ -]*list.*$'
|
||||||
|
|
||||||
|
#<div id="secondary-content" class="content-group">
|
||||||
|
# NOTE: Don't remove class="content-group" that is needed.
|
||||||
|
# Used on sports pages to link to 'similar stories'.
|
||||||
|
secondary_content_reg_exp = '^.*secondary[_ -]*content.*$'
|
||||||
|
|
||||||
|
#<div id="featured-content" class="content-group">
|
||||||
|
# NOTE: Don't remove class="content-group" that is needed.
|
||||||
|
# Used on sports pages to link to pages like 'tables', 'fixtures', etc.
|
||||||
|
featured_content_reg_exp = '^.*featured[_ -]*content.*$'
|
||||||
|
|
||||||
|
#<div id="navigation">
|
||||||
|
# Used on sports pages to link to pages like 'tables', 'fixtures', etc.
|
||||||
|
# Used sometimes instead of "featured-content" above.
|
||||||
|
navigation_reg_exp = '^.*navigation.*$'
|
||||||
|
|
||||||
|
#<a class="skip" href="#blq-container-inner">Skip to top</a>
|
||||||
|
# Used on sports pages to link to the top of the page.
|
||||||
|
skip_reg_exp = '^.*skip.*$'
|
||||||
|
|
||||||
|
# Extra things to remove due to the addition of 'storycontent' in keep_only_tags,
|
||||||
|
# which are the alterative table design based pages. The purpose of some of these
|
||||||
|
# is not entirely clear from the pages (which are a total mess!).
|
||||||
|
|
||||||
|
# Remove mapping based tags, Eg. <map id="world_map">
|
||||||
|
# The dynamic maps don't seem to work during ebook creation. TO DO: Investigate.
|
||||||
|
map_reg_exp = '^.*map.*$'
|
||||||
|
|
||||||
|
# Remove social bookmarking variation, called 'socialBookMarks'.
|
||||||
|
social_bookmarks_reg_exp = '^.*social[_ -]*bookmarks.*$'
|
||||||
|
|
||||||
|
# Remove page navigation tools, like 'search', 'email', 'print', called 'blq-mast'.
|
||||||
|
blq_mast_reg_exp = '^.*blq[_ -]*mast.*$'
|
||||||
|
|
||||||
|
# Remove 'sharesb', I think this is a generic 'sharing' class. It seems to appear
|
||||||
|
# alongside 'socialBookMarks' whenever that appears. I am removing it as well
|
||||||
|
# under the assumption that it can appear alone as well.
|
||||||
|
sharesb_reg_exp = '^.*sharesb.*$'
|
||||||
|
|
||||||
|
# Remove class 'o'. The worst named user created css class of all time. The creator
|
||||||
|
# should immediately be fired. I've seen it used to hold nothing at all but with
|
||||||
|
# 20 or so empty lines in it. Also to hold a single link to another article.
|
||||||
|
# Whatever it was designed to do it is not wanted by this recipe. Exact match only.
|
||||||
|
o_reg_exp = '^o$'
|
||||||
|
|
||||||
|
# Remove 'promotopbg' and 'promobottombg', link lists. Have decided to
|
||||||
|
# use two reg expressions to make removing this (and variants) robust.
|
||||||
|
promo_top_reg_exp = '^.*promotopbg.*$'
|
||||||
|
promo_bottom_reg_exp = '^.*promobottombg.*$'
|
||||||
|
|
||||||
|
# Remove 'nlp', provides heading for link lists. Requires an exact match due to
|
||||||
|
# risk of matching those letters in something needed, unless I see a variation
|
||||||
|
# of 'nlp' used at a later date.
|
||||||
|
nlp_reg_exp = '^nlp$'
|
||||||
|
|
||||||
|
# Remove 'mva', provides embedded floating content of various types. Variant 'mvb'
|
||||||
|
# has also now been seen. Requires an exact match of 'mva' or 'mvb' due to risk of
|
||||||
|
# matching those letters in something needed.
|
||||||
|
mva_or_mvb_reg_exp = '^mv[ab]$'
|
||||||
|
|
||||||
|
# Remove 'mvtb', seems to be page navigation tools, like 'blq-mast'.
|
||||||
|
mvtb_reg_exp = '^mvtb$'
|
||||||
|
|
||||||
|
# Remove 'blq-toplink', class to provide a link to the top of the page.
|
||||||
|
blq_toplink_reg_exp = '^.*blq[_ -]*top[_ -]*link.*$'
|
||||||
|
|
||||||
|
# Remove 'products and services' links, Eg. desktop tools, alerts, and so on.
|
||||||
|
# Eg. Class="servicev4 ukfs_services" - what a mess of a name. Have decided to
|
||||||
|
# use two reg expressions to make removing this (and variants) robust.
|
||||||
|
prods_services_01_reg_exp = '^.*servicev4.*$'
|
||||||
|
prods_services_02_reg_exp = '^.*ukfs[_ -]*services.*$'
|
||||||
|
|
||||||
|
# Remove -what I think is- some kind of navigation tools helper class, though I am
|
||||||
|
# not sure, it's called: 'blq-rst blq-new-nav'. What I do know is it pops up
|
||||||
|
# frequently and it is not wanted. Have decided to use two reg expressions to make
|
||||||
|
# removing this (and variants) robust.
|
||||||
|
blq_misc_01_reg_exp = '^.*blq[_ -]*rst.*$'
|
||||||
|
blq_misc_02_reg_exp = '^.*blq[_ -]*new[_ -]*nav.*$'
|
||||||
|
|
||||||
|
# Remove 'puffbox' - this may only appear inside 'storyextra', so it may not
|
||||||
|
# need removing - I have no clue what it does other than it contains links.
|
||||||
|
# Whatever it is - it is not part of the article and is not wanted.
|
||||||
|
puffbox_reg_exp = '^.*puffbox.*$'
|
||||||
|
|
||||||
|
# Remove 'sibtbg' and 'sibtbgf' - some kind of table formatting classes.
|
||||||
|
sibtbg_reg_exp = '^.*sibtbg.*$'
|
||||||
|
|
||||||
|
# Remove 'storyextra' - links to relevant articles and external sites.
|
||||||
|
storyextra_reg_exp = '^.*story[_ -]*extra.*$'
|
||||||
|
|
||||||
|
|
||||||
|
remove_tags = [ dict(name='div', attrs={'class':re.compile(story_feature_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(share_help_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(embedded_hyper_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(hypertabs_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(video_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(audio_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(picture_gallery_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(slideshow_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(quote_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(hidden_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(comment_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(story_actions_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(bookmark_list_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'id':re.compile(secondary_content_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'id':re.compile(featured_content_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'id':re.compile(navigation_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='form', attrs={'id':re.compile(form_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(attrs={'class':re.compile(quote_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(attrs={'class':re.compile(hidden_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(attrs={'class':re.compile(social_links_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(attrs={'class':re.compile(comment_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(attrs={'class':re.compile(skip_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='map', attrs={'id':re.compile(map_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='map', attrs={'name':re.compile(map_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'id':re.compile(social_bookmarks_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'id':re.compile(blq_mast_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(sharesb_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(o_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(promo_top_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(promo_bottom_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(nlp_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(mva_or_mvb_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(mvtb_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(blq_toplink_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(prods_services_01_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(prods_services_02_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(blq_misc_01_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(blq_misc_02_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(name='div', attrs={'class':re.compile(puffbox_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(attrs={'class':re.compile(sibtbg_reg_exp, re.IGNORECASE)}),
|
||||||
|
dict(attrs={'class':re.compile(storyextra_reg_exp, re.IGNORECASE)})
|
||||||
|
]
|
||||||
|
|
||||||
|
# Uses url to create and return the 'printer friendly' version of the url.
|
||||||
|
# In other words the 'print this page' address of the page.
|
||||||
|
#
|
||||||
|
# There are 3 types of urls used in the BBC site's rss feeds. There is just
|
||||||
|
# 1 type for the standard news while there are 2 used for sports feed urls.
|
||||||
|
# Note: Sports urls are linked from regular news feeds (Eg. 'News Home') when
|
||||||
|
# there is a major story of interest to 'everyone'. So even if no BBC sports
|
||||||
|
# feeds are added to 'feeds' the logic of this method is still needed to avoid
|
||||||
|
# blank / missing / empty articles which have an index title and then no body.
|
||||||
|
def print_version(self, url):
|
||||||
|
|
||||||
|
# Handle sports page urls type 01:
|
||||||
|
if (url.find("go/rss/-/sport1/") != -1):
|
||||||
|
temp_url = url.replace("go/rss/-/", "")
|
||||||
|
|
||||||
|
# Handle sports page urls type 02:
|
||||||
|
elif (url.find("go/rss/int/news/-/sport1/") != -1):
|
||||||
|
temp_url = url.replace("go/rss/int/news/-/", "")
|
||||||
|
|
||||||
|
# Handle regular news page urls:
|
||||||
|
else:
|
||||||
|
temp_url = url.replace("go/rss/int/news/-/", "")
|
||||||
|
|
||||||
|
# Always add "?print=true" to the end of the url.
|
||||||
|
print_url = temp_url + "?print=true"
|
||||||
|
|
||||||
|
return print_url
|
||||||
|
|
||||||
|
|
||||||
|
# Remove articles in feeds based on a string in the article title or url.
|
||||||
|
#
|
||||||
|
# Code logic written by: Starson17 - posted in: "Recipes - Re-usable code"
|
||||||
|
# thread, in post with title: "Remove articles from feed", see url:
|
||||||
|
# http://www.mobileread.com/forums/showpost.php?p=1165462&postcount=6
|
||||||
|
# Many thanks and all credit to Starson17.
|
||||||
|
#
|
||||||
|
# Starson17's code has obviously been altered to suite my requirements.
|
||||||
|
def parse_feeds(self):
|
||||||
|
|
||||||
|
# Call parent's method.
|
||||||
|
feeds = BasicNewsRecipe.parse_feeds(self)
|
||||||
|
|
||||||
|
# Loop through all feeds.
|
||||||
|
for feed in feeds:
|
||||||
|
|
||||||
|
# Loop through all articles in feed.
|
||||||
|
for article in feed.articles[:]:
|
||||||
|
|
||||||
|
# Match key words and remove article if there's a match.
|
||||||
|
|
||||||
|
# Most BBC rss feed video only 'articles' use upper case 'VIDEO'
|
||||||
|
# as a title prefix. Just match upper case 'VIDEO', so that
|
||||||
|
# articles like 'Video game banned' won't be matched and removed.
|
||||||
|
if 'VIDEO' in article.title:
|
||||||
|
feed.articles.remove(article)
|
||||||
|
|
||||||
|
# Most BBC rss feed audio only 'articles' use upper case 'AUDIO'
|
||||||
|
# as a title prefix. Just match upper case 'AUDIO', so that
|
||||||
|
# articles like 'Hi-Def audio...' won't be matched and removed.
|
||||||
|
elif 'AUDIO' in article.title:
|
||||||
|
feed.articles.remove(article)
|
||||||
|
|
||||||
|
# Most BBC rss feed photo slideshow 'articles' use 'In Pictures',
|
||||||
|
# 'In pictures', and 'in pictures', somewhere in their title.
|
||||||
|
# Match any case of that phrase.
|
||||||
|
elif 'IN PICTURES' in article.title.upper():
|
||||||
|
feed.articles.remove(article)
|
||||||
|
|
||||||
|
# As above, but user contributed pictures. Match any case.
|
||||||
|
elif 'YOUR PICTURES' in article.title.upper():
|
||||||
|
feed.articles.remove(article)
|
||||||
|
|
||||||
|
# 'Sportsday Live' are articles which contain a constantly and
|
||||||
|
# dynamically updated 'running commentary' during a live sporting
|
||||||
|
# event. Match any case.
|
||||||
|
elif 'SPORTSDAY LIVE' in article.title.upper():
|
||||||
|
feed.articles.remove(article)
|
||||||
|
|
||||||
|
# Sometimes 'Sportsday Live' (above) becomes 'Live - Sport Name'.
|
||||||
|
# These are being matched below using 'Live - ' because removing all
|
||||||
|
# articles with 'live' in their titles would remove some articles
|
||||||
|
# that are in fact not live sports pages. Match any case.
|
||||||
|
elif 'LIVE - ' in article.title.upper():
|
||||||
|
feed.articles.remove(article)
|
||||||
|
|
||||||
|
# 'Quiz of the week' is a Flash player weekly news quiz. Match only
|
||||||
|
# the 'Quiz of the' part in anticipation of monthly and yearly
|
||||||
|
# variants. Match any case.
|
||||||
|
elif 'QUIZ OF THE' in article.title.upper():
|
||||||
|
feed.articles.remove(article)
|
||||||
|
|
||||||
|
# Remove articles with 'scorecards' in the url. These are BBC sports
|
||||||
|
# pages which just display a cricket scorecard. The pages have a mass
|
||||||
|
# of table and css entries to display the scorecards nicely. Probably
|
||||||
|
# could make them work with this recipe, but might take a whole day
|
||||||
|
# of work to sort out all the css - basically a formatting nightmare.
|
||||||
|
elif 'scorecards' in article.url:
|
||||||
|
feed.articles.remove(article)
|
||||||
|
|
||||||
|
return feeds
|
||||||
|
|
||||||
|
# End of class and file.
|
||||||
|
74
recipes/benchmark_pl.recipe
Normal file
74
recipes/benchmark_pl.recipe
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
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'
|
||||||
|
masthead_url = 'http://www.benchmark.pl/i/logo-footer.png'
|
||||||
|
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'<h3><span style="font-size: small;"> Zobacz poprzednie <a href="http://www.benchmark.pl/news/zestawienie/grupa_id/135">Opinie dnia:</a></span>.*</body>', re.DOTALL|re.IGNORECASE), lambda match: '</body>'), (re.compile(ur'Więcej o .*?</ul>', re.DOTALL|re.IGNORECASE), lambda match: '')]
|
||||||
|
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']}), dict(name='table', attrs={'background':'http://www.benchmark.pl/uploads/backend_img/a/fotki_newsy/opinie_dnia/bg.png'}), dict(name='table', attrs={'width':'210', 'cellspacing':'1', 'cellpadding':'4', 'border':'0', 'align':'right'})]
|
||||||
|
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)
|
||||||
|
for a in soup('a'):
|
||||||
|
if a.has_key('href') and 'http://' not in a['href'] and 'https://' not in a['href']:
|
||||||
|
a['href']=self.INDEX + a['href']
|
||||||
|
return soup
|
16
recipes/beppe_grillo.recipe
Normal file
16
recipes/beppe_grillo.recipe
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
__license__ = 'GPL v3'
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class AdvancedUserRecipe1327747616(BasicNewsRecipe):
|
||||||
|
title = u'Beppe Grillo'
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
auto_cleanup = True
|
||||||
|
|
||||||
|
feeds = [(u'Beppe Grillo', u'http://feeds.feedburner.com/beppegrillo/atom')]
|
||||||
|
description = 'Blog of the famous comedian and politician Beppe Grillo - v1.00 (28, January 2012)'
|
||||||
|
__author__ = 'faber1971'
|
||||||
|
|
||||||
|
language = 'it'
|
||||||
|
|
44
recipes/berliner_zeitung.recipe
Normal file
44
recipes/berliner_zeitung.recipe
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
from calibre.web.feeds.recipes import BasicNewsRecipe
|
||||||
|
|
||||||
|
'''Calibre recipe to convert the RSS feeds of the Berliner Zeitung to an ebook.'''
|
||||||
|
|
||||||
|
class SportsIllustratedRecipe(BasicNewsRecipe) :
|
||||||
|
__author__ = 'a.peter'
|
||||||
|
__copyright__ = 'a.peter'
|
||||||
|
__license__ = 'GPL v3'
|
||||||
|
language = 'de'
|
||||||
|
description = 'Berliner Zeitung RSS'
|
||||||
|
version = 4
|
||||||
|
title = u'Berliner Zeitung'
|
||||||
|
timefmt = ' [%d.%m.%Y]'
|
||||||
|
|
||||||
|
#oldest_article = 7.0
|
||||||
|
no_stylesheets = True
|
||||||
|
remove_javascript = True
|
||||||
|
use_embedded_content = False
|
||||||
|
publication_type = 'newspaper'
|
||||||
|
|
||||||
|
remove_tags_before = dict(name='div', attrs={'class':'newstype'})
|
||||||
|
remove_tags_after = [dict(id='article_text')]
|
||||||
|
|
||||||
|
feeds = [(u'Startseite', u'http://www.berliner-zeitung.de/home/10808950,10808950,view,asFeed.xml'),
|
||||||
|
(u'Politik', u'http://www.berliner-zeitung.de/home/10808018,10808018,view,asFeed.xml'),
|
||||||
|
(u'Wirtschaft', u'http://www.berliner-zeitung.de/home/10808230,10808230,view,asFeed.xml'),
|
||||||
|
(u'Berlin', u'http://www.berliner-zeitung.de/home/10809148,10809148,view,asFeed.xml'),
|
||||||
|
(u'Brandenburg', u'http://www.berliner-zeitung.de/home/10809312,10809312,view,asFeed.xml'),
|
||||||
|
(u'Wissenschaft', u'http://www.berliner-zeitung.de/home/10808894,10808894,view,asFeed.xml'),
|
||||||
|
(u'Digital', u'http://www.berliner-zeitung.de/home/10808718,10808718,view,asFeed.xml'),
|
||||||
|
(u'Kultur', u'http://www.berliner-zeitung.de/home/10809150,10809150,view,asFeed.xml'),
|
||||||
|
(u'Panorama', u'http://www.berliner-zeitung.de/home/10808334,10808334,view,asFeed.xml'),
|
||||||
|
(u'Sport', u'http://www.berliner-zeitung.de/home/10808794,10808794,view,asFeed.xml'),
|
||||||
|
(u'Hertha', u'http://www.berliner-zeitung.de/home/10808800,10808800,view,asFeed.xml'),
|
||||||
|
(u'Union', u'http://www.berliner-zeitung.de/home/10808802,10808802,view,asFeed.xml'),
|
||||||
|
(u'Verkehr', u'http://www.berliner-zeitung.de/home/10809298,10809298,view,asFeed.xml'),
|
||||||
|
(u'Polizei', u'http://www.berliner-zeitung.de/home/10809296,10809296,view,asFeed.xml'),
|
||||||
|
(u'Meinung', u'http://www.berliner-zeitung.de/home/10808020,10808020,view,asFeed.xml')]
|
||||||
|
|
||||||
|
def get_masthead_url(self):
|
||||||
|
return 'http://www.berliner-zeitung.de/image/view/10810244,7040611,data,logo.png'
|
||||||
|
|
||||||
|
def print_version(self, url):
|
||||||
|
return url.replace('.html', ',view,printVersion.html')
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2010, Darko Miletic <darko.miletic at gmail.com>'
|
__copyright__ = '2010, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
'''
|
'''
|
||||||
@ -18,11 +17,17 @@ class Berlingske_dk(BasicNewsRecipe):
|
|||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
remove_empty_feeds = True
|
remove_empty_feeds = True
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
|
remove_javascript = True
|
||||||
publication_type = 'newspaper'
|
publication_type = 'newspaper'
|
||||||
encoding = 'utf8'
|
encoding = 'utf8'
|
||||||
language = 'da'
|
language = 'da'
|
||||||
masthead_url = 'http://www.berlingske.dk/sites/all/themes/bm/img/layout/masthead_bg.gif'
|
auto_cleanup = True
|
||||||
extra_css = ' body{font-family: Arial,Helvetica,sans-serif } h1,.manchet,.byline{font-family: Cambria,Georgia,Times,"Times New Roman",serif } '
|
extra_css = '''
|
||||||
|
.manchet {color:#888888;}
|
||||||
|
.dateline {font-size: x-small; color:#444444;}
|
||||||
|
.manchet,.dateline { font-family: Cambria,Georgia,Times,"Times New Roman",serif }
|
||||||
|
.body {font-family: Arial,Helvetica,sans-serif }
|
||||||
|
'''
|
||||||
|
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
'comment' : description
|
'comment' : description
|
||||||
@ -32,18 +37,14 @@ class Berlingske_dk(BasicNewsRecipe):
|
|||||||
}
|
}
|
||||||
|
|
||||||
feeds = [
|
feeds = [
|
||||||
(u'Breaking news' , u'http://www.berlingske.dk/breaking/rss' )
|
(u'Breaking news' , u'http://www.b.dk/breaking/rss' )
|
||||||
,(u'Seneste nyt' , u'http://www.berlingske.dk/seneste/rss' )
|
,(u'Seneste nyt' , u'http://www.b.dk/seneste/rss' )
|
||||||
,(u'Topnyheder' , u'http://www.berlingske.dk/top/rss' )
|
,(u'Topnyheder' , u'http://www.b.dk/top/rss' )
|
||||||
,(u'Danmark' , u'http://www.berlingske.dk/danmark/seneste/rss' )
|
,(u'Danmark' , u'http://www.b.dk/danmark/seneste/rss' )
|
||||||
,(u'Verden' , u'http://www.berlingske.dk/verden/seneste/rss' )
|
,(u'Verden' , u'http://www.b.dk/verden/seneste/rss' )
|
||||||
,(u'Klima' , u'http://www.berlingske.dk/klima/seneste/rss' )
|
,(u'Klima' , u'http://www.b.dk/klima/seneste/rss' )
|
||||||
,(u'Debat' , u'http://www.berlingske.dk/debat/seneste/rss' )
|
,(u'Debat' , u'http://www.b.dk/debat/seneste/rss' )
|
||||||
,(u'Koebenhavn' , u'http://www.berlingske.dk/koebenhavn/seneste/rss')
|
,(u'Koebenhavn' , u'http://www.b.dk/koebenhavn/seneste/rss')
|
||||||
,(u'Politik' , u'http://www.berlingske.dk/politik/seneste/rss' )
|
,(u'Politik' , u'http://www.b.dk/politik/seneste/rss' )
|
||||||
,(u'Kultur' , u'http://www.berlingske.dk/kultur/seneste/rss' )
|
,(u'Kultur' , u'http://www.b.dk/kultur/seneste/rss' )
|
||||||
]
|
]
|
||||||
|
|
||||||
keep_only_tags = [dict(attrs={'class':['first','pt-article']})]
|
|
||||||
remove_tags = [dict(name=['object','link','base','iframe','embed'])]
|
|
||||||
|
|
||||||
|
38
recipes/biamag.recipe
Normal file
38
recipes/biamag.recipe
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
|
||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = '2010, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
|
'''
|
||||||
|
bianet.com.tr
|
||||||
|
'''
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Radikal_tr(BasicNewsRecipe):
|
||||||
|
title = 'BiaMag'
|
||||||
|
__author__ = 'Osman Kaysan'
|
||||||
|
description = 'Independent News from Turkey'
|
||||||
|
publisher = 'BiaMag'
|
||||||
|
category = 'news, politics, Turkey'
|
||||||
|
oldest_article = 15
|
||||||
|
max_articles_per_feed = 120
|
||||||
|
masthead_url = 'http://bianet.org/images/biamag_logo.gif'
|
||||||
|
language = 'tr'
|
||||||
|
no_stylesheets = True
|
||||||
|
|
||||||
|
conversion_options = {
|
||||||
|
'comments' : description
|
||||||
|
,'tags' : category
|
||||||
|
,'language' : language
|
||||||
|
,'publisher' : publisher
|
||||||
|
,'linearize_tables': True
|
||||||
|
,'remove_paragraph_spacing': True,
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_tags_before = dict(name='div', attrs={'class':'manset'})
|
||||||
|
remove_tags = [ dict(name='ul', attrs={'class':['altul']}), dict(name='div', attrs={'id':['habermenu']}), dict(name='div', attrs={'class':['mail']}), dict(name='div', attrs={'class':['from']})]
|
||||||
|
remove_tags_after = dict(name='div', attrs={'id':'habermenu'})
|
||||||
|
|
||||||
|
feeds = [(u'BiaMag', u'http://www.bianet.org/biamag.rss')]
|
||||||
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
return self.adeify_images(soup)
|
38
recipes/biamag_en.recipe
Normal file
38
recipes/biamag_en.recipe
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
|
||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = '2010, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
|
'''
|
||||||
|
bianet.com.tr
|
||||||
|
'''
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Radikal_tr(BasicNewsRecipe):
|
||||||
|
title = 'Bianet-English'
|
||||||
|
__author__ = 'Osman Kaysan'
|
||||||
|
description = 'Independent News Network from Turkey(English)'
|
||||||
|
publisher = 'Bianet'
|
||||||
|
category = 'news, politics, Turkey'
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 150
|
||||||
|
masthead_url = 'http://bianet.org/images/english_logo.gif'
|
||||||
|
language = 'en_TR'
|
||||||
|
no_stylesheets = True
|
||||||
|
|
||||||
|
conversion_options = {
|
||||||
|
'comments' : description
|
||||||
|
,'tags' : category
|
||||||
|
,'language' : language
|
||||||
|
,'publisher' : publisher
|
||||||
|
,'linearize_tables': True
|
||||||
|
,'remove_paragraph_spacing': True,
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_tags_before = dict(name='div', attrs={'class':'manset'})
|
||||||
|
remove_tags = [ dict(name='ul', attrs={'class':['altul']}), dict(name='div', attrs={'id':['habermenu']}), dict(name='div', attrs={'class':['mail']}), dict(name='div', attrs={'class':['from']})]
|
||||||
|
remove_tags_after = dict(name='div', attrs={'id':'habermenu'})
|
||||||
|
|
||||||
|
feeds = [(u'Bianet-English', u'http://www.bianet.org/english.rss')]
|
||||||
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
return self.adeify_images(soup)
|
38
recipes/bianet.recipe
Normal file
38
recipes/bianet.recipe
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
|
||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = '2010, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
|
'''
|
||||||
|
bianet.com.tr
|
||||||
|
'''
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Radikal_tr(BasicNewsRecipe):
|
||||||
|
title = 'Bianet'
|
||||||
|
__author__ = 'Osman Kaysan'
|
||||||
|
description = 'Independent News from Turkey'
|
||||||
|
publisher = 'Bianet'
|
||||||
|
category = 'news, politics, Turkey'
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 120
|
||||||
|
masthead_url = 'http://bianet.org/images/bianet_logo.gif'
|
||||||
|
language = 'tr'
|
||||||
|
no_stylesheets = True
|
||||||
|
|
||||||
|
conversion_options = {
|
||||||
|
'comments' : description
|
||||||
|
,'tags' : category
|
||||||
|
,'language' : language
|
||||||
|
,'publisher' : publisher
|
||||||
|
,'linearize_tables': True
|
||||||
|
,'remove_paragraph_spacing': True,
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_tags_before = dict(name='div', attrs={'class':'manset'})
|
||||||
|
remove_tags = [ dict(name='ul', attrs={'class':['altul']}), dict(name='div', attrs={'id':['habermenu']}), dict(name='div', attrs={'class':['mail']}), dict(name='div', attrs={'class':['from']})]
|
||||||
|
remove_tags_after = dict(name='div', attrs={'id':'habermenu'})
|
||||||
|
|
||||||
|
feeds = [(u'Bianet', u'http://bianet.org/bianet.rss')]
|
||||||
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
return self.adeify_images(soup)
|
20
recipes/biolog_pl.recipe
Normal file
20
recipes/biolog_pl.recipe
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
class Biolog_pl(BasicNewsRecipe):
|
||||||
|
title = u'Biolog.pl'
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
remove_empty_feeds=True
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = u'Przyrodnicze aktualności ze świata nauki (codziennie aktualizowane), kurs biologii, testy i sprawdziany, forum dyskusyjne.'
|
||||||
|
category = 'biology'
|
||||||
|
language = 'pl'
|
||||||
|
masthead_url= 'http://www.biolog.pl/naukowy,portal,biolog.png'
|
||||||
|
cover_url='http://www.biolog.pl/naukowy,portal,biolog.png'
|
||||||
|
no_stylesheets = True
|
||||||
|
#keeps_only_tags=[dict(id='main')]
|
||||||
|
remove_tags_before=dict(id='main')
|
||||||
|
remove_tags_after=dict(name='a', attrs={'name':'komentarze'})
|
||||||
|
remove_tags=[dict(name='img', attrs={'alt':'Komentarze'}), dict(name='span', attrs={'class':'menu_odsylacze'})]
|
||||||
|
feeds = [(u'Wszystkie', u'http://www.biolog.pl/backend.php'), (u'Medycyna', u'http://www.biolog.pl/medycyna-rss.php'), (u'Ekologia', u'http://www.biolog.pl/rss-ekologia.php'), (u'Genetyka i biotechnologia', u'http://www.biolog.pl/rss-biotechnologia.php'), (u'Botanika', u'http://www.biolog.pl/rss-botanika.php'), (u'Le\u015bnictwo', u'http://www.biolog.pl/rss-lesnictwo.php'), (u'Zoologia', u'http://www.biolog.pl/rss-zoologia.php')]
|
50
recipes/birgun_gazetesi.recipe
Normal file
50
recipes/birgun_gazetesi.recipe
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Birgun (BasicNewsRecipe):
|
||||||
|
|
||||||
|
title = u'Birgün Gazetesi'
|
||||||
|
__author__ = u'Osman Kaysan'
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed =150
|
||||||
|
use_embedded_content = False
|
||||||
|
description = 'Birgun gazatesi haberleri, kose yazarlari'
|
||||||
|
publisher = 'Birgün'
|
||||||
|
category = 'news,haberler,turkce,gazete,birgun'
|
||||||
|
language = 'tr'
|
||||||
|
no_stylesheets = True
|
||||||
|
publication_type = 'newspaper'
|
||||||
|
|
||||||
|
conversion_options = {
|
||||||
|
'comments' : description
|
||||||
|
,'tags' : category
|
||||||
|
,'language' : language
|
||||||
|
,'publisher' : publisher
|
||||||
|
,'linearize_tables': True
|
||||||
|
,'remove_paragraph_spacing': True,
|
||||||
|
}
|
||||||
|
|
||||||
|
cover_img_url = 'http://www.birgun.net/i/birgun.png'
|
||||||
|
masthead_url = 'http://www.birgun.net/i/birgun.png'
|
||||||
|
|
||||||
|
remove_attributes = ['width','height']
|
||||||
|
|
||||||
|
remove_tags_before = dict(name='h2', attrs={'class':'storyHeadline'})
|
||||||
|
#remove_tags_after = dict(name='div', attrs={'class':'toollinks'})
|
||||||
|
remove_tags_after = dict(name='tr', attrs={'valign':'top'})
|
||||||
|
remove_tags = [ dict(name='div', attrs={'id':'byLine'}), dict(name='div', attrs={'class':'toollinks'})
|
||||||
|
, dict(name='div', attrs={'class':'main-lead'}), dict(name='div', attrs={'class':'addthis_toolbox addthis_default_style'})
|
||||||
|
, dict(name='a', attrs={'class':'addthis_button'})]
|
||||||
|
|
||||||
|
remove_empty_feeds= True
|
||||||
|
|
||||||
|
feeds = [
|
||||||
|
( u'Güncel', u'http://www.birgun.net/actuels.xml')
|
||||||
|
,( u'Köşe Yazarları', u'http://www.birgun.net/writer.xml')
|
||||||
|
,( u'Politika', u'http://www.birgun.net/politics.xml')
|
||||||
|
,( u'Ekonomi', u'http://www.birgun.net/economic.xml')
|
||||||
|
,( u'Çalışma Yaşamı', u'http://www.birgun.net/workers.xml')
|
||||||
|
,( u'Dünya', u'http://www.birgun.net/worlds.xml')
|
||||||
|
,( u'Yaşam', u'http://www.birgun.net/lifes.xml')
|
||||||
|
]
|
44
recipes/birmingham_post.recipe
Normal file
44
recipes/birmingham_post.recipe
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
class AdvancedUserRecipe1306097511(BasicNewsRecipe):
|
||||||
|
title = u'Birmingham post'
|
||||||
|
description = 'News for Birmingham UK'
|
||||||
|
timefmt = ''
|
||||||
|
__author__ = 'Dave Asbury'
|
||||||
|
cover_url = 'http://1.bp.blogspot.com/_GwWyq5eGw9M/S9BHPHxW55I/AAAAAAAAB6Q/iGCWl0egGzg/s320/Birmingham+post+Lite+front.JPG'
|
||||||
|
oldest_article = 1
|
||||||
|
max_articles_per_feed = 20
|
||||||
|
remove_empty_feeds = True
|
||||||
|
remove_javascript = True
|
||||||
|
auto_cleanup = True
|
||||||
|
language = 'en_GB'
|
||||||
|
|
||||||
|
|
||||||
|
masthead_url = 'http://www.pressgazette.co.uk/Pictures/web/t/c/g/birmingham_post.jpg'
|
||||||
|
|
||||||
|
|
||||||
|
keep_only_tags = [
|
||||||
|
#dict(name='h1',attrs={'id' : 'article-headline'}),
|
||||||
|
#dict(attrs={'class':['article-meta-author','article-meta-date','article main','art-o art-align-center otm-1 ']}),
|
||||||
|
#dict(name='p')
|
||||||
|
#dict(attrs={'id' : 'three-col'})
|
||||||
|
]
|
||||||
|
remove_tags = [
|
||||||
|
# dict(name='div',attrs={'class' : 'span-33 last header-links'})
|
||||||
|
|
||||||
|
]
|
||||||
|
feeds = [
|
||||||
|
#(u'News',u'http://www.birminghampost.net/news/rss.xml'),
|
||||||
|
(u'Local News', u'http://www.birminghampost.net/news/west-midlands-news/rss.xml'),
|
||||||
|
(u'UK News', u'http://www.birminghampost.net/news/uk-news/rss.xml'),
|
||||||
|
(u'Sports',u'http://www.birminghampost.net/midlands-birmingham-sport/rss.xml'),
|
||||||
|
(u'Bloggs & Comments',u'http://www.birminghampost.net/comment/rss.xml')
|
||||||
|
|
||||||
|
]
|
||||||
|
extra_css = '''
|
||||||
|
body {font: sans-serif medium;}'
|
||||||
|
h1 {text-align : center; font-family:Arial,Helvetica,sans-serif; font-size:20px; font-size-adjust:none; font-stretch:normal; font-style:normal; font-variant:normal; font-weight:bold;}
|
||||||
|
h2 {text-align : center;color:#4D4D4D;font-family:Arial,Helvetica,sans-serif; font-size:15px; font-size-adjust:none; font-stretch:normal; font-style:normal; font-variant:normal; font-weight:bold; }
|
||||||
|
span{ font-size:9.5px; font-weight:bold;font-style:italic}
|
||||||
|
p { text-align: justify; font-family:Arial,Helvetica,sans-serif; font-size:11px; font-size-adjust:none; font-stretch:normal; font-style:normal; font-variant:normal; font-weight:normal;}
|
||||||
|
|
||||||
|
'''
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2008-2011, Darko Miletic <darko.miletic at gmail.com>'
|
__copyright__ = '2008-2012, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
'''
|
'''
|
||||||
blic.rs
|
blic.rs
|
||||||
'''
|
'''
|
||||||
@ -73,7 +73,10 @@ class Blic(BasicNewsRecipe):
|
|||||||
def print_version(self, url):
|
def print_version(self, url):
|
||||||
return url + '/print'
|
return url + '/print'
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
def get_cover_url(self):
|
||||||
for item in soup.findAll(style=True):
|
soup = self.index_to_soup('http://www.blic.rs/')
|
||||||
del item['style']
|
alink = soup.find('a', attrs={'id':'blic_naslovna_print'})
|
||||||
return soup
|
if alink:
|
||||||
|
return 'http://www.blic.rs' + alink['href']
|
||||||
|
return None
|
||||||
|
|
26
recipes/blues.recipe
Normal file
26
recipes/blues.recipe
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = '2011, Oskar Kunicki <rakso at interia.pl>'
|
||||||
|
'''
|
||||||
|
Changelog:
|
||||||
|
2011-11-27
|
||||||
|
News from BluesRSS.info
|
||||||
|
'''
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class BluesRSS(BasicNewsRecipe):
|
||||||
|
title = 'Blues News'
|
||||||
|
__author__ = 'Oskar Kunicki'
|
||||||
|
description ='Blues news from around the world'
|
||||||
|
publisher = 'BluesRSS.info'
|
||||||
|
category = 'news, blues, USA,UK'
|
||||||
|
oldest_article = 5
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
language = 'en'
|
||||||
|
cover_url = 'http://bluesrss.info/cover.jpg'
|
||||||
|
masthead_url = 'http://bluesrss.info/cover.jpg'
|
||||||
|
no_stylesheets = True
|
||||||
|
|
||||||
|
remove_tags = [dict(name='div', attrs={'class':'wp-pagenavi'})]
|
||||||
|
|
||||||
|
feeds = [(u'News', u'http://bluesrss.info/feed/')]
|
@ -1,95 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
|
||||||
__copyright__ = '2009, Darko Miletic <darko.miletic at gmail.com>'
|
|
||||||
|
|
||||||
'''
|
|
||||||
borba.rs
|
|
||||||
'''
|
|
||||||
|
|
||||||
import re
|
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
|
||||||
|
|
||||||
class Borba(BasicNewsRecipe):
|
|
||||||
title = 'Borba Online'
|
|
||||||
__author__ = 'Darko Miletic'
|
|
||||||
description = 'Dnevne novine Borba Online'
|
|
||||||
publisher = 'IP Novine Borba'
|
|
||||||
category = 'news, politics, Serbia'
|
|
||||||
language = 'sr'
|
|
||||||
|
|
||||||
lang = _('sr-Latn-RS')
|
|
||||||
oldest_article = 2
|
|
||||||
max_articles_per_feed = 100
|
|
||||||
no_stylesheets = True
|
|
||||||
encoding = 'utf-8'
|
|
||||||
use_embedded_content = False
|
|
||||||
cover_url = 'http://www.borba.rs/images/stories/novine/naslovna_v.jpg'
|
|
||||||
INDEX = u'http://www.borba.rs/'
|
|
||||||
extra_css = ' @font-face {font-family: "serif1"; src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} body{font-family: serif1, serif} .article_description{font-family: serif1, serif} .contentheading{font-size: x-large; font-weight: bold} .createdate{font-size: small; font-weight: bold} '
|
|
||||||
|
|
||||||
conversion_options = {
|
|
||||||
'comment' : description
|
|
||||||
, 'tags' : category
|
|
||||||
, 'publisher' : publisher
|
|
||||||
, 'language' : lang
|
|
||||||
, 'pretty_print' : True
|
|
||||||
}
|
|
||||||
|
|
||||||
preprocess_regexps = [(re.compile(u'\u0110'), lambda match: u'\u00D0')]
|
|
||||||
|
|
||||||
keep_only_tags = [dict(name='div', attrs={'class':'main'})]
|
|
||||||
|
|
||||||
remove_tags_after = dict(name='div',attrs={'id':'written_comments_title'})
|
|
||||||
|
|
||||||
remove_tags = [
|
|
||||||
dict(name=['object','link','iframe','base','img'])
|
|
||||||
,dict(name='div',attrs={'id':'written_comments_title'})
|
|
||||||
]
|
|
||||||
|
|
||||||
feeds = [
|
|
||||||
(u'Najnovije vesti', u'http://www.borba.rs/content/blogsection/28/105/')
|
|
||||||
,(u'Prvi plan' , u'http://www.borba.rs/content/blogsection/4/92/' )
|
|
||||||
,(u'Dogadjaji' , u'http://www.borba.rs/content/blogsection/21/83/' )
|
|
||||||
,(u'Ekonomija' , u'http://www.borba.rs/content/blogsection/5/35/' )
|
|
||||||
,(u'Komentari' , u'http://www.borba.rs/content/blogsection/23/94/' )
|
|
||||||
,(u'Svet' , u'http://www.borba.rs/content/blogsection/7/36/' )
|
|
||||||
,(u'Sport' , u'http://www.borba.rs/content/blogsection/6/37/' )
|
|
||||||
,(u'Fama' , u'http://www.borba.rs/content/blogsection/25/89/' )
|
|
||||||
,(u'B2 Dodatak' , u'http://www.borba.rs/content/blogsection/30/116/')
|
|
||||||
]
|
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
|
||||||
attribs = [ 'style','font','valign'
|
|
||||||
,'colspan','width','height'
|
|
||||||
,'rowspan','summary','align'
|
|
||||||
,'cellspacing','cellpadding'
|
|
||||||
,'frames','rules','border'
|
|
||||||
]
|
|
||||||
for item in soup.body.findAll(name=['table','td','tr','th','caption','thead','tfoot','tbody','colgroup','col']):
|
|
||||||
item.name = 'div'
|
|
||||||
for attrib in attribs:
|
|
||||||
if item.has_key(attrib):
|
|
||||||
del item[attrib]
|
|
||||||
return soup
|
|
||||||
|
|
||||||
def parse_index(self):
|
|
||||||
totalfeeds = []
|
|
||||||
lfeeds = self.get_feeds()
|
|
||||||
for feedobj in lfeeds:
|
|
||||||
feedtitle, feedurl = feedobj
|
|
||||||
self.report_progress(0, _('Fetching feed')+' %s...'%(feedtitle if feedtitle else feedurl))
|
|
||||||
articles = []
|
|
||||||
soup = self.index_to_soup(feedurl)
|
|
||||||
for item in soup.findAll('a', attrs={'class':'contentpagetitle'}):
|
|
||||||
url = item['href']
|
|
||||||
title = self.tag_to_string(item)
|
|
||||||
articles.append({
|
|
||||||
'title' :title
|
|
||||||
,'date' :''
|
|
||||||
,'url' :url
|
|
||||||
,'description':''
|
|
||||||
})
|
|
||||||
totalfeeds.append((feedtitle, articles))
|
|
||||||
return totalfeeds
|
|
||||||
|
|
@ -110,8 +110,10 @@ class BrandEins(BasicNewsRecipe):
|
|||||||
selected_issue = issue_map[selected_issue_key]
|
selected_issue = issue_map[selected_issue_key]
|
||||||
url = selected_issue.get('href', False)
|
url = selected_issue.get('href', False)
|
||||||
# Get the title for the magazin - build it out of the title of the cover - take the issue and year;
|
# Get the title for the magazin - build it out of the title of the cover - take the issue and year;
|
||||||
self.title = "brand eins " + selected_issue_key[4:] + "/" + selected_issue_key[0:4]
|
# self.title = "brand eins " + selected_issue_key[4:] + "/" + selected_issue_key[0:4]
|
||||||
|
# Get the alternative title for the magazin - build it out of the title of the cover - without the issue and year;
|
||||||
url = 'http://brandeins.de/'+url
|
url = 'http://brandeins.de/'+url
|
||||||
|
self.timefmt = ' ' + selected_issue_key[4:] + '/' + selected_issue_key[:4]
|
||||||
|
|
||||||
# url = "http://www.brandeins.de/archiv/magazin/tierisch.html"
|
# url = "http://www.brandeins.de/archiv/magazin/tierisch.html"
|
||||||
titles_and_articles = self.brand_eins_parse_issue(url)
|
titles_and_articles = self.brand_eins_parse_issue(url)
|
||||||
@ -163,4 +165,3 @@ class BrandEins(BasicNewsRecipe):
|
|||||||
current_articles.append({'title': title, 'url': url, 'description': description, 'date':''})
|
current_articles.append({'title': title, 'url': url, 'description': description, 'date':''})
|
||||||
titles_and_articles.append([chapter_title, current_articles])
|
titles_and_articles.append([chapter_title, current_articles])
|
||||||
return titles_and_articles
|
return titles_and_articles
|
||||||
|
|
||||||
|
31
recipes/brasil_de_fato.recipe
Normal file
31
recipes/brasil_de_fato.recipe
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class BrasilDeFato(BasicNewsRecipe):
|
||||||
|
news = True
|
||||||
|
title = u'Brasil de Fato'
|
||||||
|
__author__ = 'Alex Mitrani'
|
||||||
|
description = u'Uma visão popular do Brasil e do mundo.'
|
||||||
|
publisher = u'SOCIEDADE EDITORIAL BRASIL DE FATO'
|
||||||
|
category = 'news, politics, Brazil, rss, Portuguese'
|
||||||
|
oldest_article = 10
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
summary_length = 1000
|
||||||
|
language = 'pt_BR'
|
||||||
|
|
||||||
|
remove_javascript = True
|
||||||
|
no_stylesheets = True
|
||||||
|
use_embedded_content = False
|
||||||
|
remove_empty_feeds = True
|
||||||
|
masthead_url = 'http://www.brasildefato.com.br/sites/default/files/zeropoint_logo.jpg'
|
||||||
|
keep_only_tags = [dict(name='div', attrs={'id':'main'})]
|
||||||
|
remove_tags = [dict(name='div', attrs={'class':'links'})]
|
||||||
|
remove_tags_after = [dict(name='div', attrs={'class':'links'})]
|
||||||
|
|
||||||
|
feeds = [(u'Nacional', u'http://www.brasildefato.com.br/rss_nacional')
|
||||||
|
,(u'Internacional', u'http://www.brasildefato.com.br/rss_internacional')
|
||||||
|
,(u'Entrevista', u'http://www.brasildefato.com.br/rss_entrevista')
|
||||||
|
,(u'Cultura', u'http://www.brasildefato.com.br/rss_cultura')
|
||||||
|
,(u'Análise', u'http://www.brasildefato.com.br/rss_analise')
|
||||||
|
]
|
@ -10,49 +10,39 @@ http://www.buffalonews.com/RSS/
|
|||||||
|
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class AdvancedUserRecipe1298680852(BasicNewsRecipe):
|
class BuffaloNews(BasicNewsRecipe):
|
||||||
title = u'Buffalo News'
|
title = u'Buffalo News'
|
||||||
oldest_article = 2
|
oldest_article = 2
|
||||||
language = 'en'
|
language = 'en'
|
||||||
__author__ = 'ChappyOnIce'
|
__author__ = 'ChappyOnIce, Krittika Goyal'
|
||||||
max_articles_per_feed = 20
|
max_articles_per_feed = 20
|
||||||
encoding = 'utf-8'
|
encoding = 'utf-8'
|
||||||
masthead_url = 'http://www.buffalonews.com/buffalonews/skins/buffalonews/images/masthead/the_buffalo_news_logo.png'
|
masthead_url = 'http://www.buffalonews.com/buffalonews/skins/buffalonews/images/masthead/the_buffalo_news_logo.png'
|
||||||
remove_javascript = True
|
auto_cleanup = True
|
||||||
extra_css = 'body {text-align: justify;}\n \
|
remove_empty_feeds = True
|
||||||
p {text-indent: 20px;}'
|
|
||||||
|
|
||||||
keep_only_tags = [
|
feeds = [
|
||||||
dict(name='div', attrs={'class':['main-content-left']})
|
(u'City of Buffalo', u'http://www.buffalonews.com/city/communities/buffalo/?widget=rssfeed&view=feed&contentId=77944'),
|
||||||
]
|
(u'Southern Erie County', u'http://www.buffalonews.com/city/communities/southern-erie/?widget=rssfeed&view=feed&contentId=77944'),
|
||||||
|
(u'Eastern Erie County', u'http://www.buffalonews.com/city/communities/eastern-erie/?widget=rssfeed&view=feed&contentId=77944'),
|
||||||
remove_tags = [
|
(u'Southern Tier', u'http://www.buffalonews.com/city/communities/southern-tier/?widget=rssfeed&view=feed&contentId=77944'),
|
||||||
dict(name='div', attrs={'id':['commentCount']}),
|
(u'Niagara County', u'http://www.buffalonews.com/city/communities/niagara-county/?widget=rssfeed&view=feed&contentId=77944'),
|
||||||
dict(name='div', attrs={'class':['story-list-links']})
|
(u'Business', u'http://www.buffalonews.com/business/?widget=rssfeed&view=feed&contentId=77944'),
|
||||||
]
|
(u'MoneySmart', u'http://www.buffalonews.com/business/moneysmart/?widget=rssfeed&view=feed&contentId=77944'),
|
||||||
|
(u'Bills & NFL', u'http://www.buffalonews.com/sports/bills-nfl/?widget=rssfeed&view=feed&contentId=77944'),
|
||||||
remove_tags_after = dict(name='div', attrs={'class':['body storyContent']})
|
(u'Sabres & NHL', u'http://www.buffalonews.com/sports/sabres-nhl/?widget=rssfeed&view=feed&contentId=77944'),
|
||||||
|
(u'Bob DiCesare', u'http://www.buffalonews.com/sports/columns/bob-dicesare/?widget=rssfeed&view=feed&contentId=77944'),
|
||||||
feeds = [(u'City of Buffalo', u'http://www.buffalonews.com/city/communities/buffalo/?widget=rssfeed&view=feed&contentId=77944'),
|
(u'Bucky Gleason', u'http://www.buffalonews.com/sports/columns/bucky-gleason/?widget=rssfeed&view=feed&contentId=77944'),
|
||||||
(u'Southern Erie County', u'http://www.buffalonews.com/city/communities/southern-erie/?widget=rssfeed&view=feed&contentId=77944'),
|
(u'Mark Gaughan', u'http://www.buffalonews.com/sports/bills-nfl/inside-the-nfl/?widget=rssfeed&view=feed&contentId=77944'),
|
||||||
(u'Eastern Erie County', u'http://www.buffalonews.com/city/communities/eastern-erie/?widget=rssfeed&view=feed&contentId=77944'),
|
(u'Mike Harrington', u'http://www.buffalonews.com/sports/columns/mike-harrington/?widget=rssfeed&view=feed&contentId=77944'),
|
||||||
(u'Southern Tier', u'http://www.buffalonews.com/city/communities/southern-tier/?widget=rssfeed&view=feed&contentId=77944'),
|
(u'Jerry Sullivan', u'http://www.buffalonews.com/sports/columns/jerry-sullivan/?widget=rssfeed&view=feed&contentId=77944'),
|
||||||
(u'Niagara County', u'http://www.buffalonews.com/city/communities/niagara-county/?widget=rssfeed&view=feed&contentId=77944'),
|
(u'Other Sports Columns', u'http://www.buffalonews.com/sports/columns/other-sports-columns/?widget=rssfeed&view=feed&contentId=77944'),
|
||||||
(u'Business', u'http://www.buffalonews.com/business/?widget=rssfeed&view=feed&contentId=77944'),
|
(u'Life', u'http://www.buffalonews.com/life/?widget=rssfeed&view=feed&contentId=77944'),
|
||||||
(u'MoneySmart', u'http://www.buffalonews.com/business/moneysmart/?widget=rssfeed&view=feed&contentId=77944'),
|
(u'Bruce Andriatch', u'http://www.buffalonews.com/city/columns/bruce-andriatch/?widget=rssfeed&view=feed&contentId=77944'),
|
||||||
(u'Bills & NFL', u'http://www.buffalonews.com/sports/bills-nfl/?widget=rssfeed&view=feed&contentId=77944'),
|
(u'Donn Esmonde', u'http://www.buffalonews.com/city/columns/donn-esmonde/?widget=rssfeed&view=feed&contentId=77944'),
|
||||||
(u'Sabres & NHL', u'http://www.buffalonews.com/sports/sabres-nhl/?widget=rssfeed&view=feed&contentId=77944'),
|
(u'Rod Watson', u'http://www.buffalonews.com/city/columns/rod-watson/?widget=rssfeed&view=feed&contentId=77944'),
|
||||||
(u'Bob DiCesare', u'http://www.buffalonews.com/sports/columns/bob-dicesare/?widget=rssfeed&view=feed&contentId=77944'),
|
(u'Entertainment', u'http://www.buffalonews.com/entertainment/?widget=rssfeed&view=feed&contentId=77944'),
|
||||||
(u'Bucky Gleason', u'http://www.buffalonews.com/sports/columns/bucky-gleason/?widget=rssfeed&view=feed&contentId=77944'),
|
(u'Off Main Street', u'http://www.buffalonews.com/city/columns/off-main-street/?widget=rssfeed&view=feed&contentId=77944'),
|
||||||
(u'Mark Gaughan', u'http://www.buffalonews.com/sports/bills-nfl/inside-the-nfl/?widget=rssfeed&view=feed&contentId=77944'),
|
(u'Editorials', u'http://www.buffalonews.com/editorial-page/buffalo-news-editorials/?widget=rssfeed&view=feed&contentId=77944')
|
||||||
(u'Mike Harrington', u'http://www.buffalonews.com/sports/columns/mike-harrington/?widget=rssfeed&view=feed&contentId=77944'),
|
|
||||||
(u'Jerry Sullivan', u'http://www.buffalonews.com/sports/columns/jerry-sullivan/?widget=rssfeed&view=feed&contentId=77944'),
|
|
||||||
(u'Other Sports Columns', u'http://www.buffalonews.com/sports/columns/other-sports-columns/?widget=rssfeed&view=feed&contentId=77944'),
|
|
||||||
(u'Life', u'http://www.buffalonews.com/life/?widget=rssfeed&view=feed&contentId=77944'),
|
|
||||||
(u'Bruce Andriatch', u'http://www.buffalonews.com/city/columns/bruce-andriatch/?widget=rssfeed&view=feed&contentId=77944'),
|
|
||||||
(u'Donn Esmonde', u'http://www.buffalonews.com/city/columns/donn-esmonde/?widget=rssfeed&view=feed&contentId=77944'),
|
|
||||||
(u'Rod Watson', u'http://www.buffalonews.com/city/columns/rod-watson/?widget=rssfeed&view=feed&contentId=77944'),
|
|
||||||
(u'Entertainment', u'http://www.buffalonews.com/entertainment/?widget=rssfeed&view=feed&contentId=77944'),
|
|
||||||
(u'Off Main Street', u'http://www.buffalonews.com/city/columns/off-main-street/?widget=rssfeed&view=feed&contentId=77944'),
|
|
||||||
(u'Editorials', u'http://www.buffalonews.com/editorial-page/buffalo-news-editorials/?widget=rssfeed&view=feed&contentId=77944')
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
57
recipes/bugun_gazetesi.recipe
Normal file
57
recipes/bugun_gazetesi.recipe
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Bugun (BasicNewsRecipe):
|
||||||
|
|
||||||
|
title = u'BUGÜN Gazetesi'
|
||||||
|
__author__ = u'thomass'
|
||||||
|
oldest_article = 2
|
||||||
|
max_articles_per_feed =100
|
||||||
|
#no_stylesheets = True
|
||||||
|
#delay = 1
|
||||||
|
use_embedded_content = False
|
||||||
|
encoding = 'UTF-8'
|
||||||
|
publisher = 'thomass'
|
||||||
|
category = 'news, haberler,TR,gazete'
|
||||||
|
language = 'tr'
|
||||||
|
publication_type = 'newspaper '
|
||||||
|
extra_css = ' div{font-size: small} h2{font-size: small;font-weight: bold} #ctl00_ortayer_haberBaslik{font-size:20px;font-weight: bold} '#h1{ font-size:10%;font-weight: bold} '#ctl00_ortayer_haberBaslik{ 'font-size:10%;font-weight: bold'}
|
||||||
|
#introduction{} .story-feature{display: block; padding: 0; border: 1px solid; width: 40%; font-size: small} .story-feature h2{text-align: center; text-transform: uppercase} '
|
||||||
|
conversion_options = {
|
||||||
|
'tags' : category
|
||||||
|
,'language' : language
|
||||||
|
,'publisher' : publisher
|
||||||
|
,'linearize_tables': True
|
||||||
|
}
|
||||||
|
cover_img_url = 'http://www.bugun.com.tr/images/bugunLogo2011.png'
|
||||||
|
masthead_url = 'http://www.bugun.com.tr/images/bugunLogo2011.png'
|
||||||
|
|
||||||
|
keep_only_tags = [dict(name='h1', attrs={'class':[ 'haberBaslik']}),dict(name='h2', attrs={'class':[ 'haberOzet']}), dict(name='div', attrs={'class':['haberGriDivvvv']}), dict(name='div', attrs={'id':[ 'haberTextDiv']}), ]
|
||||||
|
|
||||||
|
#keep_only_tags = [dict(name='div', attrs={'id':[ 'news-detail-content']}), dict(name='td', attrs={'class':['columnist-detail','columnist_head']}) ]
|
||||||
|
#remove_tags = [ dict(name='div', attrs={'id':['news-detail-news-text-font-size','news-detail-gallery','news-detail-news-bottom-social']}),dict(name='div', attrs={'class':['radioEmbedBg','radyoProgramAdi']}),dict(name='a', attrs={'class':['webkit-html-attribute-value webkit-html-external-link']}),dict(name='table', attrs={'id':['yaziYorumTablosu']}),dict(name='img', attrs={'src':['http://medya.zaman.com.tr/pics/paylas.gif','http://medya.zaman.com.tr/extentions/zaman.com.tr/img/columnist/ma-16.png']})]
|
||||||
|
|
||||||
|
|
||||||
|
#remove_attributes = ['width','height']
|
||||||
|
remove_empty_feeds= True
|
||||||
|
|
||||||
|
feeds = [
|
||||||
|
( u'Son Dakika', u'http://www.bugun.com.tr/haberler.xml'),
|
||||||
|
( u'Yazarlar', u'http://www.bugun.com.tr/rss/yazarlar.xml'),
|
||||||
|
( u'Gündem', u'http://www.bugun.com.tr/rss/gundem.xml'),
|
||||||
|
( u'Ekonomi', u'http://www.bugun.com.tr/rss/ekonomi.xml'),
|
||||||
|
( u'Spor', u'http://www.bugun.com.tr/rss/spor.xml'),
|
||||||
|
( u'Magazin', u'http://www.bugun.com.tr/rss/magazin.xml'),
|
||||||
|
( u'Teknoloji', u'http://www.bugun.com.tr/rss/teknoloji.xml'),
|
||||||
|
( u'Yaşam', u'http://www.bugun.com.tr/rss/yasam.xml'),
|
||||||
|
( u'Medya', u'http://www.bugun.com.tr/rss/medya.xml'),
|
||||||
|
( u'Dünya', u'http://www.bugun.com.tr/rss/dunya.xml'),
|
||||||
|
( u'Politika', u'http://www.bugun.com.tr/rss/politika.xml'),
|
||||||
|
( u'Sağlık', u'http://www.bugun.com.tr/rss/saglik.xml'),
|
||||||
|
( u'Tarifler', u'http://www.bugun.com.tr/rss/yemek-tarifi.xml'),
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
]
|
@ -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 = [
|
feeds = [
|
||||||
(u'Top Stories', u'http://www.businessweek.com/topStories/rss/topStories.rss'),
|
(u'Top Stories', u'http://www.businessweek.com/topStories/rss/topStories.rss'),
|
||||||
(u'Top News', u'http://www.businessweek.com/rss/bwdaily.rss'),
|
(u'Top News' , u'http://www.businessweek.com/rss/bwdaily.rss' ),
|
||||||
(u'Asia', u'http://www.businessweek.com/rss/asia.rss'),
|
(u'Asia', u'http://www.businessweek.com/rss/asia.rss'),
|
||||||
(u'Autos', u'http://www.businessweek.com/rss/autos/index.rss'),
|
(u'Autos', u'http://www.businessweek.com/rss/autos/index.rss'),
|
||||||
(u'Classic Cars', u'http://rss.businessweek.com/bw_rss/classiccars'),
|
(u'Classic Cars', u'http://rss.businessweek.com/bw_rss/classiccars'),
|
||||||
(u'Hybrids', u'http://rss.businessweek.com/bw_rss/hybrids'),
|
(u'Hybrids', u'http://rss.businessweek.com/bw_rss/hybrids'),
|
||||||
(u'Europe', u'http://www.businessweek.com/rss/europe.rss'),
|
(u'Europe', u'http://www.businessweek.com/rss/europe.rss'),
|
||||||
(u'Auto Reviews', u'http://rss.businessweek.com/bw_rss/autoreviews'),
|
(u'Auto Reviews', u'http://rss.businessweek.com/bw_rss/autoreviews'),
|
||||||
(u'Innovation & Design', u'http://www.businessweek.com/rss/innovate.rss'),
|
(u'Innovation & Design', u'http://www.businessweek.com/rss/innovate.rss'),
|
||||||
(u'Architecture', u'http://www.businessweek.com/rss/architecture.rss'),
|
(u'Architecture', u'http://www.businessweek.com/rss/architecture.rss'),
|
||||||
(u'Brand Equity', u'http://www.businessweek.com/rss/brandequity.rss'),
|
(u'Brand Equity', u'http://www.businessweek.com/rss/brandequity.rss'),
|
||||||
(u'Auto Design', u'http://www.businessweek.com/rss/carbuff.rss'),
|
(u'Auto Design', u'http://www.businessweek.com/rss/carbuff.rss'),
|
||||||
(u'Game Room', u'http://rss.businessweek.com/bw_rss/gameroom'),
|
(u'Game Room', u'http://rss.businessweek.com/bw_rss/gameroom'),
|
||||||
(u'Technology', u'http://www.businessweek.com/rss/technology.rss'),
|
(u'Technology', u'http://www.businessweek.com/rss/technology.rss'),
|
||||||
(u'Investing', u'http://rss.businessweek.com/bw_rss/investor'),
|
(u'Investing', u'http://rss.businessweek.com/bw_rss/investor'),
|
||||||
(u'Small Business', u'http://www.businessweek.com/rss/smallbiz.rss'),
|
(u'Small Business', u'http://www.businessweek.com/rss/smallbiz.rss'),
|
||||||
(u'Careers', u'http://rss.businessweek.com/bw_rss/careers'),
|
(u'Careers', u'http://rss.businessweek.com/bw_rss/careers'),
|
||||||
(u'B-Schools', u'http://www.businessweek.com/rss/bschools.rss'),
|
(u'B-Schools', u'http://www.businessweek.com/rss/bschools.rss'),
|
||||||
(u'Magazine Selections', u'http://www.businessweek.com/rss/magazine.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'),
|
(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:
|
||||||
|
continue
|
||||||
|
if tag.name == 'h2' and (inner_a is None or current_section is
|
||||||
|
None):
|
||||||
|
continue
|
||||||
|
|
||||||
|
if tag.name == 'h3':
|
||||||
|
if current_section is not None and articles:
|
||||||
|
feeds.append((current_section, articles))
|
||||||
|
current_section = self.tag_to_string(tag)
|
||||||
|
self.log('Found section:', current_section)
|
||||||
|
articles = []
|
||||||
|
elif tag.name == 'h2':
|
||||||
|
url = inner_a.get('href', None)
|
||||||
|
if url is None: continue
|
||||||
|
if url.startswith('/'): url = self.ROOT + url
|
||||||
|
title = self.tag_to_string(inner_a)
|
||||||
|
h1 = tag.findPreviousSibling('h1')
|
||||||
|
if h1 is not None:
|
||||||
|
title = self.tag_to_string(h1) + title
|
||||||
|
self.log('\tFound article:', title)
|
||||||
|
articles.append({'title':title, 'url':url, 'date':'',
|
||||||
|
'description':''})
|
||||||
|
|
||||||
|
if current_section and articles:
|
||||||
|
feeds.append((current_section, articles))
|
||||||
|
|
||||||
|
return feeds
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
tough = soup.find('div', attrs={'id':'tough'})
|
|
||||||
if tough:
|
|
||||||
for item in tough.findAll('h1'):
|
|
||||||
description = ''
|
|
||||||
title_prefix = ''
|
|
||||||
feed_link = item.find('a')
|
|
||||||
if feed_link and feed_link.has_key('href'):
|
|
||||||
url = self.ROOT + feed_link['href']
|
|
||||||
if not self.is_in_list(linklist,url):
|
|
||||||
title = title_prefix + self.tag_to_string(feed_link)
|
|
||||||
date = strftime(self.timefmt)
|
|
||||||
articles.append({
|
|
||||||
'title' :title
|
|
||||||
,'date' :date
|
|
||||||
,'url' :url
|
|
||||||
,'description':description
|
|
||||||
})
|
|
||||||
linklist.append(url)
|
|
||||||
|
|
||||||
for item in soup.findAll('div', attrs={'class':'nametitle'}):
|
|
||||||
description = ''
|
|
||||||
title_prefix = ''
|
|
||||||
feed_link = item.find('a')
|
|
||||||
if feed_link and feed_link.has_key('href'):
|
|
||||||
url = self.ROOT + feed_link['href']
|
|
||||||
if not self.is_in_list(linklist,url):
|
|
||||||
title = title_prefix + self.tag_to_string(feed_link)
|
|
||||||
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
|
|
||||||
|
@ -1,124 +1,35 @@
|
|||||||
#!/usr/bin/env python
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
__license__ = 'GPL v3'
|
class CalgaryHerald(BasicNewsRecipe):
|
||||||
|
title = u'Calgary Herald'
|
||||||
|
oldest_article = 3
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
|
||||||
'''
|
feeds = [
|
||||||
www.canada.com
|
(u'News', u'http://rss.canada.com/get/?F233'),
|
||||||
'''
|
(u'Calgary', u'http://www.calgaryherald.com/scripts/sp6query.aspx?catalog=cahr&tags=keyword|calgary&output=rss?link=http%3a%2f%2fwww.calgaryherald'),
|
||||||
|
(u'Alberta', u'http://www.calgaryherald.com/scripts/Sp6Query.aspx?catalog=CAHR&tags=Keyword|Alberta&output=rss?link=http%3A%2F%2Fwww.calgaryherald.com%2Fnews%2Falberta%2Findex.html'),
|
||||||
from calibre.web.feeds.recipes import BasicNewsRecipe
|
(u'Politics', u'http://rss.canada.com/get/?F7551'),
|
||||||
|
(u'National', u'http://rss.canada.com/get/?F7552'),
|
||||||
|
(u'World', u'http://rss.canada.com/get/?F7553'),
|
||||||
|
]
|
||||||
|
__author__ = 'rty'
|
||||||
|
pubisher = 'Calgary Herald'
|
||||||
|
description = 'Calgary, Alberta, Canada'
|
||||||
|
category = 'News, Calgary, Alberta, Canada'
|
||||||
|
|
||||||
|
|
||||||
class CanWestPaper(BasicNewsRecipe):
|
remove_javascript = True
|
||||||
|
use_embedded_content = False
|
||||||
# un-comment the following three lines for the Calgary Herald
|
|
||||||
title = u'Calgary Herald'
|
|
||||||
url_prefix = 'http://www.calgaryherald.com'
|
|
||||||
description = u'News from Calgary, AB'
|
|
||||||
|
|
||||||
# un-comment the following three lines for the Regina Leader-Post
|
|
||||||
#title = u'Regina Leader-Post'
|
|
||||||
#url_prefix = 'http://www.leaderpost.com'
|
|
||||||
#description = u'News from Regina, SK'
|
|
||||||
|
|
||||||
# un-comment the following three lines for the Saskatoon Star-Phoenix
|
|
||||||
#title = u'Saskatoon Star-Phoenix'
|
|
||||||
#url_prefix = 'http://www.thestarphoenix.com'
|
|
||||||
#description = u'News from Saskatoon, SK'
|
|
||||||
|
|
||||||
# un-comment the following three lines for the Windsor Star
|
|
||||||
#title = u'Windsor Star'
|
|
||||||
#url_prefix = 'http://www.windsorstar.com'
|
|
||||||
#description = u'News from Windsor, ON'
|
|
||||||
|
|
||||||
# un-comment the following three lines for the Ottawa Citizen
|
|
||||||
#title = u'Ottawa Citizen'
|
|
||||||
#url_prefix = 'http://www.ottawacitizen.com'
|
|
||||||
#description = u'News from Ottawa, ON'
|
|
||||||
|
|
||||||
# un-comment the following three lines for the Montreal Gazette
|
|
||||||
#title = u'Montreal Gazette'
|
|
||||||
#url_prefix = 'http://www.montrealgazette.com'
|
|
||||||
#description = u'News from Montreal, QC'
|
|
||||||
|
|
||||||
|
|
||||||
language = 'en_CA'
|
|
||||||
__author__ = 'Nick Redding'
|
|
||||||
encoding = 'latin1'
|
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
timefmt = ' [%b %d]'
|
language = 'en_CA'
|
||||||
extra_css = '''
|
encoding = 'utf-8'
|
||||||
.timestamp { font-size:xx-small; display: block; }
|
conversion_options = {'linearize_tables':True}
|
||||||
#storyheader { font-size: medium; }
|
##masthead_url = 'http://www.calgaryherald.com/index.html'
|
||||||
#storyheader h1 { font-size: x-large; }
|
keep_only_tags = [
|
||||||
#storyheader h2 { font-size: large; font-style: italic; }
|
dict(name='div', attrs={'id':'storyheader'}),
|
||||||
.byline { font-size:xx-small; }
|
dict(name='div', attrs={'id':'storycontent'})
|
||||||
#photocaption { font-size: small; font-style: italic }
|
|
||||||
#photocredit { font-size: xx-small; }'''
|
|
||||||
keep_only_tags = [dict(name='div', attrs={'id':'storyheader'}),dict(name='div', attrs={'id':'storycontent'})]
|
|
||||||
remove_tags = [{'class':'comments'},
|
|
||||||
dict(name='div', attrs={'class':'navbar'}),dict(name='div', attrs={'class':'morelinks'}),
|
|
||||||
dict(name='div', attrs={'class':'viewmore'}),dict(name='li', attrs={'class':'email'}),
|
|
||||||
dict(name='div', attrs={'class':'story_tool_hr'}),dict(name='div', attrs={'class':'clear'}),
|
|
||||||
dict(name='div', attrs={'class':'story_tool'}),dict(name='div', attrs={'class':'copyright'}),
|
|
||||||
dict(name='div', attrs={'class':'rule_grey_solid'}),
|
|
||||||
dict(name='li', attrs={'class':'print'}),dict(name='li', attrs={'class':'share'}),dict(name='ul', attrs={'class':'bullet'})]
|
|
||||||
|
|
||||||
def preprocess_html(self,soup):
|
]
|
||||||
#delete iempty id attributes--they screw up the TOC for unknow reasons
|
remove_tags_after = {'class':"story_tool_hr"}
|
||||||
divtags = soup.findAll('div',attrs={'id':''})
|
|
||||||
if divtags:
|
|
||||||
for div in divtags:
|
|
||||||
del(div['id'])
|
|
||||||
return soup
|
|
||||||
|
|
||||||
|
|
||||||
def parse_index(self):
|
|
||||||
soup = self.index_to_soup(self.url_prefix+'/news/todays-paper/index.html')
|
|
||||||
|
|
||||||
articles = {}
|
|
||||||
key = 'News'
|
|
||||||
ans = ['News']
|
|
||||||
|
|
||||||
# Find each instance of class="sectiontitle", class="featurecontent"
|
|
||||||
for divtag in soup.findAll('div',attrs={'class' : ["section_title02","featurecontent"]}):
|
|
||||||
#self.log(" div class = %s" % divtag['class'])
|
|
||||||
if divtag['class'].startswith('section_title'):
|
|
||||||
# div contains section title
|
|
||||||
if not divtag.h3:
|
|
||||||
continue
|
|
||||||
key = self.tag_to_string(divtag.h3,False)
|
|
||||||
ans.append(key)
|
|
||||||
self.log("Section name %s" % key)
|
|
||||||
continue
|
|
||||||
# div contains article data
|
|
||||||
h1tag = divtag.find('h1')
|
|
||||||
if not h1tag:
|
|
||||||
continue
|
|
||||||
atag = h1tag.find('a',href=True)
|
|
||||||
if not atag:
|
|
||||||
continue
|
|
||||||
url = atag['href']
|
|
||||||
if not url.startswith('http:'):
|
|
||||||
url = self.url_prefix+'/news/todays-paper/'+atag['href']
|
|
||||||
#self.log("Section %s" % key)
|
|
||||||
#self.log("url %s" % url)
|
|
||||||
title = self.tag_to_string(atag,False)
|
|
||||||
#self.log("title %s" % title)
|
|
||||||
pubdate = ''
|
|
||||||
description = ''
|
|
||||||
ptag = divtag.find('p');
|
|
||||||
if ptag:
|
|
||||||
description = self.tag_to_string(ptag,False)
|
|
||||||
#self.log("description %s" % description)
|
|
||||||
author = ''
|
|
||||||
autag = divtag.find('h4')
|
|
||||||
if autag:
|
|
||||||
author = self.tag_to_string(autag,False)
|
|
||||||
#self.log("author %s" % author)
|
|
||||||
if not articles.has_key(key):
|
|
||||||
articles[key] = []
|
|
||||||
articles[key].append(dict(title=title,url=url,date=pubdate,description=description,author=author,content=''))
|
|
||||||
|
|
||||||
ans = [(key, articles[key]) for key in ans if articles.has_key(key)]
|
|
||||||
return ans
|
|
||||||
|
18
recipes/calibre_blog.recipe
Normal file
18
recipes/calibre_blog.recipe
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class CalibreBlog(BasicNewsRecipe):
|
||||||
|
title = u'Calibre Blog'
|
||||||
|
language = 'en'
|
||||||
|
__author__ = 'Krittika Goyal'
|
||||||
|
oldest_article = 1000 #days
|
||||||
|
max_articles_per_feed = 5
|
||||||
|
use_embedded_content = False
|
||||||
|
|
||||||
|
no_stylesheets = True
|
||||||
|
auto_cleanup = True
|
||||||
|
|
||||||
|
|
||||||
|
feeds = [
|
||||||
|
('Article',
|
||||||
|
'http://blog.calibre-ebook.com/feeds/posts/default'),
|
||||||
|
]
|
17
recipes/camera_di_commercio_di_bari.recipe
Normal file
17
recipes/camera_di_commercio_di_bari.recipe
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class AdvancedUserRecipe1331729727(BasicNewsRecipe):
|
||||||
|
title = u'Camera di Commercio di Bari'
|
||||||
|
oldest_article = 7
|
||||||
|
__author__ = 'faber1971'
|
||||||
|
description = 'News from the Chamber of Commerce of Bari'
|
||||||
|
language = 'it'
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
auto_cleanup = True
|
||||||
|
masthead_url = 'http://www.ba.camcom.it/grafica/layout-bordo/logo_camcom_bari.png'
|
||||||
|
feeds = [(u'Camera di Commercio di Bari', u'http://feed43.com/4715147488845101.xml')]
|
||||||
|
|
||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = '2012, faber1971'
|
||||||
|
__version__ = 'v1.00'
|
||||||
|
__date__ = '17, April 2012'
|
35
recipes/capital_gr.recipe
Normal file
35
recipes/capital_gr.recipe
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
from calibre.web.feeds.recipes import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Capital(BasicNewsRecipe):
|
||||||
|
title = 'Capital.gr'
|
||||||
|
__author__ ='Stelios'
|
||||||
|
description = 'Financial News from Greece'
|
||||||
|
#max_articles_per_feed = 100
|
||||||
|
oldest_article = 3
|
||||||
|
publisher = 'Capital.gr'
|
||||||
|
category = 'news, GR'
|
||||||
|
language = 'el'
|
||||||
|
encoding = 'windows-1253'
|
||||||
|
cover_url = 'http://files.capital.gr/images/caplogo.gif'
|
||||||
|
no_stylesheets = True
|
||||||
|
use_embedded_content = False
|
||||||
|
remove_empty_feeds = True
|
||||||
|
keep_only_tags = [
|
||||||
|
dict(name='h1'),
|
||||||
|
dict(name='p'),
|
||||||
|
dict(name='span', attrs={'id' : ["textbody"]})
|
||||||
|
]
|
||||||
|
|
||||||
|
#3 posts seemed to have utf8 encoding
|
||||||
|
feeds = [
|
||||||
|
(u'\u039F\u039B\u0395\u03A3 \u039F\u0399 \u0395\u0399\u0394\u0397\u03A3\u0395\u0399\u03A3', 'http://www.capital.gr/news/newsrss.asp?s=-1'),
|
||||||
|
(u'\u0395\u03A0\u0399\u03A7\u0395\u0399\u03A1\u0397\u03A3\u0395\u0399\u03A3', 'http://www.capital.gr/news/newsrss.asp?s=-2'),
|
||||||
|
(u'\u0391\u0393\u039F\u03A1\u0395\u03A3', 'http://www.capital.gr/news/newsrss.asp?s=-3'),
|
||||||
|
(u'\u039F\u0399\u039A\u039F\u039D\u039F\u039C\u0399\u0391', 'http://www.capital.gr/news/newsrss.asp?s=-4'),
|
||||||
|
(u'\u03A7\u03A1\u0397\u039C. \u0391\u039D\u0391\u039A\u039F\u0399\u039D\u03A9\u03A3\u0395\u0399\u03A3', 'http://www.capital.gr/news/newsrss.asp?s=-6'),
|
||||||
|
(u'\u039C\u03CC\u03BD\u03B9\u03BC\u03B5\u03C2 \u03C3\u03C4\u03AE\u03BB\u03B5\u03C2: \u039C\u0395 \u0391\u03A0\u039F\u03A8\u0397', 'http://www.capital.gr/articles/articlesrss.asp?catid=4'),
|
||||||
|
(u'\u039C\u03CC\u03BD\u03B9\u03BC\u03B5\u03C2 \u03C3\u03C4\u03AE\u03BB\u03B5\u03C2: \u03A3\u0399\u03A9\u03A0\u0397\u03A4\u0397\u03A1\u0399\u039F', 'http://www.capital.gr/articles/articlesrss.asp?catid=6'),
|
||||||
|
(u'\u039C\u03CC\u03BD\u03B9\u03BC\u03B5\u03C2 \u03C3\u03C4\u03AE\u03BB\u03B5\u03C2: \u03A0\u0399\u03A3\u03A9 \u0391\u03A0\u039F \u03A4\u0399\u03A3 \u0393\u03A1\u0391\u039C\u039C\u0395\u03A3', 'http://www.capital.gr/articles/articlesrss.asp?catid=8'),
|
||||||
|
#(u'\u039C\u03CC\u03BD\u03B9\u03BC\u03B5\u03C2 \u03C3\u03C4\u03AE\u03BB\u03B5\u03C2: \u03A4\u0395\u03A7\u039D\u039F\u039B\u039F\u0393\u0399\u0391', 'http://www.capital.gr/news/newsrss.asp?s=-8') not working for now
|
||||||
|
]
|
||||||
|
|
@ -1,7 +1,5 @@
|
|||||||
__copyright__ = '2011, Pablo Aldama <pabloaldama at gmail.com>'
|
__copyright__ = '2011, Pablo Aldama <pabloaldama at gmail.com>'
|
||||||
|
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class AdvancedUserRecipe1311839910(BasicNewsRecipe):
|
class AdvancedUserRecipe1311839910(BasicNewsRecipe):
|
||||||
title = u'Caros Amigos'
|
title = u'Caros Amigos'
|
||||||
oldest_article = 20
|
oldest_article = 20
|
||||||
@ -9,9 +7,8 @@ class AdvancedUserRecipe1311839910(BasicNewsRecipe):
|
|||||||
language = 'pt_BR'
|
language = 'pt_BR'
|
||||||
__author__ = 'Pablo Aldama'
|
__author__ = 'Pablo Aldama'
|
||||||
|
|
||||||
feeds = [(u'Caros Amigos', u'http://carosamigos.terra.com.br/index/index.php?format=feed&type=rss')]
|
feeds = [(u'Caros Amigos', u'http://carosamigos.terra.com.br/index2/index.php?format=feed&type=rss')]
|
||||||
keep_only_tags = [dict(name='div', attrs={'class':['blog']})
|
keep_only_tags = [dict(name='div', attrs={'class':['blog']})
|
||||||
,dict(name='div', attrs={'class':['blogcontent']})
|
,dict(name='div', attrs={'class':['blogcontent']})
|
||||||
]
|
]
|
||||||
remove_tags = [dict(name='div', attrs={'class':'addtoany'})]
|
remove_tags = [dict(name='div', attrs={'class':'addtoany'})]
|
||||||
|
|
||||||
|
51
recipes/catavencii.recipe
Normal file
51
recipes/catavencii.recipe
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = u'2011, Silviu Cotoar\u0103'
|
||||||
|
'''
|
||||||
|
catavencii.ro
|
||||||
|
'''
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Catavencii(BasicNewsRecipe):
|
||||||
|
title = u'Ca\u0163avencii'
|
||||||
|
__author__ = u'Silviu Cotoar\u0103'
|
||||||
|
publisher = u'Ca\u0163avencii'
|
||||||
|
description = u'Ca\u0163avencii'
|
||||||
|
oldest_article = 5
|
||||||
|
language = 'ro'
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
no_stylesheets = True
|
||||||
|
use_embedded_content = False
|
||||||
|
category = 'Ziare,Romania'
|
||||||
|
encoding = 'utf-8'
|
||||||
|
cover_url = 'http://www.simonatache.ro/wp-content/uploads/2011/06/catavencii-logo.png'
|
||||||
|
|
||||||
|
conversion_options = {
|
||||||
|
'comments' : description
|
||||||
|
,'tags' : category
|
||||||
|
,'language' : language
|
||||||
|
,'publisher' : publisher
|
||||||
|
}
|
||||||
|
|
||||||
|
keep_only_tags = [
|
||||||
|
dict(name='div', attrs={'id':'content'})
|
||||||
|
]
|
||||||
|
|
||||||
|
remove_tags = [
|
||||||
|
dict(name='div', attrs={'id':'breadcrumbs'})
|
||||||
|
, dict(name='span', attrs={'class':'info'})
|
||||||
|
, dict(name='div', attrs={'id':'social-media-article'})
|
||||||
|
]
|
||||||
|
|
||||||
|
remove_tags_after = [
|
||||||
|
dict(name='div', attrs={'id':'social-media-article'})
|
||||||
|
]
|
||||||
|
feeds = [
|
||||||
|
(u'\u0218tiri', u'http://www.catavencii.ro/rss')
|
||||||
|
]
|
||||||
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
return self.adeify_images(soup)
|
@ -4,16 +4,16 @@
|
|||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = u'2011, Silviu Cotoar\u0103'
|
__copyright__ = u'2011, Silviu Cotoar\u0103'
|
||||||
'''
|
'''
|
||||||
catavencu.ro
|
academiacatavencu.info
|
||||||
'''
|
'''
|
||||||
|
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class Catavencu(BasicNewsRecipe):
|
class AcademiaCatavencu(BasicNewsRecipe):
|
||||||
title = u'Academia Ca\u0163avencu'
|
title = u'Academia Ca\u0163avencu'
|
||||||
__author__ = u'Silviu Cotoar\u0103'
|
__author__ = u'Silviu Cotoar\u0103'
|
||||||
description = 'Tagma cum laude'
|
description = 'Tagma cum laude'
|
||||||
publisher = 'Catavencu'
|
publisher = u'Ca\u0163avencu'
|
||||||
oldest_article = 5
|
oldest_article = 5
|
||||||
language = 'ro'
|
language = 'ro'
|
||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
@ -21,32 +21,31 @@ class Catavencu(BasicNewsRecipe):
|
|||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
category = 'Ziare'
|
category = 'Ziare'
|
||||||
encoding = 'utf-8'
|
encoding = 'utf-8'
|
||||||
cover_url = 'http://upload.wikimedia.org/wikipedia/en/1/1e/Academia_Catavencu.jpg'
|
cover_url = 'http://www.academiacatavencu.info/images/logo.png'
|
||||||
|
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
'comments' : description
|
'comments' : description
|
||||||
,'tags' : category
|
,'tags' : category
|
||||||
,'language' : language
|
,'language' : language
|
||||||
,'publisher' : publisher
|
,'publisher' : publisher
|
||||||
}
|
}
|
||||||
|
|
||||||
keep_only_tags = [
|
keep_only_tags = [
|
||||||
dict(name='ul', attrs={'class':'articles'})
|
dict(name='h1', attrs={'class':'art_title'}),
|
||||||
|
dict(name='div', attrs={'class':'art_text'})
|
||||||
]
|
]
|
||||||
|
|
||||||
remove_tags = [
|
remove_tags = [
|
||||||
dict(name='div', attrs={'class':['tools']})
|
dict(name='div', attrs={'class':['desp_m']})
|
||||||
, dict(name='div', attrs={'class':['share']})
|
, dict(name='div', attrs={'id':['tags']})
|
||||||
, dict(name='div', attrs={'class':['category']})
|
|
||||||
, dict(name='div', attrs={'id':['comments']})
|
|
||||||
]
|
]
|
||||||
|
|
||||||
remove_tags_after = [
|
remove_tags_after = [
|
||||||
dict(name='div', attrs={'id':'comments'})
|
dict(name='div', attrs={'class':['desp_m']})
|
||||||
]
|
]
|
||||||
|
|
||||||
feeds = [
|
feeds = [
|
||||||
(u'Feeds', u'http://catavencu.ro/feed/rss')
|
(u'Feeds', u'http://www.academiacatavencu.info/rss.xml')
|
||||||
]
|
]
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
def preprocess_html(self, soup):
|
||||||
|
11
recipes/catholic_daily_readings.recipe
Normal file
11
recipes/catholic_daily_readings.recipe
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class BasicUserRecipe1328971305(BasicNewsRecipe):
|
||||||
|
title = u'Catholic Daily Readings'
|
||||||
|
language = 'en'
|
||||||
|
__author__ = 'adoucette'
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
auto_cleanup = True
|
||||||
|
|
||||||
|
feeds = [(u'Daily Readings - USCCB', u'http://www.usccb.org/bible/readings/rss/'), (u'Daily Reflection - One Bread One Body', u'http://www.presentationministries.com/general/rss.asp'), (u'Mass Readings - Universalis', u'http://www.universalis.com/atommass3.xml'), (u'Saint Of The Day - CNA', u'http://feeds.feedburner.com/catholicnewsagency/saintoftheday')]
|
73
recipes/cbn.recipe
Normal file
73
recipes/cbn.recipe
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
|
||||||
|
class CBN(BasicNewsRecipe):
|
||||||
|
title = u'CBN News'
|
||||||
|
__author__ = 'Roger'
|
||||||
|
# TODO: I just noticed this is downloading 25+ articles, while
|
||||||
|
# the online site is only publishing at most 7 articles daily.
|
||||||
|
# So, somehow this needs to be fixed it only downloads max 7 articles
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
|
||||||
|
description = 'The Christian Broadcasting Network'
|
||||||
|
publisher = 'http://www.cbn.com/'
|
||||||
|
category = 'news, religion, spiritual, christian'
|
||||||
|
language = 'en'
|
||||||
|
|
||||||
|
# Make article titles, author and date bold, italic or small font.
|
||||||
|
# TODO: Could use a smaller title text
|
||||||
|
# TODO: Italicize Author and Publisher?
|
||||||
|
#
|
||||||
|
# http://www.cbn.com/App_Themes/Common/base.css,
|
||||||
|
# http://www.cbn.com/App_Themes/CBNNews/article.css",
|
||||||
|
# ... and many more style sheets.
|
||||||
|
#extra_css = '''
|
||||||
|
# .story_item_headline { font-size: medium; font-weight: bold; }
|
||||||
|
# .story_item_author { font-size: small; font-style:italic; }
|
||||||
|
# .signature_line { font-size: small; }
|
||||||
|
# '''
|
||||||
|
|
||||||
|
remove_javascript = True
|
||||||
|
use_embedded_content = False
|
||||||
|
no_stylesheets = True
|
||||||
|
language = 'en'
|
||||||
|
encoding = 'iso-8859-1'
|
||||||
|
conversion_options = {'linearize_tables':True}
|
||||||
|
|
||||||
|
# TODO: No masterhead_url for CBN, using one I grepped from a news article
|
||||||
|
# (There's a better/higher contrast blue on white background image, but
|
||||||
|
# can't get it or it's too big -- embedded into a larger jpeg?)
|
||||||
|
masthead_url = 'http://www.cbn.com/templates/images/cbn_com_logo.jpg'
|
||||||
|
|
||||||
|
keep_only_tags = [
|
||||||
|
dict(name='h1', attrs={'id':'articleTitle'}),
|
||||||
|
dict(name='div', attrs={'class':'articleAuthor'}),
|
||||||
|
dict(name='div', attrs={'class':'articleDate'}),
|
||||||
|
dict(name='div', attrs={'class':'articleText'}),
|
||||||
|
]
|
||||||
|
|
||||||
|
remove_tags = [
|
||||||
|
# The article image is usually Adobe Flash Player Image
|
||||||
|
# The snapshot .jpg image files of the video are found
|
||||||
|
# within a URL folder named "PageFiles_Files"
|
||||||
|
# Filter this for now.
|
||||||
|
# (Majority of images seem to be Adobe Flash.)
|
||||||
|
dict(name='div', attrs={'class':'articleImage'}),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# Comment-out or uncomment any of the following RSS feeds according to your
|
||||||
|
# liking.
|
||||||
|
# A full list can be found here: http://www.cbn.com/rss.aspx
|
||||||
|
|
||||||
|
feeds = [
|
||||||
|
(u'World', u'http://www.cbn.com/cbnnews/world/feed/'),
|
||||||
|
(u'US', u'http://www.cbn.com/cbnnews/us/feed/'),
|
||||||
|
(u'Inside Israel', u'http://www.cbn.com/cbnnews/insideisrael/feed/'),
|
||||||
|
(u'Politics', u'http://www.cbn.com/cbnnews/politics/feed/'),
|
||||||
|
(u'Christian World News', u'http://www.cbn.com/cbnnews/shows/cwn/feed/'),
|
||||||
|
(u'Health and Science', u'http://www.cbn.com/cbnnews/healthscience/feed/'),
|
||||||
|
(u'Finance', u'http://www.cbn.com/cbnnews/finance/feed/'),
|
||||||
|
]
|
||||||
|
|
27
recipes/cd_action.recipe
Normal file
27
recipes/cd_action.recipe
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class CD_Action(BasicNewsRecipe):
|
||||||
|
title = u'CD-Action'
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = 'cdaction.pl - polish games magazine site'
|
||||||
|
category = 'games'
|
||||||
|
language = 'pl'
|
||||||
|
index='http://www.cdaction.pl'
|
||||||
|
oldest_article = 8
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
no_stylesheets= True
|
||||||
|
keep_only_tags= dict(id='news_content')
|
||||||
|
remove_tags_after= dict(name='div', attrs={'class':'tresc'})
|
||||||
|
feeds = [(u'Newsy', u'http://www.cdaction.pl/rss_newsy.xml')]
|
||||||
|
|
||||||
|
|
||||||
|
def get_cover_url(self):
|
||||||
|
soup = self.index_to_soup('http://www.cdaction.pl/magazyn/')
|
||||||
|
self.cover_url='http://www.cdaction.pl'+ soup.find(id='wspolnik').div.a['href']
|
||||||
|
return getattr(self, 'cover_url', self.cover_url)
|
||||||
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
for a in soup('a'):
|
||||||
|
if a.has_key('href') and 'http://' not in a['href'] and 'https://' not in a['href']:
|
||||||
|
a['href']=self.index + a['href']
|
||||||
|
return soup
|
45
recipes/cgm_pl.recipe
Normal file
45
recipes/cgm_pl.recipe
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
from calibre.ebooks.BeautifulSoup import BeautifulSoup
|
||||||
|
|
||||||
|
class CGM(BasicNewsRecipe):
|
||||||
|
title = u'CGM'
|
||||||
|
oldest_article = 7
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = u'Codzienna Gazeta Muzyczna'
|
||||||
|
masthead_url='http://www.cgm.pl/img/header/logo.gif'
|
||||||
|
cover_url = 'http://www.krafcy.com/foto/tinymce/Image/cgm%281%29.jpg'
|
||||||
|
category = 'music'
|
||||||
|
language = 'pl'
|
||||||
|
use_embedded_content = False
|
||||||
|
remove_empty_feeds= True
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
no_stylesheers=True
|
||||||
|
extra_css = 'div {color:black;} strong {color:black;} span {color:black;} p {color:black;} h2 {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):
|
||||||
|
gallery=soup.find('div', attrs={'class':'galleryFlash'})
|
||||||
|
if gallery:
|
||||||
|
img=gallery.div
|
||||||
|
gallery.img.extract()
|
||||||
|
if img:
|
||||||
|
img=img['style']
|
||||||
|
img='http://www.cgm.pl'+img[img.find('url(')+4:img.find(')')]
|
||||||
|
gallery.contents[1].name='img'
|
||||||
|
gallery.contents[1]['src']=img
|
||||||
|
pos = len(gallery.contents)
|
||||||
|
gallery.insert(pos, BeautifulSoup('<br />'))
|
||||||
|
for item in soup.findAll(style=True):
|
||||||
|
del item['style']
|
||||||
|
ad=soup.findAll('a')
|
||||||
|
for r in ad:
|
||||||
|
if 'www.hustla.pl' in r['href'] or 'www.ebilet.pl' in r['href']:
|
||||||
|
r.extract()
|
||||||
|
return soup
|
@ -3,26 +3,31 @@ __license__ = 'GPL 3'
|
|||||||
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
|
||||||
__docformat__ = 'restructuredtext en'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
|
import urllib, re
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class ChicagoTribune(BasicNewsRecipe):
|
class ChicagoTribune(BasicNewsRecipe):
|
||||||
|
|
||||||
title = 'Chicago Tribune'
|
title = 'Chicago Tribune'
|
||||||
__author__ = 'Kovid Goyal and Sujata Raman'
|
__author__ = 'Kovid Goyal and Sujata Raman, a.peter'
|
||||||
description = 'Politics, local and business news from Chicago'
|
description = 'Politics, local and business news from Chicago'
|
||||||
language = 'en'
|
language = 'en'
|
||||||
|
version = 2
|
||||||
|
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
remove_javascript = True
|
remove_javascript = True
|
||||||
|
recursions = 1
|
||||||
|
|
||||||
keep_only_tags = [dict(name='div', attrs={'class':["story","entry-asset asset hentry"]}),
|
keep_only_tags = [dict(name='div', attrs={'class':["story","entry-asset asset hentry"]}),
|
||||||
dict(name='div', attrs={'id':["pagebody","story","maincontentcontainer"]}),
|
dict(name='div', attrs={'id':["pagebody","story","maincontentcontainer"]}),
|
||||||
]
|
]
|
||||||
remove_tags_after = [ {'class':['photo_article',]} ]
|
remove_tags_after = [{'class':['photo_article',]}]
|
||||||
|
|
||||||
remove_tags = [{'id':["moduleArticleTools","content-bottom","rail","articleRelates module","toolSet","relatedrailcontent","div-wrapper","beta","atp-comments","footer"]},
|
match_regexps = [r'page=[0-9]+']
|
||||||
{'class':["clearfix","relatedTitle","articleRelates module","asset-footer","tools","comments","featurePromo","featurePromo fp-topjobs brownBackground","clearfix fullSpan brownBackground","curvedContent"]},
|
|
||||||
|
remove_tags = [{'id':["moduleArticleTools","content-bottom","rail","articleRelates module","toolSet","relatedrailcontent","div-wrapper","beta","atp-comments","footer",'gallery-subcontent','subFooter']},
|
||||||
|
{'class':["clearfix","relatedTitle","articleRelates module","asset-footer","tools","comments","featurePromo","featurePromo fp-topjobs brownBackground","clearfix fullSpan brownBackground","curvedContent",'nextgen-share-tools','outbrainTools', 'google-ad-story-bottom']},
|
||||||
dict(name='font',attrs={'id':["cr-other-headlines"]})]
|
dict(name='font',attrs={'id':["cr-other-headlines"]})]
|
||||||
extra_css = '''
|
extra_css = '''
|
||||||
h1{font-family:Arial,Helvetica,sans-serif; font-weight:bold;font-size:large;}
|
h1{font-family:Arial,Helvetica,sans-serif; font-weight:bold;font-size:large;}
|
||||||
@ -37,7 +42,7 @@ class ChicagoTribune(BasicNewsRecipe):
|
|||||||
.maincontentcontainer{font-family:Arial,Helvetica,sans-serif;font-size:small;}
|
.maincontentcontainer{font-family:Arial,Helvetica,sans-serif;font-size:small;}
|
||||||
.story-body{font-family:Arial,Helvetica,sans-serif;font-size:small;}
|
.story-body{font-family:Arial,Helvetica,sans-serif;font-size:small;}
|
||||||
body{font-family:Helvetica,Arial,sans-serif;font-size:small;}
|
body{font-family:Helvetica,Arial,sans-serif;font-size:small;}
|
||||||
'''
|
'''
|
||||||
feeds = [
|
feeds = [
|
||||||
('Latest news', 'http://feeds.chicagotribune.com/chicagotribune/news/'),
|
('Latest news', 'http://feeds.chicagotribune.com/chicagotribune/news/'),
|
||||||
('Local news', 'http://feeds.chicagotribune.com/chicagotribune/news/local/'),
|
('Local news', 'http://feeds.chicagotribune.com/chicagotribune/news/local/'),
|
||||||
@ -73,11 +78,32 @@ class ChicagoTribune(BasicNewsRecipe):
|
|||||||
|
|
||||||
|
|
||||||
def get_article_url(self, article):
|
def get_article_url(self, article):
|
||||||
print article.get('feedburner_origlink', article.get('guid', article.get('link')))
|
ans = None
|
||||||
return article.get('feedburner_origlink', article.get('guid', article.get('link')))
|
try:
|
||||||
|
s = article.summary
|
||||||
|
ans = urllib.unquote(
|
||||||
|
re.search(r'href=".+?bookmark.cfm.+?link=(.+?)"', s).group(1))
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
if ans is None:
|
||||||
|
ans = article.get('feedburner_origlink', article.get('guid', article.get('link')))
|
||||||
|
if ans is not None:
|
||||||
|
return ans.replace('?track=rss', '')
|
||||||
|
|
||||||
|
def skip_ad_pages(self, soup):
|
||||||
|
text = soup.find(text='click here to continue to article')
|
||||||
|
if text:
|
||||||
|
a = text.parent
|
||||||
|
url = a.get('href')
|
||||||
|
if url:
|
||||||
|
return self.index_to_soup(url, raw=True)
|
||||||
|
|
||||||
def postprocess_html(self, soup, first_fetch):
|
def postprocess_html(self, soup, first_fetch):
|
||||||
|
# Remove the navigation bar. It was kept until now to be able to follow
|
||||||
|
# the links to further pages. But now we don't need them anymore.
|
||||||
|
for nav in soup.findAll(attrs={'class':['toppaginate','article-nav clearfix']}):
|
||||||
|
nav.extract()
|
||||||
|
|
||||||
for t in soup.findAll(['table', 'tr', 'td']):
|
for t in soup.findAll(['table', 'tr', 'td']):
|
||||||
t.name = 'div'
|
t.name = 'div'
|
||||||
|
|
||||||
@ -88,4 +114,3 @@ class ChicagoTribune(BasicNewsRecipe):
|
|||||||
|
|
||||||
return soup
|
return soup
|
||||||
|
|
||||||
|
|
||||||
|
29
recipes/china_post.recipe
Normal file
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'),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
@ -33,6 +33,32 @@ class ChristianScienceMonitor(BasicNewsRecipe):
|
|||||||
|
|
||||||
remove_javascript = True
|
remove_javascript = True
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
|
requires_version = (0, 8, 39)
|
||||||
|
|
||||||
|
def preprocess_raw_html(self, raw, url):
|
||||||
|
try:
|
||||||
|
from html5lib import parse
|
||||||
|
root = parse(raw, namespaceHTMLElements=False,
|
||||||
|
treebuilder='lxml').getroot()
|
||||||
|
from lxml import etree
|
||||||
|
for tag in root.xpath(
|
||||||
|
'//script|//style|//noscript|//meta|//link|//object'):
|
||||||
|
tag.getparent().remove(tag)
|
||||||
|
for elem in list(root.iterdescendants(tag=etree.Comment)):
|
||||||
|
elem.getparent().remove(elem)
|
||||||
|
ans = etree.tostring(root, encoding=unicode)
|
||||||
|
ans = re.sub('.*<html', '<html', ans, flags=re.DOTALL)
|
||||||
|
return ans
|
||||||
|
except:
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
raise
|
||||||
|
|
||||||
|
def index_to_soup(self, url):
|
||||||
|
raw = BasicNewsRecipe.index_to_soup(self, url,
|
||||||
|
raw=True).decode('utf-8')
|
||||||
|
raw = self.preprocess_raw_html(raw, url)
|
||||||
|
return BasicNewsRecipe.index_to_soup(self, raw)
|
||||||
|
|
||||||
def append_page(self, soup, appendtag, position):
|
def append_page(self, soup, appendtag, position):
|
||||||
nav = soup.find('div',attrs={'class':'navigation'})
|
nav = soup.find('div',attrs={'class':'navigation'})
|
||||||
@ -78,14 +104,6 @@ class ChristianScienceMonitor(BasicNewsRecipe):
|
|||||||
print_soup = soup
|
print_soup = soup
|
||||||
return print_soup
|
return print_soup
|
||||||
|
|
||||||
preprocess_regexps = [ (re.compile(i[0], re.IGNORECASE | re.DOTALL), i[1]) for i in
|
|
||||||
[
|
|
||||||
(r'<!--.*?-->', lambda match : ''),
|
|
||||||
(r'<body.*?<div id="story"', lambda match : '<body><div id="story"'),
|
|
||||||
(r'<div class="pubdate">.*?</div>', lambda m: ''),
|
|
||||||
(r'Full HTML version of this story which may include photos, graphics, and related links.*</body>',
|
|
||||||
lambda match : '</body>'),
|
|
||||||
]]
|
|
||||||
extra_css = '''
|
extra_css = '''
|
||||||
h1{ color:#000000;font-family: Georgia,Times,"Times New Roman",serif; font-size: large}
|
h1{ color:#000000;font-family: Georgia,Times,"Times New Roman",serif; font-size: large}
|
||||||
.sub{ color:#000000;font-family: Georgia,Times,"Times New Roman",serif; font-size: small;}
|
.sub{ color:#000000;font-family: Georgia,Times,"Times New Roman",serif; font-size: small;}
|
||||||
|
@ -1,35 +1,52 @@
|
|||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class Cicero(BasicNewsRecipe):
|
class BasicUserRecipe1316245412(BasicNewsRecipe):
|
||||||
timefmt = ' [%Y-%m-%d]'
|
#from calibre.utils.magick import Image, PixelWand
|
||||||
title = u'Cicero'
|
title = u'Cicero Online'
|
||||||
__author__ = 'mad@sharktooth.de'
|
description = u'Magazin f\xfcr politische Kultur (RSS Version)'
|
||||||
description = u'Magazin f\xfcr politische Kultur'
|
publisher = 'Ringier Publishing GmbH'
|
||||||
|
category = 'news, politics, Germany'
|
||||||
|
language = 'de'
|
||||||
|
encoding = 'UTF-8'
|
||||||
|
__author__ = 'Armin Geller' # Upd. 2011-09-23
|
||||||
|
|
||||||
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",
|
||||||
(u'Das gesamte Portfolio', u'http://www.cicero.de/rss/rss.php?ress_id='),
|
"breadcrumb-title", "meta", "comment-wrapper",
|
||||||
#(u'Alle Heft-Inhalte', u'http://www.cicero.de/rss/rss.php?ress_id=heft'),
|
"field field-name-field-show-teaser-right field-type-list-boolean field-label-above",
|
||||||
#(u'Alle Online-Inhalte', u'http://www.cicero.de/rss/rss.php?ress_id=online'),
|
"page-header",
|
||||||
#(u'Berliner Republik', u'http://www.cicero.de/rss/rss.php?ress_id=4'),
|
"view view-alle-karikaturen view-id-alle_karikaturen view-display-id-default view-dom-id-1",
|
||||||
#(u'Weltb\xfchne', u'http://www.cicero.de/rss/rss.php?ress_id=1'),
|
"pagination",
|
||||||
#(u'Salon', u'http://www.cicero.de/rss/rss.php?ress_id=7'),
|
"view view-letzte-videos view-id-letzte_videos view-display-id-default view-dom-id-1",
|
||||||
#(u'Kapital', u'http://www.cicero.de/rss/rss.php?ress_id=6'),
|
"view view-letzte-videos view-id-letzte_videos view-display-id-default view-dom-id-2", # 2011-09-23
|
||||||
#(u'Netzst\xfccke', u'http://www.cicero.de/rss/rss.php?ress_id=9'),
|
"view view-alle-karikaturen view-id-alle_karikaturen view-display-id-default view-dom-id-2", # 2011-09-23
|
||||||
#(u'Leinwand', u'http://www.cicero.de/rss/rss.php?ress_id=12'),
|
]}),
|
||||||
#(u'Bibliothek', u'http://www.cicero.de/rss/rss.php?ress_id=15'),
|
dict(name='div', attrs={'title':["Dossier Auswahl"]}),
|
||||||
(u'Kolumne - Alle Kolulmnen', u'http://www.cicero.de/rss/rss2.php?ress_id='),
|
dict(name='h2', attrs={'class':["title comment-form"]}),
|
||||||
#(u'Kolumne - Schreiber, Berlin', u'http://www.cicero.de/rss/rss2.php?ress_id=35'),
|
dict(name='form', attrs={'class':["comment-form user-info-from-cookie"]}),
|
||||||
#(u'Kolumne - TV Kritik', u'http://www.cicero.de/rss/rss2.php?ress_id=34')
|
dict(name='table', attrs={'class':["mcx-social-horizontal", "page-header"]}),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
feeds = [
|
||||||
|
(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!
|
||||||
|
|
||||||
|
48
recipes/ciekawostki_historyczne.recipe
Normal file
48
recipes/ciekawostki_historyczne.recipe
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
import re
|
||||||
|
class Ciekawostki_Historyczne(BasicNewsRecipe):
|
||||||
|
title = u'Ciekawostki Historyczne'
|
||||||
|
oldest_article = 7
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = u'Serwis popularnonaukowy - odkrycia, kontrowersje, historia, ciekawostki, badania, ciekawostki z przeszłości.'
|
||||||
|
category = 'history'
|
||||||
|
language = 'pl'
|
||||||
|
masthead_url= 'http://ciekawostkihistoryczne.pl/wp-content/themes/Wordpress_Magazine/images/logo-ciekawostki-historyczne-male.jpg'
|
||||||
|
cover_url='http://ciekawostkihistoryczne.pl/wp-content/themes/Wordpress_Magazine/images/logo-ciekawostki-historyczne-male.jpg'
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
preprocess_regexps = [(re.compile(ur'Ten artykuł ma kilka stron.*?</fb:like>', re.DOTALL), lambda match: ''), (re.compile(ur'<h2>Zobacz też:</h2>.*?</ol>', re.DOTALL), lambda match: '')]
|
||||||
|
no_stylesheets=True
|
||||||
|
remove_empty_feeds=True
|
||||||
|
keep_only_tags=[dict(name='div', attrs={'class':'post'})]
|
||||||
|
remove_tags=[dict(id='singlepostinfo')]
|
||||||
|
feeds = [(u'Staro\u017cytno\u015b\u0107', u'http://ciekawostkihistoryczne.pl/tag/starozytnosc/feed/'), (u'\u015aredniowiecze', u'http://ciekawostkihistoryczne.pl/tag/sredniowiecze/feed/'), (u'Nowo\u017cytno\u015b\u0107', u'http://ciekawostkihistoryczne.pl/tag/nowozytnosc/feed/'), (u'XIX wiek', u'http://ciekawostkihistoryczne.pl/tag/xix-wiek/feed/'), (u'1914-1939', u'http://ciekawostkihistoryczne.pl/tag/1914-1939/feed/'), (u'1939-1945', u'http://ciekawostkihistoryczne.pl/tag/1939-1945/feed/'), (u'Powojnie (od 1945)', u'http://ciekawostkihistoryczne.pl/tag/powojnie/feed/'), (u'Recenzje', u'http://ciekawostkihistoryczne.pl/category/recenzje/feed/')]
|
||||||
|
|
||||||
|
def append_page(self, soup, appendtag):
|
||||||
|
tag=soup.find(name='h7')
|
||||||
|
if tag:
|
||||||
|
if tag.br:
|
||||||
|
pass
|
||||||
|
elif tag.nextSibling.name=='p':
|
||||||
|
tag=tag.nextSibling
|
||||||
|
nexturl = tag.findAll('a')
|
||||||
|
for nextpage in nexturl:
|
||||||
|
tag.extract()
|
||||||
|
nextpage= nextpage['href']
|
||||||
|
soup2 = self.index_to_soup(nextpage)
|
||||||
|
pagetext = soup2.find(name='div', attrs={'class':'post'})
|
||||||
|
for r in pagetext.findAll('div', attrs={'id':'singlepostinfo'}):
|
||||||
|
r.extract()
|
||||||
|
for r in pagetext.findAll('div', attrs={'class':'wp-caption alignright'}):
|
||||||
|
r.extract()
|
||||||
|
for r in pagetext.findAll('h1'):
|
||||||
|
r.extract()
|
||||||
|
pagetext.find('h6').nextSibling.extract()
|
||||||
|
pagetext.find('h7').nextSibling.extract()
|
||||||
|
pos = len(appendtag.contents)
|
||||||
|
appendtag.insert(pos, pagetext)
|
||||||
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
self.append_page(soup, soup.body)
|
||||||
|
return soup
|
||||||
|
|
||||||
|
|
128
recipes/cio_magazine.recipe
Normal file
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
|
@ -23,7 +23,9 @@ class TheCND(BasicNewsRecipe):
|
|||||||
remove_tags = [dict(name='table', attrs={'align':'right'}), dict(name='img', attrs={'src':'http://my.cnd.org/images/logo.gif'}), dict(name='hr', attrs={}), dict(name='small', attrs={})]
|
remove_tags = [dict(name='table', attrs={'align':'right'}), dict(name='img', attrs={'src':'http://my.cnd.org/images/logo.gif'}), dict(name='hr', attrs={}), dict(name='small', attrs={})]
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
|
|
||||||
preprocess_regexps = [(re.compile(r'<!--.*?-->', re.DOTALL), lambda m: '')]
|
preprocess_regexps = [ (re.compile(r'<!--.*?-->', re.DOTALL), lambda m: ''),
|
||||||
|
(re.compile('<table width.*?</table>', re.DOTALL), lambda m: ''),
|
||||||
|
]
|
||||||
|
|
||||||
def print_version(self, url):
|
def print_version(self, url):
|
||||||
if url.find('news/article.php') >= 0:
|
if url.find('news/article.php') >= 0:
|
||||||
@ -46,13 +48,15 @@ class TheCND(BasicNewsRecipe):
|
|||||||
title = self.tag_to_string(a)
|
title = self.tag_to_string(a)
|
||||||
self.log('\tFound article: ', title, 'at', url)
|
self.log('\tFound article: ', title, 'at', url)
|
||||||
date = a.nextSibling
|
date = a.nextSibling
|
||||||
|
if re.search('cm', date):
|
||||||
|
continue
|
||||||
if (date is not None) and len(date)>2:
|
if (date is not None) and len(date)>2:
|
||||||
if not articles.has_key(date):
|
if not articles.has_key(date):
|
||||||
articles[date] = []
|
articles[date] = []
|
||||||
articles[date].append({'title':title, 'url':url, 'description': '', 'date':''})
|
articles[date].append({'title':title, 'url':url, 'description': '', 'date':''})
|
||||||
self.log('\t\tAppend to : ', date)
|
self.log('\t\tAppend to : ', date)
|
||||||
|
|
||||||
self.log('log articles', articles)
|
#self.log('log articles', articles)
|
||||||
mostCurrent = sorted(articles).pop()
|
mostCurrent = sorted(articles).pop()
|
||||||
self.title = 'CND ' + mostCurrent
|
self.title = 'CND ' + mostCurrent
|
||||||
|
|
||||||
|
72
recipes/cnd_weekly.recipe
Normal file
72
recipes/cnd_weekly.recipe
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = '2010, Derek Liang <Derek.liang.ca @@@at@@@ gmail.com>'
|
||||||
|
'''
|
||||||
|
cnd.org
|
||||||
|
'''
|
||||||
|
import re
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class TheCND(BasicNewsRecipe):
|
||||||
|
|
||||||
|
title = 'CND Weekly'
|
||||||
|
__author__ = 'Derek Liang'
|
||||||
|
description = ''
|
||||||
|
INDEX = 'http://cnd.org'
|
||||||
|
language = 'zh'
|
||||||
|
conversion_options = {'linearize_tables':True}
|
||||||
|
|
||||||
|
remove_tags_before = dict(name='div', id='articleHead')
|
||||||
|
remove_tags_after = dict(id='copyright')
|
||||||
|
remove_tags = [dict(name='table', attrs={'align':'right'}), dict(name='img', attrs={'src':'http://my.cnd.org/images/logo.gif'}), dict(name='hr', attrs={}), dict(name='small', attrs={})]
|
||||||
|
no_stylesheets = True
|
||||||
|
|
||||||
|
preprocess_regexps = [ (re.compile(r'<!--.*?-->', re.DOTALL), lambda m: ''),
|
||||||
|
(re.compile('<table width.*?</table>', re.DOTALL), lambda m: ''),
|
||||||
|
]
|
||||||
|
|
||||||
|
def print_version(self, url):
|
||||||
|
if url.find('news/article.php') >= 0:
|
||||||
|
return re.sub("^[^=]*", "http://my.cnd.org/modules/news/print.php?storyid", url)
|
||||||
|
else:
|
||||||
|
return re.sub("^[^=]*", "http://my.cnd.org/modules/wfsection/print.php?articleid", url)
|
||||||
|
|
||||||
|
def parse_index(self):
|
||||||
|
soup = self.index_to_soup(self.INDEX)
|
||||||
|
|
||||||
|
feeds = []
|
||||||
|
articles = {}
|
||||||
|
|
||||||
|
for a in soup.findAll('a', attrs={'target':'_cnd'}):
|
||||||
|
url = a['href']
|
||||||
|
if url.find('article.php') < 0 :
|
||||||
|
continue
|
||||||
|
if url.startswith('/'):
|
||||||
|
url = 'http://cnd.org'+url
|
||||||
|
title = self.tag_to_string(a)
|
||||||
|
date = a.nextSibling
|
||||||
|
if not re.search('cm', date):
|
||||||
|
continue
|
||||||
|
self.log('\tFound article: ', title, 'at', url, '@', date)
|
||||||
|
if (date is not None) and len(date)>2:
|
||||||
|
if not articles.has_key(date):
|
||||||
|
articles[date] = []
|
||||||
|
articles[date].append({'title':title, 'url':url, 'description': '', 'date':''})
|
||||||
|
self.log('\t\tAppend to : ', date)
|
||||||
|
|
||||||
|
|
||||||
|
sorted_articles = sorted(articles)
|
||||||
|
while sorted_articles:
|
||||||
|
mostCurrent = sorted_articles.pop()
|
||||||
|
self.title = 'CND ' + mostCurrent
|
||||||
|
feeds.append((self.title, articles[mostCurrent]))
|
||||||
|
|
||||||
|
return feeds
|
||||||
|
|
||||||
|
def populate_article_metadata(self, article, soup, first):
|
||||||
|
header = soup.find('h3')
|
||||||
|
self.log('header: ' + self.tag_to_string(header))
|
||||||
|
pass
|
||||||
|
|
@ -2,6 +2,11 @@
|
|||||||
__license__ = 'GPL v3'
|
__license__ = 'GPL v3'
|
||||||
__copyright__ = '2009, Darko Miletic <darko.miletic at gmail.com>'
|
__copyright__ = '2009, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
'''
|
'''
|
||||||
|
Changelog:
|
||||||
|
2011-09-24
|
||||||
|
Changed cover (drMerry)
|
||||||
|
2011-10-13
|
||||||
|
Updated Cover (drMerry)
|
||||||
news.cnet.com
|
news.cnet.com
|
||||||
'''
|
'''
|
||||||
|
|
||||||
@ -9,7 +14,7 @@ from calibre.web.feeds.news import BasicNewsRecipe
|
|||||||
|
|
||||||
class CnetNews(BasicNewsRecipe):
|
class CnetNews(BasicNewsRecipe):
|
||||||
title = 'CNET News'
|
title = 'CNET News'
|
||||||
__author__ = 'Darko Miletic'
|
__author__ = 'Darko Miletic updated by DrMerry.'
|
||||||
description = 'Tech news and business reports by CNET News. Focused on information technology, core topics include computers, hardware, software, networking, and Internet media.'
|
description = 'Tech news and business reports by CNET News. Focused on information technology, core topics include computers, hardware, software, networking, and Internet media.'
|
||||||
publisher = 'CNET'
|
publisher = 'CNET'
|
||||||
category = 'news, IT, USA'
|
category = 'news, IT, USA'
|
||||||
@ -19,7 +24,7 @@ class CnetNews(BasicNewsRecipe):
|
|||||||
encoding = 'cp1252'
|
encoding = 'cp1252'
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
language = 'en'
|
language = 'en'
|
||||||
|
cover_url = 'http://reviews.cnet.com/i/ff/wp/logo_cnet.gif'
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
'comment' : description
|
'comment' : description
|
||||||
, 'tags' : category
|
, 'tags' : category
|
||||||
@ -30,8 +35,14 @@ class CnetNews(BasicNewsRecipe):
|
|||||||
remove_tags = [
|
remove_tags = [
|
||||||
dict(name='div', attrs={'id':'tweetmemeAndFacebook'})
|
dict(name='div', attrs={'id':'tweetmemeAndFacebook'})
|
||||||
,dict(name='ul', attrs={'class':'contentTools'})
|
,dict(name='ul', attrs={'class':'contentTools'})
|
||||||
|
,dict(name='aside', attrs={'id':'filed'})
|
||||||
|
,dict(name='div', attrs={'class':'postLinks'})
|
||||||
|
,dict(name='span', attrs={'class':'shareButton'})
|
||||||
|
,dict(name='span', attrs={'class':'printButton'})
|
||||||
|
,dict(name='span', attrs={'class':'emailButton'})
|
||||||
|
,dict(name='div', attrs={'class':'editorBio'})
|
||||||
]
|
]
|
||||||
keep_only_tags = dict(name='div', attrs={'class':'txtWrap'})
|
keep_only_tags = dict(name='div', attrs={'class':'post'})
|
||||||
|
|
||||||
feeds = [(u'News', u'http://news.cnet.com/2547-1_3-0-20.xml')]
|
feeds = [(u'News', u'http://news.cnet.com/2547-1_3-0-20.xml')]
|
||||||
|
|
||||||
|
@ -22,17 +22,31 @@ class CNN(BasicNewsRecipe):
|
|||||||
#match_regexps = [r'http://sportsillustrated.cnn.com/.*/[1-9].html']
|
#match_regexps = [r'http://sportsillustrated.cnn.com/.*/[1-9].html']
|
||||||
max_articles_per_feed = 25
|
max_articles_per_feed = 25
|
||||||
|
|
||||||
|
extra_css = '''
|
||||||
|
h1 {font-size:xx-large; font-family:Arial,Helvetica,sans-serif;}
|
||||||
|
.cnn_story_author, .cnn_stryathrtmp {font-size:xx-small; color:#4D4D4D; font-family:Arial,Helvetica,sans-serif;}
|
||||||
|
.cnn_strycaptiontxt, .cnnArticleGalleryPhotoContainer {font-size:xx-small; color:#4D4D4D; font-family:Arial,Helvetica,sans-serif;}
|
||||||
|
.cnn_strycbftrtxt, .cnnEditorialNote {font-size:xx-small; color:#4D4D4D; font-family:Arial,Helvetica,sans-serif;}
|
||||||
|
.cnn_strycntntlft {font-size:medium; font-family:Arial,Helvetica,sans-serif;}
|
||||||
|
'''
|
||||||
|
|
||||||
preprocess_regexps = [
|
preprocess_regexps = [
|
||||||
(re.compile(r'<!--\[if.*if\]-->', re.DOTALL), lambda m: ''),
|
(re.compile(r'<!--\[if.*if\]-->', re.DOTALL), lambda m: ''),
|
||||||
(re.compile(r'<script.*?</script>', re.DOTALL), lambda m: ''),
|
(re.compile(r'<script.*?</script>', re.DOTALL), lambda m: ''),
|
||||||
(re.compile(r'<style.*?</style>', re.DOTALL), lambda m: ''),
|
(re.compile(r'<style.*?</style>', re.DOTALL), lambda m: ''),
|
||||||
]
|
]
|
||||||
|
|
||||||
keep_only_tags = [dict(id='cnnContentContainer')]
|
keep_only_tags = [dict(id=['cnnContentContainer', 'storycontent'])]
|
||||||
remove_tags = [
|
remove_tags = [
|
||||||
{'class':['cnn_strybtntools', 'cnn_strylftcntnt',
|
{'class':['cnn_strybtntools', 'cnn_strylftcntnt',
|
||||||
'cnn_strybtntools', 'cnn_strybtntoolsbttm', 'cnn_strybtmcntnt',
|
'cnn_strybtntools', 'cnn_strybtntoolsbttm', 'cnn_strybtmcntnt',
|
||||||
'cnn_strycntntrgt']},
|
'cnn_strycntntrgt', 'hed_side', 'foot', 'cnn_strylftcntnt cnn_strylftcexpbx']},
|
||||||
|
{'class':['cnn_html_media_title_new', 'cnn_html_media_title_new cnn_html_media_title_none',
|
||||||
|
'cnnArticleGalleryCaptionControlText', 'articleGalleryNavContainer']},
|
||||||
|
{'id':['articleGalleryNav00JumpPrev', 'articleGalleryNav00Prev',
|
||||||
|
'articleGalleryNav00Next', 'articleGalleryNav00JumpNext']},
|
||||||
|
{'style':['display:none']},
|
||||||
|
dict(id=['ie_column']),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
@ -57,3 +71,12 @@ class CNN(BasicNewsRecipe):
|
|||||||
ans = BasicNewsRecipe.get_article_url(self, article)
|
ans = BasicNewsRecipe.get_article_url(self, article)
|
||||||
return ans.partition('?')[0]
|
return ans.partition('?')[0]
|
||||||
|
|
||||||
|
def get_masthead_url(self):
|
||||||
|
masthead = 'http://i.cdn.turner.com/cnn/.element/img/3.0/global/header/intl/hdr-globe-central.gif'
|
||||||
|
br = BasicNewsRecipe.get_browser()
|
||||||
|
try:
|
||||||
|
br.open(masthead)
|
||||||
|
except:
|
||||||
|
self.log("\nCover unavailable")
|
||||||
|
masthead = None
|
||||||
|
return masthead
|
||||||
|
@ -14,67 +14,43 @@ class ColumbusDispatchRecipe(BasicNewsRecipe):
|
|||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
remove_empty_feeds = True
|
remove_empty_feeds = True
|
||||||
oldest_article = 1.2
|
oldest_article = 1.2
|
||||||
max_articles_per_feed = 100
|
use_embedded_content = False
|
||||||
|
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
remove_javascript = True
|
auto_cleanup = True
|
||||||
encoding = 'utf-8'
|
#auto_cleanup_keep = '//div[@id="story-photos"]'
|
||||||
# Seems to work best, but YMMV
|
|
||||||
simultaneous_downloads = 2
|
|
||||||
|
|
||||||
# Feeds from http://www.dispatch.com/live/content/rss/index.html
|
# Feeds from http://www.dispatch.com/live/content/rss/index.html
|
||||||
feeds = []
|
feeds = [
|
||||||
feeds.append((u'News: Local and state news', u'http://www.dispatch.com/live/static/crt/2_rss_localnews.xml'))
|
('Local',
|
||||||
feeds.append((u'News: National news', u'http://www.dispatch.com/live/static/crt/2_rss_nationalnews.xml'))
|
'http://www.dispatch.com/content/syndication/news_local-state.xml'),
|
||||||
feeds.append((u'News: Editorials', u'http://www.dispatch.com/live/static/crt/2_rss_editorials.xml'))
|
('National',
|
||||||
feeds.append((u'News: Columnists', u'http://www.dispatch.com/live/static/crt/2_rss_columnists.xml'))
|
'http://www.dispatch.com/content/syndication/news_national.xml'),
|
||||||
feeds.append((u'News: Health news', u'http://www.dispatch.com/live/static/crt/2_rss_health.xml'))
|
('Business',
|
||||||
feeds.append((u'News: Science news', u'http://www.dispatch.com/live/static/crt/2_rss_science.xml'))
|
'http://www.dispatch.com/content/syndication/news_business.xml'),
|
||||||
feeds.append((u'Sports: OSU football', u'http://www.dispatch.com/live/static/crt/2_rss_osufootball.xml'))
|
('Editorials',
|
||||||
feeds.append((u'Sports: OSU men\'s basketball', u'http://www.dispatch.com/live/static/crt/2_rss_osumensbball.xml'))
|
'http://www.dispatch.com/content/syndication/opinion_editorials.xml'),
|
||||||
feeds.append((u'Sports: OSU women\'s basketball', u'http://www.dispatch.com/live/static/crt/2_rss_osuwomensbball.xml'))
|
('Columnists',
|
||||||
feeds.append((u'Sports: OSU sports', u'http://www.dispatch.com/live/static/crt/2_rss_osusports.xml'))
|
'http://www.dispatch.com/content/syndication/opinion_columns.xml'),
|
||||||
feeds.append((u'Sports: Blue Jackets', u'http://www.dispatch.com/live/static/crt/2_rss_bluejackets.xml'))
|
('Life and Arts',
|
||||||
feeds.append((u'Sports: Crew', u'http://www.dispatch.com/live/static/crt/2_rss_crew.xml'))
|
'http://www.dispatch.com/content/syndication/lae_life-and-arts.xml'),
|
||||||
feeds.append((u'Sports: Clippers', u'http://www.dispatch.com/live/static/crt/2_rss_clippers.xml'))
|
('OSU Sports',
|
||||||
feeds.append((u'Sports: Indians', u'http://www.dispatch.com/live/static/crt/2_rss_indians.xml'))
|
'http://www.dispatch.com/content/syndication/sports_osu.xml'),
|
||||||
feeds.append((u'Sports: Reds', u'http://www.dispatch.com/live/static/crt/2_rss_reds.xml'))
|
('Auto Racing',
|
||||||
feeds.append((u'Sports: Golf', u'http://www.dispatch.com/live/static/crt/2_rss_golf.xml'))
|
'http://www.dispatch.com/content/syndication/sports_auto-racing.xml'),
|
||||||
feeds.append((u'Sports: Outdoors', u'http://www.dispatch.com/live/static/crt/2_rss_outdoors.xml'))
|
('Outdoors',
|
||||||
feeds.append((u'Sports: Cavs/NBA', u'http://www.dispatch.com/live/static/crt/2_rss_cavaliers.xml'))
|
'http://www.dispatch.com/content/syndication/sports_outdoors.xml'),
|
||||||
feeds.append((u'Sports: High Schools', u'http://www.dispatch.com/live/static/crt/2_rss_highschools.xml'))
|
('Bengals',
|
||||||
feeds.append((u'Sports: Browns', u'http://www.dispatch.com/live/static/crt/2_rss_browns.xml'))
|
'http://www.dispatch.com/content/syndication/sports_bengals.xml'),
|
||||||
feeds.append((u'Sports: Bengals', u'http://www.dispatch.com/live/static/crt/2_rss_bengals.xml'))
|
('Indians',
|
||||||
feeds.append((u'Sports: Auto Racing', u'http://www.dispatch.com/live/static/crt/2_rss_autoracing.xml'))
|
'http://www.dispatch.com/content/syndication/sports_indians.xml'),
|
||||||
feeds.append((u'Business News', u'http://www.dispatch.com/live/static/crt/2_rss_business.xml'))
|
('Clippers',
|
||||||
feeds.append((u'Features: Weekender', u'http://www.dispatch.com/live/static/crt/2_rss_weekender.xml'))
|
'http://www.dispatch.com/content/syndication/sports_clippers.xml'),
|
||||||
feeds.append((u'Features: Life and Arts', u'http://www.dispatch.com/live/static/crt/2_rss_lifearts.xml'))
|
('Crew',
|
||||||
feeds.append((u'Features: Food', u'http://www.dispatch.com/live/static/crt/2_rss_food.xml'))
|
'http://www.dispatch.com/content/syndication/sports_crew.xml'),
|
||||||
feeds.append((u'Features: NOW! for kids', u'http://www.dispatch.com/live/static/crt/2_rss_now.xml'))
|
('Reds',
|
||||||
feeds.append((u'Features: Travel', u'http://www.dispatch.com/live/static/crt/2_rss_travel.xml'))
|
'http://www.dispatch.com/content/syndication/sports_reds.xml'),
|
||||||
feeds.append((u'Features: Home and Garden', u'http://www.dispatch.com/live/static/crt/2_rss_homegarden.xml'))
|
('Blue Jackets',
|
||||||
feeds.append((u'Features: Faith and Values', u'http://www.dispatch.com/live/static/crt/2_rss_faithvalues.xml'))
|
'http://www.dispatch.com/content/syndication/sports_bluejackets.xml'),
|
||||||
#feeds.append((u'', u''))
|
]
|
||||||
|
|
||||||
keep_only_tags = []
|
|
||||||
keep_only_tags.append(dict(name = 'div', attrs = {'class': 'colhed'}))
|
|
||||||
keep_only_tags.append(dict(name = 'div', attrs = {'class': 'hed'}))
|
|
||||||
keep_only_tags.append(dict(name = 'div', attrs = {'class': 'subhed'}))
|
|
||||||
keep_only_tags.append(dict(name = 'div', attrs = {'class': 'date'}))
|
|
||||||
keep_only_tags.append(dict(name = 'div', attrs = {'class': 'byline'}))
|
|
||||||
keep_only_tags.append(dict(name = 'div', attrs = {'class': 'srcline'}))
|
|
||||||
keep_only_tags.append(dict(name = 'div', attrs = {'class': 'body'}))
|
|
||||||
|
|
||||||
remove_tags = []
|
|
||||||
remove_tags.append(dict(name = 'div', attrs = {'id': 'middle-story-ad-container'}))
|
|
||||||
|
|
||||||
extra_css = '''
|
|
||||||
body {font-family:verdana,arial,helvetica,geneva,sans-serif ;}
|
|
||||||
a {text-decoration: none; color: blue;}
|
|
||||||
div.colhed {font-weight: bold;}
|
|
||||||
div.hed {font-size: xx-large; font-weight: bold; margin-bottom: 0.2em;}
|
|
||||||
div.subhed {font-size: large;}
|
|
||||||
div.date {font-size: x-small; font-style: italic; color: #666666; margin-top: 0.4em; margin-bottom: 0.4em;}
|
|
||||||
div.byline, div.srcline {font-size: small; color: #696969;}
|
|
||||||
'''
|
|
||||||
|
|
||||||
|
@ -1,38 +1,89 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
##
|
||||||
|
## Title: Common Dreams
|
||||||
|
##
|
||||||
|
## License: GNU General Public License v3 - http://www.gnu.org/copyleft/gpl.html
|
||||||
|
|
||||||
|
# Feb 2012: Cleaned up the output to have only the main article
|
||||||
|
|
||||||
|
__license__ = 'GNU General Public License v3 - http://www.gnu.org/copyleft/gpl.html'
|
||||||
|
'''
|
||||||
|
commondreams.org
|
||||||
|
'''
|
||||||
|
|
||||||
|
import re
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
class CommonDreams(BasicNewsRecipe):
|
class CommonDreams(BasicNewsRecipe):
|
||||||
# Identify the recipe
|
# Identify the recipe
|
||||||
|
|
||||||
title = u'Common Dreams'
|
title = u'Common Dreams'
|
||||||
description = u'Progressive news and views'
|
description = u'Breaking News & Views for the Progressive Community.'
|
||||||
|
cover_url = 'https://s3.amazonaws.com/s3.commondreams.org/images/common-dreams.png'
|
||||||
__author__ = u'XanthanGum'
|
__author__ = u'XanthanGum'
|
||||||
language = 'en'
|
language = 'en'
|
||||||
|
|
||||||
# Format the text
|
|
||||||
|
|
||||||
extra_css = '''
|
|
||||||
body{font-family:verdana,arial,helvetica,geneva,sans-serif ;}
|
|
||||||
h1{font-size: xx-large;}
|
|
||||||
h2{font-size: large;}
|
|
||||||
'''
|
|
||||||
|
|
||||||
# Pick no article older than seven days and limit the number of articles per feed to 100
|
|
||||||
|
|
||||||
oldest_article = 7
|
oldest_article = 7
|
||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
|
|
||||||
# Remove everything before the article
|
no_stylesheets = True
|
||||||
|
remove_javascript = True
|
||||||
|
|
||||||
remove_tags_before = dict(name = 'div', attrs = {'id':'node-header'})
|
# Flattens all the tables to make it compatible with Nook
|
||||||
|
conversion_options = {'linearize_tables' : True}
|
||||||
|
|
||||||
# Remove everything after the article
|
remove_attributes = [ 'border', 'cellspacing', 'align', 'cellpadding', 'colspan',
|
||||||
|
'valign', 'vspace', 'hspace', 'alt', 'width', 'height' ]
|
||||||
|
|
||||||
|
# Specify extra CSS - overrides ALL other CSS (IE. Added last).
|
||||||
|
extra_css = 'body { font-family: verdana, helvetica, sans-serif; } \
|
||||||
|
.introduction, .first { font-weight: bold; } \
|
||||||
|
.cross-head { font-weight: bold; font-size: 125%; } \
|
||||||
|
.cap, .caption { display: block; font-size: 80%; font-style: italic; } \
|
||||||
|
.cap, .caption, .caption img, .caption span { display: block; margin: 5px auto; } \
|
||||||
|
.byl, .byd, .byline img, .byline-name, .byline-title, .author-name, .author-position, \
|
||||||
|
.correspondent-portrait img, .byline-lead-in, .name, .bbc-role { display: block; \
|
||||||
|
font-size: 80%; font-style: italic; margin: 1px auto; } \
|
||||||
|
.story-date, .published { font-size: 80%; } \
|
||||||
|
table { width: 100%; } \
|
||||||
|
td img { display: block; margin: 5px auto; } \
|
||||||
|
ul { padding-top: 10px; } \
|
||||||
|
ol { padding-top: 10px; } \
|
||||||
|
li { padding-top: 5px; padding-bottom: 5px; } \
|
||||||
|
h1 { font-size: 175%; font-weight: bold; } \
|
||||||
|
h2 { font-size: 150%; font-weight: bold; } \
|
||||||
|
h3 { font-size: 125%; font-weight: bold; } \
|
||||||
|
h4, h5, h6 { font-size: 100%; font-weight: bold; }'
|
||||||
|
|
||||||
|
# Remove the line breaks and float left/right and picture width/height.
|
||||||
|
preprocess_regexps = [(re.compile(r'<br[ ]*/>', re.IGNORECASE), lambda m: ''),
|
||||||
|
(re.compile(r'<br[ ]*clear.*/>', re.IGNORECASE), lambda m: ''),
|
||||||
|
(re.compile(r'float:.*?'), lambda m: ''),
|
||||||
|
(re.compile(r'width:.*?px'), lambda m: ''),
|
||||||
|
(re.compile(r'height:.*?px'), lambda m: ''),
|
||||||
|
(re.compile(r'<a.*?>'), lambda m: ''),
|
||||||
|
(re.compile(r'</a>'), lambda m: ''),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
# Main article is inside this tag
|
||||||
|
keep_only_tags = [
|
||||||
|
dict(name='div', attrs={'id':lambda x: x and 'node-' in x}),
|
||||||
|
]
|
||||||
|
|
||||||
|
remove_tags = [
|
||||||
|
dict(name='div', attrs={'class':'node-links clear-block'}), # remove Share options
|
||||||
|
]
|
||||||
|
|
||||||
remove_tags_after = dict(name = 'div', attrs = {'class':'copyright-info'})
|
|
||||||
|
|
||||||
# Identify the news feeds
|
# Identify the news feeds
|
||||||
|
|
||||||
feeds = [(u'Headlines', u'http://www.commondreams.org/feed/headlines_rss'),
|
feeds = [(u'Headlines', u'https://www.commondreams.org/feed/headlines_rss'),
|
||||||
(u'Further News Articles', u'http://www.commondreams.org/feed/further_rss'),
|
(u'Further News Articles', u'https://www.commondreams.org/feed/further_rss'),
|
||||||
(u'Views', u'http://www.commondreams.org/feed/views_rss'),
|
(u'Views', u'https://www.commondreams.org/feed/views_rss'),
|
||||||
(u'Progressive Newswire', u'http://www.commondreams.org/feed/newswire_rss')]
|
(u'Progressive Newswire', u'https://www.commondreams.org/feed/newswire_rss')]
|
||||||
|
|
||||||
|
|
||||||
|
def print_version(self, url):
|
||||||
|
url = url + '?print'
|
||||||
|
return url
|
23
recipes/computerworld_pl.recipe
Normal file
23
recipes/computerworld_pl.recipe
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
class Computerworld_pl(BasicNewsRecipe):
|
||||||
|
title = u'Computerworld.pl'
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = u'Serwis o IT w przemyśle, finansach, handlu, administracji oraz rynku IT i telekomunikacyjnym - wiadomości, opinie, analizy, porady prawne'
|
||||||
|
category = 'IT'
|
||||||
|
language = 'pl'
|
||||||
|
masthead_url= 'http://g1.computerworld.pl/cw/beta_gfx/cw2.gif'
|
||||||
|
no_stylesheets=True
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
keep_only_tags=[dict(attrs={'class':['tyt_news', 'prawo', 'autor', 'tresc']})]
|
||||||
|
remove_tags_after=dict(name='div', attrs={'class':'rMobi'})
|
||||||
|
remove_tags=[dict(name='div', attrs={'class':['nnav', 'rMobi']}), dict(name='table', attrs={'class':'ramka_slx'})]
|
||||||
|
feeds = [(u'Wiadomo\u015bci', u'http://rssout.idg.pl/cw/news_iso.xml')]
|
||||||
|
|
||||||
|
def get_cover_url(self):
|
||||||
|
soup = self.index_to_soup('http://www.computerworld.pl/')
|
||||||
|
cover=soup.find(name='img', attrs={'class':'prawo'})
|
||||||
|
self.cover_url=cover['src']
|
||||||
|
return getattr(self, 'cover_url', self.cover_url)
|
71
recipes/consortium_news.recipe
Normal file
71
recipes/consortium_news.recipe
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
##
|
||||||
|
## Title: Consortium News
|
||||||
|
##
|
||||||
|
## License: GNU General Public License v3 - http://www.gnu.org/copyleft/gpl.html
|
||||||
|
|
||||||
|
# Feb 2012: Initial release
|
||||||
|
__license__ = 'GNU General Public License v3 - http://www.gnu.org/copyleft/gpl.html'
|
||||||
|
'''
|
||||||
|
consortiumnews.com
|
||||||
|
'''
|
||||||
|
import re
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class ConsortiumNews(BasicNewsRecipe):
|
||||||
|
|
||||||
|
title = u'Consortium News'
|
||||||
|
publisher = 'Copyright © 2012 Consortiumnews. All Rights Reserved.'
|
||||||
|
language = 'en'
|
||||||
|
__author__ = 'kiavash'
|
||||||
|
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
|
||||||
|
no_stylesheets = True
|
||||||
|
remove_javascript = True
|
||||||
|
|
||||||
|
conversion_options = {'linearize_tables' : True} # Flattens all the tables to make it compatible with Nook
|
||||||
|
|
||||||
|
remove_attributes = [ 'border', 'cellspacing', 'align', 'cellpadding', 'colspan',
|
||||||
|
'valign', 'vspace', 'hspace', 'alt', 'width', 'height' ]
|
||||||
|
|
||||||
|
# Specify extra CSS - overrides ALL other CSS (IE. Added last).
|
||||||
|
extra_css = 'body { font-family: verdana, helvetica, sans-serif; } \
|
||||||
|
.introduction, .first { font-weight: bold; } \
|
||||||
|
.cross-head { font-weight: bold; font-size: 125%; } \
|
||||||
|
.cap, .caption { display: block; font-size: 80%; font-style: italic; } \
|
||||||
|
.cap, .caption, .caption img, .caption span { display: block; margin: 5px auto; } \
|
||||||
|
.byl, .byd, .byline img, .byline-name, .byline-title, .author-name, .author-position, \
|
||||||
|
.correspondent-portrait img, .byline-lead-in, .name, .bbc-role { display: block; \
|
||||||
|
font-size: 80%; font-style: italic; margin: 1px auto; } \
|
||||||
|
.story-date, .published { font-size: 80%; } \
|
||||||
|
table { width: 100%; } \
|
||||||
|
td img { display: block; margin: 5px auto; } \
|
||||||
|
ul { padding-top: 10px; } \
|
||||||
|
ol { padding-top: 10px; } \
|
||||||
|
li { padding-top: 5px; padding-bottom: 5px; } \
|
||||||
|
h1 { font-size: 175%; font-weight: bold; } \
|
||||||
|
h2 { font-size: 150%; font-weight: bold; } \
|
||||||
|
h3 { font-size: 125%; font-weight: bold; } \
|
||||||
|
h4, h5, h6 { font-size: 100%; font-weight: bold; }'
|
||||||
|
|
||||||
|
# Remove the line breaks and float left/right and picture width/height.
|
||||||
|
preprocess_regexps = [(re.compile(r'<br[ ]*/>', re.IGNORECASE), lambda m: ''),
|
||||||
|
(re.compile(r'<br[ ]*clear.*/>', re.IGNORECASE), lambda m: ''),
|
||||||
|
(re.compile(r'float:.*?'), lambda m: ''),
|
||||||
|
(re.compile(r'width:.*?px'), lambda m: ''),
|
||||||
|
(re.compile(r'height:.*?px'), lambda m: ''),
|
||||||
|
(re.compile(r'<a.*?>'), lambda h1: ''),
|
||||||
|
(re.compile(r'</a>'), lambda h2: ''),
|
||||||
|
]
|
||||||
|
|
||||||
|
# Main article is inside this tag
|
||||||
|
keep_only_tags = [dict(name='div', attrs={'id':lambda x: x and 'post-' in x})]
|
||||||
|
|
||||||
|
remove_tags = [
|
||||||
|
dict(name='div', attrs={'class':'sociable'}), # remove 'Share this Article'
|
||||||
|
dict(name='p', attrs={'class':'tags'}), # remove 'Tags: ... '
|
||||||
|
]
|
||||||
|
|
||||||
|
feeds = [(u'Consortium News', u'http://feeds.feedburner.com/Consortiumnewscom')]
|
52
recipes/cosmopolitan_uk.recipe
Normal file
52
recipes/cosmopolitan_uk.recipe
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
import re
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
#from calibre import __appname__
|
||||||
|
from calibre.utils.magick import Image
|
||||||
|
class AdvancedUserRecipe1306097511(BasicNewsRecipe):
|
||||||
|
title = u'Cosmopolitan UK'
|
||||||
|
description = 'Fashion, beauty and Gossip for women from COSMOPOLITAN -UK'
|
||||||
|
|
||||||
|
__author__ = 'Dave Asbury'
|
||||||
|
#last update 21/12/11
|
||||||
|
# greyscale code by Starson
|
||||||
|
cover_url = 'http://www.cosmopolitan.magazine.co.uk/files/4613/2085/8988/Cosmo_Cover3.jpg'
|
||||||
|
no_stylesheets = True
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 20
|
||||||
|
remove_empty_feeds = True
|
||||||
|
remove_javascript = True
|
||||||
|
|
||||||
|
preprocess_regexps = [
|
||||||
|
(re.compile(r'<!-- Begin tmpl module_competition_offer -->.*?<!-- End tmpl module_competition_offer-->', re.IGNORECASE | re.DOTALL), lambda match: '')]
|
||||||
|
language = 'en_GB'
|
||||||
|
|
||||||
|
|
||||||
|
masthead_url = 'http://www.cosmopolitan.co.uk/cm/cosmopolitanuk/site_images/header/cosmouk_logo_home.gif'
|
||||||
|
|
||||||
|
|
||||||
|
keep_only_tags = [
|
||||||
|
dict(attrs={'class' : ['dateAuthor', 'publishDate']}),
|
||||||
|
dict(name='div',attrs ={'id' : ['main_content']})
|
||||||
|
]
|
||||||
|
remove_tags = [
|
||||||
|
dict(name='div',attrs={'class' : ['blogInfo','viral_toolbar','comment_number','prevEntry nav']}),
|
||||||
|
dict(name='div',attrs={'class' : 'blog_module_about_the_authors'}),
|
||||||
|
dict(attrs={'id': ['breadcrumbs','comment','related_links_list','right_rail','content_sec_fb_more','content_sec_mostpopularstories','content-sec_fb_frame_viewfb_bot']}),
|
||||||
|
dict(attrs={'class' : ['read_liked_that_header','fb_back_next_area']}),
|
||||||
|
dict(name='li',attrs={'class' : 'thumb'})
|
||||||
|
]
|
||||||
|
|
||||||
|
feeds = [
|
||||||
|
(u'Love & Sex', u'http://www.cosmopolitan.co.uk/love-sex/rss/'), (u'Men', u'http://cosmopolitan.co.uk/men/rss/'), (u'Fashion', u'http://cosmopolitan.co.uk/fashion/rss/'), (u'Hair & Beauty', u'http://cosmopolitan.co.uk/beauty-hair/rss/'), (u'LifeStyle', u'http://cosmopolitan.co.uk/lifestyle/rss/'), (u'Cosmo On Campus', u'http://cosmopolitan.co.uk/campus/rss/'), (u'Celebrity Gossip', u'http://cosmopolitan.co.uk/celebrity-gossip/rss/')]
|
||||||
|
|
||||||
|
def postprocess_html(self, soup, first):
|
||||||
|
#process all the images
|
||||||
|
for tag in soup.findAll(lambda tag: tag.name.lower()=='img' and tag.has_key('src')):
|
||||||
|
iurl = tag['src']
|
||||||
|
img = Image()
|
||||||
|
img.open(iurl)
|
||||||
|
if img < 0:
|
||||||
|
raise RuntimeError('Out of memory')
|
||||||
|
img.type = "GrayscaleType"
|
||||||
|
img.save(iurl)
|
||||||
|
return soup
|
@ -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
|
|
||||||
|
|
||||||
|
42
recipes/countryfile.recipe
Normal file
42
recipes/countryfile.recipe
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
from calibre import browser
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class AdvancedUserRecipe1325006965(BasicNewsRecipe):
|
||||||
|
title = u'Countryfile.com'
|
||||||
|
#cover_url = 'http://www.countryfile.com/sites/default/files/imagecache/160px_wide/cover/2_1.jpg'
|
||||||
|
__author__ = 'Dave Asbury'
|
||||||
|
description = 'The official website of Countryfile Magazine'
|
||||||
|
# last updated 15/4/12
|
||||||
|
language = 'en_GB'
|
||||||
|
oldest_article = 30
|
||||||
|
max_articles_per_feed = 25
|
||||||
|
remove_empty_feeds = True
|
||||||
|
no_stylesheets = True
|
||||||
|
auto_cleanup = True
|
||||||
|
#articles_are_obfuscated = True
|
||||||
|
def get_cover_url(self):
|
||||||
|
soup = self.index_to_soup('http://www.countryfile.com/')
|
||||||
|
cov = soup.find(attrs={'class' : 'imagecache imagecache-160px_wide imagecache-linked imagecache-160px_wide_linked'})
|
||||||
|
#print '******** ',cov,' ***'
|
||||||
|
cov2 = str(cov)
|
||||||
|
cov2=cov2[124:-90]
|
||||||
|
#print '******** ',cov2,' ***'
|
||||||
|
|
||||||
|
# try to get cover - if can't get known cover
|
||||||
|
br = browser()
|
||||||
|
br.set_handle_redirect(False)
|
||||||
|
try:
|
||||||
|
br.open_novisit(cov2)
|
||||||
|
cover_url = cov2
|
||||||
|
except:
|
||||||
|
cover_url = 'http://www.countryfile.com/sites/default/files/imagecache/160px_wide/cover/2_1.jpg'
|
||||||
|
return cover_url
|
||||||
|
remove_tags = [
|
||||||
|
# dict(attrs={'class' : ['player']}),
|
||||||
|
|
||||||
|
]
|
||||||
|
feeds = [
|
||||||
|
(u'Homepage', u'http://www.countryfile.com/rss/home'),
|
||||||
|
(u'Country News', u'http://www.countryfile.com/rss/news'),
|
||||||
|
(u'Countryside', u'http://www.countryfile.com/rss/countryside'),
|
||||||
|
]
|
47
recipes/cvecezla.recipe
Normal file
47
recipes/cvecezla.recipe
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
|
||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = '2011, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
|
'''
|
||||||
|
cvecezla.wordpress.com
|
||||||
|
'''
|
||||||
|
|
||||||
|
import re
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class CveceZla(BasicNewsRecipe):
|
||||||
|
title = 'Cvece zla i naopakog'
|
||||||
|
__author__ = 'Darko Miletic'
|
||||||
|
description = 'Haoticnost razmisljanja poradja haoticnost pisanja. Muzika, stripovi, igre, knjige, generalno glupiranje...'
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
language = 'sr'
|
||||||
|
encoding = 'utf-8'
|
||||||
|
no_stylesheets = True
|
||||||
|
use_embedded_content = False
|
||||||
|
publication_type = 'blog'
|
||||||
|
extra_css = ' @font-face {font-family: "serif1";src:url(res:///opt/sony/ebook/FONT/tt0011m_.ttf)} @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: "Trebuchet MS",Trebuchet,Verdana,sans1,sans-serif} .article_description{font-family: sans1, sans-serif} img{display: block } '
|
||||||
|
|
||||||
|
conversion_options = {
|
||||||
|
'comment' : description
|
||||||
|
, 'tags' : 'igre, muzika, film, blog, Srbija'
|
||||||
|
, 'publisher': 'Mehmet Krljic'
|
||||||
|
, 'language' : language
|
||||||
|
}
|
||||||
|
|
||||||
|
preprocess_regexps = [(re.compile(u'\u0110'), lambda match: u'\u00D0')]
|
||||||
|
|
||||||
|
remove_tags_before = dict(attrs={'class':'navigation'})
|
||||||
|
remove_tags_after = dict(attrs={'class':'commentlist'})
|
||||||
|
remove_tags = [
|
||||||
|
dict(attrs={'class':['postmetadata alt','sharedaddy sharedaddy-dark sd-like-enabled sd-sharing-enabled','reply','navigation']})
|
||||||
|
,dict(attrs={'id':'respond'})
|
||||||
|
]
|
||||||
|
|
||||||
|
feeds = [(u'Clanci', u'http://cvecezla.wordpress.com/feed/')]
|
||||||
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
for item in soup.findAll(style=True):
|
||||||
|
del item['style']
|
||||||
|
return soup
|
||||||
|
|
||||||
|
|
@ -1,52 +1,103 @@
|
|||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
import re
|
||||||
|
import mechanize
|
||||||
class AdvancedUserRecipe1306061239(BasicNewsRecipe):
|
class AdvancedUserRecipe1306061239(BasicNewsRecipe):
|
||||||
title = u'The Daily Mirror'
|
title = u'The Daily Mirror'
|
||||||
description = 'News as provide by The Daily Mirror -UK'
|
description = 'News as provide by The Daily Mirror -UK'
|
||||||
|
|
||||||
__author__ = 'Dave Asbury'
|
__author__ = 'Dave Asbury'
|
||||||
|
# last updated 7/4/12
|
||||||
language = 'en_GB'
|
language = 'en_GB'
|
||||||
|
#cover_url = 'http://yookeo.com/screens/m/i/mirror.co.uk.jpg'
|
||||||
cover_url = 'http://yookeo.com/screens/m/i/mirror.co.uk.jpg'
|
|
||||||
|
|
||||||
masthead_url = 'http://www.nmauk.co.uk/nma/images/daily_mirror.gif'
|
masthead_url = 'http://www.nmauk.co.uk/nma/images/daily_mirror.gif'
|
||||||
|
|
||||||
|
|
||||||
oldest_article = 1
|
oldest_article = 1
|
||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 10
|
||||||
remove_empty_feeds = True
|
remove_empty_feeds = True
|
||||||
remove_javascript = True
|
remove_javascript = True
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
|
auto_cleanup = True
|
||||||
keep_only_tags = [
|
#conversion_options = { 'linearize_tables' : True }
|
||||||
dict(name='h1'),
|
|
||||||
dict(attrs={'class':['article-attr']}),
|
|
||||||
dict(name='div', attrs={'class' : [ 'article-body', 'crosshead']})
|
|
||||||
|
|
||||||
|
|
||||||
]
|
#keep_only_tags = [
|
||||||
|
# dict(name='h1'),
|
||||||
|
# dict(name='div',attrs={'id' : 'body-content'}),
|
||||||
|
#dict(name='div',atts={'class' : 'article-body'}),
|
||||||
|
#dict(attrs={'class' : ['article-attr','byline append-1','published']}),
|
||||||
|
#dict(name='p'),
|
||||||
|
# ]
|
||||||
|
|
||||||
|
#remove_tags_after = [dict (name='div',attrs={'class' : 'related'})]
|
||||||
|
|
||||||
remove_tags = [
|
remove_tags = [
|
||||||
dict(name='div', attrs={'class' : ['caption', 'article-resize']}),
|
dict(name='title'),
|
||||||
dict( attrs={'class':'append-html'})
|
dict(name='div',attrs={'class' : ['inline-ad span-16 last','caption']}),
|
||||||
]
|
# dict(name='div',attrs={'id' : ['sidebar','menu','search-box','roffers-top']}),
|
||||||
|
#dict(name='div',attrs={'class' :['inline-ad span-16 last','article-resize','related','list teasers']}),
|
||||||
|
#dict(attrs={'class' : ['channellink','article-tags','replace','append-html']}),
|
||||||
|
]
|
||||||
|
|
||||||
|
# preprocess_regexps = [
|
||||||
|
#(re.compile(r'<dl class="q-search">.*?</dl>', re.IGNORECASE | re.DOTALL), lambda match: '')]
|
||||||
|
preprocess_regexps = [
|
||||||
|
(re.compile(r'- mirror.co.uk', re.IGNORECASE | re.DOTALL), lambda match: '')]
|
||||||
|
|
||||||
|
preprocess_regexps = [
|
||||||
|
(re.compile(r'Advertisement >>', re.IGNORECASE | re.DOTALL), lambda match: '')]
|
||||||
|
|
||||||
|
#preprocess_regexps = [
|
||||||
|
#(re.compile(r'Sponsored Links', re.IGNORECASE | re.DOTALL), lambda match: '')]
|
||||||
|
|
||||||
feeds = [
|
feeds = [
|
||||||
|
|
||||||
(u'News', u'http://www.mirror.co.uk/news/rss.xml')
|
(u'UK News', u'http://feed43.com/0287771688643868.xml')
|
||||||
,(u'Tech News', u'http://www.mirror.co.uk/news/technology/rss.xml')
|
,(u'Tech News', u'http://feed43.com/2455520588350501.xml')
|
||||||
,(u'Weird World','http://www.mirror.co.uk/news/weird-world/rss.xml')
|
,(u'Weird World','http://feed43.com/0863800333634654.xml')
|
||||||
,(u'Film Gossip','http://www.mirror.co.uk/celebs/film/rss.xml')
|
,(u'Sport','http://feed43.com/7713243036546130.xml')
|
||||||
,(u'Music News','http://www.mirror.co.uk/celebs/music/rss.xml')
|
,(u'Sport : Boxing ','http://feed43.com/0414732220804255.xml')
|
||||||
,(u'Celebs and Tv Gossip','http://www.mirror.co.uk/celebs/tv/rss.xml')
|
,(u'Sport : Rugby Union','http://feed43.com/4710138762362383.xml')
|
||||||
,(u'Sport','http://www.mirror.co.uk/sport/rss.xml')
|
,(u'Sport : Other','http://feed43.com/4501416886323415.xml')
|
||||||
,(u'Life Style','http://www.mirror.co.uk/life-style/rss.xml')
|
,(u'TV and Film','http://feed43.com/5238302853765104.xml')
|
||||||
,(u'Advice','http://www.mirror.co.uk/advice/rss.xml')
|
,(u'Celebs','http://feed43.com/8770061048844683.xml')
|
||||||
,(u'Travel','http://www.mirror.co.uk/advice/travel/rss.xml')
|
,(u'Life Style : Family','http://feed43.com/4356170742410338.xml')
|
||||||
|
,(u'Travel','http://feed43.com/1436576006476607.xml')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# example of commented out feed not needed ,(u'Travel','http://www.mirror.co.uk/advice/travel/rss.xml')
|
# example of commented out feed not needed ,(u'Travel','http://www.mirror.co.uk/advice/travel/rss.xml')
|
||||||
]
|
]
|
||||||
|
extra_css = '''
|
||||||
|
body{ text-align: justify; font-family:Arial,Helvetica,sans-serif; font-size:11px; font-size-adjust:none; font-stretch:normal; font-style:normal; font-variant:normal; font-weight:normal;}
|
||||||
|
h1{ font-size:18px;}
|
||||||
|
img { display:block}
|
||||||
|
'''
|
||||||
|
|
||||||
|
def get_cover_url(self):
|
||||||
|
soup = self.index_to_soup('http://www.politicshome.com/uk/latest_frontpage.html')
|
||||||
|
# look for the block containing the mirror button and url
|
||||||
|
cov = soup.find(attrs={'style' : 'background-image: url(http://www.politicshome.com/images/sources/source_frontpage_button_92.gif);'})
|
||||||
|
cov2 = str(cov)
|
||||||
|
cov2='http://www.politicshome.com'+cov2[9:-142]
|
||||||
|
#cov2 now contains url of the page containing pic
|
||||||
|
soup = self.index_to_soup(cov2)
|
||||||
|
cov = soup.find(attrs={'id' : 'large'})
|
||||||
|
cov2 = str(cov)
|
||||||
|
cov2=cov2[27:-18]
|
||||||
|
#cov2 now is pic url, now go back to original function
|
||||||
|
br = mechanize.Browser()
|
||||||
|
br.set_handle_redirect(False)
|
||||||
|
try:
|
||||||
|
br.open_novisit(cov2)
|
||||||
|
cover_url = cov2
|
||||||
|
except:
|
||||||
|
cover_url = 'http://yookeo.com/screens/m/i/mirror.co.uk.jpg'
|
||||||
|
|
||||||
|
#cover_url = cov2
|
||||||
|
#cover_url = 'http://www.thesun.co.uk/img/global/new-masthead-logo.png'
|
||||||
|
return cover_url
|
||||||
|
|
||||||
|
|
||||||
|
18
recipes/daily_writing_tips.recipe
Normal file
18
recipes/daily_writing_tips.recipe
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class DailyWritingTips(BasicNewsRecipe):
|
||||||
|
title = u'Daily Writing Tips'
|
||||||
|
language = 'en_GB'
|
||||||
|
__author__ = 'NotTaken'
|
||||||
|
oldest_article = 7 #days
|
||||||
|
max_articles_per_feed = 40
|
||||||
|
use_embedded_content = True
|
||||||
|
no_stylesheets = True
|
||||||
|
auto_cleanup = False
|
||||||
|
encoding = 'utf-8'
|
||||||
|
|
||||||
|
|
||||||
|
feeds = [
|
||||||
|
('Latest tips',
|
||||||
|
'http://feeds2.feedburner.com/DailyWritingTips'),
|
||||||
|
]
|
@ -8,11 +8,7 @@ class DallasNews(BasicNewsRecipe):
|
|||||||
|
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
remove_tags_before = dict(name='h1')
|
auto_cleanup = True
|
||||||
keep_only_tags = {'class':lambda x: x and 'article' in x}
|
|
||||||
remove_tags = [
|
|
||||||
{'class':['DMNSocialTools', 'article ', 'article first ', 'article premium']},
|
|
||||||
]
|
|
||||||
|
|
||||||
feeds = [
|
feeds = [
|
||||||
('Local News',
|
('Local News',
|
||||||
|
15
recipes/dark_horizons.recipe
Normal file
15
recipes/dark_horizons.recipe
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class AdvancedUserRecipe1317580312(BasicNewsRecipe):
|
||||||
|
title = u'Dark Horizons'
|
||||||
|
language = 'en'
|
||||||
|
__author__ = 'Jaded'
|
||||||
|
description ='News, images, video clips and reviews of current and upcoming blockbuster films. '
|
||||||
|
category = 'movies, tv, news'
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
cover_url = 'http://a4.sphotos.ak.fbcdn.net/hphotos-ak-ash2/164168_148419801879765_148410081880737_225532_464073_n.jpg'
|
||||||
|
masthead_url = 'http://www.darkhorizons.com/graphics/2/logo_print.png'
|
||||||
|
auto_cleanup = True
|
||||||
|
|
||||||
|
feeds = [(u'News', u'http://www.darkhorizons.com/feeds/news.atom'), (u'Features', u'http://www.darkhorizons.com/feeds/features.atom'), (u'Reviews', u'http://www.darkhorizons.com/feeds/reviews.atom')]
|
15
recipes/datasport.recipe
Normal file
15
recipes/datasport.recipe
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
__license__ = 'GPL v3'
|
||||||
|
__author__ = 'faber1971'
|
||||||
|
description = 'Italian soccer news website - v1.00 (17, December 2011)'
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class AdvancedUserRecipe1324114272(BasicNewsRecipe):
|
||||||
|
title = u'Datasport'
|
||||||
|
language = 'it'
|
||||||
|
__author__ = 'faber1971'
|
||||||
|
oldest_article = 1
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
auto_cleanup = True
|
||||||
|
|
||||||
|
feeds = [(u'Datasport', u'http://www.datasport.it/calcio/rss.xml')]
|
62
recipes/defensenews.recipe
Normal file
62
recipes/defensenews.recipe
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = '2011, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
|
'''
|
||||||
|
www.defensenews.com
|
||||||
|
'''
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class DefenseNews(BasicNewsRecipe):
|
||||||
|
title = 'Defense News'
|
||||||
|
__author__ = 'Darko Miletic'
|
||||||
|
description = 'Find late-breaking defense news from the leading defense news weekly'
|
||||||
|
publisher = 'Gannett Government Media Corporation'
|
||||||
|
category = 'defense news, defence news, defense, defence, defence budget, defence policy'
|
||||||
|
oldest_article = 31
|
||||||
|
max_articles_per_feed = 200
|
||||||
|
no_stylesheets = True
|
||||||
|
encoding = 'utf8'
|
||||||
|
use_embedded_content = False
|
||||||
|
language = 'en'
|
||||||
|
remove_empty_feeds = True
|
||||||
|
publication_type = 'newspaper'
|
||||||
|
masthead_url = 'http://www.defensenews.com/images/logo_defensenews2.jpg'
|
||||||
|
extra_css = """
|
||||||
|
body{font-family: Arial,Helvetica,sans-serif }
|
||||||
|
img{margin-bottom: 0.4em; display:block}
|
||||||
|
.info{font-size: small; color: gray}
|
||||||
|
"""
|
||||||
|
|
||||||
|
conversion_options = {
|
||||||
|
'comment' : description
|
||||||
|
, 'tags' : category
|
||||||
|
, 'publisher' : publisher
|
||||||
|
, 'language' : language
|
||||||
|
}
|
||||||
|
|
||||||
|
remove_tags = [
|
||||||
|
dict(name=['meta','link'])
|
||||||
|
,dict(attrs={'class':['toolbar','related','left','right']})
|
||||||
|
]
|
||||||
|
remove_tags_before = attrs={'class':'storyWrp'}
|
||||||
|
remove_tags_after = attrs={'class':'middle'}
|
||||||
|
|
||||||
|
remove_attributes=['lang']
|
||||||
|
|
||||||
|
feeds = [
|
||||||
|
(u'Europe' , u'http://www.defensenews.com/rss/eur/' )
|
||||||
|
,(u'Americas', u'http://www.defensenews.com/rss/ame/' )
|
||||||
|
,(u'Asia & Pacific rim', u'http://www.defensenews.com/rss/asi/' )
|
||||||
|
,(u'Middle east & Africa', u'http://www.defensenews.com/rss/mid/')
|
||||||
|
,(u'Air', u'http://www.defensenews.com/rss/air/' )
|
||||||
|
,(u'Land', u'http://www.defensenews.com/rss/lan/' )
|
||||||
|
,(u'Naval', u'http://www.defensenews.com/rss/sea/' )
|
||||||
|
]
|
||||||
|
|
||||||
|
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'
|
||||||
|
return soup
|
21
recipes/den_of_geek.recipe
Normal file
21
recipes/den_of_geek.recipe
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class AdvancedUserRecipe1316944753(BasicNewsRecipe):
|
||||||
|
title = u'Den of Geek'
|
||||||
|
__author__ = 'Jaded'
|
||||||
|
language = 'en'
|
||||||
|
description = 'From science fiction enthusiasts through to gaming fanatics, Den of Geek has become the one-stop UK website for people genuinely passionate about their entertainment media. Den of Geek covers popular culture but always with an edgy, UK centric slant that sets it apart from the crowd.'
|
||||||
|
category = 'Movies, TV, Games, Comics, Cult, News, Reviews'
|
||||||
|
language = 'en'
|
||||||
|
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
auto_cleanup = True
|
||||||
|
|
||||||
|
no_stylesheets = True
|
||||||
|
use_embedded_content = True
|
||||||
|
publication_type = 'newsportal'
|
||||||
|
masthead_url ='http://www.denofgeek.com/siteimage/scale/0/0/logo.gif'
|
||||||
|
cover_url ='http://a5.sphotos.ak.fbcdn.net/hphotos-ak-snc6/166479_180131695357862_139191826118516_354818_4993703_n.jpg'
|
||||||
|
|
||||||
|
feeds = [(u'Movies', u'http://www.denofgeek.com/movies/rss/'), (u'TV', u'http://www.denofgeek.com/television/rss/'), (u'Comics & Books', u'http://www.denofgeek.com/comics/rss/'), (u'Games', u'http://www.denofgeek.com/games/rss/'), (u'DVD/Blu-ray', u'http://www.denofgeek.com/Reviews/rss/')]
|
11
recipes/derin_dusunce.recipe
Normal file
11
recipes/derin_dusunce.recipe
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class BasicUserRecipe1324913694(BasicNewsRecipe):
|
||||||
|
title = u'Derin Dusunce'
|
||||||
|
language = 'tr'
|
||||||
|
__author__ = 'asalet_r'
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 20
|
||||||
|
auto_cleanup = True
|
||||||
|
|
||||||
|
feeds = [(u'Derin D\xfc\u015f\xfcnce', u'http://www.derindusunce.org/feed/')]
|
@ -22,6 +22,10 @@ class Descopera(BasicNewsRecipe):
|
|||||||
category = 'Ziare,Reviste,Descopera'
|
category = 'Ziare,Reviste,Descopera'
|
||||||
encoding = 'utf-8'
|
encoding = 'utf-8'
|
||||||
cover_url = 'http://www.descopera.ro/images/header_images/logo.gif'
|
cover_url = 'http://www.descopera.ro/images/header_images/logo.gif'
|
||||||
|
use_embedded_content = False
|
||||||
|
|
||||||
|
no_stylesheets = True
|
||||||
|
auto_cleanup = True
|
||||||
|
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
'comments' : description
|
'comments' : description
|
||||||
@ -30,28 +34,6 @@ class Descopera(BasicNewsRecipe):
|
|||||||
,'publisher' : publisher
|
,'publisher' : publisher
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
keep_only_tags = [
|
|
||||||
dict(name='h1', attrs={'style':'font-family: Arial,Helvetica,sans-serif; font-size: 18px; color: rgb(51, 51, 51); font-weight: bold; margin: 10px 0pt; clear: both; float: left;width: 610px;'})
|
|
||||||
,dict(name='div', attrs={'style':'margin-right: 15px; margin-bottom: 15px; float: left;'})
|
|
||||||
, dict(name='p', attrs={'id':'itemDescription'})
|
|
||||||
,dict(name='div', attrs={'id':'itemBody'})
|
|
||||||
]
|
|
||||||
|
|
||||||
remove_tags = [
|
|
||||||
dict(name='div', attrs={'class':['tools']})
|
|
||||||
, dict(name='div', attrs={'class':['share']})
|
|
||||||
, dict(name='div', attrs={'class':['category']})
|
|
||||||
, dict(name='div', attrs={'id':['comments']})
|
|
||||||
]
|
|
||||||
|
|
||||||
remove_tags_after = [
|
|
||||||
dict(name='div', attrs={'id':'comments'})
|
|
||||||
]
|
|
||||||
|
|
||||||
feeds = [
|
feeds = [
|
||||||
(u'Feeds', u'http://www.descopera.ro/rss')
|
(u'Feeds', u'http://www.descopera.ro/rss')
|
||||||
]
|
]
|
||||||
|
|
||||||
def preprocess_html(self, soup):
|
|
||||||
return self.adeify_images(soup)
|
|
||||||
|
27
recipes/descopera_org.recipe
Normal file
27
recipes/descopera_org.recipe
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
'''
|
||||||
|
descopera.org
|
||||||
|
'''
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class Descopera(BasicNewsRecipe):
|
||||||
|
title = u'Descoperă.org'
|
||||||
|
__author__ = 'Marius Ignătescu'
|
||||||
|
description = 'Descoperă. Placerea de a cunoaște'
|
||||||
|
publisher = 'descopera.org'
|
||||||
|
category = 'science, technology, culture, history, earth'
|
||||||
|
language = 'ro'
|
||||||
|
oldest_article = 14
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
encoding = 'utf8'
|
||||||
|
no_stylesheets = True
|
||||||
|
extra_css = ' body{ font-family: Verdana,Helvetica,Arial,sans-serif } .introduction{font-weight: bold} .story-feature{display: block; padding: 0; border: 1px solid; width: 40%; font-size: small} .story-feature h2{text-align: center; text-transform: uppercase} '
|
||||||
|
keep_only_tags = [dict(name='div', attrs={'class':['post']})]
|
||||||
|
remove_tags = [dict(name='div', attrs={'class':['topnav', 'box_a', 'shr-bookmarks shr-bookmarks-expand shr-bookmarks-center shr-bookmarks-bg-knowledge']})]
|
||||||
|
remove_attributes = ['width','height']
|
||||||
|
cover_url = 'http://www.descopera.org/wp-content/themes/dorg/styles/default/img/b_top.png?width=400'
|
||||||
|
feeds = [(u'Articles', u'http://www.descopera.org/feed/')]
|
||||||
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
return self.adeify_images(soup)
|
21
recipes/desiring_god.recipe
Normal file
21
recipes/desiring_god.recipe
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = '2012, Peter Grungi <p dot grungi at gmail dot com>'
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
|
||||||
|
class DesiringGodEnglish(BasicNewsRecipe):
|
||||||
|
title = u'Desiring God'
|
||||||
|
__author__ = 'Peter Grungi'
|
||||||
|
language = 'en'
|
||||||
|
|
||||||
|
cover_url = 'http://cdn0.desiringgod.org/images/layout/breadcrumbs_dg_mark.png'
|
||||||
|
masthead_url = 'http://cdn0.desiringgod.org/images/layout/breadcrumbs_dg_mark.png'
|
||||||
|
language = 'en'
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 50
|
||||||
|
auto_cleanup = True
|
||||||
|
publisher = 'Desiring God Ministries'
|
||||||
|
author = 'Desiring God Ministries'
|
||||||
|
|
||||||
|
feeds = [(u'Desiring God Blog', u'http://feeds.feedburner.com/DGBlog?format=xml')]
|
@ -16,7 +16,7 @@ class DeutscheWelle_es(BasicNewsRecipe):
|
|||||||
max_articles_per_feed = 100
|
max_articles_per_feed = 100
|
||||||
use_embedded_content = False
|
use_embedded_content = False
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
language = 'de_ES'
|
language = 'de'
|
||||||
publication_type = 'newsportal'
|
publication_type = 'newsportal'
|
||||||
remove_empty_feeds = True
|
remove_empty_feeds = True
|
||||||
masthead_url = 'http://www.dw-world.de/skins/std/channel1/pics/dw_logo1024.gif'
|
masthead_url = 'http://www.dw-world.de/skins/std/channel1/pics/dw_logo1024.gif'
|
||||||
|
@ -46,7 +46,8 @@ class DziennikInternautowRecipe(BasicNewsRecipe):
|
|||||||
dict(name = 'div', attrs = {'class' : 'poradniki_context'}),
|
dict(name = 'div', attrs = {'class' : 'poradniki_context'}),
|
||||||
dict(name = 'div', attrs = {'class' : 'uniBox'}),
|
dict(name = 'div', attrs = {'class' : 'uniBox'}),
|
||||||
dict(name = 'object', attrs = {}),
|
dict(name = 'object', attrs = {}),
|
||||||
dict(name = 'h3', attrs = {})
|
dict(name = 'h3', attrs = {}),
|
||||||
|
dict(attrs={'class':'twitter-share-button'})
|
||||||
]
|
]
|
||||||
|
|
||||||
preprocess_regexps = [
|
preprocess_regexps = [
|
||||||
@ -58,3 +59,8 @@ class DziennikInternautowRecipe(BasicNewsRecipe):
|
|||||||
(r'\s*</', lambda match: '</'),
|
(r'\s*</', lambda match: '</'),
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
def skip_ad_pages(self, soup):
|
||||||
|
if 'Advertisement' in soup.title:
|
||||||
|
nexturl=soup.find('a')['href']
|
||||||
|
return self.index_to_soup(nexturl, raw=True)
|
||||||
|
11
recipes/diario_la_republica.recipe
Normal file
11
recipes/diario_la_republica.recipe
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class AdvancedUserRecipe1317341449(BasicNewsRecipe):
|
||||||
|
title = u'Diario La Republica'
|
||||||
|
__author__ = 'CAVALENCIA'
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
auto_cleanup = True
|
||||||
|
language = 'es_CO'
|
||||||
|
|
||||||
|
feeds = [(u'Diario La Republica', u'http://www.larepublica.com.co/rss/larepublica.xml')]
|
@ -2,6 +2,7 @@ __license__ = 'GPL v3'
|
|||||||
__copyright__ = '2009, Darko Miletic <darko.miletic at gmail.com>'
|
__copyright__ = '2009, Darko Miletic <darko.miletic at gmail.com>'
|
||||||
'''
|
'''
|
||||||
http://www.dilbert.com
|
http://www.dilbert.com
|
||||||
|
DrMerry added cover Image 2011-11-12
|
||||||
'''
|
'''
|
||||||
|
|
||||||
from calibre.web.feeds.recipes import BasicNewsRecipe
|
from calibre.web.feeds.recipes import BasicNewsRecipe
|
||||||
@ -9,7 +10,7 @@ import re
|
|||||||
|
|
||||||
class DilbertBig(BasicNewsRecipe):
|
class DilbertBig(BasicNewsRecipe):
|
||||||
title = 'Dilbert'
|
title = 'Dilbert'
|
||||||
__author__ = 'Darko Miletic and Starson17'
|
__author__ = 'Darko Miletic and Starson17 contribution of DrMerry'
|
||||||
description = 'Dilbert'
|
description = 'Dilbert'
|
||||||
reverse_article_order = True
|
reverse_article_order = True
|
||||||
oldest_article = 15
|
oldest_article = 15
|
||||||
@ -20,6 +21,7 @@ class DilbertBig(BasicNewsRecipe):
|
|||||||
publisher = 'UNITED FEATURE SYNDICATE, INC.'
|
publisher = 'UNITED FEATURE SYNDICATE, INC.'
|
||||||
category = 'comic'
|
category = 'comic'
|
||||||
language = 'en'
|
language = 'en'
|
||||||
|
cover_url = 'http://dilbert.com/mobile/mobile/dilbert.app.icon.png'
|
||||||
|
|
||||||
conversion_options = {
|
conversion_options = {
|
||||||
'comments' : description
|
'comments' : description
|
||||||
|
@ -1,6 +1,3 @@
|
|||||||
'''
|
|
||||||
dnaindia.com
|
|
||||||
'''
|
|
||||||
import re
|
import re
|
||||||
from calibre.web.feeds.news import BasicNewsRecipe
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
@ -12,6 +9,10 @@ class DNAIndia(BasicNewsRecipe):
|
|||||||
language = 'en_IN'
|
language = 'en_IN'
|
||||||
|
|
||||||
encoding = 'cp1252'
|
encoding = 'cp1252'
|
||||||
|
use_embedded_content = False
|
||||||
|
|
||||||
|
no_stylesheets = True
|
||||||
|
auto_cleanup = True
|
||||||
|
|
||||||
feeds = [
|
feeds = [
|
||||||
('Top News', 'http://www.dnaindia.com/syndication/rss_topnews.xml'),
|
('Top News', 'http://www.dnaindia.com/syndication/rss_topnews.xml'),
|
||||||
@ -22,15 +23,10 @@ class DNAIndia(BasicNewsRecipe):
|
|||||||
('World', 'http://www.dnaindia.com/syndication/rss,catid-9.xml'),
|
('World', 'http://www.dnaindia.com/syndication/rss,catid-9.xml'),
|
||||||
('Money', 'http://www.dnaindia.com/syndication/rss,catid-4.xml'),
|
('Money', 'http://www.dnaindia.com/syndication/rss,catid-4.xml'),
|
||||||
('Sports', 'http://www.dnaindia.com/syndication/rss,catid-6.xml'),
|
('Sports', 'http://www.dnaindia.com/syndication/rss,catid-6.xml'),
|
||||||
('After Hours', 'http://www.dnaindia.com/syndication/rss,catid-7.xml'),
|
('After Hours', 'http://www.dnaindia.com/syndication/rss,catid-7.xml')
|
||||||
('Digital Life', 'http://www.dnaindia.com/syndication/rss,catid-1089741.xml'),
|
|
||||||
]
|
]
|
||||||
remove_tags = [{'id':['footer', 'lhs-col']}, {'class':['bottom', 'categoryHead',
|
|
||||||
'article_tools']}]
|
|
||||||
keep_only_tags = dict(id='middle-col')
|
|
||||||
remove_tags_after=[dict(attrs={'id':'story'})]
|
|
||||||
remove_attributes=['style']
|
|
||||||
no_stylesheets = True
|
|
||||||
|
|
||||||
def print_version(self, url):
|
def print_version(self, url):
|
||||||
match = re.search(r'newsid=(\d+)', url)
|
match = re.search(r'newsid=(\d+)', url)
|
||||||
|
32
recipes/dobreprogamy.recipe
Normal file
32
recipes/dobreprogamy.recipe
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
import re
|
||||||
|
|
||||||
|
class Dobreprogramy_pl(BasicNewsRecipe):
|
||||||
|
title = 'Dobreprogramy.pl'
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
__licence__ ='GPL v3'
|
||||||
|
category = 'IT'
|
||||||
|
language = 'pl'
|
||||||
|
masthead_url='http://static.dpcdn.pl/css/Black/Images/header_logo_napis_fullVersion.png'
|
||||||
|
cover_url = 'http://userlogos.org/files/logos/Karmody/dobreprogramy_01.png'
|
||||||
|
description = u'Aktualności i blogi z dobreprogramy.pl'
|
||||||
|
encoding = 'utf-8'
|
||||||
|
index='http://www.dobreprogramy.pl/'
|
||||||
|
no_stylesheets = True
|
||||||
|
language = 'pl'
|
||||||
|
extra_css = '.title {font-size:22px;}'
|
||||||
|
oldest_article = 8
|
||||||
|
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: '') ]
|
||||||
|
keep_only_tags=[dict(attrs={'class':['news', 'entry single']})]
|
||||||
|
remove_tags = [dict(name='div', attrs={'class':['newsOptions', 'noPrint', 'komentarze', 'tags font-heading-master']})]
|
||||||
|
#remove_tags = [dict(name='div', attrs={'class':['komentarze', 'block', 'portalInfo', 'menuBar', 'topBar']})]
|
||||||
|
feeds = [(u'Aktualności', 'http://feeds.feedburner.com/dobreprogramy/Aktualnosci'),
|
||||||
|
('Blogi', 'http://feeds.feedburner.com/dobreprogramy/BlogCzytelnikow')]
|
||||||
|
|
||||||
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
for a in soup('a'):
|
||||||
|
if a.has_key('href') and 'http://' not in a['href'] and 'https://' not in a['href']:
|
||||||
|
a['href']=self.index + a['href']
|
||||||
|
return soup
|
12
recipes/dunya_bizim.recipe
Normal file
12
recipes/dunya_bizim.recipe
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class BasicUserRecipe1324736687(BasicNewsRecipe):
|
||||||
|
title = u'D\xfcnya Bizim'
|
||||||
|
language = 'tr'
|
||||||
|
__author__ = 'asalet_r'
|
||||||
|
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 10
|
||||||
|
auto_cleanup = True
|
||||||
|
|
||||||
|
feeds = [(u'Aktif \u0130mamlar', u'http://dunyabizim.com/servisler/rss.php?kategoriID=31'), (u'Ayr\u0131nt\u0131 Defteri', u'http://dunyabizim.com/servisler/rss.php?kategoriID=58'), (u'Baba Kitaplar', u'http://dunyabizim.com/servisler/rss.php?kategoriID=4'), (u'Bu da Oldu', u'http://dunyabizim.com/servisler/rss.php?kategoriID=32'), (u'\xc7-al\u0131nt\u0131 Yaz\u0131lar', u'http://dunyabizim.com/servisler/rss.php?kategoriID=33'), (u'Dar\xfclmedya', u'http://dunyabizim.com/servisler/rss.php?kategoriID=49'), (u'Gidenler', u'http://dunyabizim.com/servisler/rss.php?kategoriID=59'), (u'G\xfczel Mekanlar', u'http://dunyabizim.com/servisler/rss.php?kategoriID=43'), (u'\u0130yi Haberler', u'http://dunyabizim.com/servisler/rss.php?kategoriID=18'), (u'\u0130yi M\xfczikler', u'http://dunyabizim.com/servisler/rss.php?kategoriID=2'), (u'Kalite Dergiler', u'http://dunyabizim.com/servisler/rss.php?kategoriID=3'), (u'Konu\u015fa Konu\u015fa', u'http://dunyabizim.com/servisler/rss.php?kategoriID=24'), (u'M\xfcstesta G\xfczeller', u'http://dunyabizim.com/servisler/rss.php?kategoriID=65'), (u'O \u015eimdi Nerede?', u'http://dunyabizim.com/servisler/rss.php?kategoriID=52'), (u'Olsa Ke\u015fke', u'http://dunyabizim.com/servisler/rss.php?kategoriID=34'), (u'Orada Ne Oldu?', u'http://dunyabizim.com/servisler/rss.php?kategoriID=38'), (u'\xd6nemli Adamlar', u'http://dunyabizim.com/servisler/rss.php?kategoriID=1'), (u'Polemik', u'http://dunyabizim.com/servisler/rss.php?kategoriID=39'), (u'Sinema', u'http://dunyabizim.com/servisler/rss.php?kategoriID=23'), (u'Yalan Haber', u'http://dunyabizim.com/servisler/rss.php?kategoriID=40'), (u'Yeni \u015eeyler', u'http://dunyabizim.com/servisler/rss.php?kategoriID=57'), (u'Zekeriya Sofras\u0131', u'http://dunyabizim.com/servisler/rss.php?kategoriID=60')]
|
12
recipes/dunya_bulteni.recipe
Normal file
12
recipes/dunya_bulteni.recipe
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
|
||||||
|
class BasicUserRecipe1321194347(BasicNewsRecipe):
|
||||||
|
title = u'D\xfcnya B\xfclteni'
|
||||||
|
language = 'tr'
|
||||||
|
__author__ = 'asalet_r'
|
||||||
|
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 50
|
||||||
|
auto_cleanup = True
|
||||||
|
|
||||||
|
feeds = [(u'Tarih Dosyas\u0131', u'http://www.dunyabulteni.net/servisler/rss.php?kategoriID=157'), (u'R\xf6portaj', u'http://www.dunyabulteni.net/servisler/rss.php?kategoriID=153'), (u'Makale-Yorum', u'http://www.dunyabulteni.net/servisler/rss.php?kategoriID=174'), (u'K\xfclt\xfcr-Sanat', u'http://www.dunyabulteni.net/servisler/rss.php?kategoriID=66'), (u'Hayat\u0131n \u0130\xe7inden', u'http://www.dunyabulteni.net/servisler/rss.php?kategoriID=200'), (u'Haber Analiz', u'http://www.dunyabulteni.net/servisler/rss.php?kategoriID=123'), (u'Gezi-\u0130zlenim', u'http://www.dunyabulteni.net/servisler/rss.php?kategoriID=90'), (u'Aile Sa\u011fl\u0131k E\u011fitim', u'http://www.dunyabulteni.net/servisler/rss.php?kategoriID=75')]
|
25
recipes/dzieje_pl.recipe
Normal file
25
recipes/dzieje_pl.recipe
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
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'
|
||||||
|
index='http://dzieje.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')]
|
||||||
|
|
||||||
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
for a in soup('a'):
|
||||||
|
if a.has_key('href') and 'http://' not in a['href'] and 'https://' not in a['href']:
|
||||||
|
a['href']=self.index + a['href']
|
||||||
|
return soup
|
67
recipes/dziennik_pl.recipe
Normal file
67
recipes/dziennik_pl.recipe
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
|
||||||
|
|
||||||
|
from calibre.web.feeds.news import BasicNewsRecipe
|
||||||
|
import re
|
||||||
|
class Dziennik_pl(BasicNewsRecipe):
|
||||||
|
title = u'Dziennik.pl'
|
||||||
|
__author__ = 'fenuks'
|
||||||
|
description = u'Wiadomości z kraju i ze świata. Wiadomości gospodarcze. Znajdziesz u nas informacje, wydarzenia, komentarze, opinie.'
|
||||||
|
category = 'newspaper'
|
||||||
|
language = 'pl'
|
||||||
|
masthead_url= 'http://5.s.dziennik.pl/images/logos.png'
|
||||||
|
cover_url= 'http://5.s.dziennik.pl/images/logos.png'
|
||||||
|
no_stylesheets = True
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 100
|
||||||
|
remove_javascript=True
|
||||||
|
remove_empty_feeds=True
|
||||||
|
extra_css= 'ul {list-style: none; padding: 0; margin: 0;} li {float: left;margin: 0 0.15em;}'
|
||||||
|
preprocess_regexps = [(re.compile("Komentarze:"), lambda m: ''), (re.compile('<p><strong><a href=".*?">>>> CZYTAJ TAKŻE: ".*?"</a></strong></p>'), lambda m: '')]
|
||||||
|
keep_only_tags=[dict(id='article')]
|
||||||
|
remove_tags=[dict(name='div', attrs={'class':['art_box_dodatki', 'new_facebook_icons2', 'leftArt', 'article_print', 'quiz-widget', 'belka-spol', 'belka-spol belka-spol-bottom', 'art_data_tags', 'cl_right', 'boxRounded gal_inside']}), dict(name='a', attrs={'class':['komentarz', 'article_icon_addcommnent']})]
|
||||||
|
feeds = [(u'Wszystko', u'http://rss.dziennik.pl/Dziennik-PL/'),
|
||||||
|
(u'Wiadomości', u'http://rss.dziennik.pl/Dziennik-Wiadomosci'),
|
||||||
|
(u'Gospodarka', u'http://rss.dziennik.pl/Dziennik-Gospodarka'),
|
||||||
|
(u'Kobieta', u'http://rss.dziennik.pl/Dziennik-Kobieta'),
|
||||||
|
(u'Auto', u'http://rss.dziennik.pl/Dziennik-Auto'),
|
||||||
|
(u'Rozrywka', u'http://rss.dziennik.pl/Dziennik-Rozrywka'),
|
||||||
|
(u'Film', u'http://rss.dziennik.pl/Dziennik-Film'),
|
||||||
|
(u'Muzyka' , u'http://rss.dziennik.pl/Dziennik-Muzyka'),
|
||||||
|
(u'Kultura', u'http://rss.dziennik.pl/Dziennik-Kultura'),
|
||||||
|
(u'Nauka', u'http://rss.dziennik.pl/Dziennik-Nauka'),
|
||||||
|
(u'Podróże', u'http://rss.dziennik.pl/Dziennik-Podroze/'),
|
||||||
|
(u'Nieruchomości', u'http://rss.dziennik.pl/Dziennik-Nieruchomosci')]
|
||||||
|
|
||||||
|
def skip_ad_pages(self, soup):
|
||||||
|
tag=soup.find(name='a', attrs={'title':'CZYTAJ DALEJ'})
|
||||||
|
if tag:
|
||||||
|
new_soup=self.index_to_soup(tag['href'], raw=True)
|
||||||
|
return new_soup
|
||||||
|
|
||||||
|
def append_page(self, soup, appendtag):
|
||||||
|
tag=soup.find('a', attrs={'class':'page_next'})
|
||||||
|
if tag:
|
||||||
|
appendtag.find('div', attrs={'class':'article_paginator'}).extract()
|
||||||
|
while tag:
|
||||||
|
soup2= self.index_to_soup(tag['href'])
|
||||||
|
tag=soup2.find('a', attrs={'class':'page_next'})
|
||||||
|
if not tag:
|
||||||
|
for r in appendtag.findAll('div', attrs={'class':'art_src'}):
|
||||||
|
r.extract()
|
||||||
|
pagetext = soup2.find(name='div', attrs={'class':'article_body'})
|
||||||
|
for dictionary in self.remove_tags:
|
||||||
|
v=pagetext.findAll(name=dictionary['name'], attrs=dictionary['attrs'])
|
||||||
|
for delete in v:
|
||||||
|
delete.extract()
|
||||||
|
pos = len(appendtag.contents)
|
||||||
|
appendtag.insert(pos, pagetext)
|
||||||
|
if appendtag.find('div', attrs={'class':'article_paginator'}):
|
||||||
|
appendtag.find('div', attrs={'class':'article_paginator'}).extract()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def preprocess_html(self, soup):
|
||||||
|
self.append_page(soup, soup.body)
|
||||||
|
return soup
|
||||||
|
|
46
recipes/echo_online.recipe
Normal file
46
recipes/echo_online.recipe
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
__license__ = 'GPL v3'
|
||||||
|
__copyright__ = '2011, Kovid Goyal <kovid at kovidgoyal.net>, Armin Geller'
|
||||||
|
'''
|
||||||
|
Fetch echo-online.de
|
||||||
|
'''
|
||||||
|
|
||||||
|
from calibre.web.feeds.recipes import BasicNewsRecipe
|
||||||
|
class Echo_Online(BasicNewsRecipe):
|
||||||
|
title = u'Echo Online' # 2011-12-28 AGe
|
||||||
|
description = '-Echo Online-'
|
||||||
|
publisher = 'Echo Online GmbH'
|
||||||
|
category = 'News, Germany'
|
||||||
|
__author__ = 'Armin Geller' # 2011-12-28 AGe
|
||||||
|
language = 'de'
|
||||||
|
lang = 'de-DE'
|
||||||
|
encoding = 'iso-8859-1'
|
||||||
|
timefmt = ' [%a, %d %b %Y]'
|
||||||
|
|
||||||
|
oldest_article = 7
|
||||||
|
max_articles_per_feed = 50 # 2011-12-28 AGe
|
||||||
|
no_stylesheets = True
|
||||||
|
auto_cleanup = True
|
||||||
|
remove_javascript = True
|
||||||
|
|
||||||
|
feeds = [
|
||||||
|
(u'Topnews', u'http://www.echo-online.de/storage/rss/rss/topnews.xml'),
|
||||||
|
(u'Darmstadt', u'http://www.echo-online.de/rss/darmstadt.xml'),
|
||||||
|
(u'Darmstadt-Dieburg', u'http://www.echo-online.de/rss/darmstadtdieburg.xml'),
|
||||||
|
(u'Kreis Gro\xdf-Gerau', u'http://www.echo-online.de/rss/kreisgrossgerau.xml'),
|
||||||
|
(u'R\xfcsselsheim', u'http://www.echo-online.de/rss/ruesselsheim.xml'),
|
||||||
|
(u'Kreis Bergstra\xdfe', u'http://www.echo-online.de/rss/bergstrasse.xml'),
|
||||||
|
(u'Odenwaldkreis', u'http://www.echo-online.de/rss/odenwald.xml'),
|
||||||
|
(u'SV 98', u'http://www.echo-online.de/rss/sv98.xml'),
|
||||||
|
(u'Kino', u'http://www.echo-online.de/rss/kino.xml'),
|
||||||
|
(u'Ausstellungen', u'http://www.echo-online.de/rss/ausstellungen.xml'),
|
||||||
|
(u'Ausflug & Reise', u'http://www.echo-online.de/rss/ausflugreise.xml'),
|
||||||
|
]
|
||||||
|
|
||||||
|
def print_version(self, url):
|
||||||
|
return self.browser.open_novisit(url).geturl() + '?_FRAME=33&_FORMAT=PRINT'
|
||||||
|
|
||||||
|
remove_tags = [dict(name='div', attrs={'class':["header", "name"]}),]
|
||||||
|
auto_cleanup_keep = '//div[@class="bild_gross w270"]'
|
||||||
|
|
||||||
|
cover_url = 'http://adcounter.darmstaedter-echo.de/webdav/files/config/gui/images/Zeitungsfaecher.gif'
|
||||||
|
|
@ -9,7 +9,7 @@ from calibre.web.feeds.news import BasicNewsRecipe
|
|||||||
from calibre.ebooks.BeautifulSoup import Tag, NavigableString
|
from calibre.ebooks.BeautifulSoup import Tag, NavigableString
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
|
|
||||||
import time, re
|
import re
|
||||||
|
|
||||||
class Economist(BasicNewsRecipe):
|
class Economist(BasicNewsRecipe):
|
||||||
|
|
||||||
@ -22,8 +22,6 @@ class Economist(BasicNewsRecipe):
|
|||||||
' perspective. Best downloaded on Friday mornings (GMT)')
|
' perspective. Best downloaded on Friday mornings (GMT)')
|
||||||
extra_css = '.headline {font-size: x-large;} \n h2 { font-size: small; } \n h1 { font-size: medium; }'
|
extra_css = '.headline {font-size: x-large;} \n h2 { font-size: small; } \n h1 { font-size: medium; }'
|
||||||
oldest_article = 7.0
|
oldest_article = 7.0
|
||||||
cover_url = 'http://media.economist.com/sites/default/files/imagecache/print-cover-thumbnail/print-covers/currentcoverus_large.jpg'
|
|
||||||
#cover_url = 'http://www.economist.com/images/covers/currentcoverus_large.jpg'
|
|
||||||
remove_tags = [
|
remove_tags = [
|
||||||
dict(name=['script', 'noscript', 'title', 'iframe', 'cf_floatingcontent']),
|
dict(name=['script', 'noscript', 'title', 'iframe', 'cf_floatingcontent']),
|
||||||
dict(attrs={'class':['dblClkTrk', 'ec-article-info',
|
dict(attrs={'class':['dblClkTrk', 'ec-article-info',
|
||||||
@ -31,42 +29,46 @@ class Economist(BasicNewsRecipe):
|
|||||||
{'class': lambda x: x and 'share-links-header' in x},
|
{'class': lambda x: x and 'share-links-header' in x},
|
||||||
]
|
]
|
||||||
keep_only_tags = [dict(id='ec-article-body')]
|
keep_only_tags = [dict(id='ec-article-body')]
|
||||||
needs_subscription = False
|
|
||||||
no_stylesheets = True
|
no_stylesheets = True
|
||||||
preprocess_regexps = [(re.compile('</html>.*', re.DOTALL),
|
preprocess_regexps = [(re.compile('</html>.*', re.DOTALL),
|
||||||
lambda x:'</html>')]
|
lambda x:'</html>')]
|
||||||
|
|
||||||
|
# economist.com has started throttling after about 60% of the total has
|
||||||
|
# downloaded with connection reset by peer (104) errors.
|
||||||
|
delay = 1
|
||||||
|
|
||||||
|
needs_subscription = False
|
||||||
'''
|
'''
|
||||||
def get_browser(self):
|
def get_browser(self):
|
||||||
br = BasicNewsRecipe.get_browser()
|
br = BasicNewsRecipe.get_browser()
|
||||||
br.open('http://www.economist.com')
|
if self.username and self.password:
|
||||||
req = mechanize.Request(
|
br.open('http://www.economist.com/user/login')
|
||||||
'http://www.economist.com/members/members.cfm?act=exec_login',
|
br.select_form(nr=1)
|
||||||
headers = {
|
br['name'] = self.username
|
||||||
'Referer':'http://www.economist.com/',
|
br['pass'] = self.password
|
||||||
},
|
res = br.submit()
|
||||||
data=urllib.urlencode({
|
raw = res.read()
|
||||||
'logging_in' : 'Y',
|
if '>Log out<' not in raw:
|
||||||
'returnURL' : '/',
|
raise ValueError('Failed to login to economist.com. '
|
||||||
'email_address': self.username,
|
'Check your username and password.')
|
||||||
'fakepword' : 'Password',
|
|
||||||
'pword' : self.password,
|
|
||||||
'x' : '0',
|
|
||||||
'y' : '0',
|
|
||||||
}))
|
|
||||||
br.open(req).read()
|
|
||||||
return br
|
return br
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
def get_cover_url(self):
|
||||||
|
soup = self.index_to_soup('http://www.economist.com/printedition/covers')
|
||||||
|
div = soup.find('div', attrs={'class':lambda x: x and
|
||||||
|
'print-cover-links' in x})
|
||||||
|
a = div.find('a', href=True)
|
||||||
|
url = a.get('href')
|
||||||
|
if url.startswith('/'):
|
||||||
|
url = 'http://www.economist.com' + url
|
||||||
|
soup = self.index_to_soup(url)
|
||||||
|
div = soup.find('div', attrs={'class':'cover-content'})
|
||||||
|
img = div.find('img', src=True)
|
||||||
|
return img.get('src')
|
||||||
|
|
||||||
def parse_index(self):
|
def parse_index(self):
|
||||||
try:
|
return self.economist_parse_index()
|
||||||
return self.economist_parse_index()
|
|
||||||
except:
|
|
||||||
raise
|
|
||||||
self.log.warn(
|
|
||||||
'Initial attempt to parse index failed, retrying in 30 seconds')
|
|
||||||
time.sleep(30)
|
|
||||||
return self.economist_parse_index()
|
|
||||||
|
|
||||||
def economist_parse_index(self):
|
def economist_parse_index(self):
|
||||||
soup = self.index_to_soup(self.INDEX)
|
soup = self.index_to_soup(self.INDEX)
|
||||||
@ -86,32 +88,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:
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user