2017-06-19 216 views
1

我使用可以生成应用程序中存储的一些数据的PDF报告的web应用程序。然而,要获得该报告,需要点击几次,并与应用程序混为一谈。如何在网络服务器上运行Python脚本

我支持这个应用程序的一组用户(我们使用的应用程序,我们不创建应用程序),我希望他们能够生成和查看尽可能少的点击这个报告。幸运的是,这个Web应用程序通过RESTful API提供了大量数据。所以我做了一些脚本。

我有一个Python脚本,它使HTTP GET请求,处理JSON结果,并使用该结果数据来动态构建一个URL。这里是我的Python代码的简化版本:

#!/usr/bin/env python 
import requests 

app_id="12345" 
secret="67890" 
api_url='https://api.webapp.example/some_endpoint' 

resp = requests.get(api_url, auth=(app_id,secret)) 
json_data = resp.json() 

# Simplification of the data processing I'm doing 
my_data = json_data['attr1']['attr2'] + my_data_processing 

# Result of the script is a link to a dynamically generated PDF 
pdf_url = 'https://pdf.webapp.example/items/' + my_data 

以上是我的代码实际上有一个简化,但它表明了相关的问题。在我的实际脚本中,我继续通过动态构建的URL进行另一个GET。 Web应用程序根据URL的my_data部分生成PDF,然后将该PDF写入文件。今天工作得很好。

目前,这是一个python脚本,可以在本地机器上按需运行。不过,我想在网络上的某个位置托管此文件,以便当用户在其浏览器中点击URL时,它会运行并生成pdf_url,而不必在每个用户的本地计算机上安装此脚本,以便PDF可以在移动设备上生成并查看。

思想是用户可以打开http://example.com/report-shortcut,python脚本将运行服务器端,动态构建URL并将用户重定向到该URL,然后该URL将在浏览器中显示PDF(假设用户是使用显示诸如Chrome,Safari等PDF文件的浏览器)。或者,如果重定向有问题,转至http://example.com/report-shortcut只能显示一个HTML页面,其中包含指向由Python脚本生成的URL的链接。

我正在寻找一种解决方案,以便如何托管此Python脚本并在用户访问网页时使其运行。我研究过AWS Lambda和Django,但对于这样一个简单的脚本(大约20行代码,加上注释和空白)看起来似乎过分了。我也看过Python CGI脚本,看起来很有前景,但我没有经验设置类似的东西。

寻找有关如何在用户转到示例网址时最好地托管和运行此代码的建议。

PS:我想过只是重新在Javascript中实现,但我宁愿API密钥不公开访问。

+2

前端的JavaScript将是任务比较容易的方式,但如果你一定想这样做后端服务器[瓶(http://flask.pocoo.org上/)可能更容易设置。 –

回答

0

我建议在AWS Lambda中构建脚本并使用API​​网关来调用它。

您可以创建pdf,将其存储在S3中并生成预先签名的URL。然后向用户返回302以将其重定向到预签名的URL。这将在他们的浏览器中显示PDF。 非常快速设置和使用Boto3获取PDF到S3并生成网址很简单。

它会比其他一些建议简单得多。

API Gateway & Boto3

+0

谢谢,我正在研究Lambda。 我希望在访问URL时重新生成PDF。 PDF是即将到来的人员时间表的汇总。 webapp用于安排人员,所以我不想预先生成并存储PDF,因为我希望用户访问它时,它会成为新的报告。 –

相关问题