From 316de60697c7d8c1fe0e8743330613a346064522 Mon Sep 17 00:00:00 2001 From: televex Date: Wed, 24 Feb 2021 18:42:21 +0000 Subject: [PATCH] updates to the print webpage, it works now! (still experimental) --- .gitignore | 1 + print/start.py | 103 ++++++++++++++++++++++++++++--------- print/templates/index.html | 27 +++------- requirements.txt | 1 + 4 files changed, 88 insertions(+), 44 deletions(-) diff --git a/.gitignore b/.gitignore index a72b04f..0615e89 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ venv* *__pycache__* *.pyc +print/printed.json diff --git a/print/start.py b/print/start.py index 6ac4b1e..f3cc3e3 100644 --- a/print/start.py +++ b/print/start.py @@ -3,50 +3,103 @@ import sys import os -import flask +import re +import flask from flask import request +import flask_apscheduler import urllib import json +from datetime import datetime from escpos.escpos import Escpos from escpos import printer # Create the application. APP = flask.Flask(__name__) -# File Initialization -try: - lp = printer.File("/dev/usb/lp0") -except: - lp = sys.stdout +# Connect to the printer +# Get the printer's USB initializing code with $ sudo lsbusb +lp = printer.Usb(0x4b8,0xe15) -# USB initialization -# Bus 001 Device 006: ID 04b8:0e15 Seiko Epson Corp. -# lp = printer.Usb(0x4b8, 0xe15) +# Define the JSON databased for storing printed items +db = 'printed.json' +if not os.path.exists(db): + with open(db, 'w') as f: + f.write(json.dumps({ "printed" : [] }, indent=4)) -lp.text('test :)') -lp.image('') -lp.cut() +# Check the Multifeeder regulary (every 10 min) +# https://github.com/viniciuschiele/flask-apscheduler +# Thanks Crunk for pointing to this extention! +scheduler = flask_apscheduler.APScheduler() +scheduler.api_enabled = False +scheduler.init_app(APP) +scheduler.start() +def update_db(item): + items = json.loads(open(db).read()) + if not item in items['printed']: + with open(db, 'w') as out: + items['printed'].append(item) + out.write(json.dumps(items, indent=4)) + out.close() -@APP.route('/', methods=['GET', 'POST']) -def index(): +def html2plain(html): + plain = re.sub('<[^<]+?>', '', text) + return plain - plaintext = request.args.get('plaintext', '') +@scheduler.task('interval', id='check', minutes=10) +def check(): + print('Checking the Multifeeder!') + + url = 'https://multi.vvvvvvaria.org/API/latest/10' + response = urllib.request.urlopen(url).read() + feed = json.loads(response) + for post in feed: + year = post['published_parsed'][0] + month = post['published_parsed'][1] + day = post['published_parsed'][2] + post_date = date(year, month, day) + + plaintext = html2plain(post.summary) + + item = { + 'source' : post.feed_details.rss, + 'date' : post_date, + 'printed' : plaintext + } + update_db(item) + +@APP.route('/print/', methods=['GET', 'POST']) +def print(): + + buffer = printer.Dummy() + plaintext = request.args.get('printing', '') if plaintext: - lp.text(plaintext) - lp.cut() - url = 'https://multi.vvvvvvaria.org/API/latest/5' - response = urllib.request.urlopen(url).read() - multifeeder = json.loads(response) + buffer.text(plaintext) + buffer.cut() - url = 'https://multi.vvvvvvaria.org/API/today/' - response = urllib.request.urlopen(url).read() - feedstoday = json.loads(response) + lp._raw(buffer.output) + + date = datetime.now() + date_str = date.strftime('%Y-%m-%d_%H-%M-%S') + + item = { + 'source' : 'TeleVex', + 'date' : date_str, + 'printed' : plaintext + } + update_db(item) + + return flask.render_template('index.html', plaintext=plaintext) + +@APP.route('/printed/', methods=['GET', 'POST']) +def printed(): + + items = json.loads(open(db).read()) - return flask.render_template('index.html', plaintext=plaintext, multifeeder=multifeeder, feedstoday=feedstoday) + return flask.render_template('printed.html', items=items) if __name__ == '__main__': APP.debug=True - APP.run(port=5000) \ No newline at end of file + APP.run(port=5000) diff --git a/print/templates/index.html b/print/templates/index.html index 3306727..77706aa 100644 --- a/print/templates/index.html +++ b/print/templates/index.html @@ -8,36 +8,25 @@
+

print, printed

+
-

Plain Text Printing Point (ASCII only)

+

Plain Text Printing Point (ASCII only)

- +

+
-

Image printing access point

+ +

Image printing access point (not working yet)

-
-
-

Multifeeder

-
Last 5 posts added to the Televex print stream:
-
- {% for post in multifeeder %} -
- Title: {{ post.title }}
- Link: {{ post.link }}
- Author: {{ post.author }}
- Date: {{ post.published }}
-
- {% endfor %} -
-
- \ No newline at end of file + diff --git a/requirements.txt b/requirements.txt index 2e8be02..4f8a0fb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,3 +4,4 @@ requests pypandoc python-escpos flask +Flask-APScheduler