From e1f1e3ae0f64cbbabb551322ec62977f394c578d Mon Sep 17 00:00:00 2001 From: Brendan Howell Date: Sun, 6 Nov 2016 23:16:59 +0100 Subject: [PATCH] set up slimerjs to use xvfb --- screenless/bureau/bureau.py | 4 +- .../bureau/publicrelations/publicrelations.py | 3 ++ screenless/slimerjs/rasterize.js | 49 +++++++++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 screenless/slimerjs/rasterize.js diff --git a/screenless/bureau/bureau.py b/screenless/bureau/bureau.py index 6329a42..61059ad 100644 --- a/screenless/bureau/bureau.py +++ b/screenless/bureau/bureau.py @@ -71,10 +71,12 @@ class Bureau(object): self.api = {} modpath = os.path.dirname(__file__) + xvfb = "xvfb-run" slimerjs = os.path.join(modpath, "..", "lib", "slimerjs", "slimerjs") renderer = os.path.join(modpath, "..", "lib", "rasterize.js") self.slimerjs = os.path.abspath(slimerjs) - self.html2pdf = self.slimerjs + " " + os.path.abspath(renderer) + " " + self.html2pdf = xvfb + " " + self.slimerjs + " " + \ + os.path.abspath(renderer) + " " mypath = inspect.getfile(self.__class__) self.mdir = os.path.dirname(mypath) diff --git a/screenless/bureau/publicrelations/publicrelations.py b/screenless/bureau/publicrelations/publicrelations.py index ac9501e..2ac572c 100644 --- a/screenless/bureau/publicrelations/publicrelations.py +++ b/screenless/bureau/publicrelations/publicrelations.py @@ -82,11 +82,14 @@ class PublicRelations(Bureau): else: count = 10 + # TODO: add fancier formatting i.e. inverted text for username/handle tweets = self.t.t.statuses.home_timeline(count=count) out = "" for t in tweets: out += t["user"]["name"] + " : " + t["text"] + "\r\n\r\n" self.print_small(out) + # TODO: download and print image entities: + # https://dev.twitter.com/overview/api/entities-in-twitter-objects def main(): diff --git a/screenless/slimerjs/rasterize.js b/screenless/slimerjs/rasterize.js new file mode 100644 index 0000000..c0950de --- /dev/null +++ b/screenless/slimerjs/rasterize.js @@ -0,0 +1,49 @@ +"use strict"; +var page = require('webpage').create(), + system = require('system'), + address, output, size; + +if (system.args.length < 3 || system.args.length > 5) { + console.log('Usage: rasterize.js URL filename [paperwidth*paperheight|paperformat] [zoom]'); + console.log(' paper (pdf output) examples: "5in*7.5in", "10cm*20cm", "A4", "Letter"'); + console.log(' image (png/jpg output) examples: "1920px" entire page, window width 1920px'); + console.log(' "800px*600px" window, clipped to 800x600'); + phantom.exit(1); +} else { + address = system.args[1]; + output = system.args[2]; + page.viewportSize = { width: 600, height: 600 }; + if (system.args.length > 3 && system.args[2].substr(-4) === ".pdf") { + size = system.args[3].split('*'); + page.paperSize = size.length === 2 ? { width: size[0], height: size[1], margin: '0px' } + : { format: system.args[3], orientation: 'portrait', margin: '1cm' }; + } else if (system.args.length > 3 && system.args[3].substr(-2) === "px") { + size = system.args[3].split('*'); + if (size.length === 2) { + pageWidth = parseInt(size[0], 10); + pageHeight = parseInt(size[1], 10); + page.viewportSize = { width: pageWidth, height: pageHeight }; + page.clipRect = { top: 0, left: 0, width: pageWidth, height: pageHeight }; + } else { + console.log("size:", system.args[3]); + pageWidth = parseInt(system.args[3], 10); + pageHeight = parseInt(pageWidth * 3/4, 10); // it's as good an assumption as any + console.log ("pageHeight:",pageHeight); + page.viewportSize = { width: pageWidth, height: pageHeight }; + } + } + if (system.args.length > 4) { + page.zoomFactor = system.args[4]; + } + page.open(address, function (status) { + if (status !== 'success') { + console.log('Unable to load the address!'); + phantom.exit(1); + } else { + window.setTimeout(function () { + page.render(output); + phantom.exit(); + }, 200); + } + }); +}