mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-06-23 15:30:45 -04:00
155 lines
7.8 KiB
Python
155 lines
7.8 KiB
Python
#!/usr/bin/env python
|
|
__license__ = 'GPL v3'
|
|
__copyright__ = '4 February 2011, desUBIKado'
|
|
__author__ = 'desUBIKado'
|
|
__version__ = 'v0.12'
|
|
__date__ = '28, Jul 2016'
|
|
'''
|
|
http://www.weblogssl.com/
|
|
'''
|
|
|
|
import re
|
|
from calibre.web.feeds.news import BasicNewsRecipe
|
|
|
|
|
|
class weblogssl(BasicNewsRecipe):
|
|
__author__ = 'desUBIKado'
|
|
description = u'Weblogs colectivos dedicados a seguir la actualidad sobre tecnologia, entretenimiento, estilos de vida, motor, deportes y economia.'
|
|
title = u'Weblogs SL (Xataka, Genbeta, VidaExtra, Blog de Cine y otros)'
|
|
publisher = 'Weblogs SL'
|
|
language = 'es'
|
|
timefmt = '[%a, %d %b, %Y]'
|
|
oldest_article = 1
|
|
max_articles_per_feed = 100
|
|
encoding = 'utf-8'
|
|
use_embedded_content = False
|
|
remove_empty_feeds = True
|
|
remove_javascript = True
|
|
no_stylesheets = True
|
|
|
|
# Si no se quiere recuperar todos los blogs se puede suprimir la descarga del que se desee poniendo
|
|
# un caracter # por delante, es decir, # ,(u'Applesfera', u'http://feeds.weblogssl.com/applesfera')
|
|
# haría que no se descargase Applesfera.
|
|
|
|
feeds = [
|
|
(u'Xataka', u'http://feeds.weblogssl.com/xataka2')
|
|
,(u'Xataka M\xf3vil', u'http://feeds.weblogssl.com/xatakamovil')
|
|
,(u'Xataka Foto', u'http://feeds.weblogssl.com/xatakafoto')
|
|
,(u'Xataka Android', u'http://feeds.weblogssl.com/xatakandroid')
|
|
,(u'Xataka Smart Home', u'http://feeds.weblogssl.com/Xatakahome')
|
|
,(u'Xataka Windows', u'http://feeds.weblogssl.com/xatakawindows')
|
|
,(u'Xataka Ciencia', u'http://feeds.weblogssl.com/xatakaciencia')
|
|
,(u'Applesfera', u'http://feeds.weblogssl.com/applesfera')
|
|
,(u'Vida Extra', u'http://feeds.weblogssl.com/vidaextra')
|
|
,(u'Genbeta', u'http://feeds.weblogssl.com/genbeta')
|
|
,(u'Genbeta Dev', u'http://feeds.weblogssl.com/genbetadev')
|
|
,(u'Magnet', u'http://feeds.weblogssl.com/xatakamagnet2')
|
|
|
|
|
|
,(u'Tendencias', u'http://feeds.weblogssl.com/trendencias')
|
|
,(u'Tendencias Belleza', u'http://feeds.weblogssl.com/trendenciasbelleza')
|
|
,(u'Tendencias Hombre', u'http://feeds.weblogssl.com/trendenciashombre')
|
|
,(u'Tendencias Lifestyle', u'http://feeds.weblogssl.com/trendenciaslifestyle')
|
|
,(u'Directo al paladar', u'http://feeds.weblogssl.com/directoalpaladar')
|
|
,(u'Beb\xe9s y m\xe1s', u'http://feeds.weblogssl.com/bebesymas')
|
|
,(u'Vit\xf3nica', u'http://feeds.weblogssl.com/vitonica')
|
|
,(u'Decoesfera', u'http://feeds.weblogssl.com/decoesfera')
|
|
,(u'Embelezzia', u'http://feeds.weblogssl.com/embelezzia')
|
|
,(u'Pop rosa', u'http://feeds.weblogssl.com/poprosa')
|
|
|
|
,(u'Motorpasi\xf3n', u'http://feeds.weblogssl.com/motorpasion')
|
|
,(u'Motorpasi\xf3n Moto', u'http://feeds.weblogssl.com/motorpasionmoto')
|
|
,(u'Motorpasi\xf3n Futuro', u'http://feeds.weblogssl.com/motorpasionfuturo')
|
|
|
|
,(u'Blog de Cine', u'http://feeds.weblogssl.com/blogdecine')
|
|
,(u'Vaya tele', u'http://feeds.weblogssl.com/vayatele2')
|
|
,(u'Diario del viajero', u'http://feeds.weblogssl.com/diariodelviajero')
|
|
,(u'Papel en blanco', u'http://feeds.weblogssl.com/papelenblanco')
|
|
|
|
,(u'El blog salm\xf3n', u'http://feeds.weblogssl.com/elblogsalmon2')
|
|
,(u'Pymes y aut\xf3nomos', u'http://feeds.weblogssl.com/pymesyautonomos')
|
|
,(u'Ahorro diario', u'http://feeds.weblogssl.com/ahorrodiario')
|
|
|
|
,(u'Xataka México', u'http://feeds.weblogssl.com/xatakamx')
|
|
,(u'Xataka Android México', u'http://feeds.weblogssl.com/xatakandroidmx')
|
|
,(u'Vida Extra México', u'http://feeds.weblogssl.com/vidaextramx')
|
|
,(u'Xataka Colombia', u'http://feeds.weblogssl.com/xatakaco')
|
|
|
|
,(u'Directo al paladar México', u'http://feeds.weblogssl.com/directoalpaladarmx')
|
|
,(u'Vit\xf3nica México', u'http://feeds.weblogssl.com/vitonicamx')
|
|
,(u'Tendencias Hombre México', u'http://feeds.weblogssl.com/trendenciashombremx')
|
|
|
|
,(u'Motorpasi\xf3n México', u'http://feeds.weblogssl.com/motorpasionmx')
|
|
]
|
|
|
|
keep_only_tags = [
|
|
dict(name='div', attrs={'class':'content-container'})
|
|
]
|
|
|
|
remove_tags = [
|
|
dict(name='div', attrs={'class':'article-social-share m-v1 js-article-share js-article-social-share'}),
|
|
dict(name='div', attrs={'class':'article-social-share m-v1 js-article-social-share'}),
|
|
dict(name='div', attrs={'class':'social-widgets'}),
|
|
dict(name='div', attrs={'class':'article-social-share m-in-normal'}),
|
|
dict(name='div', attrs={'class':'article-comments'}),
|
|
dict(name='div', attrs={'class':'article-links'}),
|
|
dict(name='div', attrs={'class':'article-topics-list'}),
|
|
dict(name='div', attrs={'class':'ad-box'}),
|
|
dict(name='blockquote', attrs={'class':'instagram-media'}),
|
|
dict(name='img', attrs={'alt':'Código QR'}),
|
|
dict(name='div', attrs={'id':'comments'})
|
|
]
|
|
|
|
remove_tags_after = dict(name='div' , attrs={'id':'comments'})
|
|
|
|
def print_version(self, url):
|
|
if url.startswith('http://www'):
|
|
return url.replace('http://www.', 'http://m.')
|
|
else:
|
|
return url.replace('http://', 'http://m.')
|
|
|
|
preprocess_regexps = [
|
|
# Para poner una linea en blanco entre un comentario y el siguiente
|
|
(re.compile(r'<li id="c', re.DOTALL|re.IGNORECASE), lambda match: '<br><br><li id="c'),
|
|
# Para ver las imágenes en las noticias de m.xataka.com
|
|
(re.compile(r'<noscript>', re.DOTALL|re.IGNORECASE), lambda m: ''),
|
|
(re.compile(r'</noscript>', re.DOTALL|re.IGNORECASE), lambda m: ''),
|
|
|
|
# Para cambiar de sitio el more
|
|
(re.compile(r'<div class="article-content">', re.DOTALL|re.IGNORECASE), lambda m: '<div class="article-content"><!--more-->'),
|
|
(re.compile(r'<div class="\/n<!--more-->">', re.DOTALL|re.IGNORECASE), lambda m: ''),
|
|
|
|
# Para presentar la primera imagen del artículo
|
|
(re.compile(r' srcset="http://i.blogs.es/', re.DOTALL|re.IGNORECASE), lambda match: ' src="http://i.blogs.es/'),
|
|
(re.compile(r' 450w, http://i.blogs.es', re.DOTALL|re.IGNORECASE), lambda match: '"><!--'),
|
|
(re.compile(r'1366w"><span></span>', re.DOTALL|re.IGNORECASE), lambda match: '-->'),
|
|
(re.compile(r'1366w" sf-src="http://i.blogs.es', re.DOTALL|re.IGNORECASE), lambda match: '--> sf-src="http://i.blogs.es')
|
|
]
|
|
|
|
# Para sustituir el video incrustado de YouTube por una imagen
|
|
|
|
def preprocess_html(self, soup):
|
|
for video_yt in soup.findAll('iframe',{'title':'YouTube video player'}):
|
|
if video_yt:
|
|
video_yt.name = 'img'
|
|
fuente = video_yt['src']
|
|
fuente2pre = fuente.replace('http://www.youtube.com/embed/','http://img.youtube.com/vi/')
|
|
fuente2 = fuente2pre.replace('https://www.youtube.com/embed/','https://img.youtube.com/vi/')
|
|
fuente3 = fuente2.replace('?rel=0','')
|
|
video_yt['src'] = fuente3 + '/0.jpg'
|
|
|
|
for video_yt2 in soup.findAll('iframe',{'allowfullscreen'}):
|
|
if video_yt2:
|
|
esyt = video_yt2.find('youtube')
|
|
if esyt:
|
|
video_yt2.name = 'img'
|
|
fuente = video_yt2['src']
|
|
fuente2pre = fuente.replace('http://www.youtube.com/embed/','http://img.youtube.com/vi/')
|
|
fuente2 = fuente2pre.replace('https://www.youtube.com/embed/','https://img.youtube.com/vi/')
|
|
video_yt2['src'] = fuente2 + '/0.jpg'
|
|
|
|
return soup
|
|
|
|
def get_article_url(self, article):
|
|
return article.get('guid', None)
|