<center></center> --- #### Repository https://github.com/python #### What will I learn - Basics of websockets - Subscribing to data streams - Processing messages - Return top bid/ask #### Requirements - Python 3.7.2 - Pipenv - websocket-client #### Difficulty - basic --- ### Tutorial #### Preface Websockets allow for real time updates while putting less stress on the servers than API calls would. They are especially useful when data is updated frequently, like trades and the orderbooks on crypto currency exchanges. #### Setup Download the files from Github and install the virtual environment ``` $ cd ~/ $ git clone https://github.com/Juless89/tutorials-websockets $ cd tutorials-websockets $ pipenv install $ pipenv shell $ cd part_1 ``` #### Basics of websockets Depending on which websocket one wants to connect to and how the serverside socket has been implemented there are multiple variations. However, in general when connecting to a websocket the following functions are essential. These are `on_message`, `on_error`, `on_close` and `on_open`. When connecting to a websocket it is recommended to read the documentation of the service that is providing the websocket. An object `WebSocketApp` is created, the functions are passed to overwrite the generic functions and the `url` is the endpoint of the service. Depending on what type of websocket one is connecting to these functions can be changed accordingly. ``` import websocket def on_message(ws, message): print(message) def on_error(ws, error): print(error) def on_close(ws): print("### closed ###") def on_open(ws): print('Connected to websocket') if __name__ == "__main__": ws = websocket.WebSocketApp( url="wss://stream.binance.com:9443/ws/steembtc@depth20", on_message=on_message, on_error=on_error, on_close=on_close, on_open=on_open ) ws.run_forever() ``` `on_open` gets called immediately after creating the connection, before receiving any messages. When additional parameters are required this is where they get set. `on_message` deals with all messages received through the websocket, extracting and processing data should be implemented here. `on_error` gets called when an error occurs, error handling should be implemented here. `on_close` get called when the connection gets closed, either by the client or the server. `run_forever` makes sure the connection stays alive. #### Subscribing to data streams This tutorial will look to connecting to two different exchanges via websockets and get a live data streams of the STEEM orderbook. The exchanges are Binance and Huobi and both use a different technique to subscribe to different data streams. Always read the documentation provided by the websocket service provider. <center></center> [Binance documentation](https://github.com/binance-exchange/binance-official-api-docs/blob/master/web-socket-streams.md) Binance uses the url to differentiate between data streams. For this tutorial a stream will be set up for the partial book depth. Taken directly from the documentation: ``` The base endpoint is: wss://stream.binance.com:9443 Raw streams are accessed at /ws/<streamName> Top <levels> bids and asks, pushed every second. Valid <levels> are 5, 10, or 20. Stream Name: <symbol>@depth<levels> ``` Connecting to the steembtc partial book depth for 20 levels is then achieved by connecting to the url: `wss://stream.binance.com:9443/ws/steembtc@depth20`. <center></center> --- <center></center> [Huobi documentation](https://github.com/huobiapi/API_Docs_en/wiki/Huobi-API) Huobi uses a subscribe based system. Where the client must subscribe to data streams after the connection has been made. Taken from their documentation: ``` SSL Websocket Connection wss://api.huobi.pro/ws Subscribe To receive data you have to send a "sub" message first. Market Depth market.$symbol.depth.$type $type :{ step0, step1, step2, step3, step4, step5 } (depths 0-5) //request { "sub": "topic to sub", "id": "id generate by client" } ``` Subscribing to the level 0 market depth of steembtc is achieved by connection to `wss://api.huobi.pro/ws` and then sending the message which contains `"sub": "market.eosusdt.depth.step0"`. Sending the message is done by using `send()`. The dict has to be converted to a string first, which is done by using `dumps()` ``` from json import dumps def on_open(ws): print('Connected to websocket') params = {"sub": "market.steembtc.depth.step0", "id": "id1"} ws.send(dumps(params)) ``` Will return the following reply on success: ``` {'id': 'id1', 'status': 'ok', 'subbed': 'market.steembtc.depth.step0', 'ts': 1553688645071} ``` <center></center> #### Processing messages Every service is different and in most cases return data in a different format, noting again the importance of the documentation. Binance ``` Payload: { "lastUpdateId": 160, // Last update ID "bids": [ // Bids to be updated [ "0.0024", // Price level to be updated "10" // Quantity ] ], "asks": [ // Asks to be updated [ "0.0026", // Price level to be updated "100" // Quantity ] ] } ``` All data gets returned as a string and has to be converted to a dict to access. This is done by using `loads()` from the JSON library. ``` def on_message(self, message): print(loads(message)) print() ``` Huobi returns the data encoded and requires one additional step. ``` import gzip def on_message(self, message): print(loads(gzip.decompress(message).decode('utf-8'))) print() ``` Data format: ``` { 'ch': 'market.steembtc.depth.step0', 'ts': 1553688645047, 'tick': { 'bids': [ [0.00010959, 736.0], [0.00010951, 372.0], [0.0001095, 56.0], [0.00010915, 1750.0], [0.00010903, 371.77], [0.00010891, 1684.65], ], 'asks': [ [0.00011009, 368.0], [0.00011025, 1575.36], [0.00011039, 919.0], [0.00011054, 92.0], [0.00011055, 68.85], [0.00011077, 736.77], ], 'ts': 1553688645004, 'version': 100058128375 } } ``` In addition Huobi also sends pings to make sure the client is still online. ``` {'ping': 1553688793701} ``` When processing messages from Huobi this has to be filtered out. #### Return top bid/ask For Binance returning the top bid/ask is straight forward as the messages always have the same format. ``` def on_message(self, message): data = loads(message) bid = data['bids'][0] ask = data['asks'][0] print(f'Top bid: {bid} top ask: {ask}') ``` Due to the ping messages doing the same for Huobi requires one additional step. ``` def on_message(self, message): data = loads(gzip.decompress(message).decode('utf-8')) if 'tick' in data: bid = data['tick']['bids'][0] ask = data['tick']['asks'][0] print(f'Top bid: {bid} top ask: {ask}') ``` #### Running the code `python binance.py` <center></center> `python huobi.py` <center></center> --- The code for this tutorial can be found on [Github](https://github.com/Juless89/tutorials-websockets)! This tutorial was written by @juliank.
author | steempytutorials | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
permlink | part-1-connecting-to-steem-orderbook-stream-via-websockets-on-different-exchanges | ||||||||||||
category | utopian-io | ||||||||||||
json_metadata | {"tags":["utopian-io","tutorials","steem","python","websockets"],"app":"steem-plus-app"} | ||||||||||||
created | 2019-03-27 12:49:36 | ||||||||||||
last_update | 2019-03-27 12:49:36 | ||||||||||||
depth | 0 | ||||||||||||
children | 6 | ||||||||||||
last_payout | 2019-04-03 12:49:36 | ||||||||||||
cashout_time | 1969-12-31 23:59:59 | ||||||||||||
total_payout_value | 30.242 HBD | ||||||||||||
curator_payout_value | 10.137 HBD | ||||||||||||
pending_payout_value | 0.000 HBD | ||||||||||||
promoted | 0.000 HBD | ||||||||||||
body_length | 8,062 | ||||||||||||
author_reputation | 31,094,047,689,691 | ||||||||||||
root_title | "Part 1: Connecting to STEEM orderbook stream via websockets on different exchanges" | ||||||||||||
beneficiaries |
| ||||||||||||
max_accepted_payout | 100,000.000 HBD | ||||||||||||
percent_hbd | 10,000 | ||||||||||||
post_id | 82,042,236 | ||||||||||||
net_rshares | 63,333,962,304,920 | ||||||||||||
author_curate_reward | "" |
voter | weight | wgt% | rshares | pct | time |
---|---|---|---|---|---|
tombstone | 0 | 4,154,048,789,096 | 16.66% | ||
jza | 0 | 40,689,871,272 | 100% | ||
ace108 | 0 | 16,178,308,165 | 1% | ||
rufans | 0 | 21,115,144,438 | 100% | ||
abh12345 | 0 | 12,371,528,970 | 2.08% | ||
techslut | 0 | 86,741,090,304 | 20% | ||
minersean | 0 | 7,082,309,471 | 75% | ||
erikaflynn | 0 | 14,101,972,833 | 35% | ||
miniature-tiger | 0 | 101,996,656,377 | 50% | ||
juliank | 0 | 6,452,335,711 | 100% | ||
aleister | 0 | 7,141,753,269 | 15% | ||
jakipatryk | 0 | 14,518,614,532 | 50% | ||
helo | 0 | 100,437,356,527 | 38.62% | ||
walnut1 | 0 | 31,354,128,850 | 20.83% | ||
lorenzor | 0 | 1,191,899,761 | 10.41% | ||
suesa | 0 | 122,067,105,345 | 25% | ||
haiyangdeperci | 0 | 7,059,954,645 | 20% | ||
bubke | 0 | 369,423,378,439 | 100% | ||
chrone | 0 | 19,964,035,349 | 100% | ||
drorion | 0 | 1,563,863,887 | 100% | ||
codingdefined | 0 | 55,730,207,449 | 38.62% | ||
tsoldovieri | 0 | 1,502,273,967 | 10.41% | ||
luciancovaci | 0 | 3,574,546,250 | 100% | ||
bachuslib | 0 | 18,986,203,630 | 100% | ||
untapentuoreja | 0 | 449,283,224 | 100% | ||
tykee | 0 | 12,189,933,287 | 20.83% | ||
steemitri | 0 | 144,984,338,143 | 100% | ||
sciencevienna | 0 | 23,983,014,194 | 100% | ||
iamphysical | 0 | 14,819,844,910 | 90% | ||
felixrodriguez | 0 | 644,577,943 | 7.29% | ||
leir | 0 | 2,166,146,941 | 50% | ||
azulear | 0 | 453,356,679 | 100% | ||
silviu93 | 0 | 5,312,527,165 | 20.83% | ||
dakeshi | 0 | 1,232,232,895 | 20.83% | ||
scorer | 0 | 120,780,360,940 | 100% | ||
espoem | 0 | 94,296,403,016 | 46.04% | ||
mcfarhat | 0 | 30,063,469,874 | 15.44% | ||
vishalsingh4997 | 0 | 175,532,874 | 20.83% | ||
vitae | 0 | 23,880,758,508 | 100% | ||
palerider | 0 | 277,094,737 | 100% | ||
elear | 0 | 6,480,941,742 | 41.67% | ||
zoneboy | 0 | 20,423,107,537 | 100% | ||
carlos84 | 0 | 1,231,481,782 | 20.83% | ||
che-shyr | 0 | 976,884,711 | 50% | ||
utopian-io | 0 | 55,685,028,849,093 | 41.67% | ||
jaff8 | 0 | 96,683,212,740 | 38.62% | ||
newsrx | 0 | 84,898,428 | 7.07% | ||
mytechtrail | 0 | 1,394,877,371 | 50% | ||
amestyj | 0 | 916,588,899 | 20.83% | ||
losyrax | 0 | 84,773,748 | 100% | ||
mcyusuf | 0 | 2,732,443,333 | 20.83% | ||
alexs1320 | 0 | 39,194,071,651 | 25% | ||
gentleshaid | 0 | 35,227,780,649 | 41.67% | ||
ivymalifred | 0 | 365,975,494 | 10.41% | ||
ennyta | 0 | 155,839,219 | 10.41% | ||
amosbastian | 0 | 145,641,332,975 | 38.62% | ||
eliaschess333 | 0 | 2,026,771,244 | 10.41% | ||
asaj | 0 | 17,434,844,965 | 100% | ||
scienceangel | 0 | 65,758,105,188 | 50% | ||
portugalcoin | 0 | 15,488,591,253 | 15% | ||
mattockfs | 0 | 42,525,360,965 | 100% | ||
sargoon | 0 | 1,307,509,653 | 20.83% | ||
tobias-g | 0 | 146,142,554,537 | 38% | ||
miguelangel2801 | 0 | 125,873,256 | 10.41% | ||
steempytutorials | 0 | 9,115,395,745 | 100% | ||
didic | 0 | 31,258,371,194 | 25% | ||
emiliomoron | 0 | 792,018,379 | 10.41% | ||
ulisesfl17 | 0 | 1,791,027,798 | 100% | ||
arac | 0 | 922,159,459 | 100% | ||
endopediatria | 0 | 105,127,680 | 4.16% | ||
fego | 0 | 30,191,050,632 | 38.62% | ||
reazuliqbal | 0 | 41,827,196,133 | 25% | ||
tomastonyperez | 0 | 2,402,823,992 | 10.41% | ||
elvigia | 0 | 2,115,088,512 | 10.41% | ||
jubreal | 0 | 3,181,841,881 | 41.67% | ||
adamada | 0 | 8,735,838,698 | 25% | ||
yu-stem | 0 | 7,735,728,798 | 25% | ||
luiscd8a | 0 | 1,572,672,443 | 80% | ||
statsexpert | 0 | 8,748,310,726 | 100% | ||
geadriana | 0 | 101,710,486 | 3.12% | ||
elpdl | 0 | 72,215,622 | 20.83% | ||
josedelacruz | 0 | 1,008,721,142 | 10.41% | ||
joseangelvs | 0 | 295,307,462 | 20.83% | ||
viannis | 0 | 294,817,232 | 10.41% | ||
rollthedice | 0 | 4,457,465,841 | 41.67% | ||
erickyoussif | 0 | 574,950,967 | 20.83% | ||
ryuna.siege | 0 | 208,856,568 | 100% | ||
fw206 | 0 | 42,993,232,096 | 100% | ||
beetlevc | 0 | 1,309,565,742 | 2% | ||
rhampagoe | 0 | 1,801,802,192 | 2.5% | ||
anaestrada12 | 0 | 4,018,183,757 | 20.83% | ||
rizzopablo | 0 | 440,972,923 | 100% | ||
joelsegovia | 0 | 743,968,510 | 10.41% | ||
bflanagin | 0 | 3,467,141,585 | 20.83% | ||
ubaldonet | 0 | 3,410,262,769 | 65% | ||
dalz | 0 | 4,614,772,306 | 16.66% | ||
ulockblock | 0 | 20,739,793,558 | 6.61% | ||
amart29 | 0 | 349,637,444 | 4.16% | ||
jk6276 | 0 | 6,844,906,352 | 20.83% | ||
reinaseq | 0 | 1,242,524,060 | 20.83% | ||
luc.real | 0 | 213,206,324 | 100% | ||
rubenp | 0 | 72,336,811 | 20.83% | ||
jeferc | 0 | 71,510,654 | 20.83% | ||
dssdsds | 0 | 2,386,962,729 | 20.83% | ||
jayplayco | 0 | 74,947,909,887 | 20.83% | ||
cryptouno | 0 | 520,068,951 | 5% | ||
fran.frey | 0 | 341,079,711 | 10.41% | ||
mops2e | 0 | 544,231,709 | 36.83% | ||
jrevilla | 0 | 97,182,458 | 20.83% | ||
alfonzoasdrubal | 0 | 74,453,603 | 20.83% | ||
stem-espanol | 0 | 13,687,630,754 | 20.83% | ||
zuur | 0 | 12,422,713,150 | 100% | ||
minminlou | 0 | 198,260,162 | 1.75% | ||
steem-ua | 0 | 716,226,278,161 | 7.07% | ||
giulyfarci52 | 0 | 180,876,478 | 10.41% | ||
kaczynski | 0 | 171,781,995 | 100% | ||
steemexpress | 0 | 1,574,356,755 | 2.76% | ||
edgarare1 | 0 | 1,093,213,784 | 5% | ||
alex-hm | 0 | 1,234,837,842 | 50% | ||
wilmer14molina | 0 | 71,919,968 | 20.83% | ||
moyam | 0 | 71,611,801 | 20.83% | ||
balcej | 0 | 71,618,671 | 20.83% | ||
anaka | 0 | 71,893,216 | 20.83% | ||
benhurg | 0 | 71,656,885 | 20.83% | ||
judisa | 0 | 72,027,763 | 20.83% | ||
juddarivv | 0 | 71,660,326 | 20.83% | ||
bluesniper | 0 | 272,606,463 | 0.1% | ||
mrsbozz | 0 | 675,056,081 | 25% | ||
ascorphat | 0 | 2,028,290,268 | 2.5% | ||
circa | 0 | 166,062,215,880 | 100% | ||
rewarding | 0 | 5,351,404,128 | 70.83% | ||
jk6276.mons | 0 | 1,326,739,979 | 41.67% | ||
jaxson2011 | 0 | 1,550,931,762 | 41.67% | ||
supu | 0 | 29,435,700,125 | 3.5% | ||
eternalinferno | 0 | 193,022,095 | 41.67% | ||
simplepim | 0 | 500,251,904 | 100% | ||
ettorat | 0 | 500,300,115 | 100% | ||
erari | 0 | 500,309,987 | 100% | ||
towimindu | 0 | 500,256,493 | 100% | ||
gears5 | 0 | 500,219,426 | 100% | ||
ofenerith | 0 | 500,252,356 | 100% | ||
yundet | 0 | 500,215,054 | 100% | ||
runos | 0 | 500,203,457 | 100% | ||
etambeese | 0 | 500,241,141 | 100% | ||
rasse2 | 0 | 500,140,865 | 100% | ||
rorerni | 0 | 500,239,486 | 100% | ||
sutrisuti | 0 | 500,186,970 | 100% | ||
exatoup | 0 | 500,210,139 | 100% | ||
sartanond | 0 | 500,170,144 | 100% | ||
ullout | 0 | 500,167,770 | 100% | ||
ledsond | 0 | 500,213,827 | 100% | ||
ezesting | 0 | 500,181,732 | 100% | ||
arale4 | 0 | 500,175,472 | 100% | ||
eliler | 0 | 500,154,199 | 100% | ||
weeduni | 0 | 500,184,445 | 100% | ||
vuecrof | 0 | 500,160,029 | 100% | ||
owedisisa | 0 | 500,152,913 | 100% | ||
athererer | 0 | 500,117,524 | 100% | ||
hupon | 0 | 500,083,955 | 100% | ||
yuiglence | 0 | 500,111,861 | 100% | ||
engim | 0 | 500,149,264 | 100% | ||
ecofaci | 0 | 500,189,756 | 100% | ||
zidot | 0 | 500,073,315 | 100% | ||
idict | 0 | 500,138,292 | 100% | ||
rendanga | 0 | 500,150,820 | 100% | ||
saitoupli | 0 | 500,084,601 | 100% | ||
reror | 0 | 500,082,237 | 100% | ||
utopian.trail | 0 | 16,139,656,247 | 41.67% | ||
gustavovivas | 0 | 35,365,227 | 100% | ||
sphinx1 | 0 | 403,931,584 | 100% |
Just posted something about python as well cool. Posted using [Partiko iOS](https://partiko.app/referral/chronocrypto)
author | chronocrypto |
---|---|
permlink | chronocrypto-re-steempytutorials-part-1-connecting-to-steem-orderbook-stream-via-websockets-on-different-exchanges-20190327t171509841z |
category | utopian-io |
json_metadata | {"app":"partiko","client":"ios"} |
created | 2019-03-27 17:15:09 |
last_update | 2019-03-27 17:15:09 |
depth | 1 |
children | 0 |
last_payout | 2019-04-03 17:15:09 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.014 HBD |
curator_payout_value | 0.005 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 120 |
author_reputation | 380,490,357,539,783 |
root_title | "Part 1: Connecting to STEEM orderbook stream via websockets on different exchanges" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 82,053,614 |
net_rshares | 30,540,921,100 |
author_curate_reward | "" |
voter | weight | wgt% | rshares | pct | time |
---|---|---|---|---|---|
livingwill | 0 | 30,540,921,100 | 100% |
Thank you for your contribution @steempytutorials. After analyzing your tutorial we suggest the following: - The subject of your tutorial is very interesting. - Nice work on the explanations of your code, although adding a bit more comments to the code can be helpful as well. - In my opinion the results that you present in the console looks great in the tutorial and gives an idea of what you are explained throughout the contribution. Thank you for your work in developing this tutorial. Your contribution has been evaluated according to [Utopian policies and guidelines](https://join.utopian.io/guidelines), as well as a predefined set of questions pertaining to the category. To view those questions and the relevant answers related to your post, [click here](https://review.utopian.io/result/8/2-1-1-2-1-2-1-3-). ---- Need help? Chat with us on [Discord](https://discord.gg/uTyJkNm). [[utopian-moderator]](https://join.utopian.io/)
author | portugalcoin |
---|---|
permlink | re-steempytutorials-part-1-connecting-to-steem-orderbook-stream-via-websockets-on-different-exchanges-20190327t211746752z |
category | utopian-io |
json_metadata | {"tags":["utopian-io"],"users":["steempytutorials"],"links":["https://join.utopian.io/guidelines","https://review.utopian.io/result/8/2-1-1-2-1-2-1-3-","https://discord.gg/uTyJkNm","https://join.utopian.io/"],"app":"steemit/0.1"} |
created | 2019-03-27 21:17:48 |
last_update | 2019-03-27 21:17:48 |
depth | 1 |
children | 2 |
last_payout | 2019-04-03 21:17:48 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 9.626 HBD |
curator_payout_value | 3.062 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 946 |
author_reputation | 598,946,067,035,209 |
root_title | "Part 1: Connecting to STEEM orderbook stream via websockets on different exchanges" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 82,062,231 |
net_rshares | 18,950,261,990,092 |
author_curate_reward | "" |
voter | weight | wgt% | rshares | pct | time |
---|---|---|---|---|---|
codingdefined | 0 | 27,026,736,468 | 19.77% | ||
espoem | 0 | 29,342,068,927 | 15% | ||
utopian-io | 0 | 18,715,957,091,479 | 13.21% | ||
jaff8 | 0 | 46,364,561,961 | 19.77% | ||
emrebeyler | 0 | 0 | 0.01% | ||
lostmine27 | 0 | 9,701,289,479 | 23% | ||
amosbastian | 0 | 70,354,544,734 | 19.77% | ||
steempytutorials | 0 | 2,952,775,648 | 100% | ||
sudefteri | 0 | 6,044,745,938 | 100% | ||
reazuliqbal | 0 | 13,511,939,931 | 8% | ||
statsexpert | 0 | 8,357,835,237 | 100% | ||
ulockblock | 0 | 12,095,845,570 | 3.87% | ||
curbot | 0 | 2,523,619,434 | 100% | ||
ascorphat | 0 | 2,068,756,146 | 2.5% | ||
curatortrail | 0 | 287,808,826 | 95% | ||
holydog | 0 | 3,392,198,813 | 100% | ||
cleanit | 0 | 280,171,501 | 55% |
Thanks as always for the feedback!
author | steempytutorials |
---|---|
permlink | re-portugalcoin-re-steempytutorials-part-1-connecting-to-steem-orderbook-stream-via-websockets-on-different-exchanges-20190330t134531432z |
category | utopian-io |
json_metadata | {"tags":["utopian-io"],"app":"steemit/0.1"} |
created | 2019-03-30 13:45:33 |
last_update | 2019-03-30 13:45:33 |
depth | 2 |
children | 0 |
last_payout | 2019-04-06 13:45:33 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 34 |
author_reputation | 31,094,047,689,691 |
root_title | "Part 1: Connecting to STEEM orderbook stream via websockets on different exchanges" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 82,201,849 |
net_rshares | 0 |
Thank you for your review, @portugalcoin! Keep up the good work!
author | utopian-io |
---|---|
permlink | re-re-steempytutorials-part-1-connecting-to-steem-orderbook-stream-via-websockets-on-different-exchanges-20190327t211746752z-20190330t150612z |
category | utopian-io |
json_metadata | "{"app": "beem/0.20.17"}" |
created | 2019-03-30 15:06:15 |
last_update | 2019-03-30 15:06:15 |
depth | 2 |
children | 0 |
last_payout | 2019-04-06 15:06:15 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 64 |
author_reputation | 152,955,367,999,756 |
root_title | "Part 1: Connecting to STEEM orderbook stream via websockets on different exchanges" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 82,204,868 |
net_rshares | 0 |
#### Hi @steempytutorials! Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation! Your post is eligible for our upvote, thanks to our collaboration with @utopian-io! **Feel free to join our [@steem-ua Discord server](https://discord.gg/KpBNYGz)**
author | steem-ua |
---|---|
permlink | re-part-1-connecting-to-steem-orderbook-stream-via-websockets-on-different-exchanges-20190327t221842z |
category | utopian-io |
json_metadata | "{"app": "beem/0.20.19"}" |
created | 2019-03-27 22:18:42 |
last_update | 2019-03-27 22:18:42 |
depth | 1 |
children | 0 |
last_payout | 2019-04-03 22:18:42 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 295 |
author_reputation | 23,214,230,978,060 |
root_title | "Part 1: Connecting to STEEM orderbook stream via websockets on different exchanges" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 82,064,195 |
net_rshares | 0 |
Hey, @steempytutorials! **Thanks for contributing on Utopian**. We’re already looking forward to your next contribution! **Get higher incentives and support Utopian.io!** Simply set @utopian.pay as a 5% (or higher) payout beneficiary on your contribution post (via [SteemPlus](https://chrome.google.com/webstore/detail/steemplus/mjbkjgcplmaneajhcbegoffkedeankaj?hl=en) or [Steeditor](https://steeditor.app)). **Want to chat? Join us on Discord https://discord.gg/h52nFrV.** <a href='https://steemconnect.com/sign/account-witness-vote?witness=utopian-io&approve=1'>Vote for Utopian Witness!</a>
author | utopian-io |
---|---|
permlink | re-part-1-connecting-to-steem-orderbook-stream-via-websockets-on-different-exchanges-20190327t224810z |
category | utopian-io |
json_metadata | "{"app": "beem/0.20.17"}" |
created | 2019-03-27 22:48:12 |
last_update | 2019-03-27 22:48:12 |
depth | 1 |
children | 0 |
last_payout | 2019-04-03 22:48:12 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 598 |
author_reputation | 152,955,367,999,756 |
root_title | "Part 1: Connecting to STEEM orderbook stream via websockets on different exchanges" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 82,065,103 |
net_rshares | 0 |