2017-06-19 219 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,因爲我希望用戶訪問它時,它會成爲新的報告。 –

相關問題