remove unneeded code

This commit is contained in:
steven 2025-03-26 23:04:03 -04:00
parent 26a97d4317
commit 80aea73533
2 changed files with 47 additions and 90 deletions

62
app.py
View file

@ -1,11 +1,10 @@
from flask import Flask, render_template, send_from_directory from flask import Flask,render_template,send_from_directory
from flask_caching import Cache from flask_caching import Cache
import requests import requests
app = Flask(__name__) app=Flask(__name__)
app.config['CACHE_TYPE'] = 'SimpleCache' app.config['CACHE_TYPE']='SimpleCache'
app.config['CACHE_DEFAULT_TIMEOUT'] = 1800 cache=Cache(app)
cache = Cache(app)
@app.route("/") @app.route("/")
def index(): def index():
@ -13,50 +12,23 @@ def index():
@app.route("/gas.svg") @app.route("/gas.svg")
def favicon(): def favicon():
return send_from_directory(app.static_folder, "gas.svg") return send_from_directory(app.static_folder,"gas.svg")
@app.route("/gas.csv") @app.route("/gas.csv")
@cache.cached(timeout=1800)
def gas(): def gas():
data = cache.get("gas") result=["Sams https://www.samsclub.com/local/fuel-center/-/X"]
if data: return data url='https://www.samsclub.com/api/node/vivaldi/browse/v2/clubfinder/list?distance=10000&nbrOfStores=1000&singleLineAddr=10001'
sams=requests.get(url,headers={'User-Agent':'Mozilla/5.0','Accept-Encoding':'ztsd'}).json()
result = ["Sams https://www.samsclub.com/local/fuel-center/-/X"] for s in sams:
for s in samsdata():
if 'gasPrices' in s: if 'gasPrices' in s:
p = {11:0,16:0} p={g['gradeId']:int(g['price']*100) for g in s['gasPrices']}
for grade in s['gasPrices']:
if grade['gradeId'] in p:
p[grade['gradeId']] = int(grade['price']*100)
result.append(f"{p[11]},{p[16]},{s['geoPoint']['latitude']},{s['geoPoint']['longitude']},{s['id']}") result.append(f"{p[11]},{p[16]},{s['geoPoint']['latitude']},{s['geoPoint']['longitude']},{s['id']}")
result.append("Costco https://www.costco.com/warehouse-locations-X.html#:~:text=Gas%20Station") result.append("Costco https://www.costco.com/warehouse-locations-X.html#:~:text=Gas%20Station")
for s in costcodata(): url='https://www.costco.com/AjaxWarehouseBrowseLookupView?hasGas=true&populateWarehouseDetails=true'
if 'US' == s['country'] and 'regular' in s['gasPrices'] and 'PR' != s['state']: costco=requests.get(url,headers={'User-Agent':'Mozilla/5.0','Accept-Encoding':'gzip'}).json()[1:]
p = {'regular':0,'premium':0} for s in costco:
for grade in p: if 'regular' in s['gasPrices'] and s['country']=='US':
p[grade] = int(float(s['gasPrices'][grade])*100) p={g:int(float(s['gasPrices'][g])*100) for g in ['regular','premium']}
result.append(f"{p['regular']},{p['premium']},{s['latitude']},{s['longitude']},{s['displayName']}") result.append(f"{p['regular']},{p['premium']},{s['latitude']},{s['longitude']},{s['displayName']}")
data = "\n".join(result) return "\n".join(result)
cache.set("gas", data)
return data
@app.route("/sams.json")
def samsdata():
data = cache.get("sams")
if data: return data
url = 'https://www.samsclub.com/api/node/vivaldi/browse/v2/clubfinder/list?distance=10000&nbrOfStores=1000&singleLineAddr=10001'
response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0', 'Accept-Encoding': 'ztsd'})
data = response.json()
cache.set("sams", data)
return data
@app.route("/costco.json")
def costcodata():
data = cache.get("costco")
if data: return data
url = 'https://www.costco.com/AjaxWarehouseBrowseLookupView?hasGas=true&populateWarehouseDetails=true'
response = requests.get(url, headers={'User-Agent': 'Mozilla', 'Accept-Encoding': 'gzip'})
data = response.json()[1:]
cache.set("costco", data)
return data

