1

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」

4

1 に答える 1

1

ツイート ストリームのバグのようです。242行目

https://github.com/mccv/processing-tweet-stream/blob/master/src/main/scala/com/twitter/processing/TweetStream.scala

reader = new BufferedReader(new InputStreamReader(stream))

これはエンコーディングを考慮せず、プラットフォームのデフォルトを使用します。HTTP 応答のエンコーディングがプラットフォームと一致する場合は問題ありませんが、一致しない場合は非 ASCII 文字が破損します。

于 2012-08-09T18:47:38.680 に答える