Skip to content

Commit 4a2dae4

Browse files
author
fmiskovic
committed
mixing it up a little bit
1 parent 915c7fc commit 4a2dae4

8 files changed

+37
-90
lines changed

bot.py

+17-13
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging.config
2+
import random
23
import time
34

45
from news import news_grabber, news_api_auth
@@ -17,24 +18,27 @@
1718
followers_handler = followers.FollowersHandler(tw_api)
1819

1920

20-
def tweet_something_about(keyword):
21-
news = news_grabber.get_news(keyword, category='business')
22-
if len(news) == 0:
23-
logger.info(f'There are no news about %s at the moment', keyword)
24-
return
21+
def get_news(query=None, category='business', country=None):
22+
return news_grabber.get_news(query=query, category=category, country=country)
2523

26-
logger.info('Tweeting about ' + keyword)
2724

28-
for n in news:
29-
tw_handler.post_new_tweet(n.description, n.url)
30-
logging.info(f'Taking a %d minutes break...', INTERVAL)
31-
time.sleep(INTERVAL)
32-
logger.info('OK I am ready to continue. Lets tweet something...')
25+
def tweet_news(news_items, hash_tag=None):
26+
for n in news_items:
27+
result = tw_handler.post_new_tweet(text=n.description, source=n.url, hashtag=hash_tag)
28+
if result is not None:
29+
logging.info(f'Taking a %s minutes break...', INTERVAL / 60)
30+
time.sleep(INTERVAL)
31+
logger.info('OK I am ready to continue. Lets tweet something again...')
3332

3433

34+
keywords = ['cryptocurrency', 'ethereum', 'bitcoin', 'cryptocoin', 'litecoin']
35+
3536
while True:
3637
# follow new followers
3738
followers_handler.follow_followers()
3839

39-
# check for cryptocurrency news and tweet about it
40-
tweet_something_about('cryptocurrency')
40+
keyword = random.choice(keywords)
41+
news = get_news(query=keyword)
42+
if len(news) > 0:
43+
logger.info('Tweet attempt about ' + keyword)
44+
tweet_news(news_items=news, hash_tag='#cryptocurrencynews #' + keyword)

news/logging.config

-27
This file was deleted.

news/news_grabber.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,13 @@ def __init__(self, news_api):
1010
"""Init news api client"""
1111
self.news_api = news_api
1212

13-
logging.config.fileConfig('logging.config')
14-
self.logger = logging.getLogger('news')
13+
self.logger = logging.getLogger(__name__)
1514
self.logger.info('Initialized NewsApiClient')
1615

17-
def get_news(self, query, category=None):
16+
def get_news(self, query, category=None, country=None):
1817
"""get latest breaking news"""
1918
news = []
20-
response = self.news_api.get_top_headlines(query, category=category)
19+
response = self.news_api.get_top_headlines(query, category=category, country=country)
2120
if response['status'] == 'ok':
2221
self.logger.info('Querying news went ok')
2322
for article in response['articles']:

test/test_news_grabber.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -13,28 +13,28 @@ def tearDown(self) -> None:
1313
super().tearDown()
1414

1515
def test_get_crypto_news(self):
16-
news = self.grabber.get_news('cryptocurrency', category='business')
16+
news = self.grabber.get_news(query='cryptocurrency', category='business')
1717
print('crypto')
1818
for n in news:
1919
print(n)
2020
self.assertTrue(len(news) > 0)
2121

2222
def test_get_crypto_tech_news(self):
23-
news = self.grabber.get_news('cryptocurrency', category='business')
23+
news = self.grabber.get_news(query='cryptocurrency', category='business')
2424
print('crypto')
2525
for n in news:
2626
print(n)
2727
self.assertTrue(len(news) > 0)
2828

2929
def test_get_bitcoin_news(self):
30-
news = self.grabber.get_news('bitcoin')
30+
news = self.grabber.get_news(query='bitcoin')
3131
print('bitcoin')
3232
for n in news:
3333
print(n)
3434
self.assertTrue(len(news) > 0)
3535

