main.py Saham Turun v1 (belum bisa)

import pandas as pd import requests import json import time import os.path from google.oauth2.credentials import Credentials from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request from googleapiclient.discovery import build # CONFIG SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly'] with open('config.json') as f: config = json.load(f) SPREADSHEET_ID = config['spreadsheet_id'] TELEGRAM_TOKEN = config['telegram_token'] CHAT_ID = config['telegram_chat_id'] RANGE_NAME = 'Sheet1!A1:H1061' # --- GOOGLE SHEETS API --- def get_sheet_service(): creds = None if os.path.exists('token.json'): creds = Credentials.from_authorized_user_file('token.json', SCOPES) # Kalau token.json tidak ada atau expired: if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES) creds = flow.run_local_server(port=0) # Simpan token untuk reuse with open('token.json', 'w') as token: token.write(creds.to_json()) service = build('sheets', 'v4', credentials=creds) return service def get_sheet_data(service): sheet = service.spreadsheets() result = sheet.values().get(spreadsheetId=SPREADSHEET_ID, range=RANGE_NAME).execute() values = result.get('values', []) if not values: print('No data found.') return None else: headers = values[0] rows = values[1:] df = pd.DataFrame(rows, columns=headers) return df # --- TELEGRAM --- def send_telegram_message(message): url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage" payload = { 'chat_id': CHAT_ID, 'text': message } requests.post(url, data=payload) # --- MAIN CHECK --- def check_prices(df): for _, row in df.iterrows(): kode = row['Kode Saham'] emiten = row['Nama Emiten'] try: harga = float(row['Harga Saat Ini']) batas_turun = float(row['Batas Turun']) batas_naik = float(row['Batas Naik']) except: continue # Skip jika data tidak valid if harga < batas_turun: msg = f"🚨 [TURUN] {kode} - {emiten}\nHarga {harga:.2f} di bawah batas turun {batas_turun}" send_telegram_message(msg) elif harga > batas_naik: msg = f"🚀 [NAIK] {kode} - {emiten}\nHarga {harga:.2f} di atas batas naik {batas_naik}" send_telegram_message(msg) # --- MAIN LOOP --- if __name__ == '__main__': service = get_sheet_service() while True: df = get_sheet_data(service) if df is not None: check_prices(df) time.sleep(19)

Comments

Popular posts from this blog

Contoh Pindah Lokasi di CMD, Folder & Drive C D E

Langkah Cek Instalasi Python

Perbedaan antara Nmap dan python-nmap