¿Te gusta estar informado de las últimas tendencias en Hacker News? ¿No tienes tiempo? Con este script podrás recibir por email las 5 noticias que están en el top en ese momento.
Guarda el siguiente código como hackernews.py
#!/usr/bin/env python # -*- coding: utf-8 -*- import urllib.request as urllib2 import json import cgi import smtplib # Variables urlAPITop = "https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty" urlAPIItem = "https://hacker-news.firebaseio.com/v0/item/%s.json?print=pretty" emailFrom = 'correo@del.servidor' emailTo = ['tu@correo.com'] subject = 'Top Hacker news' maxNews = 5 # Cabecera de email textEmail = ("From: %s\r\nTo: %s\r\nSubject: %s\r\nContent-Type: text/html\r\n\r" % (emailFrom, ", ".join(emailTo), subject)) textEmail += '<h1>Hacker News</h1><table>' # Obtiene todos los elementos f = urllib2.urlopen(urlAPITop) response = json.loads(f.read().decode()) f.close() # Deja solo los maxNews primeros itemsIds = [] for i in range(maxNews): itemsIds.append(response[i]) # Obtiene toda la información de cada id for i in range(len(itemsIds)): f = urllib2.urlopen(urlAPIItem % itemsIds[i]) response = json.loads(f.read().decode()) f.close() textEmail += '<tr>' textEmail += '<td>%s</td>\n' % str(i + 1) textEmail += '<td><a href="%s">%s</a></td>\n' % (response['url'], cgi.escape(response['title'])) textEmail += '</tr>' textEmail += '</table>' # Envia email server = smtplib.SMTP('localhost') server.sendmail(emailFrom, emailTo, str.encode(textEmail)) server.quit()
Necesitarás tener un servidor de email instalado (como Postfix) y Python3 instalado. Después solo deberás ejecutar:
python3 hackernews.py
Y listo. Recibirás por email una estructura similar a esta:
¿Se puede mejorar?
Claro, cambia maxNews para recibir más noticias.Además que puedes añadir más emails para que lo reciban más personas.
Yo personalmente lo he configurado con cron para que cada mañana se ejecute y así poder leerlas antes de ponerme a trabajar.
Acepto cualquier sugerencia o ampliación :)
Actualización: Reddit implementado
Solo debes añadir tus subreddits favoritos en lSubreddits. Modifica las variables en las sección de Variables.
#!/usr/bin/env python # -*- coding: utf-8 -*- import urllib.request as urllib2 import json import html import smtplib import praw # statics URL_API_HACKER_NEWS_TOP = "https://hacker-news.firebaseio.com/v0/topstories.json?print=pretty" URL_API_HACKER_NEWS_ITEM = "https://hacker-news.firebaseio.com/v0/item/%s.json?print=pretty" # variables emailfrom = 'correo@servidor.com' emailto = ['tu@correo.com'] subject = 'Top noticias' maxNews = 5 lSubreddits = ['python', 'postgreSQL', 'javascript', 'django', 'programming', 'vim', 'backbonejs', 'learnprogramming', 'InternetIsBeatiful', 'GameDeals',] # cabecera de email textemail = ("from: %s\r\nto: %s\r\nsubject: %s\r\ncontent-type: text/html\r\n\r" % (emailfrom, ", ".join(emailto), subject)) ## Hacker News textemail += '<h1>Hacker news</h1><table>' # obtiene todos los elementos f = urllib2.urlopen(URL_API_HACKER_NEWS_TOP) response = json.loads(f.read().decode()) f.close() # deja solo los maxNews primeros itemsids = [] for i in range(maxNews): itemsids.append(response[i]) # obtiene toda la información de cada id for i in range(len(itemsids)): f = urllib2.urlopen(URL_API_HACKER_NEWS_ITEM % itemsids[i]) response = json.loads(f.read().decode()) f.close() textemail += '<tr>' textemail += '<td>%s</td>\n' % str(i + 1) textemail += '<td><a href="%s">%s</a></td>\n' % (response['url'], html.escape(response['title'])) textemail += '</tr>' textemail += '</table>' ## Reddit r = praw.Reddit(user_agent='my_cool_application') textemail += '<h1>Reddit</h1><table>' for i in range(len(lSubreddits)): iNum = 1 textemail += '<tr><td colspan="2"><h2>%s</h2></td></tr>' % lSubreddits[i] submissions = r.get_subreddit(lSubreddits[i]).get_hot(limit=maxNews) for submission in submissions: textemail += '<tr>' textemail += '<td>%s</td>\n' % str(iNum) textemail += '<td><a href="%s">%s</a></td>\n' % (submission.url, html.escape(submission.title)) textemail += '</tr><tr><td colspan="2"> </td></tr>' iNum += 1 textemail += '</table>' # Envia email server = smtplib.SMTP('localhost') server.sendmail(emailfrom, emailto, str.encode(textemail)) server.quit()
{{ comments.length }} comentarios