Alert Saham Turun Python v1-3 (python-telegram-bot Version: 22.2)

import os import gspread from datetime import datetime from oauth2client.service_account import ServiceAccountCredentials import requests # === KONFIGURASI === SPREADSHEET_ID = '1OIn23gLfPC8_6TFO7EqZubc2PYUN0m7QLcMJ8aI3ir4' # Ganti dengan ID spreadsheet kamu WORKSHEET_NAME = 'Sheet1' CREDENTIALS_FILE = 'fabled-era-466003-m6-9090d22f310e.json' FOLDER_ALERT = 'alert_files' # === TELEGRAM BOT === TELEGRAM_TOKEN = '8050614158:AAGnHHBERuADp2bBFl3PHsaFSuctLol6yVM' TELEGRAM_CHAT_ID = '8050614158' # === AUTENTIKASI GOOGLE SHEETS === scope = [ "https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive" ] creds = ServiceAccountCredentials.from_json_keyfile_name(CREDENTIALS_FILE, scope) client = gspread.authorize(creds) sheet = client.open_by_key(SPREADSHEET_ID).worksheet(WORKSHEET_NAME) data = sheet.get_all_values() # === BUAT FOLDER JIKA BELUM ADA === os.makedirs(FOLDER_ALERT, exist_ok=True) # === PROSES CEK ALERT === alerts = [] for i, row in enumerate(data[1:], start=2): # Lewati header try: if len(row) < 6: continue # Baris tidak lengkap if not row[3].strip() or not row[4].strip() or not row[5].strip(): continue # Lewati jika kolom harga atau batas kosong kode = row[1] nama = row[2] harga = float(row[3]) batas_turun = float(row[4]) batas_naik = float(row[5]) status_turun = row[6].strip().lower() if len(row) > 6 else "" status_naik = row[7].strip().lower() if len(row) > 7 else "" print(f"[DEBUG] Baris {i}: harga={harga}, batas_turun={batas_turun}, status_turun='{status_turun}'") if harga < batas_turun and status_turun != "terkirim": alerts.append(f"🔻 {kode} ({nama}) TURUN ke {harga} (batas: {batas_turun})") if harga > batas_naik and status_naik != "terkirim": alerts.append(f"🔺 {kode} ({nama}) NAIK ke {harga} (batas: {batas_naik})") except Exception as e: print(f"[!] Gagal membaca baris {i}: {e}") continue # === SIMPAN DAN KIRIM JIKA ADA ALERT === if alerts: now = datetime.now().strftime('%Y%m%d_%H%M') filename = f"alert_{now}.txt" filepath = os.path.join(FOLDER_ALERT, filename) with open(filepath, 'w', encoding='utf-8') as f: f.write('\n'.join(alerts)) # === KIRIM KE TELEGRAM === def send_telegram_file(filepath, filename): url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendDocument" with open(filepath, 'rb') as f: files = {'document': (filename, f)} data = {'chat_id': TELEGRAM_CHAT_ID} try: response = requests.post(url, files=files, data=data) if response.status_code == 200: print(f"[✔] Dikirim ke Telegram: {filename}") else: print(f"[✘] Gagal kirim ke Telegram. Status: {response.status_code}") except Exception as e: print(f"[✘] Exception saat kirim Telegram: {e}") send_telegram_file(filepath, filename) else: print("[✓] Tidak ada alert saat ini.")

Comments

Popular posts from this blog

Link Publish to Web dari Google Sheets

Fitur Google Sheets Spreadsheets Apps Script

Adaptasi Integrasi Fitur Vault HTML CSS JS ke Python