socket.io-java-clientを使用して、リッスンしているツイートの JSON オブジェクトを node.js サーバーに送信しています。しばらくすると、ソケットが切断され、次のエラーが表示されます。
io.socket.SocketIOException: 1+0
at io.socket.IOConnection.transportMessage(IOConnection.java:725)
at io.socket.WebsocketTransport.onMessage(WebsocketTransport.java:117)
at de.roderick.weberknecht.WebSocketReceiver.run(WebSocketReceiver.java:57)
Aug 9, 2012 10:05:45 AM io.socket.IOConnection cleanup
INFO: Cleanup
この問題は、問題のある文字を含む特定のツイートが原因のようです。プログラムが送信しようとした JSON:
Aug 9, 2012 10:05:43 AM io.socket.IOConnection sendPlain
INFO: > 5:::{"args":[{"message":"#TBT #WatchTheThrone #Yeezy #JayZ #LA One of the most epic concerts of my life. ? http://t.co/6WVaZgIM","user":"ElleBxo"}],"name":"p5tweet"}
Aug 9, 2012 10:05:45 AM io.socket.IOConnection sendPlain
vs. ツイッターの実際のツイート: "#TBT #WatchTheThrone #Yeezy #JayZ #LA 私の人生で最も壮大なコンサートの 1 つ。 http://instagr.am/p/OHXPQxxUe7/ " https://twitter.com/ ElleBxo/ステータス/233610010066821121
私の JSON が「 ? 」を instagram のリンクの前に表示するという奇妙な不一致があるようですが、Twitter では単に「 」です。以下は私の問題のあるコードです。文字列に対して replaceAll() を実行しようとしましたが、ソケットのスローと切断によるエラーは保証されません。他のキャラクターがこのエラーを引き起こすことも見たので、それらがすべて何であるかはわかりません.
Map<String,String> mp=new HashMap<String, String>();
Status tweet = (Status)queue.get(0);
String safeTweet = tweet.text().replaceAll(" ? ", " ");
mp.put("user",tweet.user().screenName());
mp.put("message",safeTweet);
JSONObject tweetJSON = new JSONObject(mp);
socket.emit("p5tweet", tweetJSON);
これを防ぐためにツイート文字列を適切にエスケープするにはどうすればよいですか? ありがとう!!:)
編集: 接続を切断する別のツイート。リンクが一般的にそれを引き起こしているようです:
{"args":[{"message":"RT @Olympics: Congrats to the first woman ever to win an Olympic #Boxing gold medal - Nicola Adams of Team GBR #olympics http://t.co/Jab ...","user":"GlockQueen31"}],"name":"p5tweet"}
ツイッターで:「オリンピック #ボクシング の金メダルを獲得した史上初の女性におめでとう - チームGBRのニコラ・アダムス #オリンピック pic.twitter.com/JabAjIrl」