sintamar commited on
Commit
90a0b92
·
verified ·
1 Parent(s): 3e37b96

Update src/streamlit_app.py

Browse files
Files changed (1) hide show
  1. src/streamlit_app.py +99 -0
src/streamlit_app.py CHANGED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from selenium import webdriver
3
+ from selenium.webdriver.chrome.service import Service
4
+ from selenium.webdriver.chrome.options import Options
5
+ from webdriver_manager.chrome import ChromeDriverManager
6
+ from bs4 import BeautifulSoup
7
+ import os, time
8
+
9
+ st.set_page_config(page_title="Klasemen Liga 1 - Flashscore", layout="wide")
10
+
11
+ st.title("🏆 Klasemen Liga 1 Indonesia (Flashscore)")
12
+ st.write("Data ini diambil secara langsung menggunakan **headless browser** (Selenium) dan ditampilkan ulang dalam format HTML yang responsif.")
13
+
14
+ url = "https://www.flashscore.co.id/sepak-bola/indonesia/super-league/peringkat/#/QqIn9e16/peringkat/keseluruhan/"
15
+
16
+ if st.button("Ambil Data Klasemen ⚽"):
17
+
18
+ # Setup environment agar tidak Permission Denied
19
+ os.environ['WDM_LOCAL'] = '1'
20
+ os.environ['WDM_LOG_LEVEL'] = '0'
21
+ os.environ['WDM_CACHE_DIR'] = '/tmp/.wdm'
22
+
23
+ chrome_options = Options()
24
+ chrome_options.add_argument("--headless=new")
25
+ chrome_options.add_argument("--disable-gpu")
26
+ chrome_options.add_argument("--no-sandbox")
27
+ chrome_options.add_argument("--disable-dev-shm-usage")
28
+ chrome_options.add_argument("--window-size=1920,1080")
29
+ chrome_options.binary_location = "/usr/bin/google-chrome"
30
+
31
+ st.info("Sedang memuat halaman Flashscore... Harap tunggu sekitar 10 detik.")
32
+ service = Service(ChromeDriverManager(path="/tmp/.wdm").install())
33
+ driver = webdriver.Chrome(service=service, options=chrome_options)
34
+
35
+ driver.get(url)
36
+ time.sleep(10) # beri waktu JS memuat tabel
37
+
38
+ page_source = driver.page_source
39
+ driver.quit()
40
+
41
+ soup = BeautifulSoup(page_source, "html.parser")
42
+ table_div = soup.find("div", class_="ui-table")
43
+ if not table_div:
44
+ table_div = soup.find("div", {"id": "live-table"})
45
+
46
+ if table_div:
47
+ st.success("Berhasil mengambil tabel klasemen ✅")
48
+
49
+ responsive_html = f"""
50
+ <html>
51
+ <head>
52
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
53
+ <style>
54
+ body {{
55
+ font-family: Arial, sans-serif;
56
+ margin: 0;
57
+ padding: 0;
58
+ background: #f8f9fa;
59
+ }}
60
+ .table-container {{
61
+ max-width: 100%;
62
+ overflow-x: auto;
63
+ background: white;
64
+ margin: 20px auto;
65
+ padding: 10px;
66
+ border-radius: 10px;
67
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
68
+ }}
69
+ .ui-table, table {{
70
+ width: 100%;
71
+ border-collapse: collapse;
72
+ }}
73
+ .ui-table tr:nth-child(even) {{
74
+ background: #f2f2f2;
75
+ }}
76
+ .ui-table th, .ui-table td {{
77
+ padding: 8px 10px;
78
+ text-align: left;
79
+ font-size: 14px;
80
+ }}
81
+ @media (max-width: 600px) {{
82
+ .ui-table th, .ui-table td {{
83
+ font-size: 12px;
84
+ padding: 6px;
85
+ }}
86
+ }}
87
+ </style>
88
+ </head>
89
+ <body>
90
+ <div class="table-container">
91
+ {str(table_div)}
92
+ </div>
93
+ </body>
94
+ </html>
95
+ """
96
+
97
+ st.components.v1.html(responsive_html, height=900, scrolling=True)
98
+ else:
99
+ st.error("Gagal menemukan tabel klasemen. Coba tingkatkan waktu tunggu atau periksa struktur halaman.")