|
|
| from flask import Flask, request, jsonify, render_template |
| import pandas as pd |
| import datetime |
|
|
| app = Flask(__name__) |
|
|
|
|
| def get_tags(_H,_L,_C,last_H,last_L,last_C): |
| if(_H>last_H and _C>last_H): |
| tags="日出" |
| elif(_L<last_L and _C<last_L): |
| tags="日落" |
| elif(_H<last_H and _L>last_L): |
| tags="母子" |
| elif(_H>last_H and _L<last_L): |
| tags="子母" |
| elif(_L<last_L and _C>last_C): |
| tags="日落收高" |
| elif(_H>last_H): |
| tags="出頭" |
| elif(_L<last_L): |
| tags="落尾" |
| else: |
| tags="無" |
| return tags |
|
|
|
|
|
|
| def get_info(stock_id, date): |
| ''' |
| stock_id: 股票代碼 |
| date: 日期格式為 YYYYMMDD |
| ''' |
| mouth = int(date[4:6]) |
| year = int(date[:4]) |
| url = f'https://www.twse.com.tw/rwd/zh/afterTrading/STOCK_DAY?date={date}&stockNo={stock_id}&response=html' |
| last_month = mouth - 1 if mouth > 1 else 12 |
| last_year = year if mouth > 1 else year - 1 |
| last_url = f'https://www.twse.com.tw/rwd/zh/afterTrading/STOCK_DAY?date={last_year}{last_month:02d}12&stockNo={stock_id}&response=html' |
| try: |
| data = pd.read_html(url)[0] |
| data.columns = data.columns.get_level_values(1) |
| except Exception: |
| pass |
| try: |
| last_data = pd.read_html(last_url)[0] |
| last_data.columns = last_data.columns.get_level_values(1) |
| except Exception: |
| return None |
|
|
| data = pd.concat([last_data, data], axis=0) |
| data.reset_index(drop=True, inplace=True) |
| |
| H,L,C= data['最高價'],data['最低價'],data['收盤價'] |
| _H=H.iloc[-1] |
| _L=L.iloc[-1] |
| _C=C.iloc[-1] |
| last_H=H.iloc[-2] |
| last_L=L.iloc[-2] |
| last_C=C.iloc[-2] |
| tags=get_tags(_H,_L,_C,last_H,last_L,last_C) |
| data=data[-2:] |
| data['標籤']=tags |
| |
| data['標籤'].iloc[0]="---" |
| |
| return data[-2:].to_dict(orient="records") |
|
|
| @app.route('/get_stock_info', methods=['POST']) |
| def get_stock_info(): |
| try: |
| data = request.json |
| stock_ids = data.get("stocks", []) |
| |
| date = datetime.datetime.now().strftime('%Y%m') |
| date+="01" |
|
|
| |
| |
| results = {} |
| for stock_id in stock_ids: |
| stock_data = get_info(stock_id, date) |
| results[stock_id] = stock_data if stock_data else "No data" |
|
|
| return jsonify(results) |
| except Exception as e: |
| return jsonify({"error": str(e)}), 500 |
| @app.route('/') |
| def index(): |
| return render_template('index.html') |
| |
| |
| |
|
|