def get_top_tokens() -> pd.DataFrame: """Get top 50 tokens. [Source: Ethplorer] Returns ------- pd.DataFrame: DataFrame with list of top 50 tokens. """ response = make_request("getTopTokens") tokens = response["tokens"] df = pd.DataFrame(tokens)[[ "name", "symbol", "price", "txsCount", "transfersCount", "holdersCount", "twitter", "coingecko", ]] df["price"] = df["price"].apply(lambda x: x["rate"] if x and "rate" in x else None) create_df_index(df, "rank") return df
def get_top_volume_coins() -> pd.DataFrame: """Scrapes top coins by trading volume "https://www.coingecko.com/en/coins/high_volume" Returns ------- pandas.DataFrame Rank, Name, Symbol, Price, Change_1h, Change_24h, Change_7d, Volume_24h, Market_Cap """ columns = [ "Rank", "Name", "Symbol", "Price", "Change_1h", "Change_24h", "Change_7d", "Volume_24h", "Market_Cap", ] url = "https://www.coingecko.com/en/coins/high_volume" rows = scrape_gecko_data(url).find("tbody").find_all("tr") results = [] for row in rows: row_cleaned = clean_row(row) if len(row_cleaned) == 9: row_cleaned.insert(0, "?") row_cleaned.pop(3) results.append(row_cleaned) df = replace_qm(pd.DataFrame(results, columns=columns)) df.drop("Rank", axis=1, inplace=True) create_df_index(df, "Rank") df["Price"] = df["Price"].apply(lambda x: float(x.strip("$").replace(",", ""))) return df
def get_derivatives(): """Get list of crypto derivatives from CoinGecko API Returns ------- pandas.DataFrame Rank, Market, Symbol, Price, Pct_Change_24h, Contract_Type, Basis, Spread, Funding_Rate, Volume_24h, """ df = pd.DataFrame(client.get_derivatives(include_tickers="unexpired")) df.drop( ["index", "last_traded_at", "expired_at", "index_id", "open_interest"], axis=1, inplace=True, ) df.rename(columns={"price_percentage_change_24h": "pct_change_24h"}, inplace=True) create_df_index(df, "rank") df["price"] = df["price"].apply( lambda x: float(x.strip("$").replace(",", ""))) df.columns = [ "Rank", "Market", "Symbol", "Price", "Pct_Change_24h", "Contract_Type", "Basis", "Spread", "Funding_Rate", "Volume_24h", ] return df
def get_exchanges() -> pd.DataFrame: """Get list of top exchanges from CoinGecko API [Source: CoinGecko] Returns ------- pandas.DataFrame Trust_Score, Id, Name, Country, Year_Established, Trade_Volume_24h_BTC, Url """ client = CoinGeckoAPI() df = pd.DataFrame(client.get_exchanges_list(per_page=250)) df.replace({float(np.NaN): None}, inplace=True) df = df[[ "trust_score", "id", "name", "country", "year_established", "trade_volume_24h_btc", "url", ]] df.columns = [ "Trust_Score", "Id", "Name", "Country", "Year_Established", "Trade_Volume_24h_BTC", "Url", ] create_df_index(df, "Rank") return df
def get_stable_coins() -> pd.DataFrame: """Scrapes stable coins data from "https://www.coingecko.com/en/stablecoins" [Source: CoinGecko] Returns ------- pandas.DataFrame Rank, Name, Symbol, Price, Change_24h, Exchanges, Market_Cap, Change_30d, Url """ columns = [ "Rank", "Name", "Symbol", "Price", "Change_24h", "Exchanges", "Market_Cap", "Change_30d", "Url", ] url = "https://www.coingecko.com/en/stablecoins" rows = scrape_gecko_data(url).find("tbody").find_all("tr") results = [] for row in rows: link = GECKO_BASE_URL + row.find("a")["href"] row_cleaned = clean_row(row) if len(row_cleaned) == 8: row_cleaned.append(None) ( rank, name, *symbols, price, volume_24h, exchanges, market_cap, change_30d, ) = row_cleaned symbol = symbols[0] if symbols else symbols results.append([ rank, name, symbol, price, volume_24h, exchanges, market_cap, change_30d, link, ]) df = replace_qm(pd.DataFrame(results, columns=columns)) df.drop("Rank", axis=1, inplace=True) create_df_index(df, "Rank") df["Price"] = df["Price"].apply( lambda x: float(x.strip("$").replace(",", ""))) return df
def get_indexes(): """Get list of crypto indexes from CoinGecko API Returns ------- pandas.DataFrame Name, Id, Market, Last, MultiAsset """ df = pd.DataFrame(client.get_indexes(per_page=250)) df.columns = ["Name", "Id", "Market", "Last", "MultiAsset"] create_df_index(df, "Rank") return df
def get_exchange_rates(): """Get list of crypto, fiats, commodity exchange rates from CoinGecko API Returns ------- pandas.DataFrame Index, Name, Unit, Value, Type """ df = pd.DataFrame(client.get_exchange_rates()["rates"]).T.reset_index() df.drop("index", axis=1, inplace=True) create_df_index(df, "index") df.columns = ["Index", "Name", "Unit", "Value", "Type"] return df
def get_financial_platforms(): """Get list of financial platforms from CoinGecko API Returns ------- pandas.DataFrame Rank, Name, Category, Centralized, Url """ df = pd.DataFrame(client.get_finance_platforms()) df.drop("facts", axis=1, inplace=True) create_df_index(df, "rank") df.columns = ["Rank", "Name", "Category", "Centralized", "Url"] return df
def get_finance_products(): """Get list of financial products from CoinGecko API Returns ------- pandas.DataFrame Rank, Platform, Identifier, Supply_Rate, Borrow_Rate """ df = pd.DataFrame( client.get_finance_products(per_page=250), columns=[ "platform", "identifier", "supply_rate_percentage", "borrow_rate_percentage", ], ) df.columns = ["Platform", "Identifier", "Supply_Rate", "Borrow_Rate"] create_df_index(df, "Rank") return df
def get_address_info(address: str) -> pd.DataFrame: """Get info about tokens on you ethereum blockchain balance. Eth balance, balance of all tokens which have name and symbol. [Source: Ethplorer] Parameters ---------- address: str Blockchain balance e.g. 0x3cD751E6b0078Be393132286c442345e5DC49699 Returns ------- pd.DataFrame: DataFrame with list of tokens and their balances. """ response = make_request("getAddressInfo", address) if "tokens" in response: tokens = response.pop("tokens") for token in tokens: token_info = token.pop("tokenInfo") token.update({ "tokenName": token_info.get("name"), "tokenSymbol": token_info.get("symbol"), "tokenAddress": token_info.get("balance"), "balance": token.get("balance") / (10**int(token_info.get("decimals"))), }) else: token_info = response.get("tokenInfo") or {} tokens = [{ "tokenName": token_info.get("name"), "tokenSymbol": token_info.get("symbol"), "tokenAddress": token_info.get("balance"), "balance": token_info.get("balance") / (10**int(token_info.get("decimals"))), }] eth = response["ETH"] or {} eth_balance = eth.get("balance") eth_row = [ "Ethereum", "ETH", "0x0000000000000000000000000000000000000000", eth_balance, ] cols = [ "tokenName", "tokenSymbol", "tokenAddress", "balance", ] df = pd.DataFrame(tokens)[cols] eth_row_df = pd.DataFrame([eth_row], columns=cols) df = pd.concat([eth_row_df, df], ignore_index=True) df = df[df["tokenName"].notna()] create_df_index(df, "index") return df