Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
A python script that makes a webpage, https://dl.dropboxusercontent.com/u/81715/pinboard.html, from my pinboard links with thumbnails. Most of the script borrowed from http://leancrew.com/all-this/2015/12/homemade-rss-aggregator-followup. Need webkit2png
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Most of this based on a script from http://leancrew.com/all-this/2015/12/homemade-rss-aggregator-followup/
#I added the thumbnailing with webkit2png and cut it down to one feed.
#TODO clean up old images, don't regenerate existing images, spearate css from template
import feedparser
import time
from datetime import datetime, timedelta
import pytz
from subprocess import call
import os
import re
utc = pytz.utc
homeTZ = pytz.timezone('Europe/London')
dt = datetime.now(homeTZ)
if dt.hour < 2:
dt = dt - timedelta(hours=48)
dt = dt - timedelta(hours=48)
start = dt.replace(hour=0, minute=0, second=0, microsecond=0)
#start give a couple of days ago
d = feedparser.parse('http://feeds.pinboard.in/rss/u:johnjohnston')
#print d['feed']['title']
posts=[]
for e in d['entries']:
when = e['updated_parsed']
when = utc.localize(datetime.fromtimestamp(time.mktime(when)))
if when > start:
title= e['title']
link= e['link']
fname=link.replace('https://',"")
fname=fname.replace('http://',"")
fname=re.sub(r'\W+', '',fname)
fname=fname+ '-clipped.png'
#fname will hold the name of the png file
posts.append(( title, link, fname))
#use webkit2png to get a screenshot
#edited version of webkit2png to handle el capitain's problems with https/http
os.system("'/Users/john/Dropbox/_working on/webkit2png' --ignore-ssl-check -C -D /Users/john/Dropbox/Public/thumbs/ " +link +" > /dev/null 2>&1")
listTemplate = '''<div>
<p class="title"><a href="{1}"><img src="https://dl.dropboxusercontent.com/u/81715/thumbs/{2}"><br>{0}</a></p><p></p>\n</div>'''
litems = []
#print listTemplate
#print "---------------------------------"
#print 'len'
#print len(posts)
for p in posts:
try:
r = [ x.encode('ascii') for x in p[0:] ]
except UnicodeError:
r = [ x.encode('utf-8') for x in p[0:] ]
else:
r=p
#I had to add all this stuff because of problems with utf-8 that I don't full understand
#print "RRRR "
#print r
#r = [ x.encode('ascii') for x in p[0:] ]
litems.append(listTemplate.format(r[0],r[1],r[2]))
#print litems.append(listTemplate.format(p0,p1))
ul = '\n \n'.join(litems)
#print ul
print '''<html>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<head>
<style>
body {{
-webkit-box-shadow: inset 10px 10px 5px 0px rgba(0,0,0,0.75);
-moz-box-shadow: inset 10px 10px 5px 0px rgba(0,0,0,0.75);
box-shadow: inset 10px 10px 5px 0px rgba(0,0,0,0.75);;padding:0px;margin:0px;border:solid 26px #fff;background:#ccc;;background-image: url('http://johnj.info/wire106/characters/seamless_cork_board_background.jpg');
}}
h1 {{
font-family: Arial, "MS Trebuchet", sans-serif;color:#fff;padding:20px
}}
section.rss div {{ margin:20px 50px;float:left;background:#fff;padding:20px;width:220px;height:200px;box-shadow: 10px 10px 5px rgba(100,100,100,0.6);-webkit-box-shadow: 10px 10px 5px rgba(100,100,100,0.6);-moz-box-shadow: 10px 10px 5px rgba(100,100,100,0.6);
background-image: url('thumbtack.png');
background-repeat: no-repeat;
background-position: top right;
overflow: hidden;
}}
.rss {{
}}
.title {{
font-weight: bold;
font-family: Helvetica, Sans-serif;
font-size: 90%;
margin-bottom: .25em;
}}
.title a {{
text-decoration: none;
color: black;
}}
.info {{
font-size: 85%;
margin-top: 0;
margin-left: .5em;
}}
img {{
max-width: 700px;
}}
@media screen and (max-width:667px) {{
body {{
font-size: 200%;
width: 650px;
background-color: white;
}}
.rss li {{
line-height: normal;
}}
img {{
max-width: 600px;
}}
}}
</style>
<title>Recent Pinboard</title>
<body><h1>Recent Pins</h1></h1>
<section class="rss">
{}
</section>
<p style="width:100%;clear:both">&nbsp;</p>
<script src="https://dl.dropboxusercontent.com/u/81715/thumbs/pinboard.js"></script>
</body>
</html>
'''.format(ul)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.