From 9474b4b848cbb22828fe843ab1bf2fda38981a71 Mon Sep 17 00:00:00 2001 From: Death916 Date: Wed, 19 Mar 2025 02:37:38 -0700 Subject: [PATCH] using wttr.in instead of bing --- deathclock/__pycache__/news.cpython-311.pyc | Bin 7660 -> 7660 bytes deathclock/__pycache__/scores.cpython-311.pyc | Bin 2918 -> 3398 bytes .../__pycache__/weather.cpython-311.pyc | Bin 2495 -> 3198 bytes deathclock/app.py | 6 +- deathclock/weather.py | 73 ++++++++++++------ deathclock/weather_module.py | 18 +++-- 6 files changed, 62 insertions(+), 35 deletions(-) diff --git a/deathclock/__pycache__/news.cpython-311.pyc b/deathclock/__pycache__/news.cpython-311.pyc index bb5b2ce118411174f63e1fbbb20004509aaa634a..0077304fb543a3963198de240cf3388db143ff1c 100644 GIT binary patch delta 20 bcmaE3{l=PmIWI340|Ns?pY55A+z({|MaTwr delta 20 ccmaE3{l=PmIWI340|Ntt=%qs&xgW{`07b#HeJZC5L#$O4H%LV)cM7K@OqyXfLkd?acM3O(2u~_^3NMNXNDUu~2!ASfiU6{R zRf^zTE_BO#tW$)889>&i2%*b?WI$L`WO5SYO#YROek&PovBwuD=NF|Gubj-ql+E~g za~YEtGo!@hgRFI`+zbp1w>VuZl2Z#xGV}8^If{5eBCJXIiA5>5SW*&85{rZro0By8IHO5@5hq9m zC}xUy7#J9eK_RG6#0L@tnNuZ{o0Aj_cA8#%d}dx|NqoEkNKybqfQ(EA>41eRh|SEv z!0?%kfq`K*6^djT7#OOU6&w_bq(Ej!gSgxZ3L3#Bi6y1QRtiOOlN&f?7m^-PR!IWI340|NttnQCMDKK6-x5{zaO)vZ}lSyNaiHb}FwrLrwxpSV!Co?#gS z1H)>NN-&P%U}8w+OkrEb$iT3g5iG>Oz`)3m%28yW%HhHgYZb)>QjyA)!Y&DuW|+;8 z!ja0A!igfnmCBXEjUob4!-FEi>y^rt!iOTnKbH&L@*e9H!C(fEwJ8GVav&KH))bmt z!#I;)lhIF;@fLf0adLi9YO&^I6{c*);>{D7yqFn9Cf{bQQ{`k}V7SHUT9KSuP?DLS zr^!(S3Z`4EN%@IIDYsZs5=#<`_$Sw~88LEi-pJ;}B*eqOz)+;Yz`(GQp@B$CWvQK`?CF3r^z`*c}QK1OrjVfjZ2ZbUrkUDV&28Jqb1qF@ZlEjkIVk?CrDX>D# zDj~moh4jSS)MACivc$}s#H5^5KTYn*0o;Zjnjq(~L0k{E^%i?kYH?{!NpX=Z$WT=f qp#vho4&Vlv$YGP4pHiBWYFA_ojw=R+Vvot^xML>=^SoyPDFXl-uxfJv diff --git a/deathclock/__pycache__/weather.cpython-311.pyc b/deathclock/__pycache__/weather.cpython-311.pyc index 8a03d24a95b8f63b2d192811495a24995dc485cd..0f9a61b94bc8760429dad46abb457713f9e88a63 100644 GIT binary patch literal 3198 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 DEim4U literal 2495 zcmZ3^%ge>Uz`$^fX<2#@D+9x05C?`?pp4HZ3=9m@8B!Qh7;_kM8KW2(L2RZRrYI&R z26u)O<`#w&mSs!~46B)-IvApuQ<#DoG+AGQ1T-0M@fTO-CC3-!BvzIeWu|A8_$7lR zV3-lg_$&psD3u|KF@+(DDTT2GY)}hB6iW(oFoPz`E%xx##FC8EqGXsBkWOX>1_luR zTmaTy0uqDbEV#M_aJNCFz*Gw3GDZf5)o@kCVkK}k149ev7 zEwQ*bwWL^+~s%U3D`uF7m5i;aC5_z{sg|mxr&%dj`iv9>ps> ziWgw$12ZG15?KB-$ipb%%LWTy2_{fFKn|g03=9mbK^nl=l%bZfhLLcXuVF$B^;)JH zrUme@1{(z>P|dGpu3=sPOO;R+5GsWk)kH>y8s-I{pnymtk!U8e)UYf7`4342gqgyE zVIs={c8DA*nZk-iB?qb+2oGIlEo+GoL{{6n4~HR?Akyx_}2= z9f)7UwuS@4RZI(bL2~FAHAEO0YS@yQQb0MJ0o67}hF}I|21ABomU5;F=17KeMn;B6 z21W)*UeM(93(;h}#gUPkn39uPTwGPnrGNzdld@8iOY~Aw(=zi?1B&tsQj1C|HS!Y6 zGSd@F@{4p7)XP(oQi?LmQj64e6j1eoj7d)|u~N{`RIs&ED9wYIlA?oRL#?JYoL{vz zqokyu*h*i&yu4g5DKjr!FF8L~zc@9qC^^Hv(6%@+xhOF=HLoOJ8=9-s3X5&?)Y9^c za%}^hf?U;#3v6`_)zUMPZ4K3O3T+M43b5!>D^9jGG}1LRS1Zo8RZA|*OtH0eu`n^R zFn2LFadbAZFm|>ubu)7{c62m%votYwHgQu+&nV8YHBd{>NK8%!(*-%URUyjdB}MVc ziA5>S`FSOYnR%&23U&%9nPqxO@rijQnIZWFPC2QmDNt^3W=bkD-zmSOBtI7>Ql6Ta znU|MZR0K+`RZXkBit=+aOLK3r2?&Py$iPtMOPNv$Zk#h;jx0x5NhlZ!G7N^Wt0WD640Q*W`P=a=N)5-d;5EQwFc zFN!Zt%}Grz$uGLao|B&piryknb^u#;izO>RGw&8xadJ^=YF=?he#tG?TJ_owEhf+Fu0Kf;uFP@!84@-Zm2C@3ftfztXd zvGmjuxVI6itK?wCCU$vHuoOoyf(ubznTxz~S9s+D`MIm?l*XZuk$Eh;!*ydF?#y4nzRsg|iAQaP{{Q@9@7Ntn@)s zgi{&pX$0{R6b4^F1VRiO>&K5D*n|;c#h`Mp-&xt&p82pniwiUR5jI8_W_CYKR#4rR zmzbLxAAgH0K0Y@;r8Eb`=82ClEKSUT$Q1E0FfbG;GcYi$WGLbXu|bht1S;>r1gMHA zHUigy4Ga+Yfr*J#=>r3t;1Fe1{=k4qK#T*Kq{(ti7|~$S12 z*2CTKi^B%uWV<3w1_lODRbL#$z`*c undefined, - }); - """) - page = context.new_page() - - # Navigate to Sacramento weather - page.goto("https://www.bing.com/search?q=sacramento+weather&qs=n&form=QBRE&sp=-1&ghc=1&lq=0&pq=sacramento+weathe&sc=12-17&sk=&cvid=9D84287D34AC483C85F6E3AA7F943C4F&ghsh=0&ghacc=0&ghpl=") - - # Wait for and screenshot weather widget - page.wait_for_selector('#wtr_cardContainer > div.b_antiTopBleed.b_antiSideBleed.b_antiBottomBleed.b_weainner') - weather_element = page.locator('#wtr_cardContainer > div.b_antiTopBleed.b_antiSideBleed.b_antiBottomBleed.b_weainner') - screenshot_path = os.path.join('assets', 'sacramento_weather_map.png') - weather_element.screenshot(path=screenshot_path) - - browser.close() + """ + Fetches weather information for Sacramento from wttr.in using curl and saves it as a PNG. + Returns the path to the saved image. + """ + try: + # Create a timestamp for the filename + timestamp = datetime.datetime.now().strftime("%Y%m%d-%H%M%S") + screenshot_filename = f"sacramento_weather_{timestamp}.png" + screenshot_path = os.path.join(self.assets_dir, screenshot_filename) # save to the proper location + + # Use curl to get the weather data from wttr.in and save it as a PNG. + # add the scale #2 to make the png larger + curl_command = [ + "curl", + "-s", # Silent mode + "wttr.in/Sacramento.png?u", + "-o", + screenshot_path, + ] + self.delete_old_screenshots() + subprocess.run(curl_command, check=True) + return screenshot_path + + except subprocess.CalledProcessError as e: + print(f"Error fetching weather data: {e}") + return None + except Exception as e: + print(f"An unexpected error occurred: {e}") + return None diff --git a/deathclock/weather_module.py b/deathclock/weather_module.py index 9a0f01a..ff732e5 100644 --- a/deathclock/weather_module.py +++ b/deathclock/weather_module.py @@ -10,8 +10,6 @@ class WeatherModule: self.setup_callbacks() def get_weather_object(self): - if not os.path.exists('assets'): - os.makedirs('assets') return Weather() def setup_callbacks(self): @@ -24,11 +22,15 @@ class WeatherModule: print("UPDATING WEATHER...") screenshot_path = self.weather_obj.get_weather_screenshot() image_name = os.path.basename(screenshot_path) - return html.Div([ - html.H2("Sacramento Weather"), - html.Img(src=self.app.get_asset_url(image_name - + f"?v={datetime.datetime.now().timestamp()}"), - style={'maxWidth': '500px'}) - ]) + return html.Div( + [ + html.H2("Sacramento Weather"), + html.Img( + src=self.app.get_asset_url(image_name + f"?v={datetime.datetime.now().timestamp()}"), + style={"width": "100%", "display": "block", "image-rendering": "crisp-edges"} + ), + ], + style={"width": "600px", "margin": "0 auto", "border": "1px solid black"} + ) except Exception as e: return html.Div(f"Weather update error: {str(e)}")