From 9d5aae0a01c61f0d4cff89e10af520eb846aafef Mon Sep 17 00:00:00 2001 From: jysperm Date: Thu, 12 Apr 2018 18:05:16 +0800 Subject: [PATCH] :sparkles: Snapcat by phantomjs --- .leanignore | 6 ++++++ README.md | 3 +++ leanengine.yaml | 3 +++ package.json | 8 ++++++++ phantomjs-web.js | 9 +++++++++ server.js | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 79 insertions(+) create mode 100644 .leanignore create mode 100644 README.md create mode 100644 leanengine.yaml create mode 100644 package.json create mode 100644 phantomjs-web.js create mode 100644 server.js diff --git a/.leanignore b/.leanignore new file mode 100644 index 0000000..85f9cd3 --- /dev/null +++ b/.leanignore @@ -0,0 +1,6 @@ +.git/ +.DS_Store +.avoscloud/ +.leancloud/ +node_modules/ +screenshot.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..c5caa36 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Snapcat (phantomjs) + +一个使用 phantomjs 的截图服务。 diff --git a/leanengine.yaml b/leanengine.yaml new file mode 100644 index 0000000..aa94221 --- /dev/null +++ b/leanengine.yaml @@ -0,0 +1,3 @@ +systemDependencies: + - phantomjs + - fonts-wqy diff --git a/package.json b/package.json new file mode 100644 index 0000000..c2e3fdf --- /dev/null +++ b/package.json @@ -0,0 +1,8 @@ +{ + "engines": { + "node": "6.x" + }, + "dependencies": { + "phantomjs-prebuilt": "^2.1.14" + } +} diff --git a/phantomjs-web.js b/phantomjs-web.js new file mode 100644 index 0000000..504383a --- /dev/null +++ b/phantomjs-web.js @@ -0,0 +1,9 @@ +var page = require('webpage').create(); +var system = require('system'); + +page.viewportSize = { width: 1440, height: 900 }; + +page.open(system.args[1], function (status) { + page.render(system.args[2], {format: 'png'}); + phantom.exit(); +}); diff --git a/server.js b/server.js new file mode 100644 index 0000000..a42e12b --- /dev/null +++ b/server.js @@ -0,0 +1,50 @@ +var fs = require('fs'); +var url = require('url'); +var phantomjs = require('phantomjs-prebuilt'); + +require('http').createServer(function(req, res) { + const urlInfo = url.parse(req.url, true) + + if (urlInfo.pathname !== '/') { + res.statusCode = 404; + return res.end(); + } + + if (urlInfo.query.url) { + makeScreenshot(urlInfo.query.url, (err, filename) => { + if (err) { + return res.end(err); + } + + fs.readFile(filename, function(err, buffer) { + if (err) { + res.end(err.message); + } else { + res.setHeader('Content-Type', 'image/png'); + res.end(buffer); + } + }) + }); + } else { + res.end('You can visit https://snapcat.leanapp.cn/?url=https://leancloud.cn/docs'); + } +}).listen(3000); + +var counter = 0; + +function makeScreenshot(url, callback) { + const filename = `./${counter++}.png`; + const program = phantomjs.exec('phantomjs-web.js', url, filename); + + program.stdout.pipe(process.stdout); + + var stderr = ''; + + program.stderr.on('data', data => { + stderr += data.toString(); + }); + + program.on('exit', () => { + callback(stderr === '' ? null : stderr, filename); + }); +}