add testing page to plot visitor location

This commit is contained in:
BuffTechTalk
2024-09-30 21:35:17 -05:00
parent 2020aafe74
commit ffb909813b
22 changed files with 118 additions and 17 deletions

BIN
files/visitor_locations.db Normal file

Binary file not shown.

BIN
images/BuffaloMarker.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -1,10 +1,2 @@
# Example 1
Age = 24;
if Age >=18:
print('You are an adult')
# Example 1: put following code in the editor and click APPLY to run

View File

@@ -10,7 +10,7 @@ def navigation_bar():
with st.sidebar:
st.image("./images/BuffTeksLogo.png", caption="Building Skills, Crafting Code, Bridging Communities")
page_label = sac.menu([
sac.MenuItem('Homepage', icon='house'),
sac.MenuItem('Outstanding Members', icon='award'),
@@ -27,7 +27,7 @@ def navigation_bar():
sac.MenuItem('Lesson3', icon='3-square'),
]),
]),
# sac.MenuItem("Testing", icon='fingerprint'),
sac.MenuItem("Testing", icon='fingerprint'),
sac.MenuItem(type='divider'),
sac.MenuItem('Link', type='group', children=[
sac.MenuItem('Join Us', icon='person-plus', href='https://wtamuuw.az1.qualtrics.com/jfe/form/SV_2boQtKLCptO33HE'),

View File

@@ -1,4 +1,5 @@
import streamlit as st
import streamlit_antd_components as sac
import time
def project():
@@ -13,12 +14,22 @@ def project():
# Project Gallery
st.header("Project Gallery")
st.divider()
st.image("./images/CommunityLinkLogo.svg")
st.markdown("""
### Main Contributors:
- Darrian Lambert, Kim Sundblom, and Jessica Zoll
col_logo, clo_contributors = st.columns(2)
with col_logo:
st.image("./images/CommunityLinkLogo.svg")
with clo_contributors:
st.markdown("""
#### Main Contributors:
- Darrian Lambert
- Kim Sundblom
- Jessica Zoll
""")
sac.buttons([
sac.ButtonsItem(label='View Source Code', icon='github',color='#000000', href='https://github.com/wtamu-buffteks/CommunityLink'),
], label='', align='left')
st.markdown("""
### Introduction:
- The Community Link project is dedicated to efficiently organizing, tracking, and distributing hard goods and monetary contributions in support of non-profit organizations.

View File

@@ -1,8 +1,54 @@
import pandas as pd
import streamlit as st
import subprocess
import requests
import folium
from streamlit_folium import folium_static
import sqlite3
from datetime import datetime
from webpages import code_editor as ce
def get_ip():
try:
response = requests.get('https://api.ipify.org')
return response.text
except:
return "Unable to get IP"
def get_location(ip_address):
try:
response = requests.get(f'https://ipapi.co/{ip_address}/json/')
data = response.json()
return data['latitude'], data['longitude'], data['city'], data['country_name']
except:
return None, None, "Unknown", "Unknown"
def save_visitor(conn, lat, lon, city, country):
timestamp = datetime.now()
c = conn.cursor()
c.execute("INSERT INTO visitors (latitude, longitude, city, country, timestamp) VALUES (?, ?, ?, ?, ?)",
(lat, lon, city, country, timestamp))
conn.commit()
def get_all_visitors(conn):
df = pd.read_sql_query("SELECT * from visitors", conn)
return df
def create_map(df):
m = folium.Map(location=[41.2706, -97.1749], zoom_start=4)
# Create a custom icon
for _, row in df.iterrows():
folium.Marker(
location = [row['latitude'], row['longitude']],
popup=f"{row['city']}",
tooltip=f"{row['city']}"
).add_to(m)
return m
def testing():
st.title("Testing Page")
# ce.code_editor()
@@ -11,3 +57,55 @@ def testing():
# # video = "https://youtu.be/HluANRwPyNo?feature=shared"
# # st.video(video)
# Initialize the database
conn = sqlite3.connect('./files/visitor_locations.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS visitors
(id INTEGER PRIMARY KEY AUTOINCREMENT,
latitude REAL,
longitude REAL,
city TEXT,
country TEXT,
timestamp DATETIME)''')
conn.commit()
st.title('Visitor Location Tracker')
# Get and save current visitor's location
ip = get_ip()
lat, lon, city, country = get_location(ip)
if lat and lon:
save_visitor(conn, lat, lon, city, country)
st.write(f"Your location: {city}, {country}")
else:
st.write("Unable to determine your location")
# Display all visitors on a map
st.subheader('All Visitor Locations')
df = get_all_visitors(conn)
if not df.empty:
m = create_map(df)
folium_static(m)
else:
st.write("No visitor data available yet.")
# Display visitor statistics
st.subheader('Visitor Statistics')
col_visitors, col_cities, col_countries = st.columns(3)
if not df.empty:
with col_visitors:
st.metric(label="Total visitors", value= df['id'].nunique())
with col_cities:
st.metric(label="Total cities", value= df['city'].nunique())
with col_countries:
st.metric(label="Total countries", value= df['country'].nunique())
st.write("Top 5 cities:")
st.write(df['city'].value_counts().head())
else:
st.write("No visitor data available yet.")
# Close the database connection
conn.close()