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

Analisis Potensi Rebound Saham (compose view): Kode Python & colab.research.google.com

Proyek Scraping Python

Adaptasi Integrasi Fitur Vault HTML CSS JS ke Python