Skip to content

Instantly share code, notes, and snippets.

@nilgradisnik
Last active December 18, 2015 00:38
Show Gist options
  • Save nilgradisnik/5697834 to your computer and use it in GitHub Desktop.
Save nilgradisnik/5697834 to your computer and use it in GitHub Desktop.
Bitstamp current price checker. Ubuntu unity appindicator.
nohup.out
*.png
#!/usr/bin/env python
# Bitstamp current price checker
# Nil Gradisnik <nil.gradisnik@gmail.com>
# Thanks to http://conjurecode.com/create-indicator-applet-for-ubuntu-unity-with-python/
import sys
import gtk
import gobject
import appindicator
import requests
import simplejson as json
APP_NAME = "Bitstamp indicator"
APP_VERSION = "1.1"
ICON_NAME = ""
PING_FREQUENCY = 30 # seconds
BITSTAMP_TICKER = "https://www.bitstamp.net/api/ticker/"
class BitstampPrice:
def __init__(self):
self.ind = appindicator.Indicator("bitstamp-indicator", ICON_NAME, appindicator.CATEGORY_APPLICATION_STATUS)
self.ind.set_status(appindicator.STATUS_ACTIVE)
self.ind.set_label("syncing", "$888.88")
self.menu_setup()
self.ind.set_menu(self.menu)
def menu_setup(self):
self.menu = gtk.Menu()
self.bid_item = gtk.MenuItem("Bid:")
self.bid_item.show()
self.high_item = gtk.MenuItem("High:")
self.high_item.show()
self.low_item = gtk.MenuItem("Low:")
self.low_item.show()
self.ask_item = gtk.MenuItem("Ask:")
self.ask_item.show()
self.volume_item = gtk.MenuItem("Volume:")
self.volume_item.show()
separator_item = gtk.SeparatorMenuItem()
separator_item.show()
preferences_item = gtk.MenuItem("Preferences")
preferences_item.connect("activate", self.preferences)
preferences_item.show()
about_item = gtk.MenuItem("About")
about_item.connect("activate", self.about)
about_item.show()
quit_item = gtk.MenuItem("Quit")
quit_item.connect("activate", self.quit)
quit_item.show()
self.menu.append(self.bid_item)
self.menu.append(self.high_item)
self.menu.append(self.low_item)
self.menu.append(self.ask_item)
self.menu.append(self.volume_item)
self.menu.append(separator_item)
self.menu.append(preferences_item)
self.menu.append(about_item)
self.menu.append(quit_item)
def main(self):
self.check_price()
self.ping_frequency = PING_FREQUENCY
self.timeout_id = gobject.timeout_add(self.ping_frequency * 1000, self.check_price)
gtk.main()
def check_price(self):
data = self.price_checker()
if data:
self.set_label(data["last"])
self.bid_item.get_child().set_text("Bid:\t\t"+"$"+data["bid"])
self.high_item.get_child().set_text("High:\t\t"+"$"+data["high"])
self.low_item.get_child().set_text("Low:\t\t"+"$"+data["low"])
self.ask_item.get_child().set_text("Ask:\t\t"+"$"+data["ask"])
vol = "%.2f" % float(data["volume"])
self.volume_item.get_child().set_text("Volume:\t"+vol+" BTC")
else:
self.set_label(None)
return True
def set_label(self, price):
self.ind.set_label("$"+price if price else "error")
def price_checker(self):
try:
res = requests.get(BITSTAMP_TICKER)
return res.json()
except Exception as e:
print e
return None
def about(self, widget):
about = gtk.AboutDialog()
about.set_name(APP_NAME)
about.set_comments("Simple Bitstamp price indicator")
about.set_copyright("Copyright (C) 2013 Nil Gradisnik")
about.set_version(APP_VERSION)
about.set_website("http://bitstamp.net")
about.set_authors(["Nil Gradisnik <nil.gradisnik@gmail.com>"])
about.set_logo_icon_name(ICON_NAME)
res = about.run()
if res == -4 or -6: # close events
about.destroy()
def preferences(self, widget):
dialog = gtk.Dialog(APP_NAME+" Preferences")
dialog.set_has_separator(True)
dialog.add_button("Close", 1)
label_refresh = gtk.Label("Refresh every")
label_refresh.show()
label_seconds = gtk.Label("seconds")
label_seconds.show()
spin = gtk.SpinButton()
spin.set_increments(1, 1)
spin.set_range(3, 120)
spin.set_value(self.ping_frequency)
spin.show()
hbox = gtk.HBox()
hbox.add(label_refresh)
hbox.add(spin)
hbox.add(label_seconds)
hbox.set_spacing(10)
hbox.set_border_width(20)
hbox.show()
dialog.vbox.add(hbox)
res = dialog.run()
if res == 1:
gobject.source_remove(self.timeout_id)
self.ping_frequency = spin.get_value_as_int()
self.timeout_id = gobject.timeout_add(self.ping_frequency * 1000, self.check_price)
dialog.destroy()
def quit(self, widget):
sys.exit(0)
if __name__ == "__main__":
indicator = BitstampPrice()
indicator.main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment