コード例 #1
0
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
コード例 #2
0
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
コード例 #3
0
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
コード例 #4
0
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
コード例 #5
0
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
コード例 #6
0
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
コード例 #7
0
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
コード例 #8
0
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
コード例 #9
0
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
コード例 #10
0
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