Hjälp med feeds i Java

Added by Sebastian about 8 years ago

Hej,

sitter och kollar på hur jag ska få tag på feeds i Java, jag lyckas logga in och få tag i alla POST okej. Men sen när jag försöker få feeds så går jag bet. Förmodligen tänker jag fel någonstans, vore tacksam om ni kunde kolla på koden nedan:

public void setupPublicFeed() {
SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket sslsocket;
String publicAdress = "";
int publicPort = 0;
try {
publicAdress = pubf.getString("hostname");
publicPort = pubf.getInt("port");
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
sslsocket = (SSLSocket) sslsocketfactory.createSocket(publicAdress,
publicPort);
InputStream inputstream = sslsocket.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(
inputstream);
BufferedReader bufferedreader = new BufferedReader(
inputstreamreader);
OutputStream outputstream = sslsocket.getOutputStream();
OutputStreamWriter outputstreamwriter = new OutputStreamWriter(
outputstream);
BufferedWriter bufferedwriter = new BufferedWriter(
outputstreamwriter);
bufferedwriter.write("{\"cmd\":\"login\", \"args\":{ \"session_key\":"
+ sessionKey + ", \"service\":\"NEXTAPI\"\n"); //logga in på feeds, avslutas med ascii 10
bufferedwriter.write("{\"cmd\":\"subscribe\", \"args\":{ \"t\":"
+ "price" + ", \"i\":\"1869\", \"m\":\"30\"\n"); //prenemurera enligt exempel, avslutas med ascii 10
System.out.println("Före");
String string = "";
while (true) {
System.out.println("true");
string = bufferedreader.readLine();
if(string != null){
System.out.println("!null");
System.out.println(inputstreamreader.read());
System.out.println(string);
System.out.println(sslsocket.getInputStream().read());
} else{
System.out.println("null");
}
}
(plus lite ta hand om exceptions, men det kommer inga exceptions)

Outputen är:
true
null
true
null -> evigheter.

Uppskattar alla idéer på vad som kan vara fel.

Tackar på förhand,
Sebastian


Replies (7)

RE: Hjälp med feeds i Java - Added by Nordnet Tommi about 8 years ago

Det ser ut att vara 2 små problem med ditt exempel
  1. Anropen som skrivs är inte helt korrekt JSON. Det saknas " runt sessionKey och båda raderna saknar avslutande några }
  2. Det är bäst att anropa flush på ut-strömmarna för att vara säker på att saker faktiskt lämnar lokal buffer

Något i stil med följande borde fungera:

    ...     
    String loginCmd = ("{\"cmd\":\"login\", \"args\":{ \"session_key\":\"" 
            + sessionKey + "\", \"service\":\"NEXTAPI\"}}\n");
    String cmd = "{\"cmd\":\"subscribe\", \"args\":{ \"t\":\"price\", \"i\":\"101\", \"m\":11}}\n";
    OutputStreamWriter outputstreamwriter = new OutputStreamWriter(
            outputstream);
    BufferedWriter bufferedwriter = new BufferedWriter(outputstreamwriter);

    bufferedwriter.write(loginCmd);
    bufferedwriter.flush();
    bufferedwriter.write(cmd);
    bufferedwriter.flush();
    ...

RE: Hjälp med feeds i Java - Added by Sebastian about 8 years ago

Tackar så mycket, har inte arbetat med JSON innan så det var trevligt med lite klargörande. Ska försöka mig på att göra det med ordentliga objekt också så jag minimerar syntax fel.
Flush() var också ett bra tips, hade bara glömt av det.

Nu levererar den heartbeats ordentligt, men använder jag i:101, m:11 enligt ditt exempel får jag: {"cmd":"err", "args":{"msg":"Not authorized.", "cmd":{"cmd":"subscribe", "args":{ "t":"price", "i":"101", "m":11}}}}

medan om jag följer det jag hade tidigare (taget från api:n) fick jag inget svar alls. Betyder det att den började prenemurera eller blev det oklara fel?

Tack igen,
Sebastian

RE: Hjälp med feeds i Java - Added by Nordnet Simon about 8 years ago

Hej, realtidspriser från NasdaqOMX kostar pengar i produktion så felmeddelandet kan dyka upp i produktion om du försöker accessa priser för marknader där du inte har avtal.

För Wintrade- och Pro-kunder så ingår dom för NasdaqOMX.

Jag har slagit på realtidspriserna för NasdaqOMX i test nu så om du loggar ut och loggar in igen så ska det fungera.

RE: Hjälp med feeds i Java - Added by Sebastian about 8 years ago

Hej, okej, tackar. Det funkar nu så att jag får heartbeats och kom ihåg att lägga till ascii10 efter mina JSONObjekt. Är det meningen att det inte ska komma annan information på test-servrarna?

Tack ytterligare en gång,
Sebastian

RE: Hjälp med feeds i Java - Added by Sebastian about 8 years ago

Hej, okej, tackar. Det funkar nu så att jag får heartbeats och kom ihåg att lägga till ascii10 efter mina JSONObjekt. Är det meningen att det inte ska komma annan information på test-servrarna?

Tack ytterligare en gång,
Sebastian

Tjenare igen, sitter och kollar på detta nu igen efter midsommarledighet, och undrar fortfarande om det är meningen att man ska få mer än heartbeats på public feed? På private får jag orderuppföljning om jag lägger ordrar men på public kommer inget... Gör jag fel eller är det så det ska vara?

Mvh
Sebastian

RE: Hjälp med feeds i Java - Added by Nordnet Tommi about 8 years ago

Sebastian wrote:

Tjenare igen, sitter och kollar på detta nu igen efter midsommarledighet, och undrar fortfarande om det är meningen att man ska få mer än heartbeats på public feed? På private får jag orderuppföljning om jag lägger ordrar men på public kommer inget... Gör jag fel eller är det så det ska vara?

Jag tror att det är ett tecken på att prenumerationen inte blivit helt rätt.

Detta kommando ut:
{"cmd":"subscribe", "args":{ "t":"price", "i":"101", "m":11}}

Ger detta svar omedelbart:
{"cmd":"price","args":{"i":"101","m":11,"t":"price","trade_timestamp":"2011-07-06 18:05:43","tick_timestamp":"2011-07-06 18:05:55","bid":67.50,"bid_volume":480615,"ask":74.40,"ask_volume":904323,"close":90.90,"high":91.20,"last":76.35,"last_volume":315962,"lot_size":1,"low":68.70,"open":91.20,"vwap":78.27,"turnover":817815281.05,"turnover_volume":10448639}}

Därefter rasslar det på med minst heartbeats.

RE: Hjälp med feeds i Java - Added by Sebastian about 8 years ago

Ah, ja, du hade rätt. Nu får jag massor utav uppdateringar.

Så att andra kan få hjälp av dettta också...

Istället för:

{"cmd":"subscribe", "args":{ "t":"price", "i":"101", "m":11}}

så hade jag:

{"cmd":"subscribe", "args":{ "t":"price", "i":101, "m":11}}

Tackar
Sebastian

(1-7/7)