/** * Transforms a twitter4j.Status object into a JSONObject * * @param pStatus a twitter4j.Status object * @return JSONObject */ @SuppressWarnings("unchecked") public static JSONObject getJson(Status pStatus) { JSONObject jsonObj = null; if (pStatus != null) { jsonObj = new JSONObject(); jsonObj.put("createdAt", pStatus.getCreatedAt()); jsonObj.put("id", pStatus.getId()); jsonObj.put("text", pStatus.getText()); jsonObj.put("source", pStatus.getSource()); jsonObj.put("isTruncated", pStatus.isTruncated()); jsonObj.put("inReplyToStatusId", pStatus.getInReplyToStatusId()); jsonObj.put("inReplyToUserId", pStatus.getInReplyToUserId()); jsonObj.put("isFavorited", pStatus.isFavorited()); jsonObj.put("isRetweeted", pStatus.isRetweeted()); jsonObj.put("favoriteCount", pStatus.getFavoriteCount()); jsonObj.put("inReplyToScreenName", pStatus.getInReplyToScreenName()); jsonObj.put("geoLocation", pStatus.getGeoLocation()); jsonObj.put("place", pStatus.getPlace()); jsonObj.put("retweetCount", pStatus.getRetweetCount()); jsonObj.put("isPossiblySensitive", pStatus.isPossiblySensitive()); jsonObj.put("isoLanguageCode", pStatus.getIsoLanguageCode()); jsonObj.put("contributorsIDs", pStatus.getContributors()); jsonObj.put("retweetedStatus", pStatus.getRetweetedStatus()); jsonObj.put("userMentionEntities", pStatus.getUserMentionEntities()); jsonObj.put("urlEntities", pStatus.getURLEntities()); jsonObj.put("hashtagEntities", pStatus.getHashtagEntities()); jsonObj.put("mediaEntities", pStatus.getMediaEntities()); jsonObj.put("currentUserRetweetId", pStatus.getCurrentUserRetweetId()); jsonObj.put("user", pStatus.getUser()); } return jsonObj; }
public static Record buildTweet(Schema schema, Status status) { GenericRecordBuilder builderTweet = new GenericRecordBuilder(schema); builderTweet.set("created_at", status.getCreatedAt().getTime()); builderTweet.set("favorite_count", status.getFavoriteCount()); builderTweet.set("favorited", status.isFavorited()); builderTweet.set("id", status.getId()); builderTweet.set("in_reply_to_screen_name", status.getInReplyToScreenName()); if (status.getInReplyToStatusId() != -1) builderTweet.set("in_reply_to_status_id", status.getInReplyToStatusId()); if (status.getInReplyToUserId() != -1) builderTweet.set("in_reply_to_user_id", status.getInReplyToUserId()); builderTweet.set("lang", status.getLang()); builderTweet.set("possibly_sensitive", status.isPossiblySensitive()); builderTweet.set("retweet_count", status.getRetweetCount()); builderTweet.set("retweeted", status.isRetweeted()); builderTweet.set("source", status.getSource()); builderTweet.set("text", status.getText()); builderTweet.set("truncated", status.isTruncated()); if (status.getWithheldInCountries() != null) builderTweet.set("withheld_in_countries", Arrays.asList(status.getWithheldInCountries())); if (status.getGeoLocation() != null) builderTweet.set( "coordinates", Arrays.asList( status.getGeoLocation().getLatitude(), status.getGeoLocation().getLongitude())); builderTweet.set("entities", buildEntities(schema.getField("entities").schema(), status)); if (status.getPlace() != null) builderTweet.set( "place", buildPlace(schema.getField("place").schema().getTypes().get(1), status.getPlace())); User user = status.getUser(); if (user != null && schema.getField("user") != null) { Schema schemaUser = schema.getField("user").schema(); GenericRecordBuilder builderUser = new GenericRecordBuilder(schemaUser); builderUser.set("contributors_enabled", user.isContributorsEnabled()); builderUser.set("created_at", user.getCreatedAt().getTime()); builderUser.set("default_profile", user.isDefaultProfile()); builderUser.set("default_profile_image", user.isDefaultProfileImage()); builderUser.set("description", user.getDescription()); builderUser.set( "entities", buildURLEntity(schemaUser.getField("entities").schema(), user.getURLEntity())); builderUser.set("favourites_count", user.getFavouritesCount()); builderUser.set("followers_count", user.getFollowersCount()); builderUser.set("friends_count", user.getFriendsCount()); builderUser.set("geo_enabled", user.isGeoEnabled()); builderUser.set("id", user.getId()); builderUser.set("is_translator", user.isTranslator()); builderUser.set("lang", user.getLang()); builderUser.set("listed_count", user.getListedCount()); builderUser.set("location", user.getLocation()); builderUser.set("name", user.getName()); builderUser.set("screen_name", user.getScreenName()); builderUser.set("profile_background_color", user.getProfileBackgroundColor()); builderUser.set("profile_background_image_url", user.getProfileBackgroundImageURL()); builderUser.set( "profile_background_image_url_https", user.getProfileBackgroundImageUrlHttps()); builderUser.set("profile_background_tile", user.isProfileBackgroundTiled()); builderUser.set("profile_banner_url", user.getProfileBannerURL()); builderUser.set("profile_image_url", user.getProfileImageURL()); builderUser.set("profile_image_url_https", user.getProfileBackgroundImageUrlHttps()); builderUser.set("profile_link_color", user.getProfileLinkColor()); builderUser.set("profile_sidebar_border_color", user.getProfileSidebarBorderColor()); builderUser.set("profile_sidebar_fill_color", user.getProfileSidebarFillColor()); builderUser.set("profile_text_color", user.getProfileTextColor()); builderUser.set("profile_use_background_image", user.isProfileUseBackgroundImage()); builderUser.set("protected", user.isProtected()); builderUser.set("show_all_inline_media", user.isShowAllInlineMedia()); builderUser.set("statuses_count", user.getStatusesCount()); builderUser.set("time_zone", user.getTimeZone()); builderUser.set("url", user.getURL()); builderUser.set("utc_offset", user.getUtcOffset()); builderUser.set("verified", user.isVerified()); if (user.getStatus() != null && schemaUser.getField("status") != null) builderUser.set( "status", buildTweet(schemaUser.getField("status").schema().getTypes().get(1), user.getStatus())); if (user.getWithheldInCountries() != null) builderUser.set("withheld_in_countries", Arrays.asList(user.getWithheldInCountries())); builderTweet.set("user", builderUser.build()); } if (status.getQuotedStatus() != null && schema.getField("quoted_status") != null) builderTweet.set( "quoted_status", buildTweet( schema.getField("quoted_status").schema().getTypes().get(1), status.getQuotedStatus())); if (status.getRetweetedStatus() != null && schema.getField("retweeted_status") != null) builderTweet.set( "retweeted_status", buildTweet( schema.getField("retweeted_status").schema().getTypes().get(1), status.getRetweetedStatus())); return builderTweet.build(); }
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("GetFriendUpdates: enter"); String user = request.getParameter("user"); String group = request.getParameter("gid"); String session = request.getParameter("session"); String pageStr = request.getParameter("page"); int page = 1; if (pageStr != null) { page = Integer.parseInt(pageStr); } String tweetIdStr = request.getParameter("tweetId"); long tweetId = 0; if (tweetIdStr != null && tweetIdStr.length() > 0) { tweetId = Long.parseLong(tweetIdStr); } int userId = 0; int groupId = 0; if (user != null) { userId = Integer.parseInt(user); } if (group != null) { groupId = Integer.parseInt(group); } System.out.println( "GetFriendUpdates: userId:" + userId + ", groupId: " + groupId + ", session: " + session); /* * Set the content type(MIME Type) of the response. */ response.setContentType("application/json"); PrintWriter out = response.getWriter(); DB db = new DB(); AccessToken accessToken = db.isSessionValid(userId, groupId, session); if (userId == 0 || groupId == 0 || session.equals("") || accessToken == null) { out.print("{ success: false, \"msg\": \"Authentication failed.\"};"); out.close(); System.out.println("GetFriendUpdates: exit(false)"); return; } Twitter twitter = new TwitterFactory().getInstance(); Properties prop = TwitterProperties.getProperties(); twitter.setOAuthConsumer(prop.getProperty("consumer.key"), prop.getProperty("consumer.secret")); twitter.setOAuthAccessToken(accessToken); int newTweetCount = 0; int oldTweetCount = 0; String tweetJSON = "["; int newPage = page; try { long oldTweetId = getLastReadTweet(userId); long newTweetId = oldTweetId; int i = 0; while (true) { System.out.println("Getting page: " + page); ResponseList<Status> tweets = twitter.getHomeTimeline(new Paging(page, 20)); for (Status status : tweets) { Status retweetStatus = status.getRetweetedStatus(); User tweetUser = status.getUser(); long currentTweetId = status.getId(); if (tweetId == 0 || (tweetId > 0 && tweetId < currentTweetId)) { if (i > 0) { tweetJSON += ","; } tweetJSON += "{ " + "\"id\": \"" + currentTweetId + "\","; if (retweetStatus != null) { tweetJSON += "\"text\": \"" + Constants.escape(retweetStatus.getText()) + "\"," + "\"date\": \"" + Constants.getTimeStr(retweetStatus.getCreatedAt()) + "\"," + "\"user\": \"" + Constants.escape(retweetStatus.getUser().getScreenName()) + "\"," + "\"src\": \"" + Constants.escape(retweetStatus.getSource()) + "\"," + "\"img\": \"" + Constants.escape(retweetStatus.getUser().getProfileImageURL().toString()) + "\"," + "\"RT\":\"" + tweetUser.getScreenName() + "\"," + "\"RID\": \"" + retweetStatus.getId() + "\","; if (retweetStatus.isFavorited()) { tweetJSON += "\"favorite\":true,"; } else { tweetJSON += "\"favorite\":false,"; } } else { tweetJSON += "\"text\": \"" + Constants.escape(status.getText()) + "\"," + "\"date\": \"" + Constants.getTimeStr(status.getCreatedAt()) + "\"," + "\"user\": \"" + Constants.escape(tweetUser.getScreenName()) + "\"," + "\"src\": \"" + Constants.escape(status.getSource()) + "\"," + "\"img\": \"" + Constants.escape(tweetUser.getProfileImageURL().toString()) + "\"," + "\"RT\": \"\","; if (status.isFavorited()) { tweetJSON += "\"favorite\":true,"; } else { tweetJSON += "\"favorite\":false,"; } } if (oldTweetId >= currentTweetId) { // System.out.println("Old tweet: " + currentTweetId + "(" + oldTweetId + ")"); tweetJSON += "\"old\":true}"; oldTweetCount++; } else { newTweetCount++; // System.out.println("New tweet: " + currentTweetId + "(" + oldTweetId + ")"); if (newTweetId < currentTweetId) { newTweetId = currentTweetId; } tweetJSON += "\"old\":false}"; } i++; } } System.out.println("newTweetCount: " + newTweetCount + ", oldTweetCount: " + oldTweetCount); if (oldTweetCount == 0 && newTweetCount > 0 && page < 5) { page++; } else { break; } } System.out.println("Old tweet: " + oldTweetId + ", new Tweet: " + newTweetId); if (newTweetId > oldTweetId) { updateLastReadTweet(userId, newTweetId); } /* test-data when internet is not UP */ // tweetJSON += "{ " + // "\"text\": \"This is a test tweet.\"," + // "\"date\": \"31-12-2009\"," + // "\"user\": \"ammubhai\"," + // "\"src\": \"echofone\"," + // "\"img\": \"images/user1.png\"" + // "}"; } catch (TwitterException e) { // e.printStackTrace(); // System.err.println("ERROR: " + e.getLocalizedMessage()); // String errText = e.getMessage(); // int index = errText.indexOf("<!DOCTYPE "); // String errorMsg = errText.substring(0, index - 1); // errorMsg = errorMsg.replaceAll("(\r\n|\r|\n|\n\r)", ""); out.print( "{\"success\": false, \"msg\": \"" + TwitterError.getErrorMessage(e.getStatusCode()) + "\"}"); out.close(); return; } tweetJSON += "]"; out.print( "{ \"success\": true," + "\"page\": " + newPage + "," + "\"result\": " + tweetJSON + "," + "\"count\": " + newTweetCount + " }"); out.close(); System.out.println("GetFriendUpdates(" + userId + "): exit(true)"); return; }