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
Post a Comment