add testing page to plot visitor location
This commit is contained in:
BIN
files/visitor_locations.db
Normal file
BIN
files/visitor_locations.db
Normal file
Binary file not shown.
BIN
images/BuffaloMarker.png
Normal file
BIN
images/BuffaloMarker.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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.
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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()
|
||||
Reference in New Issue
Block a user