带有python脚本的Node.js应用程序

时间:2017-10-16 21:26:11

标签: javascript python node.js

我创建了一个解析网站(IMDB)并将其组织成数据帧的python脚本。 我还有一个node.js应用程序,它允许我在python脚本中找到一个变量(基于名为 pyvar 的代码中的电影名称的电影ID)。那么如何在运行javascript应用程序到python脚本之后包含这个变量,运行脚本然后将结果发送回node.js应用程序? (这将是数据帧转换为让我们说json)

Node.js app

var express = require("express")
var app = express()
var request = require("request")
app.set("view engine", "ejs")

app.get("/", function(req, res){
    res.render("search")
})

app.get("/results", function(req, res){
    var query = req.query.search
    var url = "http://www.omdbapi.com/?s=" + query + "&apikey=thewdb"
    
    request(url, function(error, response, body){
        if(!error && response.statusCode == 200){
            var data = JSON.parse(body)
            res.render("results", {data: data})
            var pyvar = data["Search"][0]["imdbID"]
        }    
    })
})

app.listen(process.env.PORT, process.env.IP, function(){
    console.log("Movie App has started!!!");
})

简而言之,python脚本如下所示:

url = 'website.org/' + pyvar + '/blah'
parse(url)
return dataframe

之后我会以某种形式将数据帧发送回node.js应用程序并显示结果,如果它允许我下载转换为xlsx的数据帧,则可能会更加复杂。

1 个答案:

答案 0 :(得分:1)

您可以使用child_process spawn执行您的python脚本,如 Felix Kling 在其评论中提示,并将结果返回到您的nodejs应用。然后,您可以使用像node-xlsx这样的包将数据转换为Excel文件。

类似的东西:

app.js

// ...
const { spawn } = require('child_process');
const xlsx = require('node-xlsx');

// ...    
app.get("/results", (req, res) => {
  let query = req.query.search;
  let url = "http://www.omdbapi.com/?s=" + query + "&apikey=thewdb";

  request(url, (error, response, body) => {
    if (!error && response.statusCode == 200) {
      let data = JSON.parse(body);
      let pyvar = data["Search"][0]["imdbID"];

      // Call the python script
      let pythonScript = spawn('./script.py', [pyvar]);

      pythonScript.stdout.on('data', data => {
        // Here transform the datatable to xls sheet
        let xlsx = xlsx.build([{ name: "myXlsxSheet", data: data.toString() }])
        // And send the file
        res.end(new Buffer(xlsx, 'binary'));
      });
    }
  })

})

// ...

script.py

#!/usr/bin/python

import sys
import pandas

pyvar = sys.argv[1]

# Here the script that parse the website
url = 'website.org/' + pyvar + '/blah'
data = parse(url)

print pandas.DataFrame(data)