news formatting and user input added
This commit is contained in:
parent
87fe5a67d6
commit
50a777ada4
Binary file not shown.
@ -3,13 +3,20 @@ import time
|
|||||||
import csv
|
import csv
|
||||||
import pytz
|
import pytz
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
import json
|
||||||
import datetime as dt
|
import datetime as dt
|
||||||
import sys, os, base64, hashlib, hmac
|
import sys, os, base64, hashlib, hmac, select
|
||||||
import requests
|
import requests
|
||||||
from pycoingecko import CoinGeckoAPI
|
from pycoingecko import CoinGeckoAPI
|
||||||
from newsapi import NewsApiClient
|
from newsapi import NewsApiClient
|
||||||
|
|
||||||
|
def getInput(Block=False):
|
||||||
|
if Block or select.select([sys.stdin], [], [], 0) == ([sys.stdin], [], []):
|
||||||
|
msg = sys.stdin.read(1)
|
||||||
|
#sys.stdin.flush()
|
||||||
|
else:
|
||||||
|
msg = ''
|
||||||
|
return msg
|
||||||
|
|
||||||
def readCSV(file_path, max_stocks):
|
def readCSV(file_path, max_stocks):
|
||||||
|
|
||||||
@ -188,13 +195,30 @@ def updateCrypto(coins, coin_info, unique_bases):
|
|||||||
|
|
||||||
|
|
||||||
def updateNews():
|
def updateNews():
|
||||||
top_headlines = newsapi.get_top_headlines()
|
|
||||||
headline_titles = [top_headline['title'] for top_headline in top_headlines['articles']]
|
|
||||||
CSV = open('csv/news.csv', 'w+')
|
|
||||||
CSV.write('headline\n')
|
|
||||||
|
|
||||||
for title in headline_titles:
|
|
||||||
CSV.write(title + '\n')
|
try:
|
||||||
|
#load user settings
|
||||||
|
|
||||||
|
settings = json.load(open('csv/news_settings.json', 'r'))
|
||||||
|
|
||||||
|
|
||||||
|
print(settings)
|
||||||
|
headlines = newsapi.get_top_headlines(**settings)
|
||||||
|
except:
|
||||||
|
#if no settings just get top headlines
|
||||||
|
headlines = newsapi.get_top_headlines()
|
||||||
|
|
||||||
|
headline_titles = [headline['title'] for headline in headlines['articles']]
|
||||||
|
headline_sources = [headline['source']['name'] for headline in headlines['articles']]
|
||||||
|
headline_times = [headline['publishedAt']for headline in headlines['articles']]
|
||||||
|
|
||||||
|
CSV = open('csv/news.csv', 'w+')
|
||||||
|
CSV.write('headline,source,date,time\n')
|
||||||
|
|
||||||
|
for i, title in enumerate(headline_titles):
|
||||||
|
date, time = headline_times[i].split('T')
|
||||||
|
CSV.write(title.replace(',', '^') + ',' + headline_sources[i] + ',' + date + ',' + time + '\n')
|
||||||
|
|
||||||
CSV.close()
|
CSV.close()
|
||||||
|
|
||||||
@ -233,8 +257,25 @@ if __name__ == '__main__':
|
|||||||
symbols, stock_info = readCSV('csv/tickers.csv', max_stocks)
|
symbols, stock_info = readCSV('csv/tickers.csv', max_stocks)
|
||||||
updateStockPrices(symbols)
|
updateStockPrices(symbols)
|
||||||
updateUpdate(NY_time)
|
updateUpdate(NY_time)
|
||||||
|
coins, coin_info, unique_bases = readCryptoCSV('csv/crypto.csv', max_stocks)
|
||||||
|
|
||||||
|
updateCrypto(coins, coin_info, unique_bases)
|
||||||
|
|
||||||
|
updateNews()
|
||||||
|
|
||||||
|
t = time.time()
|
||||||
|
|
||||||
|
logf = open("log.txt", "w")
|
||||||
|
|
||||||
|
try:
|
||||||
while True:
|
while True:
|
||||||
|
|
||||||
|
msg = getInput()
|
||||||
|
if msg == 'R' or time.time() - t > sleeptime*60:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
coins, coin_info, unique_bases = readCryptoCSV('csv/crypto.csv', max_stocks)
|
coins, coin_info, unique_bases = readCryptoCSV('csv/crypto.csv', max_stocks)
|
||||||
|
|
||||||
updateCrypto(coins, coin_info, unique_bases)
|
updateCrypto(coins, coin_info, unique_bases)
|
||||||
@ -274,5 +315,8 @@ if __name__ == '__main__':
|
|||||||
updateStockPrices(symbols)
|
updateStockPrices(symbols)
|
||||||
|
|
||||||
updateUpdate(NY_time)
|
updateUpdate(NY_time)
|
||||||
|
t = time.time()
|
||||||
|
except Exception as e:
|
||||||
|
logf.write(srt(e))
|
||||||
|
|
||||||
|
|
||||||
time.sleep(sleeptime*60)
|
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
symbol,name,base,current,24hr change
|
symbol,name,base,current,24hr change
|
||||||
BTC,bitcoin,usd,38061,0.15138810082760248
|
BTC,bitcoin,usd,39062,1.451872309860798
|
||||||
ETH,ethereum,gbp,1841.33,1.197151365974607
|
ETH,ethereum,gbp,1961.49,1.6934708417131437
|
||||||
|
|
@ -1 +1 @@
|
|||||||
25/05/2021 14:54:13
|
27/05/2021 15:08:39
|
||||||
|
|
42
csv/news.csv
42
csv/news.csv
@ -1,21 +1,21 @@
|
|||||||
headline
|
headline,source,date,time
|
||||||
COVID-19 LIVE UPDATES | SA says consensus reached for talks on pandemic treaty - TimesLIVE
|
Competitor Fears Elon Musk's SpaceX Could "Monopolise" Space - NDTV,NDTV News,2021-05-27,18:31:03Z
|
||||||
WHO, DOST set crucial vaccine tests for Pinoys - INQUIRER.net
|
Meme stocks mount a comeback as AMC^ GameStop shareholders squeeze short sellers again - CBC.ca,CBC News,2021-05-27,18:22:41Z
|
||||||
Huawei to unveil new OS - The Manila Times
|
U.S. administers 290.7 mln doses of COVID-19 vaccines - CDC - Financial Post,Financial Post,2021-05-27,18:13:22Z
|
||||||
Total lunar eclipse 2021: How to see the super flower blood moon - MARCA.com
|
Covid-19: Up to 75% of new UK cases could be Indian variant - Matt Hancock - BBC News,BBC News,2021-05-27,18:09:12Z
|
||||||
NBI given 10 days to file initial probe findings into 'vaccine for sale' scam | Joel R. San Juan - Business Mirror
|
Super Moon vs Blood Moon - India Today,India Today,2021-05-27,18:04:39Z
|
||||||
BTS single "Butter" breaks three world records across YouTube and Spotify - Guinness World Records
|
Vaccine target for majority of adults likely to be delayed – Varadkar - The Irish Times,The Irish Times,2021-05-27,18:00:00Z
|
||||||
“Super Flower Blood Moon” to be visible to southern Albertans early Wednesday morning - Lethbridge News Now
|
'It’s a Champions League final but it’s just a football game for me' - Mahrez relaxed for Man City's big night - Goal.com,Sporting News,2021-05-27,18:00:00Z
|
||||||
U.S. will reopen consulate in Jerusalem, Secretary of State Blinken announces - CBC.ca
|
UK aid cuts ‘directly hamper’ fight against HIV^ warn politicians and Aids groups - Financial Times,Financial Times,2021-05-27,17:58:01Z
|
||||||
18 COVID-19 community cases in Singapore, including Sengkang General Hospital housekeeper - CNA
|
New York Knicks ban fan from Madison Square Garden for spitting on Atlanta Hawks' Trae Young - ESPN,ESPN,2021-05-27,17:46:50Z
|
||||||
When to see the total lunar eclipse and 'flower' supermoon - CNN
|
I couldn't sleep for 8-9 days while I was playing: Ashwin on why he had to leave IPL midway - Times of India,The Times of India,2021-05-27,17:39:00Z
|
||||||
Match Highlights BAN vs SL 2nd ODI Updates: Ton-Up Mushfiqur Rahim And Bowlers Shine as Bangladesh Beat Sri L - India.com
|
New studies claim COVID-19 immunity may last years - New York Post ,New York Post,2021-05-27,17:35:00Z
|
||||||
Central Bank bans former mortgage firm MD as gardaí investigate - The Irish Times
|
COVID-19: Matt Hancock says 'we worked as hard as we could to protect care homes' after Dominic Cummings's criticism - Sky News,Sky.com,2021-05-27,17:34:18Z
|
||||||
Build 2021: Here’s everything Microsoft announced at its annual developer conference - The Indian Express
|
Mixed reaction from experts to new guidelines on dining out - The Irish Times,The Irish Times,2021-05-27,17:33:24Z
|
||||||
GLOBALink | Exploring Mars with China's Zhurong rover - Daily News Egypt
|
‘Gold-standard’ contact tracing swamped as Covid sites soar - Herald Sun,Herald Sun,2021-05-27,17:32:53Z
|
||||||
Axiom Space lines up second private flight to the ISS, led by record-holding astronaut Peggy Whitson - CNBC
|
Shami receives first dose of COVID-19 vaccine - DTNext,Dtnext.in,2021-05-27,17:29:36Z
|
||||||
COVID-19: Councils say travel not prohibited after meeting government officials over local lockdown fears - Sky News
|
Some Canadians falsely assuming Pfizer COVID-19 vaccine more effective than Moderna - CP24 Toronto's Breaking News,CP24 Toronto's Breaking News,2021-05-27,17:19:00Z
|
||||||
Prince Harry makes heartbreakingly sweet comment about 'mummy' Princess Diana in unearthed video showing his once strong bond with Prince William - woman&home
|
China's Zhurong Mars rover lays down wheel tracks on the red planet - CNET,CNET,2021-05-27,17:13:00Z
|
||||||
COVID: India's 'white fungus' infections raise new health concerns - DW (English)
|
Packers still not budging on Aaron Rodgers trade possibility - NBC Sports,NBCSports.com,2021-05-27,17:09:00Z
|
||||||
Cllr slammed by party colleagues over child benefit 'subsidy to have sex' claim - Dublin Live
|
How John Krasinski tortured Emily Blunt (again) for 'A Quiet Place Part II' by exploiting 'her greatest weakness' - Yahoo Entertainment,Yahoo Entertainment,2021-05-27,17:01:50Z
|
||||||
Rand Paul points finger at 80s pop star after receiving suspicious powder - The Guardian
|
Dark matter mapped using light from 100 million galaxies - The Irish News,The Irish News,2021-05-27,17:01:41Z
|
||||||
|
Can't render this file because it contains an unexpected character in line 7 and column 12.
|
0
csv/news_settings.csv
Normal file
0
csv/news_settings.csv
Normal file
|
0
csv/news_settings.json
Normal file
0
csv/news_settings.json
Normal file
@ -1,2 +1,2 @@
|
|||||||
speed,brightness
|
speed,brightness
|
||||||
f,5
|
s,9
|
|
@ -1,4 +1,4 @@
|
|||||||
name,current,opening
|
name,current,opening
|
||||||
MSFT,251.215,251.769
|
MSFT,249.62,251.17
|
||||||
NFLX,500.28,506
|
NFLX,501.1229,501.8
|
||||||
GOOG,2406.31,2420
|
GOOG,2431.28,2436.94
|
||||||
|
|
BIN
display_image
BIN
display_image
Binary file not shown.
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.9 KiB |
BIN
final1.ppm
BIN
final1.ppm
Binary file not shown.
31
server.py
31
server.py
@ -14,6 +14,7 @@ import threading
|
|||||||
import csv
|
import csv
|
||||||
import pexpect
|
import pexpect
|
||||||
import time
|
import time
|
||||||
|
import json
|
||||||
from multiprocessing import Process
|
from multiprocessing import Process
|
||||||
from subprocess import Popen, PIPE
|
from subprocess import Popen, PIPE
|
||||||
#stock_ticker = StockTicker()
|
#stock_ticker = StockTicker()
|
||||||
@ -147,6 +148,36 @@ def DisplayText():
|
|||||||
ticker.sendline('T')
|
ticker.sendline('T')
|
||||||
return hello()
|
return hello()
|
||||||
|
|
||||||
|
@app.route("/SetNews", methods=['POST'])
|
||||||
|
def SetNews():
|
||||||
|
text = request.form['text']
|
||||||
|
|
||||||
|
#args = ['q', 'sources', 'category', 'country']
|
||||||
|
args = ['q', 'category', 'country']
|
||||||
|
arg_dict = {}
|
||||||
|
lst = text.split(',')
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
for i, arg in enumerate(args):
|
||||||
|
if len(lst[i])>0:
|
||||||
|
arg_dict[arg] = lst[i]
|
||||||
|
|
||||||
|
print(arg_dict)
|
||||||
|
|
||||||
|
json.dump( arg_dict, open( "csv/news_settings.json", 'w+' ))
|
||||||
|
|
||||||
|
print(settings)
|
||||||
|
except Exception as e:
|
||||||
|
#reset settings
|
||||||
|
print(e)
|
||||||
|
f = open( "csv/news_settings.json", 'w+' )
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
api_caller.sendline('R')
|
||||||
|
|
||||||
|
return hello()
|
||||||
|
|
||||||
@app.route("/DisplayImage", methods=['POST'])
|
@app.route("/DisplayImage", methods=['POST'])
|
||||||
def DisplayImage():
|
def DisplayImage():
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
|
@ -243,32 +243,64 @@ class StockTicker():
|
|||||||
self.scrollImageTransition(['scroll_text.ppm', 'scroll_text.ppm'], offset_x = 128, offset_y = 0, stocks = False)
|
self.scrollImageTransition(['scroll_text.ppm', 'scroll_text.ppm'], offset_x = 128, offset_y = 0, stocks = False)
|
||||||
|
|
||||||
def displayNews(self):
|
def displayNews(self):
|
||||||
font = ImageFont.load("./fonts/8x13B.pil")
|
headline_font = ImageFont.load("./fonts/8x13B.pil")
|
||||||
|
source_font = ImageFont.load("./fonts/5x8.pil")
|
||||||
while True:
|
while True:
|
||||||
headlines = []
|
headlines = []
|
||||||
|
source_date_times = []
|
||||||
|
|
||||||
f = open('csv/news.csv', 'r')
|
f = open('csv/news.csv', 'r')
|
||||||
CSV = csv.reader(f)
|
CSV = csv.reader(f)
|
||||||
next(CSV)
|
next(CSV)
|
||||||
for row in CSV:
|
for row in CSV:
|
||||||
headlines.append(','.join(row))
|
headline, source, date, time = row
|
||||||
|
headlines.append(headline)
|
||||||
|
source_date_times.append(source + ': ' + date + ' ' + time)
|
||||||
|
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
for headline in headlines:
|
if len(headlines) > 0:
|
||||||
|
|
||||||
|
for i, headline in enumerate(headlines):
|
||||||
|
headline = headline.replace("^", ",")
|
||||||
headline = headline.replace("’", "'")
|
headline = headline.replace("’", "'")
|
||||||
headline = headline.replace("‘", "'")
|
headline = headline.replace("‘", "'")
|
||||||
headline = headline.replace('“', '"')
|
headline = headline.replace('“', '"')
|
||||||
headline = headline.replace('”', '"')
|
headline = headline.replace('”', '"')
|
||||||
|
|
||||||
img = self.textImage(headline, font)
|
headline_img = self.textImage(headline, headline_font, matrix_height = True)
|
||||||
|
source_img = self.textImage(source_date_times[i], source_font, r=255, g=255, b=0, matrix_height = True)
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
logos_path = os.path.join(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'logos'), 'news_logos')
|
||||||
|
|
||||||
|
logo = Image.open(os.path.join(logos_path, 'techcrunch' + '.png'))
|
||||||
|
print(logo.size)
|
||||||
|
img = Image.new('RGB', (headline_img.size[0], 32))
|
||||||
|
img.paste(headline_img, (2, 0))
|
||||||
|
img.paste(source_img, (2,16))
|
||||||
|
|
||||||
|
img= self.stitchImage([logo,img])
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
|
img = Image.new('RGB', (headline_img.size[0], 32))
|
||||||
|
img.paste(headline_img, (0,0))
|
||||||
|
img.paste(source_img, (0,16))
|
||||||
|
img.save('image.ppm')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
killed = self.scrollImage(img, offset_x = 128, offset_y = 0)
|
killed = self.scrollImage(img, offset_x = 128, offset_y = 0)
|
||||||
#killed = self.scrollImageStacked(img, offset_x = 128, offset_y = 0)
|
#killed = self.scrollImageStacked(img, offset_x = 128, offset_y = 0)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if killed: break
|
if killed: break
|
||||||
|
|
||||||
|
else:
|
||||||
|
print('new failed')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if killed: break
|
if killed: break
|
||||||
|
|
||||||
|
|
||||||
@ -372,6 +404,7 @@ class StockTicker():
|
|||||||
new_im = Image.new('RGB', (total_width, max_height))
|
new_im = Image.new('RGB', (total_width, max_height))
|
||||||
x_offset = 0
|
x_offset = 0
|
||||||
for im in image_list:
|
for im in image_list:
|
||||||
|
print(x_offset)
|
||||||
new_im.paste(im, (x_offset,0))
|
new_im.paste(im, (x_offset,0))
|
||||||
x_offset += im.size[0]
|
x_offset += im.size[0]
|
||||||
|
|
||||||
|
@ -36,6 +36,12 @@
|
|||||||
<input type="submit" value="Display"style="height:30px">
|
<input type="submit" value="Display"style="height:30px">
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
<p>Set news search settings. keyword,category,country e.g. bitcoin,business,us/p>
|
||||||
|
<form action="/SetNews" method="POST">
|
||||||
|
<input name="text" placeholder="bitcoin,business,us"style="height:24px">
|
||||||
|
<input type="submit" value="Display"style="height:30px">
|
||||||
|
</form>
|
||||||
|
|
||||||
<p>Display an image</p>
|
<p>Display an image</p>
|
||||||
<form action="/DisplayImage" method="POST" enctype=multipart/form-data>
|
<form action="/DisplayImage" method="POST" enctype=multipart/form-data>
|
||||||
<p><input type=file name=file style="height:30px">
|
<p><input type=file name=file style="height:30px">
|
||||||
|
26
test.py
26
test.py
@ -12,16 +12,30 @@ import finnhub
|
|||||||
|
|
||||||
import pexpect
|
import pexpect
|
||||||
from pycoingecko import CoinGeckoAPI
|
from pycoingecko import CoinGeckoAPI
|
||||||
|
from newsapi import NewsApiClient
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
coingecko_client = CoinGeckoAPI()
|
|
||||||
|
newsapi = NewsApiClient(api_key='cf08652bd17647b89aaf469a1a8198a9')
|
||||||
|
|
||||||
|
top_headlines = newsapi.get_top_headlines(q='bitcoin',
|
||||||
|
category='business',
|
||||||
|
country='us')
|
||||||
|
|
||||||
|
|
||||||
response = coingecko_client.get_price(ids=['bitcoin', 'ethereum'], vs_currencies = ['gbp', 'usd'], include_24hr_change=True)
|
'''
|
||||||
print(response)
|
top_headlines = newsapi.get_everything(q='bitcoin',
|
||||||
|
sources='bbc-news,the-verge',
|
||||||
#print(dir( coingecko_client))
|
page=1)
|
||||||
#print(dir( coingecko_client))
|
'''
|
||||||
|
#print(top_headlines)
|
||||||
|
headline_titles = [top_headline['title'] for top_headline in top_headlines['articles']]
|
||||||
|
headline_ids = [top_headline['source']['name'] for top_headline in top_headlines['articles']]
|
||||||
|
headline_times = [top_headline['publishedAt']for top_headline in top_headlines['articles']]
|
||||||
|
|
||||||
|
#print([top_headline.keys()for top_headline in top_headlines['articles']])
|
||||||
|
print(headline_titles)
|
||||||
|
print(headline_ids)
|
||||||
|
print(headline_times)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user