From 592b81561fcf0b859930ee4a0ba536773217d821 Mon Sep 17 00:00:00 2001 From: Michiel Scholten Date: Thu, 7 Jul 2016 14:44:59 +0200 Subject: [PATCH] Initial version, based on great example found at http://charlesleifer.com/blog/building-bookmarking-service-python-and-phantomjs/ --- digimarks.py | 70 ++++++++++++++++++++++++++++++++++++++++++++ templates/index.html | 34 +++++++++++++++++++++ 2 files changed, 104 insertions(+) create mode 100644 digimarks.py create mode 100644 templates/index.html diff --git a/digimarks.py b/digimarks.py new file mode 100644 index 0000000..62ea8ea --- /dev/null +++ b/digimarks.py @@ -0,0 +1,70 @@ +import datetime +import hashlib +import os +import subprocess + +from flask import Flask, abort, redirect, render_template, request +from flask_peewee.db import Database +from flask_peewee.utils import object_list +from peewee import * + +# app configuration +APP_ROOT = os.path.dirname(os.path.realpath(__file__)) +MEDIA_ROOT = os.path.join(APP_ROOT, 'static') +MEDIA_URL = '/static/' +DATABASE = { + 'name': os.path.join(APP_ROOT, 'bookmarks.db'), + 'engine': 'peewee.SqliteDatabase', +} +PASSWORD = 'shh' +PHANTOM = '/usr/local/bin/phantomjs' +SCRIPT = os.path.join(APP_ROOT, 'screenshot.js') + +# create our flask app and a database wrapper +app = Flask(__name__) +app.config.from_object(__name__) +db = Database(app) + +class Bookmark(db.Model): + url = CharField() + created_date = DateTimeField(default=datetime.datetime.now) + image = CharField(default='') + + class Meta: + ordering = (('created_date', 'desc'),) + + def fetch_image(self): + url_hash = hashlib.md5(self.url).hexdigest() + filename = 'bookmark-%s.png' % url_hash + + outfile = os.path.join(MEDIA_ROOT, filename) + params = [PHANTOM, SCRIPT, self.url, outfile] + + exitcode = subprocess.call(params) + if exitcode == 0: + self.image = os.path.join(MEDIA_URL, filename) + +@app.route('/') +def index(): + return object_list('index.html', Bookmark.select()) + +@app.route('/add/') +def add(): + password = request.args.get('password') + if password != PASSWORD: + abort(404) + + url = request.args.get('url') + if url: + bookmark = Bookmark(url=url) + bookmark.fetch_image() + bookmark.save() + return redirect(url) + abort(404) + +if __name__ == '__main__': + # create the bookmark table if it does not exist + Bookmark.create_table(True) + + # run the application + app.run() diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..0b30998 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,34 @@ + + + + Bookmarks + + + +
+
+ + + + +
+
+ +