calibre/recipes/weblogs_sl.recipe

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)