Spaces:
Sleeping
Sleeping
import streamlit as st | |
import requests | |
import pandas as pd | |
import simple_salesforce | |
# ---------------------- CONFIG ---------------------- | |
CLIENT_ID = "3MVG9VMBZCsTL9hnfx2eVMOHa56mwSZnvuAnPr3kVVBEQfeLYvrSfJNRRjjSlKWPLy99XM6kefg==" | |
CLIENT_SECRET = "6F7E9C95CE20CC07FC1EBD39B34909739D99975A0EEB548240926EA0686E428E" | |
USERNAME = "[email protected]" | |
PASSWORD = "Vedavathi@04" # Keep this as the password (without the security token) | |
SECURITY_TOKEN = "qe4His8AcuFJucZz5NBHfGU" # Your Salesforce Security Token | |
TOKEN_URL = "https://login.salesforce.com/services/oauth2/token" # For production | |
API_VERSION = "v60.0" | |
# ---------------------- AUTH ---------------------- | |
def get_salesforce_token(): | |
data = { | |
"grant_type": "password", # Corrected grant_type | |
"client_id": CLIENT_ID, | |
"client_secret": CLIENT_SECRET, | |
"username": USERNAME, | |
"password": PASSWORD + SECURITY_TOKEN # Correctly concatenate password and security token | |
} | |
response = requests.post(TOKEN_URL, data=data) | |
if response.status_code != 200: | |
# Log detailed error message for better debugging | |
error_message = response.json() if response.status_code != 200 else "No error message" | |
st.error(f"Authentication failed! Status code: {response.status_code}, Message: {error_message}") | |
return None, None | |
res = response.json() | |
return res["access_token"], res["instance_url"] | |
# ---------------------- FETCH DATA ---------------------- | |
def fetch_pole_data(instance_url, access_token): | |
headers = { | |
"Authorization": f"Bearer {access_token}" | |
} | |
query = "SELECT Name, Location_Latitude__c, Location_Longitude__c, Camera_Status__c FROM Pole__c LIMIT 100" | |
url = f"{instance_url}/services/data/{API_VERSION}/query?q={query}" | |
response = requests.get(url, headers=headers) | |
if response.status_code != 200: | |
st.error(f"Failed to fetch Pole data! Status code: {response.status_code}, Message: {response.json()}") | |
return pd.DataFrame() | |
records = response.json().get("records", []) | |
df = pd.DataFrame(records) | |
return df[["Name", "Location_Latitude__c", "Location_Longitude__c", "Camera_Status__c"]] | |
# ---------------------- UI ---------------------- | |
st.title("🚦Vedavathi Smart Poles Viewer") | |
token, instance_url = get_salesforce_token() | |
if token: | |
if st.button("🔄 Refresh Pole Data"): | |
df = fetch_pole_data(instance_url, token) | |
if not df.empty: | |
st.success("Pole data loaded successfully!") | |
st.dataframe(df, use_container_width=True) | |
else: | |
st.warning("No data found.") | |
else: | |
st.error("Salesforce authentication failed. Check credentials.") | |