import urllib .request
import json
import bokeh.plotting
import datetime
def priceHistoryMinute( symbol , comparisonSymbol, limit, aggregate, exchange = "" ) :# limit = number of time intervals to return, values lower than 1 are treated as 1
url = "https://m...content-available-to-author-only...e.com/data/histominute?fsym={}&tsym={}&limit={}&aggregate={}" .format ( symbol .upper ( ) , comparisonSymbol.upper ( ) , limit, aggregate)
if exchange:
url += "&e={}" .format ( exchange)
response = urllib .request .urlopen ( url)
data = json.load ( response) [ "Data" ]
return data
data1 = priceHistoryMinute( "BTC" , "USD" , 2000 , 1 , "Coinbase" )
closingPrices1 = [ i[ "close" ] for i in data1]
times1 = [ datetime .datetime .fromtimestamp ( int ( i[ "time" ] ) ) for i in data1]
data2 = priceHistoryMinute( "LTC" , "USD" , 2000 , 1 , "Coinbase" )
closingPrices2 = [ j[ "close" ] for j in data2]
times2 = [ datetime .datetime .fromtimestamp ( int ( j[ "time" ] ) ) for j in data2]
graph = bokeh.plotting .figure ( plot_width = 700 , plot_height = 300 )
graph.line ( times1, closingPrices1, line_width = 2 )
graph.line ( times2, closingPrices2, line_width = 2 , line_color = "orange" )
bokeh.plotting .show ( graph)
aW1wb3J0IHVybGxpYi5yZXF1ZXN0CmltcG9ydCBqc29uCmltcG9ydCBib2tlaC5wbG90dGluZwppbXBvcnQgZGF0ZXRpbWUKCmRlZiBwcmljZUhpc3RvcnlNaW51dGUoc3ltYm9sLCBjb21wYXJpc29uU3ltYm9sLCBsaW1pdCwgYWdncmVnYXRlLCBleGNoYW5nZSA9ICIiKTojIGxpbWl0ID0gbnVtYmVyIG9mIHRpbWUgaW50ZXJ2YWxzIHRvIHJldHVybiwgdmFsdWVzIGxvd2VyIHRoYW4gMSBhcmUgdHJlYXRlZCBhcyAxCiAgICB1cmwgPSAiaHR0cHM6Ly9tLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5lLmNvbS9kYXRhL2hpc3RvbWludXRlP2ZzeW09e30mdHN5bT17fSZsaW1pdD17fSZhZ2dyZWdhdGU9e30iLmZvcm1hdChzeW1ib2wudXBwZXIoKSwgY29tcGFyaXNvblN5bWJvbC51cHBlcigpLCBsaW1pdCwgYWdncmVnYXRlKQogICAgaWYgZXhjaGFuZ2U6CiAgICAgICAgdXJsICs9ICImZT17fSIuZm9ybWF0KGV4Y2hhbmdlKQogICAgcmVzcG9uc2UgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHVybCkKICAgIGRhdGEgPSBqc29uLmxvYWQocmVzcG9uc2UpWyJEYXRhIl0KCiAgICByZXR1cm4gZGF0YQoKZGF0YTEgPSBwcmljZUhpc3RvcnlNaW51dGUoIkJUQyIsICJVU0QiLCAyMDAwLCAxLCAiQ29pbmJhc2UiKQpjbG9zaW5nUHJpY2VzMSA9IFtpWyJjbG9zZSJdIGZvciBpIGluIGRhdGExXQp0aW1lczEgPSBbZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChpbnQoaVsidGltZSJdKSkgZm9yIGkgaW4gZGF0YTFdCgpkYXRhMiA9IHByaWNlSGlzdG9yeU1pbnV0ZSgiTFRDIiwgIlVTRCIsIDIwMDAsIDEsICJDb2luYmFzZSIpCmNsb3NpbmdQcmljZXMyID0gW2pbImNsb3NlIl0gZm9yIGogaW4gZGF0YTJdCnRpbWVzMiA9IFtkYXRldGltZS5kYXRldGltZS5mcm9tdGltZXN0YW1wKGludChqWyJ0aW1lIl0pKSBmb3IgaiBpbiBkYXRhMl0KCmdyYXBoID0gYm9rZWgucGxvdHRpbmcuZmlndXJlKHBsb3Rfd2lkdGggPSA3MDAsIHBsb3RfaGVpZ2h0ID0gMzAwKQpncmFwaC5saW5lKHRpbWVzMSwgY2xvc2luZ1ByaWNlczEsIGxpbmVfd2lkdGggPSAyKQpncmFwaC5saW5lKHRpbWVzMiwgY2xvc2luZ1ByaWNlczIsIGxpbmVfd2lkdGggPSAyLCBsaW5lX2NvbG9yID0gIm9yYW5nZSIpCgpib2tlaC5wbG90dGluZy5zaG93KGdyYXBoKQ==