bumblebee-status/modules/contrib/getcrypto.py

76 lines
2.9 KiB
Python
Raw Normal View History

2020-04-19 10:35:09 +02:00
# pylint: disable=C0111,R0903
"""Displays the price of a cryptocurrency.
Requires the following python packages:
* requests
Parameters:
* getcrypto.interval: Interval in seconds for updating the price, default is 120, less than that will probably get your IP banned.
* getcrypto.getbtc: 0 for not getting price of BTC, 1 for getting it (default).
* getcrypto.geteth: 0 for not getting price of ETH, 1 for getting it (default).
* getcrypto.getltc: 0 for not getting price of LTC, 1 for getting it (default).
* getcrypto.getcur: Set the currency to display the price in, usd is the default.
"""
import requests
import time
import bumblebee.util
import bumblebee.input
import bumblebee.output
import bumblebee.engine
from requests.exceptions import RequestException
def getfromkrak(coin, currency):
abbrev = {
2020-04-19 10:35:27 +02:00
'Btc': ['xbt', 'XXBTZ'],
'Eth': ['eth', 'XETHZ'],
'Ltc': ['ltc', 'XLTCZ'],
2020-04-19 10:35:09 +02:00
}
data = abbrev.get(coin, None)
if not data: return
2020-04-19 10:35:27 +02:00
epair = '{}{}'.format(data[0], currency)
tickname = '{}{}'.format(data[1], currency.upper())
2020-04-19 10:35:09 +02:00
try:
krakenget = requests.get('https://api.kraken.com/0/public/Ticker?pair='+epair).json()
except (RequestException, Exception):
2020-04-19 10:35:27 +02:00
return 'No connection'
2020-04-19 10:35:09 +02:00
if not 'result' in krakenget:
2020-04-19 10:35:27 +02:00
return 'No data'
2020-04-19 10:35:09 +02:00
kethusdask = float(krakenget['result'][tickname]['a'][0])
kethusdbid = float(krakenget['result'][tickname]['b'][0])
2020-04-19 10:35:27 +02:00
return coin+': '+str((kethusdask+kethusdbid)/2)[0:6]
2020-04-19 10:35:09 +02:00
class Module(bumblebee.engine.Module):
def __init__(self, engine, config):
super(Module, self).__init__(engine, config,
bumblebee.output.Widget(full_text=self.curprice)
)
2020-04-19 10:35:27 +02:00
self._curprice = ''
2020-04-19 10:35:09 +02:00
self._nextcheck = 0
2020-04-19 10:35:27 +02:00
self._interval = int(self.parameter('interval', '120'))
self._getbtc = bumblebee.util.asbool(self.parameter('getbtc', True))
self._geteth = bumblebee.util.asbool(self.parameter('geteth', True))
self._getltc = bumblebee.util.asbool(self.parameter('getltc', True))
self._getcur = self.parameter('getcur', 'usd')
2020-04-19 10:35:09 +02:00
engine.input.register_callback(self, button=bumblebee.input.LEFT_MOUSE,
2020-04-19 10:35:27 +02:00
cmd='xdg-open https://cryptowat.ch/')
2020-04-19 10:35:09 +02:00
def curprice(self, widget):
return self._curprice
def update(self, widgets):
if self._nextcheck < int(time.time()):
self._nextcheck = int(time.time()) + self._interval
currency = self._getcur
2020-04-19 10:35:27 +02:00
btcprice, ethprice, ltcprice = '', '', ''
2020-04-19 10:35:09 +02:00
if self._getbtc:
btcprice = getfromkrak('Btc', currency)
if self._geteth:
ethprice = getfromkrak('Eth', currency)
if self._getltc:
ltcprice = getfromkrak('Ltc', currency)
2020-04-19 10:35:27 +02:00
self._curprice = btcprice+' '*(self._getbtc*self._geteth)+ethprice+' '*(self._getltc*max(self._getbtc, self._geteth))+ltcprice
2020-04-19 10:35:09 +02:00
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4