From 5867b862c6c04d9591b6b075ff7ef9afc4c744e7 Mon Sep 17 00:00:00 2001 From: Neythen Date: Tue, 3 Aug 2021 18:16:13 +0100 Subject: [PATCH] gif and sports titles added --- csv/crypto.csv | 6 +-- csv/currency.json | 2 +- csv/current_weather.json | 2 +- csv/daily_weather.json | 2 +- csv/last_updates.json | 2 +- csv/news.csv | 40 +++++++++---------- csv/tickers.csv | 6 +-- display_images/crypto.ppm | Bin 63278 -> 63278 bytes display_images/display_gif.gif | Bin 1978 -> 6076 bytes display_images/forex.ppm | Bin 143247 -> 143247 bytes display_images/league.ppm | Bin 31724 -> 26414 bytes display_images/stocks.ppm | Bin 80750 -> 80750 bytes display_images/teams.ppm | Bin 327405 -> 294063 bytes display_images/user_gif.gif | Bin 747 -> 821 bytes stockTicker.py | 70 +++++++++++++++++---------------- 15 files changed, 67 insertions(+), 63 deletions(-) diff --git a/csv/crypto.csv b/csv/crypto.csv index 73e0c12..30b1be5 100644 --- a/csv/crypto.csv +++ b/csv/crypto.csv @@ -1,4 +1,4 @@ symbol,name,base,current,24hr change -BTC,bitcoin,usd,41608,7.5637268829287105 -ETH,ethereum,gbp,1767.07,4.946057229445047 -DOGE,dogecoin,usd,0.209425,3.0856074912371008 +BTC,bitcoin,usd,38562,-3.1527074759072398 +ETH,ethereum,gbp,1804.79,-5.029820064487153 +DOGE,dogecoin,usd,0.198365,-3.4809067470776904 diff --git a/csv/currency.json b/csv/currency.json index d939540..ff21f94 100644 --- a/csv/currency.json +++ b/csv/currency.json @@ -1 +1 @@ -["USD", {"AUD": [1.362, 1.3572], "CAD": [1.2569, 1.2565], "CHF": [0.91488, 0.91499], "EUR": [0.84696, 0.84674], "GBP": [0.72072, 0.72399], "JPY": [110.08, 110.06], "NZD": [1.4409, 1.4357]}] \ No newline at end of file +["USD", {"AUD": [1.3535, 1.358], "CAD": [1.2515, 1.2465], "CHF": [0.90324, 0.90535], "EUR": [0.8414, 0.84133], "GBP": [0.71817, 0.71991], "JPY": [109.13, 109.52], "NZD": [1.4264, 1.4337]}] \ No newline at end of file diff --git a/csv/current_weather.json b/csv/current_weather.json index 4ede625..c008f51 100644 --- a/csv/current_weather.json +++ b/csv/current_weather.json @@ -1 +1 @@ -[{"main_weather": "Clouds", "description": "overcast clouds", "temp": 29.14, "min_temp": 28.1, "max_temp": 29.92, "feels_like": 36.14, "humidity": 90, "clouds": 96, "wind_speed": 0.45, "wind_direction": 90, "visibility": 10000, "uv": 0, "rain_chance": 0}, {"main_weather": "Clouds", "description": "scattered clouds", "temp": 21.34, "min_temp": 12.35, "max_temp": 21.56, "feels_like": 20.91, "humidity": 53, "clouds": 28, "wind_speed": 6.69, "wind_direction": 260, "visibility": 10000, "uv": 2.93, "rain_chance": 0}] \ No newline at end of file +[{"main_weather": "Clouds", "description": "broken clouds", "temp": 27.33, "min_temp": 26.86, "max_temp": 29.57, "feels_like": 31.44, "humidity": 88, "clouds": 70, "wind_speed": 4.92, "wind_direction": 40, "visibility": 10000, "uv": 0, "rain_chance": 0.82}, {"main_weather": "Clouds", "description": "overcast clouds", "temp": 19.25, "min_temp": 13.89, "max_temp": 20.27, "feels_like": 19.01, "humidity": 68, "clouds": 94, "wind_speed": 4.63, "wind_direction": 130, "visibility": 10000, "uv": 1.06, "rain_chance": 0.56}] \ No newline at end of file diff --git a/csv/daily_weather.json b/csv/daily_weather.json index b25c449..68aec29 100644 --- a/csv/daily_weather.json +++ b/csv/daily_weather.json @@ -1 +1 @@ -[[{"main_weather": "Rain", "description": "moderate rain", "min_temp": 28.1, "max_temp": 29.92}, {"main_weather": "Rain", "description": "moderate rain", "min_temp": 28.42, "max_temp": 29.19}, {"main_weather": "Rain", "description": "moderate rain", "min_temp": 28.53, "max_temp": 30.07}, {"main_weather": "Rain", "description": "moderate rain", "min_temp": 28.35, "max_temp": 29.88}, {"main_weather": "Rain", "description": "moderate rain", "min_temp": 27.43, "max_temp": 28.64}, {"main_weather": "Rain", "description": "moderate rain", "min_temp": 27.31, "max_temp": 29.18}, {"main_weather": "Rain", "description": "light rain", "min_temp": 28.32, "max_temp": 31.55}, {"main_weather": "Rain", "description": "moderate rain", "min_temp": 28.18, "max_temp": 32.05}], [{"main_weather": "Clouds", "description": "scattered clouds", "min_temp": 12.35, "max_temp": 21.56}, {"main_weather": "Rain", "description": "light rain", "min_temp": 14.31, "max_temp": 18.5}, {"main_weather": "Rain", "description": "light rain", "min_temp": 14.38, "max_temp": 20.87}, {"main_weather": "Rain", "description": "light rain", "min_temp": 13.75, "max_temp": 20.42}, {"main_weather": "Rain", "description": "light rain", "min_temp": 13.39, "max_temp": 20.32}, {"main_weather": "Rain", "description": "light rain", "min_temp": 15.16, "max_temp": 21.32}, {"main_weather": "Rain", "description": "light rain", "min_temp": 13.99, "max_temp": 21.43}, {"main_weather": "Rain", "description": "light rain", "min_temp": 14.34, "max_temp": 21.38}]] \ No newline at end of file +[[{"main_weather": "Rain", "description": "moderate rain", "min_temp": 26.86, "max_temp": 29.57}, {"main_weather": "Rain", "description": "moderate rain", "min_temp": 26.72, "max_temp": 28.32}, {"main_weather": "Rain", "description": "moderate rain", "min_temp": 26.03, "max_temp": 27.98}, {"main_weather": "Rain", "description": "moderate rain", "min_temp": 27.2, "max_temp": 28.08}, {"main_weather": "Rain", "description": "moderate rain", "min_temp": 27.91, "max_temp": 28.84}, {"main_weather": "Rain", "description": "light rain", "min_temp": 28.18, "max_temp": 29.87}, {"main_weather": "Rain", "description": "light rain", "min_temp": 28.09, "max_temp": 29.25}, {"main_weather": "Rain", "description": "light rain", "min_temp": 28.23, "max_temp": 29.96}], [{"main_weather": "Rain", "description": "light rain", "min_temp": 13.89, "max_temp": 20.27}, {"main_weather": "Rain", "description": "light rain", "min_temp": 13.12, "max_temp": 22.97}, {"main_weather": "Rain", "description": "moderate rain", "min_temp": 13.54, "max_temp": 21.04}, {"main_weather": "Rain", "description": "light rain", "min_temp": 15, "max_temp": 19.8}, {"main_weather": "Rain", "description": "moderate rain", "min_temp": 13.95, "max_temp": 19.15}, {"main_weather": "Rain", "description": "light rain", "min_temp": 13.39, "max_temp": 19.7}, {"main_weather": "Rain", "description": "light rain", "min_temp": 14.31, "max_temp": 22.84}, {"main_weather": "Clouds", "description": "overcast clouds", "min_temp": 15.14, "max_temp": 23.12}]] \ No newline at end of file diff --git a/csv/last_updates.json b/csv/last_updates.json index 47af5b2..8cb7894 100644 --- a/csv/last_updates.json +++ b/csv/last_updates.json @@ -1 +1 @@ -{"stocks": "31/07/2021 05:57:19", "crypto": "31/07/2021 05:57:20", "news": "31/07/2021 05:57:21", "weather": "31/07/2021 05:57:20", "forex": "31/07/2021 11:57:24", "sports": "31/07/2021 05:57:21"} \ No newline at end of file +{"stocks": "03/08/2021 13:14:11", "crypto": "03/08/2021 13:14:13", "news": "03/08/2021 13:14:15", "weather": "03/08/2021 13:14:14", "forex": "03/08/2021 19:14:18", "sports": "03/08/2021 13:14:16"} \ No newline at end of file diff --git a/csv/news.csv b/csv/news.csv index 4a51c19..0c1e1fd 100644 --- a/csv/news.csv +++ b/csv/news.csv @@ -1,21 +1,21 @@ headline,source,date,time -Coronavirus live: UK businesses warned over ‘no jab no job’ policies^ Germany anti-lockdown protests banned - The Guardian,The Guardian,2021-07-31,08:39:03Z -Live: Tokyo Olympics^ day eight: Great Britain and Fiji fight for bronze ahead of Black Ferns' gold medal bid - Stuff.co.nz,Stuff.co.nz,2021-07-31,08:29:00Z -Basketball-Nigeria's Metu blasts government for lack of support at Games - Reuters,Reuters,2021-07-31,08:24:00Z -Image: Hubble spots squabbling galactic siblings - Phys.org,Phys.Org,2021-07-31,08:17:09Z -Mi 12 Tipped to Integrate Newly Announced LPDDR5X RAM^ Could Come With Snapdragon 898 SoC - Gadgets 360,NDTV News,2021-07-31,08:08:21Z -Tokyo 2020 Day 8: Regrets for Mark English in 800m; golf hots up as McIlroy hunts a medal - The Irish Times,The Irish Times,2021-07-31,08:03:45Z -JUST IN: Nollywood actress Racheal Oniga is dead - P.M. News,P.M. News,2021-07-31,08:03:45Z -DOH lists 8^147 new COVID-19 cases^ 167 more deaths - CNN Philippines,CNN Philippines,2021-07-31,08:01:47Z -Team GB smash world record to win Tokyo 4x100m mixed medley relay gold - The Guardian,The Guardian,2021-07-31,08:00:00Z -Bright reflections observed at Mars’ south pole may be clay^ not water - Tech Explorist,Tech Explorist,2021-07-31,07:58:33Z -Huge Chunk Of Road Caves In Under Flyover In South Delhi^ Stops Traffic - NDTV,NDTV News,2021-07-31,07:57:33Z -Business groups seek clarity on regulations as emergency ordinances in limbo - Malaysiakini,Malaysiakini,2021-07-31,07:54:00Z -Tokyo Olympics live: OlyWhites captain Winston Reid recovers from injury to face Japan - Stuff.co.nz,Stuff.co.nz,2021-07-31,07:53:00Z -Sailing: Kimberly Lim and Cecilia Low finish 10th overall^ first Singaporeans to qualify for medal race at Olympics - CNA,CNA,2021-07-31,07:48:46Z -Google will stop account sign-in for users running these old Android versions - Times of India,The Times of India,2021-07-31,07:48:00Z -UPDATED: Blessing Okagbare suspended from athletics hours to Olympics 100m semi-final race - Premium Times,Premium Times,2021-07-31,07:42:56Z -India records 41^649 new Covid cases; active cases rise for 4th day - The Indian Express,The Indian Express,2021-07-31,07:39:37Z -Home Office set up fake website to deter asylum seekers from crossing Channel with ‘misleading’ claims - The Independent,Independent,2021-07-31,07:35:09Z -Assam-Mizoram border dispute LIVE Updates: Tensions rise as Mizoram names CM Himanta Biswa Sarma in violence FIR - The Indian Express,The Indian Express,2021-07-31,07:29:22Z -PV Sindhu Semi-Final LIVE: Sindhu can create history today by becoming 1st Indian sportsperson to play two Olympic Finals in individual sports - InsideSport,InsideSport,2021-07-31,07:26:11Z +Pentagon on lockdown after gunshots fired near Metro station - Daily Mail,Daily Mail,2021-08-03,16:26:56Z +Andrew Cuomo: New York Governor sexually harassed women^ report finds - BBC News,BBC News,2021-08-03,16:14:54Z +New York Gov. Andrew Cuomo sexually harassed multiple women^ state attorney general report says - CNN,CNN,2021-08-03,16:13:00Z +Vaccinated people are much more protected from COVID-19 than unvaccinated individuals; the benefits of the COVID-19 vaccines outweigh their risks - Health Feedback,Health Feedback,2021-08-03,16:08:36Z +Coronavirus live updates: Quebec reports 175 new cases^ no deaths - Montreal Gazette,Montreal Gazette,2021-08-03,16:06:05Z +Index surges anew ahead of Q2 earnings - Philstar.com,Philippine Star,2021-08-03,16:00:00Z +Matt Damon’s New Statement Saying He Doesn’t “Use Slurs Of Any Kind” After “Retiring The F-Slur” Has Sparked A Huge Debate In Light Of Him Playing Gay Characters In The Past - BuzzFeed News,BuzzFeed News,2021-08-03,15:55:00Z +Pentagon reopens after brief lockdown due to shooting near Metro station - Hindustan Times,Hindustan Times,2021-08-03,15:51:14Z +Massive Balloon the Size of a Soccer Stadium to Launch Telescope to Edge of Space to Study How Stars Form - Good News Network,Good News Network,2021-08-03,15:51:01Z +Today’s coronavirus news: Ontario reporting 164 cases Tuesday^ 168 cases Monday; NYC to require vaccination proof for indoor dining^ gyms - Toronto Star,Toronto Star,2021-08-03,15:45:00Z +NBA free agency Day 1 winners and losers: Heat make power moves; Lakers defense takes hit; Knicks go sideways - CBS Sports,CBS Sports,2021-08-03,15:45:00Z +Covid 19 coronavirus: China orders mass testing in Wuhan as outbreak spreads - New Zealand Herald,New Zealand Herald,2021-08-03,15:35:31Z +Celtic sign goalkeeper Joe Hart and midfielder James McCarthy - Sky Sports,Sky Sports,2021-08-03,15:33:55Z +At least 3 injured in workplace shooting at SmileDirectClub in Antioch^ Tennessee - NBC News,NBC News,2021-08-03,15:32:02Z +#UnrestSA: State wants to adds treason charges to lawyer Ike Khumalo's incitement case - News24,News24,2021-08-03,15:27:28Z +Boeing delays key uncrewed test flight of Starliner capsule to space station - The Straits Times,The Straits Times,2021-08-03,15:21:41Z +Florida's Broward County school district reverses its mask mandate after funding threat from the governor - CNN,CNN,2021-08-03,15:21:00Z +U.S. Gov. Cuomo sexually harassed multiple women^ probe finds - CTV News,Ctvnews.ca,2021-08-03,15:18:39Z +COVID-19: UK records another 138 coronavirus deaths - the highest daily total since 17 March - Sky News,Sky.com,2021-08-03,15:17:28Z +Tokyo Olympics: PV Sindhu^ India's Double Olympic Medallist^ Felicitated After Returning From Tokyo | Olympics News - NDTVSports.com,NDTV News,2021-08-03,15:17:00Z diff --git a/csv/tickers.csv b/csv/tickers.csv index 8a91305..593e69c 100644 --- a/csv/tickers.csv +++ b/csv/tickers.csv @@ -1,4 +1,4 @@ name,current,opening -MSFT,288.51,286.19 -NFLX,520.495,521.015 -GOOG,2732.56,2728.535 +MSFT,286.9,285.605 +NFLX,510.84,514.24 +GOOG,2720.7,2721.21 diff --git a/display_images/crypto.ppm b/display_images/crypto.ppm index 55a9d6948a0f647879783113a12385cf7f7f6173..748596d4378071fcc938db13029e07cfb90e41e6 100755 GIT binary patch delta 2676 zcmbVOQEXFX6wZRSRBpUYv7}h+?q-vkl8(xBZf1e90Gbd+G0_JMrU~(Zh;cEX#t_-N zFSq;V1~b{JYzSn7g-I}qtPwL~M5s6*WD#osXJ)t5Oh|k%^E>~4Z>d0h@Zsja_rK@- z=R4GJcaaJ5V^4cI!1%)y`0}lrPbn|J!#;*{q zJ3nIBm)j$|=s3AdAMaR{t>L9QkhI>}TaUu#N4lP_bG$H-Umr(dWrS-4{)7Im$YNOS z25Jw^!p=wNMJv}JM!S8uFdtxAb}^VCGCiv=Ed*3T3UR3e4@1Ci>v~b)8Ve?;5Yg=oco^$KAU4@3@$9 zGIHlz@aOS2{zqI2gTy63nD<*NP!2Ca>ID<2R05rCq(?&%orp4QVfFv#-4EjUiOX4w zVv74L(Q^SLPsNENuDni_Vs}M`nH*^0e`cMJT@?+ooisUdQmRkKELDn<4;oPBT!Nn6 zdzuhW;+rZpNuj#|7&*0z+pSs4;YuNV7poLy$L##uH5mWahnGITDSqfoIZ^OnZ;8QI z06ZxDA$8s87>ifA#Ry%GizU}9olUJ$_=K203o@wcJ8SV2y7}6dttd}LNgYX;!(0}) z!SkbC6KrUe8ZgoMwRDz7$XWKqu(Sf~9N$S%*TMT~q=)0kTx!c&3oyQ-cZ*f6WoDe- zI^<*1WJ!MHQw8gM7H@{=MhnV^8Msoy@lt{%`%z+MjnA1%wRm$i^8H@A7l2*SPbmMc ztxGamOrL7$?0LE|x*ik;J*cJY{tuY49}QjM1JZ6}UnBFMj*(`Ky4!hC|Bd6Y%kpY) z=9rVo-%)&p5xuwyqpO)0(lX7|+e4A8MJE(bl5|QB4yj@3KlXtnyZu^p9tm@0iYMEu zk|U_3UXeM+Au(s5Z-gonj6n~%Xpte3-4qjkx6_q^byUh8=u9og&E$5}HiJ=Jb?ybpM zUPAU^howd`W!@bm9=_phcq{~@+Z`q?|%rLU7^Ek8@bC>SQw6p>MeG!l42*P3f<>L+yE*b@ z1`29+ZL-T>5;s+n0>5UEl&i)t2e3^32dK2Qf`=Ley|M;B?e^lYqXsE)R#8BJ7X}k* zXwVi9&CEz`F|E%i)Pi1fPunc#9RtfM4(Q*K7!eip(y*9D!SN&)xmWPv;T7%W_+fUt zvn>}SeT{LXGBYuSHf!x8Z|jk>9+wWRFFd4eP9Aq~>4WV94CwSW(n@Y@@<@Z1>w>-r zl=F^P%W+|e)G03?2ND&yLSB1z9m=Qcm5N)x6}4K}x3(#-(sR=A>u62xjJnKo*Q4A^ F{sUfF^!NY( delta 3303 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 literal 1978 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 arGuih3>L#`FzKuK;if`y8z;U`+x`d0ADs69 delta 4729 zcmai2e{7s}8PD?uYRjr^ZmBfAdAx@wg^uEd;*xU>>*^XB80~dg+EG_`2AnNx*IF2q z2<#Y)IbylHUAQN6W;9;Zgmf5~d$f`Kd6y%vrG{mu!6V zQ`VB-?IP|J*MAGv)_*{2%A^;ot!|;761oV_Y@u#Gag;ijam_CzJqJDsvi%tO4s_MX z|HgFT4{JETk^Je7+xd142JIXpt|86>jb25Gbo(8rpr z+l^v-JDuYEufd+2q_rt~l~D=z+POGF5jm^n`2p$@`s;IJ!*s;*%-YX|W3-ApcG9?~ z0x?h5wff#m>GeQe~! zG))?`T~Y1a@eD8l+NVV_kXR#B6CCS@hr6Fag}`7x*YBmybao?h@NqiM6A7SqWIx;w zKT2N_hH;Of%{<|>UHJW%wGaUt?CMbTHXFj496X4Hz z&Mb?!>uE#^Jj}5}sIBZy3AdA1U1Hn@K{y@n4dr47C{Bu#b`o_Jy8S|hMuwcr+%GNT zFg;a)=+LupUEmcqlr$jZ@U@nY&)x@(Zif1Vaa8;WEBq-t#NY(V(yM0viTy<5?&DC(>2eeb(BaO?fD=7(ZHbLuo>$CJ7RikOBWm?F> z$fa8LvHdi)gG`mES5s1uixtddY1DB*iFza|+J!V>mZH@xmXD77kCuwgad+b(zu6rAu(}-GB`2WWQrNBW|h?ni(cpaFF_Xm1$CzE z+LGw_LjYN_RMP^eI+D?_Yf9FbP!_hseb;nYc%6tjVRBqMA0j!+F1~uEWvDDA7@|L? z258gDnqMp#WPx0?)Lv)8ClT%JVQG_>jTMmeImLFI$9{!@rjeH}gA((}>Jcz|2Cy-)(bCJlK^Y|g zMvY=c6^F5-NezYHmc}IwPJ5N+Pu-h9KpR%27?3$(k&u~2D#H&lek?LVJo73t527*Y z`=y}I&|GB=-X_H8=(4FP2|5;v^StRoWhT42G@Ak(ds3$A+w>c@e~KoS-Kb%6gjdA- zR^w9iEIr|Qy5JOD$=yND-v=kvQ*ZZ@D3+PvqL%CUE8U>wR>vRziQXx}1v?s~;rsZS ztw>1Jj7HF`E($oznB#E2>@euF=gP5mnXxMW1(C!A>C_$$sxfbH#MthIe>l5t1S92Ot& z-fJ+>28ZUOOLeVm?87>}i&fVBx=AmAyhgbNa&Hb8QPH=kTW$r5v@QyOVXstfR*lTR z=#k70TFJ#-fL&b&Z$hR}g|7o14q9s^57UfcKTt{R%p8pGTEnIZ`#(^2Q+*G=+vEUcBCXgFy-Qx<9&r&2 zctWGFJ$v;GZ*cW%vS!r=x&EZ=dXHr34b$^pLj;pXX6>7adt0sTUN)eY-Gy}l25NYQ zyaS(8bsxb>z5mv2#{2+XY*_)`_XvYe>_%(Un*}W?yHl9H;k`k7m+Q9uMP&T{;ao4A zLyI|Qwqv8J_>7|8QuM0|J^-v+)(z}9@WuJ;F|@2jkc)BTxB61{9m~qVbjRAX==;r$ mm5`J{mxDUn{icJDFj5{B_?InG?j2-##cm8RnH=r#v-!XB-M#Ms diff --git a/display_images/league.ppm b/display_images/league.ppm index 48aa11242d1b9813ded61ce115401adcc1ca9394..0794ec95b67e09db6956e747ceb97aaaf2f60582 100755 GIT binary patch delta 1915 zcmcgt&1(}u6z?{=y6Mv0ZnMqD(y+U>ro_ai35hlq+ft&XpP^!FTMAVW1O;=^Td^KJ z2ua_;UW6Pxc+#|k1)rZ06qvOYIv%O3 ztNVdJ$l4w{Z*k^)b?b}U0ivp_2R!Q~51OAH@T>=V10rejt_cP6`@yd6A&&#=n3ZlH zWM?EOPm3__*U*-s64zlqAThg?QP5U)_!y8&%Z@)?mmw?p;bWw+R{D0N(A6I_0h{7<*Ks%yWMtd-_0#T0wIlqjy zhMD7N6t&pZj+tv{rfOrq?Z{MJjM))eR`+e<{oGrJSX#)N4hGokJU0kx+Jefo0p_3v z`D7G>$^QgsD)OIzK6Nqz+n{nfgaqz=k%Ht|^i^=q)~aklt#qM7kX%nt^<6X^$`yEc zf=4Z7f{0?_9*ro$C0l06cRB*$hiD6$qi zpG*`{BudfsLe02Sjl*hjC+nvww`k6oN zeva2q;{ETNUP#c@Yl5pNFzcvr=BN&HLnd^URH*mpP~WOTqip#jIygfzR4b~-^7Ms2 zl7ZSW3sGcXngUHGM<4jR*TTY=Zu_?>&|y2B=f9?Fd*iU|}qe14nHWvjJ?QZ1AC7|As|8j}78j!Kbcmis=IuA~*|q zRHzKUxn~8))=35Gm3%0zgLQkN`K3 zs6wc8g&cz0#8rFDM%)~3+Q1pam;@4utj%2D+B!NwpmmN<{Z7Qz!nm>kK&;l&E#nu$Znl=-!ZK{_e<{Y!_$ lb^eODVi##{T-_g^q8F}<_ozF5_r^Wx+2#3Vzo)Dw{Q~c1g!TXc diff --git a/display_images/stocks.ppm b/display_images/stocks.ppm index 088c8554e0c8eaed37781a91003f4aa36ea8042e..dfe6f2fb73fc803b06392848c189fedfe45be46e 100755 GIT binary patch delta 2469 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 axAM}LIjdmeYniuhLezgB5*}e`xBUwamF2Yn diff --git a/display_images/teams.ppm b/display_images/teams.ppm index 73257952f4cbfb60bd9a751cf34ea1dfc566f6e2..b15b7bdb0dc33dac96642b32c903ebb1707d85f0 100755 GIT binary patch delta 3112 zcmd5;O>A355ccl6X&o&5lRWo<)5v{}ohl{OYoq##0Rh4mQq&_ABA22FR6kQBggB5& z9JtcBkKqE!u?Hkl1@Ur>xWS={#NQ^}LyR`+Yk* zGyCrUHTA`VTxPj8x#ZWDN=p|eFI>Dhc{}%+*t#TtE^qx<#p#viFXgRXfYa(toPOVK zl-COTiU0Da5WaI>6}H~Fd&TScneT3toFowng(!&v^n^J1f<45r5)N$a;Wp|;nHiQGvM$l& zLMag0%8^JDEzj~aRP0S^neyj&-%UsLlR&I`9|ssl#ByP04NtWFDn<_R^YBqmX-PA2 z(e2F9*~Bn9Svh%Qtp@jQTHy0gzlGpgfwZ!f;pu`b{9pQS)TqigJ@9W~7im|p?IF2-T;uwf)td-?m4WV6 zwFuq!WSV_vq3g@^8~cgGBlgJs4YZ1_3iz(6iw0VwdS_ zsI@Hc@jFClGW-?qoSrB;BODOe&?utSnK0I<+mUa3cuP_Z_??{}j)iqGWAdx}txAPi z*)+*V2XbyeKIT0*AGWcHa2EJ!+>Rz5D4R35wvA_C6M~J$~-djPtnz+8wP!j=#sQ9s@TiK^z10daUj+Z z!KcjAVeE#jAbt`~G*wmR+l10P4I3T2zE;j-tH7o~D&6>+M2kLNbiwKTZZhyV+F_bu z{6VxSOCg_B)6u65wTh{CUzbsf*D(SkqQHZdhxr@^YA>SSrFayhg+N`289eItcM{rn q#6sQ_x}7pnbE9VxtN(h z@4bJ|x#!(`-n)1&cl+<{ncAM-vE93$R%7G6PmYiGF6KTJf%;Jk#rVQ1_i8R5x(!;uYD|`sT85dZ2n-bV2}?+Bwlpvj(d< zdujsl6HI!RZrtxckr%JNk7%bKb(o|VOCS-nuvMn>BQga{FY7ubO56jLmp+e^9DoWG zVBxHjrtwVpof2=CBSm~z`$Y^z0fr%)CaDS(YD3uUf0K{F>3d=yj|Ix31?50>)Bn-f zLM^`=e)fVmR-T)D?-AIWm-*(_FxdQnlLNKl?9<~jIcFdiqL#p#TR7hb)oCYB@Cb{P zY-0Vu+k=`G1Cd?pd7 zbokbETSN@~hcik#R!Dje)}C#xKn|qEq$L<~5;;Z%444z|e+%Ht3mpJ$W%GL15RC6j zQdC3hCKfj)q}N;JT2vjq_Mby~e~NeF^|^dqj==hB*nd|WBCjiD`DghQZ)Y+UBWWb0 zO{!0~bM~C5K>fJDW{*l+*F+}#tKgg{$Hr~LvmNlB7pZ5oSg;x2O`3qqO_D%qArtw{ z+~oZf96c!dO;1t-Uqz=0R}cIHrC2XudG>dbr6VnB8>7lB)&biFqM~Ug^-1W^6JB~V z$%zdHcc>Jl&$gQ(J|%6ZHfmS0h1iPYjlkw;os^^aq=-kIKVx5RH|)4m zc+2?w(9nU>|vdO+F6{Y<9Ys!^nfjItwBabZqRbau`TJt+8ZdEZ5e$vG14-d zVNw;F$XserWOF%a;<@3SkG8_ZCm1vg)9J=KA`jDdCYzq!094fA$EjjJjnH~G{PBYP ol`ebX_m|DXSHGKwSvPfyr#{$Y9;RMTy;NRQpNRiI?KH@Who{rje*gdg diff --git a/display_images/user_gif.gif b/display_images/user_gif.gif index c78d7a0507f9d38881ba68a8edba24ddeadae454..1eadae40c4dc16d28234c6cb4e150b88c535af93 100755 GIT binary patch literal 821 zcmZ?wbhEHb3}R4V_{abTcCTk}KVj&5t@x9L(+DV{_@CR)H6+;CF~HSG&w!Z`BIKEy zn4apJn4X!O&6}Q>o118Bpl4!gVrt5u12P3<9s|?=mVQp9SNx0TOp)~7d~f#FqpgoB zYG*uBz30A7sC#a<@$z?X4}4Di`sUN&*04Py8zYz$n+~0OchbbL(Rbq6<-r%1g`{qs zv{#|qUF1D?+^Wf*vv<@wIj8J5F!d`x{XFrO1>1_P)7iE>-Rdl6{vxDe>yjN6%tys` za@-7^`Ljac!psYj4GdOXTCXytvK)5(+F8~0N!Vb*Da+HE))Q7+duw~I&f?y)`}Zx& zIlrYJ{+8r<@cPys9jUijcTS)7QjD#h`$pz2&zrRy_R1#xyX(t0FXrDVUi+pvIX$`h z{&{uvdETe?t;>sYXuPv2^R;=7!oI36dv;oX^NZXc_AK-LEBetm3q47Mo9TO1`%LHAR>f_&~F6B!e`n449));p8W^Mgx~OwI?))=2^quDWyHc3Y%SjX?cLqOpVJ$-)!oaQYD_z9a`M}Hxk?-R zC)I{E#2WYXb~Ri26in`#v#2RBwXdXQ{)z=_*G(}gubeY+@$~lXb$x~TTUJe5xbr}L zZhv{rzIlh&9}n3XwYK=AyBf4B5oZHD!jM<>XOMub8hdRe81x1 zo7)%G4nv1w&3MWeoA7V>Kl`KJj8U9&S(@$pVaCT zwC#*>+@#VXtmd{N=H#Zs+&pT@$3iBcgf9_+*#r#K|MoKfw=*!T_|Ne5KPZsFU^I~N H1+p~&wK7U< diff --git a/stockTicker.py b/stockTicker.py index d3ee4a7..810b6c3 100644 --- a/stockTicker.py +++ b/stockTicker.py @@ -9,7 +9,7 @@ import sys, select import os import threading -from PIL import Image, ImageDraw, ImageFont +from PIL import Image, ImageDraw, ImageFont, ImageSequence Image.init() @@ -57,13 +57,16 @@ class StockTicker(): options.gpio_slowdown = 4 self.matrix = RGBMatrix(options = options) self.points = True # display crypto change in points or percent + self.functions = {'stocks': self.getStockImage, 'crypto': self.getCryptoImage, 'forex': self.getForexImage, 'daily_weather':self.getDailyWeatherImage, 'today_weather': self.getTodayWeatherImage, - 'league_table': self.getLeagueTableImage, 'league_games': self.getLeagueImage, 'news':self.getNewsImage, - 'text': self.getUserText, 'display_image': self.getUserImage, 'display_gif':self.getUserGIF, + 'league_table':lambda : self.getLeagueTableImage('premier_league'), 'past_games': lambda:self.getLeagueImage('NBA', 'past'), + 'future_games': lambda : self.getLeagueImage('NHL', 'future'), 'live_games': lambda: self.getLeagueImage('NBA', 'live'), + 'news':self.getNewsImage, 'text': self.getUserText, 'display_image': self.getUserImage, 'display_gif':self.getUserGIF, + 'stocks_prof': self.getStockProfessional, 'crypto_prof': self.getCryptoProfessional, 'forex_prof': self.getForexProfessional, - 'today_weather_prof': self.getTodayWeatherProfessional, 'news_prof':self.getNewsProfessional} #put this somewhere else + 'today_weather_prof': self.getTodayWeatherProfessional, 'news_prof':self.getNewsProfessional} def openImage(self, image_file): @@ -271,9 +274,9 @@ class StockTicker(): def updateMultiple(self, options): for option in options: - + img = self.functions[option]() + if option not in ['display_gif']: # aving the gif like this kills the animation - img = self.functions[option]() img.save('./display_images/'+ option+ '.ppm') def incrementGIF(self, image): @@ -319,7 +322,7 @@ class StockTicker(): image = self.openImage('./display_images/' + options[i % len(options)] +'.ppm') image = image.convert('RGB') else: - image = self.openImage('./display_images/user_gif.gif') + image = self.openImage('./display_images/display_gif.gif') img_width, img_height = image.size @@ -1081,6 +1084,8 @@ class StockTicker(): f = open( "csv/league.txt", 'r' ) league = f.read().replace('\n', '') f.close() + + title_img = self.openImage('feature_titles/sports_'+ time + '.png') img = Image.new('RGB', (10000, 32)) league_info = json.load(open('csv/sports/{}/{}_games.json'.format(league, time), 'r')) @@ -1204,8 +1209,8 @@ class StockTicker(): x_offset += buff_size img = img.crop((0,0,x_offset ,32)) - font = ImageFont.load("./fonts/texgyre-27.pil") - title_img = self.textImage(time.upper() + ' GAMES', font, matrix_height = True) + + return self.stitchImage([title_img, img]) @@ -1216,6 +1221,10 @@ class StockTicker(): f = open( "csv/table_league.txt", 'r' ) league = f.read().replace('\n', '') f.close() + + title_img = self.openImage('feature_titles/sports_team_stats.png') + + img = Image.new('RGB', (10000, 32)) team_info = json.load(open('csv/sports/{}/team_stats.json'.format(league), 'r')) @@ -1266,9 +1275,6 @@ class StockTicker(): img = img.crop((0,0,x_offset ,32)) - font = ImageFont.load("./fonts/texgyre-27.pil") - title_img = self.textImage('LEAGUE TABLE', font, matrix_height = True) - return self.stitchImage([title_img, img]) def getTodayWeatherImage(self): @@ -1887,9 +1893,20 @@ class StockTicker(): return self.stitchImage([title_img, image]) def getUserGIF(self): - + title_img = self.openImage('feature_titles/gifs.png') gif = Image.open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'display_images/user_gif.gif')) - return gif + + frames = [] + + for i, frame in enumerate(ImageSequence.Iterator(gif)): + f = self.stitchImage([title_img, frame]) + frames.append(f) + + + frames[0].save('./display_images/display_gif.gif', save_all=True, append_images=frames[1:], loop=0, optimize = False) + + + return None def displayStocks(self): @@ -1959,8 +1976,7 @@ class StockTicker(): self.scrollFunctionsAnimated(['display_image', 'display_image'], animation = 'traditional') elif msg == 'G': # gif - image = self.openImage('./display_images/user_gif.gif') - #self.displayGIF(image) + self.scrollFunctionsAnimated(['display_gif', 'display_gif'], animation = 'traditional') elif msg == 'W': # weather @@ -1970,28 +1986,16 @@ class StockTicker(): self.scrollFunctionsAnimated(['daily_weather', 'daily_weather'],animation = 'traditional') elif msg == 'P': # past league - img = self.getLeagueImage('NBA', 'past') - img.save('display_images/league.ppm') - - stock_ticker.scrollImageTransition(['display_images/league.ppm', 'display_images/league.ppm'], stocks = False) + self.scrollFunctionsAnimated(['past_games', 'past_games'],animation = 'traditional') elif msg == 'l': # future league - img = self.getLeagueImage('NHL', 'future') - img.save('display_images/league.ppm') - - stock_ticker.scrollImageTransition(['display_images/league.ppm', 'display_images/league.ppm'], stocks = False) + self.scrollFunctionsAnimated(['future_games', 'future_games'],animation = 'traditional') elif msg == 'L': # live game - img = self.getLeagueImage('NBA', 'live') - img.save('display_images/league.ppm') - - stock_ticker.scrollImageTransition(['display_images/league.ppm', 'display_images/league.ppm'], stocks = False) + self.scrollFunctionsAnimated(['live_games', 'live_games'],animation = 'traditional') elif msg == 't': #legue tble - img = self.getLeagueTableImage('premier_league') - img.save('display_images/teams.ppm') - - stock_ticker.scrollImageTransition(['display_images/teams.ppm', 'display_images/teams.ppm'], stocks = False) + self.scrollFunctionsAnimated(['league_table', 'league_table'],animation = 'traditional') elif msg == 'A': #everything @@ -2027,7 +2031,7 @@ if __name__ == '__main__': # - #stock_ticker.process_msg('b') + #stock_ticker.process_msg('G') #stock_ticker.process_msg('G') #stock_ticker.process_msg('f') #stock_ticker.process_msg('W')