View file

@ -3,62 +3,47 @@
<head> <head>
<title>Gas Prices</title> <title>Gas Prices</title>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta content="Gas Prices" property="og:title">
<meta content='https://gas.stevenalexander.org/gas.svg' property='og:image'>
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" type="image/x-icon" href="/gas.svg"> <link rel="icon" type="image/x-icon" href="/gas.svg">
<base target="_blank">
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js" integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin="anonymous"></script> <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js" integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin="anonymous"> <link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css" integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin="anonymous">
<style> <base target="_blank">
html, body { <style>html,body{height:100%;margin:0;}#map{height:100vh;}
height: 100%; .leaflet-container a{
margin: 0; color:black;
text-decoration:none;
} }
#map { .Costco,.Sams{
height: 100vh; display:flex;
} border-radius:33%;
.leaflet-container a { text-align:center;
color: black; align-items:center;
text-decoration: none; font-size:14px;
} font-weight:bold;
.Costco, .Sams {
display: flex;
border-radius: 33%;
text-align: center;
align-items: center;
font-size: 14px;
font-weight: bold;
}
.Costco {
background-color: rgba(227, 42, 54, 0.5);
}
.Sams {
background-color: rgba(0, 103, 160, 0.5);
} }
.Costco{background-color:rgba(227,42,54,0.5);}
.Sams{background-color:rgba(0,103,160,0.5);}
</style> </style>
</head> </head>
<body> <body>
<div id="map">Fetching the latest prices from Sam's and Costco's slow servers...</div> <div id="map"></div>
<script> <script>
fetch('gas.csv').then(response => response.ok ? response.text() : null).then(csv => { let map=L.map('map',{center:[38.243,-85.647],zoom:11,layers:[L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png')]});
if (!csv) { fetch('gas.csv').then(response=>response.text()).then(csv=>{
document.getElementById("map").innerHTML="Query failed. You can try to reload, but if that doesn't work, sam's or costco probably blocked me.<br>If issues persist, feel free to email me: steven@stevenalexander.org"; let storeLayers={},store,url;
return csv.split('\n').forEach(line=>{
} if(line.includes(',')){
document.getElementById("map").innerHTML="" let [u,p,lat,lng,id]=line.split(',');
let map = L.map('map', {center: [38.243, -85.647], zoom: 11, layers: [L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png')]}); [u,p]=[u,p].map(cents=>(cents/100).toFixed(2));
let storeLayers = {}; L.marker([lat,lng],{icon:L.divIcon({className:store,html:`<a href="${url.replace("X",id)}">$${u}\n$${p}</a>`,iconSize:[44,44]})}).addTo(storeLayers[store])
let store,url; }else{
csv.split('\n').forEach(line => { [store,url]=line.split(" ");
if (line.includes(',')) { storeLayers[store]=L.layerGroup().addTo(map)
let [u, p, lat, lng, id] = line.split(',');
[u, p] = [u, p].map(cents => (cents/100).toFixed(2));
L.marker([lat,lng], {icon: L.divIcon({className: store, html: '<a href="'+url.replace("X",id)+'">$'+u+'\n$'+p+'</a>', iconSize: [44,44]})}).addTo(storeLayers[store])
} else {
[store,url] = line.split(" ");
storeLayers[store] = L.layerGroup().addTo(map)
} }
}) })
let layerControl = L.control.layers(null, storeLayers, {collapsed: false}).addTo(map); let layerControl=L.control.layers(null,storeLayers,{collapsed:false}).addTo(map);
}) })
</script> </script>
</body> </body>