tMerge pull request #595 from wozz/coinbase-rate - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 7247eb73f31489f202add47d9672eeb7acf83c9e DIR parent be98ea55f9a7209b9b656374f74041df4a37943c HTML Author: ThomasV <thomasv1@gmx.de> Date: Sun, 2 Mar 2014 21:40:07 +0100 Merge pull request #595 from wozz/coinbase-rate Add Coinbase exchange rate option Diffstat: M plugins/exchange_rate.py | 40 ++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) --- DIR diff --git a/plugins/exchange_rate.py b/plugins/exchange_rate.py t@@ -20,8 +20,8 @@ class Exchanger(threading.Thread): self.parent = parent self.quote_currencies = None self.lock = threading.Lock() - self.use_exchange = self.parent.config.get('use_exchange', "CoinDesk") - self.parent.exchanges = ["CoinDesk", "Blockchain"] + self.use_exchange = self.parent.config.get('use_exchange', "Blockchain") + self.parent.exchanges = ["CoinDesk", "Blockchain", "Coinbase"] self.parent.currencies = ["EUR","GBP","USD"] self.parent.win.emit(SIGNAL("refresh_exchanges_combo()")) self.parent.win.emit(SIGNAL("refresh_currencies_combo()")) t@@ -61,8 +61,11 @@ class Exchanger(threading.Thread): self.update_bc() elif self.use_exchange == "CoinDesk": self.update_cd() + elif self.use_exchange == "Coinbase": + self.update_cb() time.sleep(150) + def update_cd(self): try: connection = httplib.HTTPSConnection('api.coindesk.com') t@@ -84,6 +87,32 @@ class Exchanger(threading.Thread): self.quote_currencies = quote_currencies self.parent.set_currencies(quote_currencies) + def update_cb(self): + try: + connection = httplib.HTTPSConnection('coinbase.com') + connection.request("GET", "/api/v1/currencies/exchange_rates") + except Exception: + return + response = connection.getresponse() + if response.reason == httplib.responses[httplib.NOT_FOUND]: + return + + try: + response = json.loads(response.read()) + except Exception: + return + + quote_currencies = {} + try: + for r in response: + if r[:7] == "btc_to_": + quote_currencies[r[7:].upper()] = self._lookup_rate_cb(response, r) + with self.lock: + self.quote_currencies = quote_currencies + except KeyError: + pass + self.parent.set_currencies(quote_currencies) + def update_bc(self): try: t@@ -115,6 +144,9 @@ class Exchanger(threading.Thread): def _lookup_rate(self, response, quote_id): return decimal.Decimal(str(response[str(quote_id)]["15m"])) + def _lookup_rate_cb(self, response, quote_id): + return decimal.Decimal(str(response[str(quote_id)])) + class Plugin(BasePlugin): t@@ -129,7 +161,7 @@ class Plugin(BasePlugin): def __init__(self,a,b): BasePlugin.__init__(self,a,b) self.currencies = [self.config.get('currency', "EUR")] - self.exchanges = [self.config.get('use_exchange', "CoinDesk")] + self.exchanges = [self.config.get('use_exchange', "Blockchain")] def init(self): self.win = self.gui.main_window t@@ -200,6 +232,8 @@ class Plugin(BasePlugin): self.exchanger.update_bc() elif cur_request == "CoinDesk": self.exchanger.update_cd() + elif cur_request == "Coinbase": + self.exchanger.update_cb() set_currencies(combo) def set_currencies(combo):