3636
def test_get_news_non_existing(self):
37-
news = self.grabber.get_news('fqwsdzx')
37+
news = self.grabber.get_news(query='fqwsdzx')
3838
self.assertTrue(len(news) == 0)
3939

4040

test/test_twitter_post.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@ def tearDown(self) -> None:
1515
def test_create_post(self):
1616
source = "https://slashdot.org/story/19/05/19/1837257/bitcoin-roars-back-surges-50-in-30-days"
1717
text = "Bitcoin 'Roars Back', Surges 50% in 30 Days"
18-
tweet = tweets.create_post(text, source)
18+
tweet = tweets.create_post(text=text, source=source)
1919
print(tweet)
2020
self.assertIsNotNone(tweet)
2121

2222
def test_tweet_news(self):
2323
source = "https://slashdot.org/story/19/05/19/1837257/bitcoin-roars-back-surges-50-in-30-days"
2424
text = "Bitcoin 'Roars Back', Surges 50% in 30 Days"
2525

26-
response = self.post_bot.post_new_tweet(text, source)
26+
response = self.post_bot.post_new_tweet(text=text, source=source)
2727
self.assertIsNotNone(response)
2828

2929
def test_get_latest_tweet(self):
@@ -39,7 +39,7 @@ def test_get_latest_tweet_url(self):
3939
text = tweet.text
4040

4141
sub = text[0:text.find('\n\n')]
42-
logger.info(f'Substring is: %s', sub)
42+
print(f'Substring is: %s', sub)
4343
self.assertIsNotNone(sub)
4444
self.assertTrue(len(sub) > 0)
4545

twitter/followers.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@ def __init__(self, tw_api):
1010
self.api = tw_api
1111
self.me = self.api.me()
1212

13-
logging.config.fileConfig('logging.config')
14-
self.logger = logging.getLogger('tw')
13+
self.logger = logging.getLogger(__name__)
1514
self.logger.info('Initializing FollowersHandler')
1615

1716
def follow_followers(self):

twitter/logging.config

-27
This file was deleted.

twitter/tweets.py

+9-10
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,12 @@
33
from twitter import tweet_similarity
44

55

6-
def create_post(text, source):
7-
hashtags = '#cryptocurrencynews #cryptocurrency'
8-
if len(text) >= 140:
9-
sub_text = text[0:136] + '...'
10-
return sub_text + '\n\n' + hashtags + '\n\n' + source
6+
def create_post(text, source, *hashtag):
7+
if len(text) >= 170:
8+
sub_text = text[0:166] + '...'
9+
return sub_text + '\n\n' + hashtag + '\n\n' + source
1110
else:
12-
return text + '\n\n' + hashtags + '\n\n' + source
11+
return text + '\n\n' + hashtag + '\n\n' + source
1312

1413

1514
class TweetsHandler:
@@ -19,11 +18,10 @@ def __init__(self, tw_api):
1918
self.api = tw_api
2019
self.me = self.api.me()
2120

22-
logging.config.fileConfig('logging.config')
23-
self.logger = logging.getLogger('tw')
21+
self.logger = logging.getLogger(__name__)
2422
self.logger.info('Initialized TweetsHandler')
2523

26-
def post_new_tweet(self, text, source):
24+
def post_new_tweet(self, text, source, hashtag=None):
2725
"""Tweet some news"""
2826
latest_tweets = self.get_tweets_list(100)
2927
if len(latest_tweets) > 0:
@@ -34,9 +32,10 @@ def post_new_tweet(self, text, source):
3432

3533
try:
3634
self.logger.info('Posting a new tweet...')
37-
return self.api.update_status(create_post(text, source))
35+
return self.api.update_status(create_post(text, source, hashtag))
3836
except Exception as e:
3937
self.logger.error('Failed to post new tweet: %s', e, exc_info=1)
38+
return None
4039

4140
def get_latest_tweet(self):
4241
self.logger.info('Getting my last tweet...')

0 commit comments

Comments
 (0)