class cryptonews(): def __init__(self, key): self.key = key self.api = CryptoControlAPI(key) self.proxyApi = CryptoControlAPI( key, "http://cryptocontrol_proxy/api/v1/public") def enableSentiment(self): self.sentiment = True def top_news(self, lang=None): return self.api.getTopNews(language=lang) def news_by_coin(self, coin, lang=None): return self.api.getTopNewsByCoin(coin=coin, language=lang) def get_top_tweets(self, coin, lang=None): return self.api.getTopTweetsByCoin(coin=coin, language=lang) def get_reddit(self, coin, lang=None): return self.api.getLatestRedditPostsByCoin(coin=coin, language=lang) def get_top_feed(self, coin, lang): return self.api.getTopFeedByCoin(coin=coin, language=lang) def get_latest(self, coin, lang): return self.api.getLatestItemsByCoin(coin=coin, language=lang) def get_coinDetails(self, coin, lang): return self.api.getCoinDetails(coin=coin, language=lang)
# Connect to a self-hosted proxy server (to improve performance) that points to cryptocontrol.io proxyApi = CryptoControlAPI(key2, "http://cryptocontrol_proxy/api/v1/public") # Get top news print(pd.DataFrame(api.getTopNews()))\ # returned dataframe can be viewed fully in the csv file, same for the other dataframes pd.DataFrame(api.getTopNews()).to_csv('section1/task3/topnews.csv', index=False) # get latest russian news print(pd.DataFrame(api.getLatestNews("ru"))) # # get top bitcoin news print(pd.DataFrame(api.getTopNewsByCoin("bitcoin"))) # get top EOS tweets print(pd.DataFrame(api.getTopTweetsByCoin("eos"))) # get top Ripple reddit posts print(pd.DataFrame(api.getLatestRedditPostsByCoin("ripple"))) # get reddit/tweets/articles in a single combined feed for NEO feed = pd.DataFrame(api.getTopFeedByCoin("neo")) print(feed) # get latest reddit/tweets/articles (seperated) for Litecoin print(pd.DataFrame(api.getLatestItemsByCoin("litecoin"))) # get details (subreddits, twitter handles, description, links) for ethereum links = api.getCoinDetails("ethereum")['links'] print(pd.DataFrame(links))
class News: def __init__(self, api_key): self.language = 'en' self.api = CryptoControlAPI(api_key) def set_language(self, language): # English (en default) # Chinese/Mandarin 'cn' # German 'de' # Italian 'it' # Japanese 'jp' # Korean 'ko' # Portuguese 'po' # Russian 'ru' # Spanish 'es' self.language = language def getTopNews(self): # Get the top news articles. self.data, self.formated = None, None try: self.data = self.api.getTopNews(language=self.language) self.formated = self.format_news(self.data) print(self.formated) except Exception as e: print(e) def getLatestNews(self): # Get the latest news articles. self.data, self.formated = None, None try: self.data = self.api.getLatestNews(language=self.language) self.formated = self.format_news(self.data) print(self.formated) except Exception as e: print(e) def getTopNewsByCoin(self, coin): # Get the top news articles for a specific coin from the CryptoControl API. self.data, self.formated = None, None try: self.data = self.api.getTopNewsByCoin(coin,language=self.language) self.formated = self.format_news(self.data) print(self.formated) except Exception as e: print(e) def getTopNewsByCategory(self): # Get news articles grouped by category. self.data, self.formated = None, None try: self.data = self.api.getTopNewsByCategory(language=self.language) except Exception as e: print(e) return self.formated = pd.concat([self.format_news(self.data[i]) for i in self.data.keys()]) print(self.formated) def getLatestNewsByCoin(self, coin): # Get the latest news articles for a specific coin. self.data, self.formated = None, None try: self.data = self.api.getLatestNewsByCoin(coin, language= self.language) self.formated = self.format_news(self.data) print(self.formated) except Exception as e: print(e) def getTopNewsByCoinCategory(self, coin): # Get news articles grouped by category for a specific coin. self.data, self.formated = None, None try: self.data = self.api.getTopNewsByCoinCategory(coin, language=self.language) self.formated = self.format_news(self.data) print(self.formated) except Exception as e: print(e) def getTopTweetsByCoin(self, coin): # Get top tweets for a particular coin self.tweets, self.formated = None, None try: self.tweets = self.api.getTopTweetsByCoin(coin,language=self.language) self.formated = self.format_tweets(self.tweets) print(self.formated) except Exception as e: print(e) def getLatestTweetsByCoin(self, coin): # Get latest tweets for a particular coin self.tweets, self.formated = None, None try: self.tweets = self.api.getLatestTweetsByCoin(coin,language=self.language) self.formated = self.format_tweets(self.tweets) print(self.formated) except Exception as e: print(e) def getTopRedditPostsByCoin(self, coin): # Get top reddit posts for a particular coin self.reddit, self.formated = None, None try: self.reddit = self.api.getTopRedditPostsByCoin(coin,language=self.language) self.formated = self.format_reddit(self.reddit) print(self.formated) except Exception as e: print(e) def getTopFeedByCoin(self, coin): # Get a combined feed (reddit/tweets/articles) for a particular coin sort by time self.feed, self.formated = None, None try: self.feed = self.api.getTopFeedByCoin(coin,language=self.language) self.formated = self.format_feed(self.feed) print(self.formated) except Exception as e: print(e) def getCoinDetails(self, coin): try: self.coin = self.api.getCoinDetails(coin,language=self.language) print(pd.DataFrame.from_dict(self.coin,orient = 'index')) except Exception as e: print(e) def export_csv(self): # export formated data to csv self.formated.to_csv('section1/task3/Formated_Data.csv', index = 0) @staticmethod def format_news(data): news = pd.DataFrame(data) news = news[['primaryCategory', 'coins', 'title', 'url', 'source','publishedAt']] news['coins'] = [[i['tradingSymbol'] for i in news.coins[j]] for j in range(news.coins.size)] news['source'] = [i['name'] for i in news.source] return news @staticmethod def format_tweets(data): tweets = pd.DataFrame(data) tweets = tweets[['text', 'url', 'publishedAt','retweetCount', 'favoriteCount']] return tweets @staticmethod def format_reddit(data): reddit = pd.DataFrame(data) reddit = reddit[['title', 'url', 'subreddit', 'publishedAt' , 'comments', 'upvotes']] return reddit def format_feed(self, data): feed = pd.DataFrame(data) article = self.format_news([x for x in feed.article.dropna()]) tweet = self.format_tweets([x for x in feed.tweet.dropna()]) reddit = self.format_reddit([x for x in feed.reddit.dropna()]) tweet = tweet.rename(columns={'text':'title'}) df = pd.concat([article,tweet,reddit]).sort_values('publishedAt',ascending=False) df = df.drop('coins', axis = 1) # df = df[['title','url','publishedAt']] return df
'similarArticles', 'coins', 'source', 'description', 'originalImageUrl', 'url', 'thumbnail' ], axis=1) df2 = df2.drop(['description', 'url'], axis=1) df3 = df3.drop(['text', 'url'], axis=1) df1.to_csv('neo_article_data.csv', index=False) df2.to_csv('neo_reddit_data.csv', index=False) df3.to_csv('neo_tweet_data.csv', index=False) # get latest reddit/tweets/articles (seperated) for Litecoin litecoin = api.getLatestItemsByCoin("litecoin") df = pd.DataFrame(litecoin) df1 = pd.DataFrame(df[df['type'] == 'article'].article.tolist()) df2 = pd.DataFrame(df[df['type'] == 'reddit'].reddit.tolist()) df3 = pd.DataFrame(df[df['type'] == 'tweet'].tweet.tolist()) df1 = df1.drop([ 'similarArticles', 'coins', 'source', 'description', 'originalImageUrl', 'url', 'thumbnail' ], axis=1) df2 = df2.drop(['description', 'url'], axis=1) df3 = df3.drop(['text', 'url'], axis=1) df1.to_csv('litecoin_article_data.csv', index=False) df2.to_csv('litecoin_reddit_data.csv', index=False) df3.to_csv('litecoin_tweet_data.csv', index=False) # get details (subreddits, twitter handles, description, links) for ethereum ethereum = api.getCoinDetails("ethereum") df = pd.DataFrame([ethereum]) df.to_csv('ethereum_data.csv', index=False)
# get reddit/tweets/articles in a single combined feed for NEO(sorted by time) top_coin_feed = api.getTopFeedByCoin("bitcoin") tcf = format_df(top_coin_feed) save_j(top_coin_feed, 'top_coin_feed.json') save_csv(tcf, 'top_coin_feed.csv') # get a combined feed (reddit/tweets/articles) for a particular coin # (sorted by relevance) latest_coin_feed = api.getLatestFeedByCoin('bitcoin') lcf = format_df(latest_coin_feed) save_j(latest_coin_feed, 'latest_coin_feed.json') save_csv(lcf, 'latest_coin_feed.csv') # get reddit/tweets/articles (seperated) for a particular coin (sorted by time) top_coin_items = api.getTopItemsByCoin("bitcoin") tci = format_df(top_coin_items) save_j(top_coin_items, 'top_coin_items.json') save_csv(lcf, 'top_coin_items.csv') # get latest reddit/tweets/articles (seperated) for Litecoin(sorted by # relevance) latest_coin_items = api.getLatestItemsByCoin("litecoin") lci = format_df(latest_coin_items) save_j(latest_coin_items, 'latest_coin_items.json') save_csv(lci, 'latest_coin_items.csv') # get details (subreddits, twitter handles, description, links) for ethereum coin_details = api.getCoinDetails("ethereum") save_j(coin_details, 'coin_details.json')
top_btc_news = api.getTopNewsByCoin("bitcoin") top_btc_news_filename = f'top-btc-news.json' save_json(top_btc_news, top_btc_news_filename, save=True) # get top EOS tweets eos_tweets = api.getTopTweetsByCoin("eos") eos_tweets_filename = f'eos-tweets.json' save_json(eos_tweets, eos_tweets_filename, save=True) # get top Ripple reddit posts reddit = api.getLatestRedditPostsByCoin("ripple") reddit_filename = f'ripple-reddit.json' save_json(reddit, reddit_filename, save=True) # get reddit/tweets/articles in a single combined feed for NEO neo_feed = api.getTopFeedByCoin("neo") neo_feed_filename = 'neo-feed.json' save_json(neo_feed, neo_feed_filename, save=True) # get latest reddit/tweets/articles (seperated) for Litecoin ltc_latest_feed = api.getLatestItemsByCoin("litecoin") ltc_file = 'ltc-latest-feed.json' save_json(ltc_latest_feed, ltc_file, save=True) # get details (subreddits, twitter handles, description, links) for ethereum eth_detial = api.getCoinDetails("ethereum") eth_detial_file = 'eth-detial.json' save_json(eth_detial, eth_detial_file, save=True) # Enable the sentiment datapoints # api.enableSentiment()
# Connect to the CryptoControl API api = CryptoControlAPI("c570bf2c119d13e0cc9eb0b3d69d414d") # Connect to a self-hosted proxy server (to improve performance) that points to cryptocontrol.io proxyApi = CryptoControlAPI("c570bf2c119d13e0cc9eb0b3d69d414d", "http://cryptocontrol_proxy/api/v1/public") # Get top news print(pd.DataFrame(api.getTopNews())) # get latest russian news print(pd.DataFrame(api.getLatestNews("ru"))) # get top bitcoin news print(pd.DataFrame(api.getTopNewsByCoin("bitcoin"))) # get top EOS tweets print(pd.DataFrame(api.getTopTweetsByCoin("eos"))) # get top Ripple reddit posts print(pd.DataFrame(api.getLatestRedditPostsByCoin("ripple"))) # get reddit/tweets/articles in a single combined feed for NEO print(api.getTopFeedByCoin("neo")) # get latest reddit/tweets/articles (seperated) for Litecoin print(api.getLatestItemsByCoin("litecoin")) # get details (subreddits, twitter handles, description, links) for ethereum print(api.getCoinDetails("ethereum"))