def test_news(self): from pyEX import news with patch('requests.get') as mock, \ patch('pickle.dump'): mock.return_value = MagicMock() mock.return_value.status_code = 200 news('test')
def test_news(self): from pyEX import news with patch("requests.get") as mock, patch("pickle.dump"): mock.return_value = MagicMock() mock.return_value.status_code = 200 news("test")
def test_news(self): from pyEX import news with patch("requests.get") as mock: mock.return_value = MagicMock() mock.return_value.status_code = 200 news("test") news("test", language="en")
def test_news(self): from pyEX import news news(C)
def prepNews(self, ticker): daysAgo = 30 sent_data = {} SENT_PATH = f'./news/sentiment/{ticker}.json' if os.path.exists(SENT_PATH): with open(SENT_PATH, 'r') as JSON: sent_data = json.load(JSON) with open('./ticker-dict.json') as JSON: tickers = json.load(JSON) subName = tickers[ticker] sia = SentimentIntensityAnalyzer() translator = Translator() if str(sent_data).count('{') < 5: print(f'Less than {daysAgo} news articles.') news = p.news(count=(daysAgo), symbol=ticker, token=self.secret, version='v1') cc = 0 print(f'News LENGTH: {len(news)}') for story in news: timestamp = story['datetime'] date = str( datetime.datetime.fromtimestamp(int( str(timestamp)[0:-3]))).split(' ')[0] print(date) url = story['url'] summary = story['summary'] lang = story['lang'] hasPaywall = story['hasPaywall'] if lang != 'en': try: summary = translator.translate(summary).text except: summary = '' if hasPaywall != True: HTML = requests.get(url, headers=self.agent).text soup = BeautifulSoup(HTML, features="lxml") paragraphs = soup.findAll('p') allText = [] for peice in paragraphs: if ticker.lower() in str( peice).lower() or subName.lower().split( ' ')[0] in str(peice).lower(): txt = str(peice.getText()) if lang != 'en': peice = translator.translate(txt).text allText += [txt] TEXT = ' '.join(allText) if TEXT == '': print('No text... using summary') TEXT = summary sentiment = sia.polarity_scores(TEXT) else: sentiment = sia.polarity_scores(summary) formatted = { 'url': url, 'summary': summary, 'lang': lang, 'hasPaywall': hasPaywall, 'sentiment': sentiment, } try: sent_data[date] = sent_data[date] + [formatted] except: sent_data[date] = [formatted] cc += 1 print(f'{cc} done.') #sentimentSummary = sia.polarity_scores(summary) last = int(str(news[-1]['datetime'])[0:-3]) first = time.time() #int(str(news[-1]['datetime'])[0:-3]) delta = first - last DAYS = int(delta / 60 / 60 / 24) print(f'Delta: {DAYS}') date_list = self.genCalList(DAYS) KEYS = sent_data.keys() for dt in date_list: if dt not in KEYS: sent_data[dt] = {} try: sent_data['lastDeltaAv'] = (sent_data['lastDeltaAv'] + DAYS) / 2 except: sent_data['lastDeltaAv'] = DAYS with open(SENT_PATH, 'w') as JSON: json.dump(sent_data, JSON)
def pyEXNews(query): newsResult = pyEX.news(query, count=10) return newsResult