I went to try and throw together an implementation, but the urls you gave are protected, which means I couldn't debug the resulting code.
You might want to stick with commercial offerings, or hire somebody to get it working for you. Thanks, -- Raul On Wed, Jul 16, 2014 at 10:48 AM, Francisco Gonzalez Velasco < [email protected]> wrote: > Thanks for your help, > > I think this is far beyond my current abilities with J. > > Cheers > > > 2014-07-15 13:34 GMT+02:00 Joe Bogner <[email protected]>: > > > I researched this a bit and here is what I found: > > > > 1. oanda appears to use chunked encoding for streamed requests[1]. Curl > > will automatically handle this > > 2. There are several examples[2] available in other languages to learn > from > > 3. The examples will trigger a new record based on the presence of the > word > > instrument in the stream as a delimiter > > 4. J's web/gethttp will use curl or wget and will handle chunked encoding > > as a result, but I suspect it will wait for the connection to close > before > > returning any of the message > > > > The key decision to make in my opinion is whether to stream to a file or > to > > parse everything in memory > > > > Streaming to a file likely makes sense in this scenario. There can be > > streaming use cases where it's impractical to stream to a file because > the > > stream would consume all disk space -- then you'd have to come up with > some > > rolling file mechanism, which would not easily be handled by curl/wget as > > far as I know. > > > > Parsing in memory would require writing your own HTTP get utility. You > > could take a look at Henry Rich's webio[3] which implements much of what > > would be needed > > > > > > Assuming you'd stream to a file, you would need to fork off a curl with > the > > parameters to write to a file. See system/main/task.ijs and fork_jtask_ . > > You would then need J to continue and periodically read the file (in a > loop > > or use a timer). The file reading routine should probably remember the > file > > length the last time it read it and then seek to that position if the > file > > length has changed. You could then look for the delimiter as the other > > examples do. That routine should also check to see if the forked curl > > process is still alive and if not should probably restart it (this could > be > > because the network faulted or got disconnected for some other reason). > > > > That's probably how I would approach it. Does this help? > > > > > > [1] - http://developer.oanda.com/docs/v1/stream/ > > [2] - > > > > > https://github.com/oanda/java-api-streaming/blob/master/src/main/java/JavaApiStreaming.java > > , https://github.com/oanda/py-api-streaming/blob/master/streaming.py > > [3] - > > > > > http://www.jsoftware.com/jwiki/Scripts/Socket%20System?action=AttachFile&do=view&target=webio.ijs > > > > > > > > > > On Tue, Jul 15, 2014 at 1:00 AM, Francisco Gonzalez Velasco < > > [email protected]> wrote: > > > > > Hello, > > > > > > Thanks for your answer. > > > > > > I need an event for every record which comes in, and yes, I'd need to > see > > > some code writing streaming data to file, triggering an event and > > reacting > > > to an event. > > > > > > Cheers > > > > > > Francisco > > > > > > > > > 2014-07-15 6:43 GMT+02:00 Raul Miller <[email protected]>: > > > > > > > I think I'd stream to file, and have J busy wait (perhaps a second of > > > sleep > > > > while waiting, to keep load down) when it's caught up. > > > > > > > > Would you want an event for every record which comes in, or would it > > make > > > > more sense to skip forward to the most recent complete event when > more > > > data > > > > becomes available? Or would you want to experiment with this? > > > > > > > > Also, is that enough of an explanation? I could draft something up, I > > > > guess. (But not exactly right now.) > > > > > > > > Thanks, > > > > > > > > -- > > > > Raul > > > > > > > > > > > > On Tue, Jul 15, 2014 at 12:14 AM, Francisco Gonzalez Velasco < > > > > [email protected]> wrote: > > > > > > > > > Hello, my experience programming in J is very limited, so Inee your > > > > help... > > > > > > > > > > I´m using J64-602 to connect to a financial data source using their > > > REST > > > > > API, so I can get static data: > > > > > > > > > > To get the information about EUR USD in the last 5 days > > > > > (instrument=EUR_USD&granularity=D&count=5) I use this command: > > > > > > > > > > load 'web/gethttp' > > > > > > load 'convert/json' > > > > > > > > > > >>(<1 2){dec_json('-s -k -H "Authorization: Bearer > > > > > > > XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"') > > > > > gethttp' > > > > > > > > > > > > > > > > > > > > > https://api-fxpractice.oanda.com/v1/candles?instrument=EUR_USD&granularity=D&count=5&candleFormat=bidask > > > > > > ' > > > > > > > > > > > > > > > > > > > > > > > > > > > ┌───────────────────────────┬───────┬───────┬───────┬───────┬───────┬───────┬────────┬────────┬──────┬──────────┐ > > > > > > │time > │openBid│openAsk│highBid│highAsk│lowBid > > > > > > │lowAsk │closeBid│closeAsk│volume│complete │ > > > > > > > > > > > > > > > > > > > > > > > > > > > ├───────────────────────────┼───────┼───────┼───────┼───────┼───────┼───────┼────────┼────────┼──────┼──────────┤ > > > > > > > > > > > > > > > > > > > > > │2014-06-10T21:00:00.000000Z│1.35431│1.35472│1.35565│1.35576│1.35212│1.35224│1.353 > > > > > > │1.3532 │42528 │json_true │ > > > > > > > > > > > > > > > > > > > > > > > > > > > └───────────────────────────┴───────┴───────┴───────┴───────┴───────┴───────┴────────┴────────┴──────┴──────────┘ > > > > > > > > > > > > > > > > > > > > > > > > > > > ┌───────────────────────────┬───────┬───────┬───────┬───────┬───────┬───────┬────────┬────────┬──────┬──────────┐ > > > > > > │time > │openBid│openAsk│highBid│highAsk│lowBid > > > > > > │lowAsk │closeBid│closeAsk│volume│complete │ > > > > > > > > > > > > > > > > > > > > > > > > > > > ├───────────────────────────┼───────┼───────┼───────┼───────┼───────┼───────┼────────┼────────┼──────┼──────────┤ > > > > > > │2014-06-11T21:00:00.000000Z│1.353 │1.35319│1.35715│1.3573 > > > > > > │1.35117│1.35129│1.35494 │1.35536 │54799 │json_true │ > > > > > > > > > > > > > > > > > > > > > > > > > > > └───────────────────────────┴───────┴───────┴───────┴───────┴───────┴───────┴────────┴────────┴──────┴──────────┘ > > > > > > > > > > > > > > > > > > > > > > > > > > > ┌───────────────────────────┬───────┬───────┬───────┬───────┬───────┬───────┬────────┬────────┬──────┬──────────┐ > > > > > > │time > │openBid│openAsk│highBid│highAsk│lowBid > > > > > > │lowAsk │closeBid│closeAsk│volume│complete │ > > > > > > > > > > > > > > > > > > > > > > > > > > > ├───────────────────────────┼───────┼───────┼───────┼───────┼───────┼───────┼────────┼────────┼──────┼──────────┤ > > > > > > > > > > > > > > > > > > > > > │2014-06-12T21:00:00.000000Z│1.35511│1.35566│1.35786│1.35799│1.35204│1.35215│1.35374 > > > > > > │1.35468 │46632 │json_true │ > > > > > > > > > > > > > > > > > > > > > > > > > > > └───────────────────────────┴───────┴───────┴───────┴───────┴───────┴───────┴────────┴────────┴──────┴──────────┘ > > > > > > > > > > > > > > > > > > > > > > > > > > > ┌───────────────────────────┬───────┬───────┬───────┬───────┬───────┬───────┬────────┬────────┬──────┬──────────┐ > > > > > > │time > │openBid│openAsk│highBid│highAsk│lowBid > > > > > > │lowAsk │closeBid│closeAsk│volume│complete │ > > > > > > > > > > > > > > > > > > > > > > > > > > > ├───────────────────────────┼───────┼───────┼───────┼───────┼───────┼───────┼────────┼────────┼──────┼──────────┤ > > > > > > > > > > > > > > > > > > > > > │2014-06-15T21:00:00.000000Z│1.35391│1.35458│1.35791│1.35804│1.35124│1.35137│1.35733 > > > > > > │1.35747 │39482 │json_true │ > > > > > > > > > > > > > > > > > > > > > > > > > > > └───────────────────────────┴───────┴───────┴───────┴───────┴───────┴───────┴────────┴────────┴──────┴──────────┘ > > > > > > > > > > > > > > > > > > > > > > > > > > > ┌───────────────────────────┬───────┬───────┬───────┬───────┬───────┬───────┬────────┬────────┬──────┬──────────┐ > > > > > > │time > │openBid│openAsk│highBid│highAsk│lowBid > > > > > > │lowAsk │closeBid│closeAsk│volume│complete │ > > > > > > > > > > > > > > > > > > > > > > > > > > > ├───────────────────────────┼───────┼───────┼───────┼───────┼───────┼───────┼────────┼────────┼──────┼──────────┤ > > > > > > │2014-06-16T21:00:00.000000Z│1.35716│1.3573 > > > > > > │1.35866│1.35878│1.35526│1.35538│1.35566 │1.35577 │10173 > > │json_false│ > > > > > > > > > > > > > > > > > > > > > > > > > > > └───────────────────────────┴───────┴───────┴───────┴───────┴───────┴───────┴────────┴────────┴──────┴──────────┘ > > > > > > > > > > > > > > > > > > > > > Now I need to know how to use streaming data... Data will be > > delivered > > > in > > > > > real time. > > > > > > > > > > I would use last information arrived and store data to form a > > database. > > > > > > > > > > The command to get the streaming data is: > > > > > > > > > > ('-s -k -H "Authorization: Bearer > > > > > XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"') > > > > > gethttp'https://stream-fxpractice.oanda.com > > > > > /v1/prices?accountId=abcdefg&instruments=EUR_USD' > > > > > > > > > > > > > > > When I use curl in the console to get streaming data the command > is: > > > > > > > > > > C:\Users\Francisco>curl -k -H "Authorization: Bearer > > > > > XXXXXXXXXXXXXXXXXXXXXXX > > > > > > XXXXXXXX-YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY" " > > > > > > https://stream-fxpractice.oanda.com/v1/prices?accountId= > > > > > > < > > > > > > > > > > > > > > > https://stream-fxpractice.oanda.com/v1/prices?accountId=1125870&instruments=EUR_USD > > > > > > > > > > > > abcdefg&instruments=EUR_USD > > > > > > < > > > > > > > > > > > > > > > https://www.google.com/url?q=https%3A%2F%2Fstream-fxpractice.oanda.com%2Fv1%2Fprices%3FaccountId%3D1125870%26instruments%3DEUR_USD&sa=D&sntz=1&usg=AFQjCNEQy2PxdhBR4bYOLWuHEZSp37Xa-A > > > > > > > > > > > > " > > > > > > > > > > > > > > > And the incoming data is: > > > > > > > > > > > > > > > > > > > > > > > > > {"instrument":"EUR_USD","time":"2014-06-17T08:50:11.313886Z","bid":1.35744,"ask":1.35757} > > > > > > > > > > > > > > > > > > > > > > > > > > > {"instrument":"EUR_USD","time":"2014-06-17T08:50:11.413276Z","bid":1.35745,"ask":1.35757} > > > > > > > > > > > > > > > > > > > > > > > > > > > {"instrument":"EUR_USD","time":"2014-06-17T08:50:11.423912Z","bid":1.35743,"ask":1.35755} > > > > > > > > > > > > > > > > > > > > > > > > > > > {"instrument":"EUR_USD","time":"2014-06-17T08:50:11.518162Z","bid":1.35744,"ask":1.35755} > > > > > > > > > > > > > > > > > > > > > > > > > > > {"instrument":"EUR_USD","time":"2014-06-17T08:50:11.618055Z","bid":1.35743,"ask":1.35756} > > > > > > > > > > > > > > > > > > > > > > > > > > > {"instrument":"EUR_USD","time":"2014-06-17T08:50:11.691201Z","bid":1.35744,"ask":1.35756} > > > > > > > > > > > > > > > > > > > > > > > > > > > {"instrument":"EUR_USD","time":"2014-06-17T08:50:11.824403Z","bid":1.35745,"ask":1.35756} > > > > > > > > > > > > > > > > > > > > > > > > > > > {"instrument":"EUR_USD","time":"2014-06-17T08:50:12.250563Z","bid":1.35745,"ask":1.35758} > > > > > > {"heartbeat":{"time":"2014-06-17T08:50:12.547586Z"}} > > > > > > > > > > > > > > > > > > > > > > > > > > > {"instrument":"EUR_USD","time":"2014-06-17T08:50:12.611163Z","bid":1.35746,"ask":1.35758} > > > > > > > > > > > > > > > > > > > > > > > > > > > {"instrument":"EUR_USD","time":"2014-06-17T08:50:13.168306Z","bid":1.35746,"ask":1.35757} > > > > > > > > > > > > > > > > > > > > > > > > > > > {"instrument":"EUR_USD","time":"2014-06-17T08:50:13.527477Z","bid":1.35745,"ask":1.35757} > > > > > > > > > > > > > > > > > > > > > > > > > > > {"instrument":"EUR_USD","time":"2014-06-17T08:50:14.009987Z","bid":1.35746,"ask":1.35756} > > > > > > > > > > > > > > > > > > > > > > > > > > > {"instrument":"EUR_USD","time":"2014-06-17T08:50:14.109158Z","bid":1.35745,"ask":1.35757} > > > > > > > > > > > > > > > > > > > > > > > > > > > {"instrument":"EUR_USD","time":"2014-06-17T08:50:14.228386Z","bid":1.35743,"ask":1.35755} > > > > > > > > > > > > > > > > > > > > > > > > > > > {"instrument":"EUR_USD","time":"2014-06-17T08:50:14.314567Z","bid":1.35744,"ask":1.35755} > > > > > > > > > > > > > > > > > > > > > > > > > > > {"instrument":"EUR_USD","time":"2014-06-17T08:50:14.912960Z","bid":1.35742,"ask":1.35753} > > > > > > {"heartbeat":{"time":"2014-06-17T08:50:15.036929Z"}} > > > > > > > > > > > > > > > > > > > > > > > > > > > {"instrument":"EUR_USD","time":"2014-06-17T08:50:15.214964Z","bid":1.3574,"ask":1.35751} > > > > > > > > > > > > > > > Token and account number have been changed > > > > > > > > > > > > > > > 1) I'd like to know how to have a variable holding the most recent > > data > > > > > sent by the data provider. And an event triggering when a new value > > > > arrives > > > > > so actions can be taken depending on the values. > > > > > 2) I'd like to write the incoming data to disk (as a csv file, > > JDB,...) > > > > > for persistance. > > > > > > > > > > Cheers > > > > > > > > > > Francisco > > > > > > > ---------------------------------------------------------------------- > > > > > For information about J forums see > > http://www.jsoftware.com/forums.htm > > > > > ---------------------------------------------------------------------- > > > > For information about J forums see > http://www.jsoftware.com/forums.htm > > > ---------------------------------------------------------------------- > > > For information about J forums see http://www.jsoftware.com/forums.htm > > > > > ---------------------------------------------------------------------- > > For information about J forums see http://www.jsoftware.com/forums.htm > > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
