initial
This commit is contained in:
224
coco.py
Normal file
224
coco.py
Normal file
@@ -0,0 +1,224 @@
|
||||
|
||||
|
||||
import datetime
|
||||
import requests
|
||||
from requests.packages.urllib3.exceptions import InsecureRequestWarning
|
||||
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
|
||||
import csv
|
||||
from urllib.parse import urljoin
|
||||
from urllib.parse import urlencode
|
||||
import json
|
||||
import pytz
|
||||
|
||||
from requests.auth import HTTPBasicAuth
|
||||
S = requests.Session()
|
||||
S.verify = False
|
||||
eastern = pytz.timezone('US/Eastern')
|
||||
|
||||
username = "rlx.ops@noaa.gov"
|
||||
password = "rlx25303!"
|
||||
today = datetime.date.today()
|
||||
currentday = datetime.datetime.now()
|
||||
|
||||
|
||||
y = today.year
|
||||
m = today.month
|
||||
d = today.day
|
||||
|
||||
currenttime = currentday.replace(hour=12,minute=0,second=0,microsecond=0)
|
||||
entrytime = currentday.replace(hour=12,minute=30,second=0,microsecond=0)
|
||||
eastern_time = currenttime.astimezone(eastern)
|
||||
|
||||
obtime = eastern_time.strftime("%Y-%m-%dT%H:%M:%S")
|
||||
eastern_time = entrytime.astimezone(eastern)
|
||||
entrytime = eastern_time.strftime("%Y-%m-%dT%H:%M:%S")
|
||||
|
||||
|
||||
|
||||
|
||||
def getob(y,m,d):
|
||||
url = "https://mesonet.agron.iastate.edu/request/coop/obs-dl.php?network=WV_COOP&station%5B%5D=RLXW2&year1={year}&month1={month}&day1={day}&year2={year}&month2={month}&day2={day}&what=download&delim=comma".format(year=y,month=m,day=d)
|
||||
print(url)
|
||||
response = S.get(url)
|
||||
csvdecode = response.content.decode('utf-8')
|
||||
csvstuff = csv.reader(csvdecode.splitlines(), delimiter=',')
|
||||
csvlist = list(csvstuff)
|
||||
print(csvlist[1])
|
||||
print(csvlist[1][5],csvlist[1][6],csvlist[1][7])
|
||||
return create_dict(csvlist[1][5],csvlist[1][6],csvlist[1][7],csvlist[1][3],csvlist[1][4])
|
||||
|
||||
def create_dict(precipitation,snowfall,snowdepth,maxt,mint):
|
||||
data = {}
|
||||
print(precipitation)
|
||||
match precipitation:
|
||||
case "0":
|
||||
precipitation = float(precipitation)
|
||||
gaugeCatchIsTrace=False
|
||||
case "T":
|
||||
precipitation = float(0.00)
|
||||
gaugeCatchIsTrace=True
|
||||
case "0.0001":
|
||||
precipitation = float(0.00)
|
||||
gaugeCatchIsTrace=True
|
||||
case "M":
|
||||
precipitation = "NA"
|
||||
gaugeCatchIsTrace=False
|
||||
case "":
|
||||
precipitation = "NA"
|
||||
gaugeCatchIsTrace=False
|
||||
case _:
|
||||
|
||||
if float(precipitation) >= 0:
|
||||
precipitation = float(precipitation)
|
||||
gaugeCatchIsTrace=False
|
||||
else:
|
||||
precipitation = "NA"
|
||||
gaugeCatchIsTrace=False
|
||||
match snowfall:
|
||||
case "M":
|
||||
snowfall = "NA"
|
||||
snowfalltrace = False
|
||||
case "T":
|
||||
snowfall = 0.0
|
||||
snowfalltrace = True
|
||||
case _:
|
||||
snowfall = round(float(snowfall),1)
|
||||
snowfalltrace = False
|
||||
|
||||
match snowdepth:
|
||||
case "M":
|
||||
snowdepth = "NA"
|
||||
snowdepthtrace = False
|
||||
case "T":
|
||||
snowdepth = 0.0
|
||||
snowdepthtrace = True
|
||||
case _:
|
||||
snowdepth = round(float(snowdepth),1)
|
||||
snowdepthtrace = False
|
||||
station = "WV-KN-53"
|
||||
entryDateTime=datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S")
|
||||
notes="Maximum temperature: " + maxt + "F minimum temperature: " + mint + "F"
|
||||
|
||||
weatherdata = {
|
||||
"id": 0,
|
||||
"stationNumber": station,
|
||||
"stationName": "South Charleston 0.3 SSW",
|
||||
"obsDateTime": obtime,
|
||||
"gaugeCatch": {
|
||||
"sortValue": 0,
|
||||
"precipValue": precipitation,
|
||||
"formatValue": "0.00",
|
||||
"value": precipitation,
|
||||
"isTrace": gaugeCatchIsTrace,
|
||||
"isSnowDepth": False,
|
||||
"units": "US Units"
|
||||
},
|
||||
"snowfallDepth": {
|
||||
"sortValue": None,
|
||||
"precipValue": snowfall,
|
||||
"formatValue": 0.0,
|
||||
"value": snowfall,
|
||||
"isTrace": snowfalltrace,
|
||||
"isSnowDepth": True,
|
||||
"units": "US Units"
|
||||
},
|
||||
"snowfallSwe": {
|
||||
"sortValue": None,
|
||||
"precipValue": 0,
|
||||
"formatValue": "NA",
|
||||
"value": None,
|
||||
"isTrace": False,
|
||||
"isSnowDepth": False,
|
||||
"units": "US Units"
|
||||
},
|
||||
"snowpackDepth": {
|
||||
"sortValue": None,
|
||||
"precipValue": snowdepth,
|
||||
"formatValue": 0.0,
|
||||
"value": snowdepth,
|
||||
"isTrace": snowdepthtrace,
|
||||
"isSnowDepth": True,
|
||||
"units": "US Units"
|
||||
},
|
||||
"snowpackSwe": {
|
||||
"sortValue": None,
|
||||
"precipValue": 0,
|
||||
"formatValue": "NA",
|
||||
"value": None,
|
||||
"isTrace": False,
|
||||
"isSnowDepth": False,
|
||||
"units": "US Units"
|
||||
},
|
||||
"notes": notes,
|
||||
"entryDateTime": entrytime,
|
||||
"dateTimeStamp": "",
|
||||
"units": "US Units"
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return weatherdata
|
||||
|
||||
|
||||
|
||||
def coco(data):
|
||||
# Login URL
|
||||
login_url = "https://mobile.cocorahs.org/login?_data=routes%2F_auth.login"
|
||||
|
||||
# Login Credentials
|
||||
credentials = {
|
||||
"username": "rlx.ops@noaa.gov",
|
||||
"password": "rlx25303!",
|
||||
}
|
||||
|
||||
# Headers for login request (simplified from the JS fetch headers)
|
||||
headers = {
|
||||
"accept": "*/*",
|
||||
"accept-language": "en-US,en;q=0.9",
|
||||
"content-type": "application/x-www-form-urlencoded;charset=UTF-8",
|
||||
"sec-fetch-mode": "cors",
|
||||
"sec-fetch-site": "same-origin"
|
||||
}
|
||||
|
||||
# Prepare the payload for POST request
|
||||
payload = urlencode(credentials)
|
||||
|
||||
# Session for maintaining cookies
|
||||
session = requests.Session()
|
||||
|
||||
# Perform login
|
||||
login_response = session.post(login_url, headers=headers, data=payload)
|
||||
|
||||
if login_response.status_code == 204: # Assuming 204 means success for login
|
||||
url = "https://mobile.cocorahs.org/mydata/dailyprecip/add?_data=routes%2Fmydata.dailyprecip.add"
|
||||
response = session.post(url, headers=headers, json=data)
|
||||
if response.status_code == 200 or response.status_code == 204:
|
||||
print("Data submitted successfully!")
|
||||
print(response.text)
|
||||
else:
|
||||
print(f"Failed to submit data. Status code: {response.status_code}")
|
||||
print(response.text)
|
||||
|
||||
|
||||
else:
|
||||
print("Login failed.")
|
||||
|
||||
|
||||
|
||||
def main():
|
||||
data = getob(y, m, d) # This should return the expected data format
|
||||
coco(data)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user