remove unneeded code
This commit is contained in:
parent
26a97d4317
commit
80aea73533
2 changed files with 47 additions and 90 deletions
50
app.py
50
app.py
|
@ -4,7 +4,6 @@ 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("/")
|
||||||
|
@ -16,47 +15,20 @@ 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")
|
|
||||||
if data: return data
|
|
||||||
|
|
||||||
result=["Sams https://www.samsclub.com/local/fuel-center/-/X"]
|
result=["Sams https://www.samsclub.com/local/fuel-center/-/X"]
|
||||||
for s in samsdata():
|
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()
|
||||||
|
for s in sams:
|
||||||
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():
|
|
||||||
if 'US' == s['country'] and 'regular' in s['gasPrices'] and 'PR' != s['state']:
|
|
||||||
p = {'regular':0,'premium':0}
|
|
||||||
for grade in p:
|
|
||||||
p[grade] = int(float(s['gasPrices'][grade])*100)
|
|
||||||
result.append(f"{p['regular']},{p['premium']},{s['latitude']},{s['longitude']},{s['displayName']}")
|
|
||||||
data = "\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'
|
url='https://www.costco.com/AjaxWarehouseBrowseLookupView?hasGas=true&populateWarehouseDetails=true'
|
||||||
response = requests.get(url, headers={'User-Agent': 'Mozilla', 'Accept-Encoding': 'gzip'})
|
costco=requests.get(url,headers={'User-Agent':'Mozilla/5.0','Accept-Encoding':'gzip'}).json()[1:]
|
||||||
data = response.json()[1:]
|
for s in costco:
|
||||||
cache.set("costco", data)
|
if 'regular' in s['gasPrices'] and s['country']=='US':
|
||||||
return data
|
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']}")
|
||||||
|
return "\n".join(result)
|
||||||
|
|
|
@ -3,19 +3,14 @@
|
||||||
<head>
|
<head>
|
||||||
<title>Gas Prices</title>
|
<title>Gas Prices</title>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
|
<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">
|
<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%;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
#map {
|
|
||||||
height: 100vh;
|
|
||||||
}
|
|
||||||
.leaflet-container a{
|
.leaflet-container a{
|
||||||
color:black;
|
color:black;
|
||||||
text-decoration:none;
|
text-decoration:none;
|
||||||
|
@ -28,31 +23,21 @@ html, body {
|
||||||
font-size:14px;
|
font-size:14px;
|
||||||
font-weight:bold;
|
font-weight:bold;
|
||||||
}
|
}
|
||||||
.Costco {
|
.Costco{background-color:rgba(227,42,54,0.5);}
|
||||||
background-color: rgba(227, 42, 54, 0.5);
|
.Sams{background-color:rgba(0,103,160,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 => {
|
|
||||||
if (!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";
|
|
||||||
return
|
|
||||||
}
|
|
||||||
document.getElementById("map").innerHTML=""
|
|
||||||
let map=L.map('map',{center:[38.243,-85.647],zoom:11,layers:[L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png')]});
|
let map=L.map('map',{center:[38.243,-85.647],zoom:11,layers:[L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png')]});
|
||||||
let storeLayers = {};
|
fetch('gas.csv').then(response=>response.text()).then(csv=>{
|
||||||
let store,url;
|
let storeLayers={},store,url;
|
||||||
csv.split('\n').forEach(line=>{
|
csv.split('\n').forEach(line=>{
|
||||||
if(line.includes(',')){
|
if(line.includes(',')){
|
||||||
let [u,p,lat,lng,id]=line.split(',');
|
let [u,p,lat,lng,id]=line.split(',');
|
||||||
[u,p]=[u,p].map(cents=>(cents/100).toFixed(2));
|
[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])
|
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{
|
}else{
|
||||||
[store,url]=line.split(" ");
|
[store,url]=line.split(" ");
|
||||||
storeLayers[store]=L.layerGroup().addTo(map)
|
storeLayers[store]=L.layerGroup().addTo(map)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue