Spaces:
				
			
			
	
			
			
		Sleeping
		
	
	
	
			
			
	
	
	
	
		
		
		Sleeping
		
	Create app.py
Browse files
    	
        app.py
    ADDED
    
    | @@ -0,0 +1,78 @@ | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | 
|  | |
| 1 | 
            +
            import requests
         | 
| 2 | 
            +
            from bs4 import BeautifulSoup
         | 
| 3 | 
            +
            import pandas as pd
         | 
| 4 | 
            +
            import gradio as gr
         | 
| 5 | 
            +
            from google.oauth2.service_account import Credentials
         | 
| 6 | 
            +
            import gspread
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            def get_hospital_data(url):
         | 
| 9 | 
            +
                # 發送GET請求獲取網頁內容
         | 
| 10 | 
            +
                response = requests.get(url)
         | 
| 11 | 
            +
                response.encoding = 'utf-8'  # 設置正確的編碼
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                # 使用BeautifulSoup解析HTML
         | 
| 14 | 
            +
                soup = BeautifulSoup(response.text, 'html.parser')
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                # 提取醫院名稱
         | 
| 17 | 
            +
                hospital_name = soup.find('span', id='Lbl抬頭').text.strip()
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                # 提取查詢院區
         | 
| 20 | 
            +
                queried_hospital = soup.find('span', id='Lbl結果').text.strip().split(':')[1].split()[0]
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                # 提取病床數據
         | 
| 23 | 
            +
                table = soup.find('table', id='DG1')
         | 
| 24 | 
            +
                rows = table.find_all('tr')[1:]  # 跳過表頭
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                # 解析病床數據
         | 
| 27 | 
            +
                bed_data = []
         | 
| 28 | 
            +
                for row in rows:
         | 
| 29 | 
            +
                    cols = row.find_all('td')
         | 
| 30 | 
            +
                    if len(cols) == 5:
         | 
| 31 | 
            +
                        category = cols[0].text.strip()
         | 
| 32 | 
            +
                        total = int(cols[1].text.strip())
         | 
| 33 | 
            +
                        occupied = int(cols[2].text.strip())
         | 
| 34 | 
            +
                        available = int(cols[3].text.strip())
         | 
| 35 | 
            +
                        rate = float(cols[4].text.strip().rstrip('%'))
         | 
| 36 | 
            +
                        bed_data.append([category, total, occupied, available, rate])
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                # 創建DataFrame
         | 
| 39 | 
            +
                df = pd.DataFrame(bed_data, columns=['病床類別', '總床數', '佔床數', '空床數', '佔床率'])
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                # 提取備註
         | 
| 42 | 
            +
                remarks = []
         | 
| 43 | 
            +
                for i in range(6):
         | 
| 44 | 
            +
                    remark = soup.find('span', id=f'Lbl備註{i}')
         | 
| 45 | 
            +
                    if remark:
         | 
| 46 | 
            +
                        remarks.append(remark.text.strip())
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                # 格式化輸出
         | 
| 49 | 
            +
                result = f"{hospital_name}\n查詢院區: {queried_hospital}\n\n各類病床明細表:\n{df.to_string(index=False)}\n\n備註:\n" + "\n".join(remarks)
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                # 儲存 CSV 檔案
         | 
| 52 | 
            +
                df.to_csv("CM2024.csv", encoding="utf-8-sig")
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                return result, df
         | 
| 55 | 
            +
             | 
| 56 | 
            +
            def upload_to_google_sheets(df):
         | 
| 57 | 
            +
                # Google Sheets API 認證
         | 
| 58 | 
            +
                scope = ['https://www.googleapis.com/auth/spreadsheets']
         | 
| 59 | 
            +
                creds = Credentials.from_service_account_file("/content/gdrive/My Drive/omega-wind-430312-e2-eb1dbac8ba3d.json", scopes=scope)
         | 
| 60 | 
            +
                gs = gspread.authorize(creds)
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                # 打開 Google 試算表
         | 
| 63 | 
            +
                sheet = gs.open_by_url('https://docs.google.com/spreadsheets/d/1puPO2mIwwTLSqQ-E3tB15vIl4WTclSRvHghdrwgeN9c/edit?gid=0#gid=0')
         | 
| 64 | 
            +
                worksheet = sheet.get_worksheet(0)
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                # 轉換 DataFrame 為字串格式
         | 
| 67 | 
            +
                df1 = df.astype(str)
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                # 更新試算表
         | 
| 70 | 
            +
                worksheet.update([df1.columns.values.tolist()] + df1.values.tolist())
         | 
| 71 | 
            +
             | 
| 72 | 
            +
            def gradio_interface(url):
         | 
| 73 | 
            +
                result, df = get_hospital_data(url)
         | 
| 74 | 
            +
                upload_to_google_sheets(df)
         | 
| 75 | 
            +
                return result
         | 
| 76 | 
            +
             | 
| 77 | 
            +
            iface = gr.Interface(fn=gradio_interface, inputs="text", outputs="text", title="Hospital Bed Data")
         | 
| 78 | 
            +
            iface.launch()
         | 
