from flask import Flask, request, jsonify, render_template_string from google.oauth2.service_account import Credentials from googleapiclient.discovery import build from googleapiclient.http import MediaIoBaseUpload import os import io import datetime app = Flask(__name__) # Google API settings SCOPES = ['https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive.file'] SPREADSHEET_ID = '1rcIJflbC1VIc70F6dnASLFvGQ90TXHhCx0iyxsXR7Ww' FOLDER_ID = '1brmLNqOMCvRS0TDY6ECHvIBmlRx8pcPz' # Create credentials from environment variables creds_dict = { "type": "service_account", "project_id": os.environ.get('PROJECT_ID'), "private_key_id": os.environ.get('PRIVATE_KEY_ID'), "private_key": os.environ.get('PRIVATE_KEY').replace('\\n', '\n'), "client_email": os.environ.get('CLIENT_EMAIL'), "client_id": os.environ.get('CLIENT_ID'), "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": os.environ.get('CLIENT_X509_CERT_URL') } credentials = Credentials.from_service_account_info(creds_dict, scopes=SCOPES) @app.route('/') def home(): return render_template_string(''' Purchase Record Form

購買記錄表單 Purchase Record Form

''') @app.route('/submit', methods=['POST']) def submit(): try: name = request.form['name'] student_id = request.form['studentId'] product = request.form['product'] cost = request.form['cost'] file = request.files['receipt'] # Upload file to Drive drive_service = build('drive', 'v3', credentials=credentials) file_metadata = { 'name': f"{student_id}_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}_{file.filename}", 'parents': [FOLDER_ID] } media = MediaIoBaseUpload( io.BytesIO(file.read()), mimetype=file.content_type, resumable=True ) uploaded_file = drive_service.files().create( body=file_metadata, media_body=media, fields='id,webViewLink' ).execute() file_url = uploaded_file.get('webViewLink', '') # Update Google Sheet sheets_service = build('sheets', 'v4', credentials=credentials) timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') ip_address = request.remote_addr values = [[name, student_id, product, cost, file_url, timestamp, ip_address]] body = {'values': values} sheets_service.spreadsheets().values().append( spreadsheetId=SPREADSHEET_ID, range='Sheet1!A:G', valueInputOption='USER_ENTERED', body=body ).execute() return jsonify({'success': True, 'message': 'Data submitted successfully!'}) except Exception as e: return jsonify({'success': False, 'message': f'Error: {str(e)}'}) if __name__ == '__main__': app.run(host='0.0.0.0', port=7860)