#!/usr/bin/env python3 """Simple script for i3blocks to fetch crypto values from coinranking API. Author: flyingscorpio """ import argparse import os import requests from typing import List import matplotlib.pyplot as plt # type: ignore def parse_arguments() -> argparse.Namespace: """Arguments consist of: * a coin to look up * the currency to set the value on (defaults to USD) * the number of decimals to display """ parser = argparse.ArgumentParser() parser.add_argument("coin") parser.add_argument("-b", "--base", default="USD") parser.add_argument("-r", "--round", type=int, default=2) args = parser.parse_args() return args def generate_graph(data: List[float]) -> None: """Generate a graph based on the numbers in data.""" plt.plot(data) plt.show() def compute(args: argparse.Namespace) -> str: """Send a request to the API with the given arguments.""" symbols = { "GBP": "£", "EUR": "€", "USD": "$", "BTC": "", "LTC": "Ł", "ETH": "Ξ", } coin = args.coin.upper() base = args.base.upper() round_nb = args.round req = requests.get( "https://api.coinranking.com/v1/public/coins?base={}&symbols={}&timePeriod=7d".format( base, coin ) ) try: coin = symbols[coin] except KeyError: pass req_j = req.json() data = req_j["data"] base_sign = data["base"]["sign"] coin_data = data["coins"][0] price = float(coin_data["price"]) history = [float(value) for value in coin_data["history"]] clicked = os.environ.get("BLOCK_BUTTON", "") if clicked: generate_graph(history) output = "{} = {}{}".format(coin, base_sign, round(price, round_nb)) return output print(compute(parse_arguments()))