Repository: DanielaSfregola/twitter4s Branch: main Commit: ea764e6f9e3a Files: 590 Total size: 3.7 MB Directory structure: gitextract_z8tpb3no/ ├── .circleci/ │ └── config.yml ├── .gitignore ├── .mergify.yml ├── .scalafmt.conf ├── LICENSE ├── README.md ├── build.sbt ├── project/ │ ├── build.properties │ └── plugins.sbt ├── sonatype.sbt └── src/ ├── main/ │ ├── resources/ │ │ └── reference.conf │ └── scala/ │ └── com/ │ └── danielasfregola/ │ └── twitter4s/ │ ├── TwitterAuthenticationClient.scala │ ├── TwitterRestClient.scala │ ├── TwitterRestV2Client.scala │ ├── TwitterStreamingClient.scala │ ├── entities/ │ │ ├── AccessToken.scala │ │ ├── Accuracy.scala │ │ ├── Area.scala │ │ ├── Banners.scala │ │ ├── Category.scala │ │ ├── Configuration.scala │ │ ├── ConsumerToken.scala │ │ ├── Contributor.scala │ │ ├── Coordinate.scala │ │ ├── Coordinates.scala │ │ ├── DirectMessage.scala │ │ ├── DirectMessageEvent.scala │ │ ├── DirectMessageEventList.scala │ │ ├── Entities.scala │ │ ├── ExtendedTweet.scala │ │ ├── Geo.scala │ │ ├── GeoBoundingBox.scala │ │ ├── GeoCode.scala │ │ ├── GeoPlace.scala │ │ ├── GeoSearch.scala │ │ ├── HashTag.scala │ │ ├── Image.scala │ │ ├── LanguageDetails.scala │ │ ├── Location.scala │ │ ├── LocationTrends.scala │ │ ├── LookupEntities.scala │ │ ├── LookupMapped.scala │ │ ├── LookupRelationship.scala │ │ ├── LookupTweet.scala │ │ ├── LookupUser.scala │ │ ├── Media.scala │ │ ├── MediaDetails.scala │ │ ├── MediaUpload.scala │ │ ├── OEmbedTweet.scala │ │ ├── PrivacyPolicy.scala │ │ ├── ProfileImage.scala │ │ ├── ProfileUpdate.scala │ │ ├── RateLimit.scala │ │ ├── RateLimits.scala │ │ ├── RatedData.scala │ │ ├── Relationship.scala │ │ ├── SavedSearch.scala │ │ ├── Settings.scala │ │ ├── SettingsOptions.scala │ │ ├── Size.scala │ │ ├── StatusMediaDetails.scala │ │ ├── Suggestions.scala │ │ ├── Symbol.scala │ │ ├── TermsOfService.scala │ │ ├── Tweet.scala │ │ ├── TweetId.scala │ │ ├── TweetSearch.scala │ │ ├── TweetUpdate.scala │ │ ├── TwitterList.scala │ │ ├── TwitterListUpdate.scala │ │ ├── TwitterLists.scala │ │ ├── UploadedMedia.scala │ │ ├── Url.scala │ │ ├── User.scala │ │ ├── UserIds.scala │ │ ├── UserMention.scala │ │ ├── UserStringifiedIds.scala │ │ ├── Users.scala │ │ ├── Variant.scala │ │ ├── Video.scala │ │ ├── VideoInfo.scala │ │ ├── Webhook.scala │ │ ├── authentication/ │ │ │ ├── OAuthAccessToken.scala │ │ │ └── OAuthRequestToken.scala │ │ ├── enums/ │ │ │ ├── AccessType.scala │ │ │ ├── Alignment.scala │ │ │ ├── ContributorType.scala │ │ │ ├── DisconnectionCode.scala │ │ │ ├── EventCode.scala │ │ │ ├── FilterLevel.scala │ │ │ ├── Granularity.scala │ │ │ ├── Hour.scala │ │ │ ├── Language.scala │ │ │ ├── Measure.scala │ │ │ ├── MediaType.scala │ │ │ ├── Mode.scala │ │ │ ├── Resource.scala │ │ │ ├── ResultType.scala │ │ │ ├── TimeZone.scala │ │ │ ├── TweetMode.scala │ │ │ ├── WidgetType.scala │ │ │ └── WithFilter.scala │ │ ├── streaming/ │ │ │ ├── StreamingUpdate.scala │ │ │ ├── common/ │ │ │ │ ├── DisconnectMessage.scala │ │ │ │ ├── LimitNotice.scala │ │ │ │ ├── LocationDeletionNotice.scala │ │ │ │ ├── StatusDeletionNotice.scala │ │ │ │ ├── StatusWithheldNotice.scala │ │ │ │ ├── UserWithheldNotice.scala │ │ │ │ └── WarningMessage.scala │ │ │ ├── site/ │ │ │ │ ├── ControlMessage.scala │ │ │ │ └── UserEnvelop.scala │ │ │ └── user/ │ │ │ ├── Event.scala │ │ │ └── FriendsLists.scala │ │ └── v2/ │ │ ├── Error.scala │ │ ├── Media.scala │ │ ├── Meta.scala │ │ ├── Place.scala │ │ ├── Poll.scala │ │ ├── Tweet.scala │ │ ├── TweetEntities.scala │ │ ├── TweetIncludes.scala │ │ ├── User.scala │ │ ├── UserEntities.scala │ │ ├── UserIncludes.scala │ │ ├── Withheld.scala │ │ ├── enums/ │ │ │ ├── CoordinatesType.scala │ │ │ ├── MediaType.scala │ │ │ ├── ReferencedTweetType.scala │ │ │ ├── TweetReplySetting.scala │ │ │ ├── WithheldScope.scala │ │ │ ├── expansions/ │ │ │ │ ├── TweetExpansions.scala │ │ │ │ └── UserExpansions.scala │ │ │ ├── fields/ │ │ │ │ ├── MediaFields.scala │ │ │ │ ├── PlaceFields.scala │ │ │ │ ├── PollFields.scala │ │ │ │ ├── TweetFields.scala │ │ │ │ └── UserFields.scala │ │ │ └── rest/ │ │ │ └── TimelineExclude.scala │ │ └── responses/ │ │ ├── TweetResponse.scala │ │ ├── TweetsResponse.scala │ │ ├── UserResponse.scala │ │ └── UsersResponse.scala │ ├── exceptions/ │ │ └── TwitterException.scala │ ├── http/ │ │ ├── clients/ │ │ │ ├── Client.scala │ │ │ ├── CommonClient.scala │ │ │ ├── OAuthClient.scala │ │ │ ├── authentication/ │ │ │ │ ├── AuthenticationClient.scala │ │ │ │ └── oauth/ │ │ │ │ ├── TwitterOAuthClient.scala │ │ │ │ └── parameters/ │ │ │ │ ├── AccessTokenParameters.scala │ │ │ │ └── RequestTokenParameters.scala │ │ │ ├── rest/ │ │ │ │ ├── RestClient.scala │ │ │ │ ├── account/ │ │ │ │ │ ├── TwitterAccountClient.scala │ │ │ │ │ └── parameters/ │ │ │ │ │ └── CredentialsParameters.scala │ │ │ │ ├── accountactivity/ │ │ │ │ │ ├── TwitterAccountActivityClient.scala │ │ │ │ │ └── parameters/ │ │ │ │ │ └── WebhooksParameters.scala │ │ │ │ ├── application/ │ │ │ │ │ ├── TwitterApplicationClient.scala │ │ │ │ │ └── parameters/ │ │ │ │ │ └── RatesParameters.scala │ │ │ │ ├── blocks/ │ │ │ │ │ ├── TwitterBlockClient.scala │ │ │ │ │ └── parameters/ │ │ │ │ │ ├── BlockParameters.scala │ │ │ │ │ ├── BlockedUserIdsParameters.scala │ │ │ │ │ └── BlockedUsersParameters.scala │ │ │ │ ├── directmessages/ │ │ │ │ │ ├── TwitterDirectMessageClient.scala │ │ │ │ │ └── parameters/ │ │ │ │ │ ├── CreateEventParameters.scala │ │ │ │ │ ├── CreateParameters.scala │ │ │ │ │ ├── DestroyParameters.scala │ │ │ │ │ ├── EventListParameters.scala │ │ │ │ │ ├── ReceivedParameters.scala │ │ │ │ │ ├── SentParameters.scala │ │ │ │ │ └── ShowParameters.scala │ │ │ │ ├── favorites/ │ │ │ │ │ ├── TwitterFavoriteClient.scala │ │ │ │ │ └── parameters/ │ │ │ │ │ ├── FavoriteParameters.scala │ │ │ │ │ └── FavoritesParameters.scala │ │ │ │ ├── followers/ │ │ │ │ │ ├── TwitterFollowerClient.scala │ │ │ │ │ └── parameters/ │ │ │ │ │ ├── FollowersParameters.scala │ │ │ │ │ └── FollowingParameters.scala │ │ │ │ ├── friends/ │ │ │ │ │ ├── TwitterFriendClient.scala │ │ │ │ │ └── parameters/ │ │ │ │ │ ├── FriendParameters.scala │ │ │ │ │ └── FriendsParameters.scala │ │ │ │ ├── friendships/ │ │ │ │ │ ├── TwitterFriendshipClient.scala │ │ │ │ │ └── parameters/ │ │ │ │ │ ├── BlockedParameters.scala │ │ │ │ │ ├── FollowParameters.scala │ │ │ │ │ ├── FriendshipParameters.scala │ │ │ │ │ ├── NotificationParameters.scala │ │ │ │ │ ├── RelationshipParameters.scala │ │ │ │ │ ├── RelationshipsParameters.scala │ │ │ │ │ └── UnfollowParameters.scala │ │ │ │ ├── geo/ │ │ │ │ │ ├── TwitterGeoClient.scala │ │ │ │ │ └── parameters/ │ │ │ │ │ ├── GeoSearchParameters.scala │ │ │ │ │ └── ReverseGeoCodeParameters.scala │ │ │ │ ├── help/ │ │ │ │ │ └── TwitterHelpClient.scala │ │ │ │ ├── lists/ │ │ │ │ │ ├── TwitterListClient.scala │ │ │ │ │ └── parameters/ │ │ │ │ │ ├── AddMemberParameters.scala │ │ │ │ │ ├── CreateListParameters.scala │ │ │ │ │ ├── ListMembersParameters.scala │ │ │ │ │ ├── ListParameters.scala │ │ │ │ │ ├── ListTimelineParameters.scala │ │ │ │ │ ├── ListsParameters.scala │ │ │ │ │ ├── MemberParameters.scala │ │ │ │ │ ├── MembersParameters.scala │ │ │ │ │ ├── MembershipsParameters.scala │ │ │ │ │ ├── OwnershipsParameters.scala │ │ │ │ │ ├── RemoveMemberParameters.scala │ │ │ │ │ ├── RemoveMembersParameters.scala │ │ │ │ │ ├── SubscribersParameters.scala │ │ │ │ │ ├── SubscriptionsParameters.scala │ │ │ │ │ └── UpdateListParameters.scala │ │ │ │ ├── media/ │ │ │ │ │ ├── TwitterMediaClient.scala │ │ │ │ │ └── parameters/ │ │ │ │ │ ├── MediaAppendParameters.scala │ │ │ │ │ ├── MediaFinalizeParameters.scala │ │ │ │ │ ├── MediaInitParameters.scala │ │ │ │ │ ├── MediaMetadataCreation.scala │ │ │ │ │ └── MediaStatusParameters.scala │ │ │ │ ├── mutes/ │ │ │ │ │ ├── TwitterMuteClient.scala │ │ │ │ │ └── parameters/ │ │ │ │ │ ├── MuteParameters.scala │ │ │ │ │ ├── MutedUsersIdsParameters.scala │ │ │ │ │ └── MutedUsersParameters.scala │ │ │ │ ├── savedsearches/ │ │ │ │ │ ├── TwitterSavedSearchClient.scala │ │ │ │ │ └── parameters/ │ │ │ │ │ └── SaveSearchParameters.scala │ │ │ │ ├── search/ │ │ │ │ │ ├── TwitterSearchClient.scala │ │ │ │ │ └── parameters/ │ │ │ │ │ └── TweetSearchParameters.scala │ │ │ │ ├── statuses/ │ │ │ │ │ ├── TwitterStatusClient.scala │ │ │ │ │ └── parameters/ │ │ │ │ │ ├── HomeTimelineParameters.scala │ │ │ │ │ ├── LookupParameters.scala │ │ │ │ │ ├── MentionsParameters.scala │ │ │ │ │ ├── OEmbedParameters.scala │ │ │ │ │ ├── PostParameters.scala │ │ │ │ │ ├── RetweetersIdsParameters.scala │ │ │ │ │ ├── RetweetsOfMeParameters.scala │ │ │ │ │ ├── RetweetsParameters.scala │ │ │ │ │ ├── ShowParameters.scala │ │ │ │ │ └── UserTimelineParameters.scala │ │ │ │ ├── suggestions/ │ │ │ │ │ ├── TwitterSuggestionClient.scala │ │ │ │ │ └── parameters/ │ │ │ │ │ └── SuggestionsParameters.scala │ │ │ │ ├── trends/ │ │ │ │ │ ├── TwitterTrendClient.scala │ │ │ │ │ └── parameters/ │ │ │ │ │ ├── LocationParameters.scala │ │ │ │ │ └── TrendsParameters.scala │ │ │ │ ├── users/ │ │ │ │ │ ├── TwitterUserClient.scala │ │ │ │ │ └── parameters/ │ │ │ │ │ ├── BannersParameters.scala │ │ │ │ │ ├── UserParameters.scala │ │ │ │ │ ├── UserSearchParameters.scala │ │ │ │ │ └── UsersParameters.scala │ │ │ │ └── v2/ │ │ │ │ ├── tweets/ │ │ │ │ │ ├── TwitterSearchTweetsClient.scala │ │ │ │ │ ├── TwitterTimelinesClient.scala │ │ │ │ │ ├── TwitterTweetLookupClient.scala │ │ │ │ │ └── paramaters/ │ │ │ │ │ ├── SearchTweetsParameters.scala │ │ │ │ │ ├── TimelineMentionsParameters.scala │ │ │ │ │ ├── TimelineTweetsParameters.scala │ │ │ │ │ ├── TweetParameters.scala │ │ │ │ │ └── TweetsParameters.scala │ │ │ │ └── users/ │ │ │ │ ├── TwitterUserLookupClient.scala │ │ │ │ └── parameters/ │ │ │ │ ├── UserByUsernameParameters.scala │ │ │ │ ├── UserParameters.scala │ │ │ │ ├── UsersByUsernamesParameters.scala │ │ │ │ └── UsersParameters.scala │ │ │ └── streaming/ │ │ │ ├── ErrorHandler.scala │ │ │ ├── StreamingClient.scala │ │ │ ├── TwitterStream.scala │ │ │ ├── sites/ │ │ │ │ ├── TwitterSiteClient.scala │ │ │ │ └── parameters/ │ │ │ │ └── SiteParameters.scala │ │ │ ├── statuses/ │ │ │ │ ├── TwitterStatusClient.scala │ │ │ │ └── parameters/ │ │ │ │ ├── StatusFilters.scala │ │ │ │ ├── StatusFirehoseParameters.scala │ │ │ │ └── StatusSampleParameters.scala │ │ │ └── users/ │ │ │ ├── TwitterUserClient.scala │ │ │ └── parameters/ │ │ │ └── UserParameters.scala │ │ ├── marshalling/ │ │ │ ├── BodyEncoder.scala │ │ │ └── Parameters.scala │ │ ├── oauth/ │ │ │ └── OAuth1Provider.scala │ │ ├── package.scala │ │ └── serializers/ │ │ ├── CustomFormats.scala │ │ ├── EnumFormats.scala │ │ ├── FormSupport.scala │ │ ├── FormatsComposer.scala │ │ ├── JsonSupport.scala │ │ └── StreamingMessageFormats.scala │ ├── processors/ │ │ └── TwitterProcessor.scala │ ├── providers/ │ │ ├── ExecutionContextProvider.scala │ │ └── TokenProvider.scala │ └── util/ │ ├── Configurations.scala │ ├── Encoder.scala │ ├── MediaReader.scala │ ├── SystemShutdown.scala │ └── UriHelpers.scala └── test/ ├── resources/ │ ├── fixtures/ │ │ ├── rest/ │ │ │ ├── account/ │ │ │ │ ├── settings.json │ │ │ │ └── user.json │ │ │ ├── accountactivity/ │ │ │ │ └── webhook.json │ │ │ ├── application/ │ │ │ │ └── rate_limits.json │ │ │ ├── blocks/ │ │ │ │ ├── blocked_users.json │ │ │ │ ├── ids.json │ │ │ │ ├── stringified_ids.json │ │ │ │ └── user.json │ │ │ ├── directmessages/ │ │ │ │ ├── destroy.json │ │ │ │ ├── event.json │ │ │ │ ├── list.json │ │ │ │ ├── new.json │ │ │ │ ├── received.json │ │ │ │ ├── sent.json │ │ │ │ └── show.json │ │ │ ├── favorites/ │ │ │ │ ├── favorite.json │ │ │ │ ├── favorites.json │ │ │ │ └── unfavorite.json │ │ │ ├── followers/ │ │ │ │ ├── followers.json │ │ │ │ ├── followers_ids.json │ │ │ │ └── followers_ids_stringified.json │ │ │ ├── friends/ │ │ │ │ ├── friends_ids.json │ │ │ │ ├── friends_ids_stringified.json │ │ │ │ └── users.json │ │ │ ├── friendships/ │ │ │ │ ├── blocked_users.json │ │ │ │ ├── blocked_users_stringified.json │ │ │ │ ├── follow.json │ │ │ │ ├── incoming_friendships_ids.json │ │ │ │ ├── incoming_friendships_ids_stringified.json │ │ │ │ ├── outgoing_friendships_ids.json │ │ │ │ ├── outgoing_friendships_ids_stringified.json │ │ │ │ ├── relationship.json │ │ │ │ ├── relationships.json │ │ │ │ ├── unfollow.json │ │ │ │ └── update.json │ │ │ ├── geo/ │ │ │ │ ├── advanced_search.json │ │ │ │ ├── geo_place.json │ │ │ │ ├── reverse_geocode.json │ │ │ │ └── search.json │ │ │ ├── help/ │ │ │ │ ├── configuration.json │ │ │ │ ├── languages.json │ │ │ │ ├── privacy.json │ │ │ │ └── tos.json │ │ │ ├── lists/ │ │ │ │ ├── create.json │ │ │ │ ├── destroy.json │ │ │ │ ├── lists.json │ │ │ │ ├── member.json │ │ │ │ ├── members.json │ │ │ │ ├── memberships.json │ │ │ │ ├── ownerships.json │ │ │ │ ├── show.json │ │ │ │ ├── subscribers.json │ │ │ │ ├── subscriptions.json │ │ │ │ └── timeline.json │ │ │ ├── media/ │ │ │ │ ├── img_media_details.json │ │ │ │ └── media_details.json │ │ │ ├── mutes/ │ │ │ │ ├── muted_users_ids.json │ │ │ │ ├── user.json │ │ │ │ └── users.json │ │ │ ├── savedsearches/ │ │ │ │ ├── create.json │ │ │ │ ├── destroy.json │ │ │ │ ├── list.json │ │ │ │ └── show.json │ │ │ ├── search/ │ │ │ │ └── tweets.json │ │ │ ├── statuses/ │ │ │ │ ├── destroy.json │ │ │ │ ├── direct_message.json │ │ │ │ ├── home_timeline.json │ │ │ │ ├── lookup.json │ │ │ │ ├── lookup_extended.json │ │ │ │ ├── lookup_mapped.json │ │ │ │ ├── lookup_mapped_extended.json │ │ │ │ ├── mentions_timeline.json │ │ │ │ ├── oembed.json │ │ │ │ ├── retweet.json │ │ │ │ ├── retweeters_ids.json │ │ │ │ ├── retweeters_ids_stringified.json │ │ │ │ ├── retweets.json │ │ │ │ ├── retweets_of_me.json │ │ │ │ ├── show.json │ │ │ │ ├── update.json │ │ │ │ └── user_timeline.json │ │ │ ├── suggestions/ │ │ │ │ ├── categories.json │ │ │ │ ├── slug_suggestions.json │ │ │ │ └── suggestions_members.json │ │ │ ├── trends/ │ │ │ │ ├── available_locations.json │ │ │ │ ├── closest_locations.json │ │ │ │ └── trends.json │ │ │ └── users/ │ │ │ ├── profile_banner.json │ │ │ ├── user.json │ │ │ └── users.json │ │ └── streaming/ │ │ ├── common/ │ │ │ ├── disconnect_messages.json │ │ │ ├── limit_notices.json │ │ │ ├── location_deletion_notices.json │ │ │ ├── status_deletion_notices.json │ │ │ ├── status_withheld_notices.json │ │ │ ├── tweets.json │ │ │ ├── user_withheld_notices.json │ │ │ └── warning_messages.json │ │ ├── site/ │ │ │ ├── control_messages.json │ │ │ ├── user_envelop_direct_message.json │ │ │ ├── user_envelop_direct_message_stringified.json │ │ │ ├── user_envelop_simple_event.json │ │ │ ├── user_envelop_simple_event_stringified.json │ │ │ ├── user_envelop_tweet.json │ │ │ ├── user_envelop_tweet_event.json │ │ │ ├── user_envelop_tweet_event_stringified.json │ │ │ ├── user_envelop_tweet_stringified.json │ │ │ ├── user_envelop_twitter_list_event.json │ │ │ ├── user_envelop_twitter_list_event_stringified.json │ │ │ ├── user_envelop_warning_message.json │ │ │ ├── user_envelop_warning_message_stringified.json │ │ │ ├── user_envelops_friends_list.json │ │ │ └── user_envelops_friends_list_stringified.json │ │ └── user/ │ │ ├── direct_messages.json │ │ ├── events.json │ │ ├── friends_lists.json │ │ └── friends_lists_stringified.json │ └── twitter/ │ ├── authentication/ │ │ ├── access_token.txt │ │ └── request_token.txt │ ├── rest/ │ │ ├── account/ │ │ │ ├── settings.json │ │ │ └── user.json │ │ ├── accountactivity/ │ │ │ └── webhook.json │ │ ├── application/ │ │ │ └── rate_limits.json │ │ ├── blocks/ │ │ │ ├── blocked_users.json │ │ │ ├── ids.json │ │ │ ├── stringified_ids.json │ │ │ └── user.json │ │ ├── directmessages/ │ │ │ ├── destroy.json │ │ │ ├── event.json │ │ │ ├── list.json │ │ │ ├── new.json │ │ │ ├── received.json │ │ │ ├── sent.json │ │ │ └── show.json │ │ ├── favorites/ │ │ │ ├── favorite.json │ │ │ ├── favorites.json │ │ │ └── unfavorite.json │ │ ├── followers/ │ │ │ ├── followers.json │ │ │ ├── followers_ids.json │ │ │ └── followers_ids_stringified.json │ │ ├── friends/ │ │ │ ├── friends_ids.json │ │ │ ├── friends_ids_stringified.json │ │ │ └── users.json │ │ ├── friendships/ │ │ │ ├── blocked_users.json │ │ │ ├── blocked_users_stringified.json │ │ │ ├── follow.json │ │ │ ├── incoming_friendships_ids.json │ │ │ ├── incoming_friendships_ids_stringified.json │ │ │ ├── outgoing_friendships_ids.json │ │ │ ├── outgoing_friendships_ids_stringified.json │ │ │ ├── relationship.json │ │ │ ├── relationships.json │ │ │ ├── unfollow.json │ │ │ └── update.json │ │ ├── geo/ │ │ │ ├── advanced_search.json │ │ │ ├── geo_place.json │ │ │ ├── reverse_geocode.json │ │ │ └── search.json │ │ ├── help/ │ │ │ ├── configuration.json │ │ │ ├── languages.json │ │ │ ├── privacy.json │ │ │ └── tos.json │ │ ├── lists/ │ │ │ ├── create.json │ │ │ ├── destroy.json │ │ │ ├── lists.json │ │ │ ├── member.json │ │ │ ├── members.json │ │ │ ├── memberships.json │ │ │ ├── ownerships.json │ │ │ ├── show.json │ │ │ ├── subscribers.json │ │ │ ├── subscriptions.json │ │ │ └── timeline.json │ │ ├── media/ │ │ │ └── media_details.json │ │ ├── mutes/ │ │ │ ├── muted_users_ids.json │ │ │ ├── user.json │ │ │ └── users.json │ │ ├── savedsearches/ │ │ │ ├── create.json │ │ │ ├── destroy.json │ │ │ ├── list.json │ │ │ └── show.json │ │ ├── search/ │ │ │ └── tweets.json │ │ ├── statuses/ │ │ │ ├── destroy.json │ │ │ ├── direct_message.json │ │ │ ├── home_timeline.json │ │ │ ├── lookup.json │ │ │ ├── lookup_extended.json │ │ │ ├── lookup_mapped.json │ │ │ ├── lookup_mapped_extended.json │ │ │ ├── mentions_timeline.json │ │ │ ├── oembed.json │ │ │ ├── retweet.json │ │ │ ├── retweeters_ids.json │ │ │ ├── retweeters_ids_stringified.json │ │ │ ├── retweets.json │ │ │ ├── retweets_of_me.json │ │ │ ├── show.json │ │ │ ├── update.json │ │ │ └── user_timeline.json │ │ ├── suggestions/ │ │ │ ├── categories.json │ │ │ ├── slug_suggestions.json │ │ │ └── suggestions_members.json │ │ ├── trends/ │ │ │ ├── available_locations.json │ │ │ ├── closest_locations.json │ │ │ └── trends.json │ │ ├── users/ │ │ │ ├── empty-user-profile-url.json │ │ │ ├── profile_banner.json │ │ │ ├── user.json │ │ │ └── users.json │ │ └── v2/ │ │ ├── tweets/ │ │ │ ├── tweet.json │ │ │ └── tweets.json │ │ └── users/ │ │ ├── user.json │ │ └── users.json │ └── streaming/ │ ├── common/ │ │ ├── disconnect_messages.json │ │ ├── limit_notices.json │ │ ├── location_deletion_notices.json │ │ ├── status_deletion_notices.json │ │ ├── status_withheld_notices.json │ │ ├── tweets.json │ │ ├── user_withheld_notices.json │ │ └── warning_messages.json │ ├── site/ │ │ ├── control_messages.json │ │ ├── user_envelop_direct_message.json │ │ ├── user_envelop_direct_message_stringified.json │ │ ├── user_envelop_simple_event.json │ │ ├── user_envelop_simple_event_stringified.json │ │ ├── user_envelop_tweet.json │ │ ├── user_envelop_tweet_event.json │ │ ├── user_envelop_tweet_event_stringified.json │ │ ├── user_envelop_tweet_stringified.json │ │ ├── user_envelop_twitter_list_event.json │ │ ├── user_envelop_twitter_list_event_stringified.json │ │ ├── user_envelop_warning_message.json │ │ ├── user_envelop_warning_message_stringified.json │ │ ├── user_envelops_friends_list.json │ │ └── user_envelops_friends_list_stringified.json │ └── user/ │ ├── direct_messages.json │ ├── events.json │ ├── friends_lists.json │ └── friends_lists_stringified.json └── scala/ └── com/ └── danielasfregola/ └── twitter4s/ ├── entities/ │ ├── DeserializationRoundtripSpec.scala │ ├── ProfileImageSpec.scala │ ├── RateLimitSpec.scala │ └── SerializationRoundtripSpec.scala ├── helpers/ │ ├── AwaitableFuture.scala │ ├── ClientSpec.scala │ ├── FixturesSupport.scala │ ├── JsonDiffSupport.scala │ ├── RequestDSL.scala │ ├── Spec.scala │ ├── TestActorSystem.scala │ └── TestExecutionContext.scala ├── http/ │ ├── clients/ │ │ ├── authentication/ │ │ │ └── oauth/ │ │ │ └── TwitterOAuthClientSpec.scala │ │ ├── rest/ │ │ │ ├── RestClientSpec.scala │ │ │ ├── account/ │ │ │ │ └── TwitterAccountClientSpec.scala │ │ │ ├── accountactivity/ │ │ │ │ └── TwitterAccountActivityClientSpec.scala │ │ │ ├── application/ │ │ │ │ └── TwitterApplicationClientSpec.scala │ │ │ ├── blocks/ │ │ │ │ └── TwitterBlockClientSpec.scala │ │ │ ├── directmessages/ │ │ │ │ └── TwitterDirectMessageClientSpec.scala │ │ │ ├── favorites/ │ │ │ │ └── TwitterFavoriteClientSpec.scala │ │ │ ├── followers/ │ │ │ │ └── TwitterFollowerClientSpec.scala │ │ │ ├── friends/ │ │ │ │ └── TwitterFriendClientSpec.scala │ │ │ ├── friendships/ │ │ │ │ └── TwitterFriendshipClientSpec.scala │ │ │ ├── geo/ │ │ │ │ └── TwitterGeoClientSpec.scala │ │ │ ├── help/ │ │ │ │ └── TwitterHelpClientSpec.scala │ │ │ ├── lists/ │ │ │ │ └── TwitterListClientSpec.scala │ │ │ ├── media/ │ │ │ │ └── TwitterMediaClientSpec.scala │ │ │ ├── mutes/ │ │ │ │ └── TwitterMuteClientSpec.scala │ │ │ ├── savedsearches/ │ │ │ │ └── TwitterSavedSearchClientSpec.scala │ │ │ ├── search/ │ │ │ │ └── TwitterSearchClientSpec.scala │ │ │ ├── statuses/ │ │ │ │ ├── TwitterStatusClientSpec.scala │ │ │ │ └── parameters/ │ │ │ │ ├── HomeTimelineParametersSpec.scala │ │ │ │ ├── LookupParametersSpec.scala │ │ │ │ ├── MentionsParametersSpec.scala │ │ │ │ ├── OEmbedParametersSpec.scala │ │ │ │ ├── PostParametersSpec.scala │ │ │ │ ├── RetweetersIdsParametersSpec.scala │ │ │ │ ├── RetweetsOfMeParametersSpec.scala │ │ │ │ ├── RetweetsParametersSpec.scala │ │ │ │ ├── ShowParametersSpec.scala │ │ │ │ └── UserTimelineParametersSpec.scala │ │ │ ├── suggestions/ │ │ │ │ └── TwitterSuggestionClientSpec.scala │ │ │ ├── trends/ │ │ │ │ └── TwitterTrendClientSpec.scala │ │ │ ├── users/ │ │ │ │ └── TwitterUserClientSpec.scala │ │ │ └── v2/ │ │ │ ├── tweets/ │ │ │ │ ├── TwitterSearchTweetsClientSpec.scala │ │ │ │ ├── TwitterTimelinesClientSpec.scala │ │ │ │ ├── TwitterTweetLookupClientSpec.scala │ │ │ │ └── deserialization/ │ │ │ │ ├── TweetsDeserializationSpec.scala │ │ │ │ └── fixtures/ │ │ │ │ ├── TweetResponseFixture.scala │ │ │ │ └── TweetsResponseFixture.scala │ │ │ ├── users/ │ │ │ │ ├── TwitterUserLookupClientSpec.scala │ │ │ │ └── deserialization/ │ │ │ │ ├── UsersResponseDeserializationSpec.scala │ │ │ │ └── fixtures/ │ │ │ │ ├── UserResponseFixture.scala │ │ │ │ └── UsersResponseFixture.scala │ │ │ └── utils/ │ │ │ └── V2SpecQueryHelper.scala │ │ └── streaming/ │ │ ├── StreamingClientSpec.scala │ │ ├── sites/ │ │ │ └── TwitterSiteClientSpec.scala │ │ ├── statuses/ │ │ │ └── TwitterStatusClientSpec.scala │ │ └── users/ │ │ └── TwitterUserClientSpec.scala │ ├── marshalling/ │ │ └── BodyEncoderSpec.scala │ ├── oauth/ │ │ └── OAuth1ProviderSpec.scala │ ├── packageHttpSpec.scala │ └── serializers/ │ └── FormSupportSpec.scala └── util/ ├── ConfigurationDetectorSpec.scala ├── EncoderSpec.scala └── UriHelpersSpec.scala ================================================ FILE CONTENTS ================================================ ================================================ FILE: .circleci/config.yml ================================================ # Scala CircleCI 2.0 configuration file # # Check https://circleci.com/docs/2.0/sample-config/ for more details # version: 2 jobs: build: docker: # specify the version you desire here - image: circleci/openjdk:15-jdk-buster # Specify service dependencies here if necessary # CircleCI maintains a library of pre-built images # documented at https://circleci.com/docs/2.0/circleci-images/ # - image: circleci/postgres:9.4 working_directory: ~/repo environment: # Customize the JVM maximum heap limit JVM_OPTS: -Xmx3200m TERM: dumb steps: - checkout # Download and cache dependencies - restore_cache: keys: - v1-dependencies-{{ checksum "build.sbt" }} # fallback to using the latest cache if no exact match is found - v1-dependencies- - run: name: Check Formatting command: cat /dev/null | sbt scalafmt::test test:scalafmt::test sbt:scalafmt::test - run: name: Compile command: cat /dev/null | sbt test:compile - save_cache: paths: - ~/.m2 key: v1-dependencies--{{ checksum "build.sbt" }} # run tests! - run: name: Test command: cat /dev/null | sbt test:test ================================================ FILE: .gitignore ================================================ # Created by .ignore support plugin (hsz.mobi) ### SBT template # Simple Build Tool # http://www.scala-sbt.org/release/docs/Getting-Started/Directories.html#configuring-version-control target/ lib_managed/ src_managed/ project/boot/ .history .cache ### Scala template *.class *.log # sbt specific .cache .history .lib/ dist/* target/ lib_managed/ src_managed/ project/boot/ project/plugins/project/ # Scala-IDE specific .scala_dependencies .worksheet .idea .bsp ================================================ FILE: .mergify.yml ================================================ pull_request_rules: - name: automatically merge scala-steward's PRs conditions: - author=scala-steward - "status-success=ci/circleci: validate" actions: merge: method: merge comment: message: "Thank you Scala Steward! :heart:" ================================================ FILE: .scalafmt.conf ================================================ maxColumn = 120 ================================================ FILE: LICENSE ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: README.md ================================================ twitter4s ========= [![twitter4s Scala version support](https://index.scala-lang.org/danielasfregola/twitter4s/twitter4s/latest-by-scala-version.svg)](https://index.scala-lang.org/danielasfregola/twitter4s/twitter4s) [![CircleCI](https://circleci.com/gh/DanielaSfregola/twitter4s/tree/main.svg?style=svg)](https://circleci.com/gh/DanielaSfregola/twitter4s/tree/main) [![codecov.io](http://codecov.io/github/DanielaSfregola/twitter4s/coverage.svg?branch=master)](http://codecov.io/github/DanielaSfregola/twitter4s?branch=master) [![License](http://img.shields.io/:license-Apache%202-red.svg)](http://www.apache.org/licenses/LICENSE-2.0.txt) [![Scala Steward badge](https://img.shields.io/badge/Scala_Steward-helping-brightgreen.svg?style=flat&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAMAAAARSr4IAAAAVFBMVEUAAACHjojlOy5NWlrKzcYRKjGFjIbp293YycuLa3pYY2LSqql4f3pCUFTgSjNodYRmcXUsPD/NTTbjRS+2jomhgnzNc223cGvZS0HaSD0XLjbaSjElhIr+AAAAAXRSTlMAQObYZgAAAHlJREFUCNdNyosOwyAIhWHAQS1Vt7a77/3fcxxdmv0xwmckutAR1nkm4ggbyEcg/wWmlGLDAA3oL50xi6fk5ffZ3E2E3QfZDCcCN2YtbEWZt+Drc6u6rlqv7Uk0LdKqqr5rk2UCRXOk0vmQKGfc94nOJyQjouF9H/wCc9gECEYfONoAAAAASUVORK5CYII=)](https://scala-steward.org) [![Chat](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/twitter4s/Lobby) An asynchronous non-blocking Scala Twitter Client, implemented using Akka-Http and json4s. Prerequisites ------------- * JDK 8 * Scala 2.12+ - Go to https://developer.twitter.com/, login with your twitter account and register your application to get a consumer key and a consumer secret. - Once the app has been created, generate a access key and access secret with the desired permission level. NOTE: v1.1 endpoints are unaccessible for new users. More information at https://twittercommunity.com/t/ushering-in-a-new-era-for-the-twitter-developer-platform-with-the-twitter-api-v2/162087 Rate Limits ----------- Be aware that the Twitter REST Api has rate limits specific to each endpoint. For more information, please have a look at the Twitter developers website [here](https://developer.twitter.com/en/docs/basics/rate-limiting). For all the endpoints that are affected these limitations, information on the current rates together with the requested data is provided by the [RatedData](http://danielasfregola.github.io/twitter4s/5.5/api/com/danielasfregola/twitter4s/entities/RatedData.html) case class. Setup ----- If you don't have it already, make sure you add the Maven Central as resolver in your SBT settings: ```scala resolvers += Resolver.sonatypeRepo("releases") ``` Also, you need to include the library as your dependency: ```scala libraryDependencies += "com.danielasfregola" %% "twitter4s" % "8.0" ``` Giter8 ------ If you are starting from scratch, you can use [`twitter4s.g8`](https://github.com/DanielaSfregola/twitter4s.g8) template to start your project. This template contains examples for both REST and Streaming client. ```bash > sbt new DanielaSfregola/twitter4s.g8 ``` Usage ----- Add your consumer and access token as either environment variables or as part of your configuration. Twitter4s will look for the following environment variables: ```bash export TWITTER_CONSUMER_TOKEN_KEY='my-consumer-key' export TWITTER_CONSUMER_TOKEN_SECRET='my-consumer-secret' export TWITTER_ACCESS_TOKEN_KEY='my-access-key' export TWITTER_ACCESS_TOKEN_SECRET='my-access-secret' ``` You can also add them to your configuration file, usually called `application.conf`: ```scala twitter { consumer { key = "my-consumer-key" secret = "my-consumer-secret" } access { key = "my-access-key" secret = "my-access-secret" } } ``` These configurations will be automatically loaded when creating a twitter client, so all you have to do is to initialize your clients as following: ```scala import com.danielasfregola.twitter4s.TwitterRestClient import com.danielasfregola.twitter4s.TwitterStreamingClient val restClient = TwitterRestClient() val streamingClient = TwitterStreamingClient() ``` Alternatively, you can also specify your tokens directly when creating the client: ```scala import com.danielasfregola.twitter4s.TwitterRestClient import com.danielasfregola.twitter4s.TwitterStreamingClient import com.danielasfregola.twitter4s.entities.{AccessToken, ConsumerToken} val consumerToken = ConsumerToken(key = "my-consumer-key", secret = "my-consumer-secret") val accessToken = AccessToken(key = "my-access-key", secret = "my-access-secret") val restClient = TwitterRestClient(consumerToken, accessToken) val streamingClient = TwitterStreamingClient(consumerToken, accessToken) ``` Once you have instantiated your client you are ready to use it! :smile: Twitter Streaming Client ----------------------- [TwitterStreamingClient](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/TwitterStreamingClient) is the client to support stream connections offered by the Twitter Streaming Api. You can initialize the client as follows: ```scala import com.danielasfregola.twitter4s.TwitterStreamingClient val client = TwitterStreamingClient() ``` There are three types of streams, each with different streaming message types: [Public Stream](https://github.com/DanielaSfregola/twitter4s#public-stream), [User Stream](https://github.com/DanielaSfregola/twitter4s#user-stream), [Site Stream](https://github.com/DanielaSfregola/twitter4s#site-stream). Each stream requires a partial function that indicates how to process messages. If a message type is not specified, it is ignored. See the section of each stream for more information. For example, you can create the following function to print the text of a tweet: ```scala import com.danielasfregola.twitter4s.entities.Tweet import com.danielasfregola.twitter4s.entities.streaming.StreamingMessage def printTweetText: PartialFunction[StreamingMessage, Unit] = { case tweet: Tweet => println(tweet.text) } ``` All you need to do is attach your processing function to the stream: ```scala client.sampleStatuses(stall_warnings = true)(printTweetText) ``` ...and you are done, happy days! :dancers: Have a look at [TwitterProcessor](https://github.com/DanielaSfregola/twitter4s/blob/master/src/main/scala/com/danielasfregola/twitter4s/processors/TwitterProcessor.scala) for some predefined processing functions. ### Close or Replace a Stream Each stream function returns a `Future[TwitterStream]`. `TwitterStream` represents the stream received by Twitter and it can be used to close or replace the current stream. For example, consider the following snippet: ```scala // TERRIBLE CODE! NEVER BLOCK! Code for demo purposes only! def simulateNextActionAfterMillis(millis: Long): Future[Unit] = Future{ Thread.sleep(millis); println() } for { streamA <- client.sampleStatuses(languages = Seq(Language.English)){ case t: Tweet => print("o")} _ <- simulateNextActionAfterMillis(10000) streamB <- streamA.sampleStatuses(languages = Seq(Language.Spanish)){ case t: Tweet => print("+")} _ <- simulateNextActionAfterMillis(10000) } yield streamB.close() ``` The above code can output something similar to the following: ```bash oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo +++++++++++++++ ``` In this example, we can see that there are more English tweets than Spanish tweets. ### Public Stream Have a look at the complete scaladoc for the [Public Stream Client](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/http/clients/streaming/statuses/TwitterStatusClient). #### Available streams - filterStatusesFilter - sampleStatusesSample - firehoseStatuses #### CommonStreamingMessage types: - [Tweet](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/Tweet) - [DisconnectMessage](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/common/DisconnectMessage) - [LimitNotice](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/common/LimitNotice) - [LocationDeletionNotice](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/common/LocationDeletionNotice) - [StatusDeletionNotice](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/common/StatusDeletionNotice) - [StatusWithheldNotice](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/common/StatusWithheldNotice) - [UserWithheldNotice](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/common/UserWithheldNotice) - [WarningMessage](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/common/WarningMessage) ### User Stream Have a look at the complete scaladoc for the [User Stream Client](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/http/clients/streaming/users/TwitterUserClient). #### Available streams - userEvents #### UserStreamingMessage types: - All the instances of `CommonStreamingMessage` -- see the [Public Stream Section](https://github.com/DanielaSfregola/twitter4s#public-stream) - [FriendsLists](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/user/FriendsLists) and [FriendsListsStringified](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/user/FriendsListsStringified) - [SimpleEvent](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/user/SimpleEvent) - [TweetEvent](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/user/TweetEvent) - [TwitterListEvent](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/user/TwitterListEvent) ### Site Stream Have a look at the complete scaladoc for the [Site Stream Client](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/http/clients/streaming/sites/TwitterSiteClient). #### Available streams - siteEvents #### SiteStreamingMessage types: - All the `CommonStreamingMessage`s -- see the [Public Stream Section](https://github.com/DanielaSfregola/twitter4s#public-stream) - [ControlMessage](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/site/ControlMessage) - [UserEnvelopTweet](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/site/UserEnvelopTweet) and [UserEnvelopTweetStringified](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/site/UserEnvelopTweetStringified) - [UserEnvelopDirectMessage](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/site/UserEnvelopDirectMessage) and [UserEnvelopDirectMessageStringified](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/site/UserEnvelopDirectMessageStringified) - [UserEnvelopSimpleEvent](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/site/UserEnvelopSimpleEvent) and [UserEnvelopSimpleEventStringified](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/site/UserEnvelopSimpleEventStringified) - [UserEnvelopTweetEvent](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/site/UserEnvelopTweetEvent) and [UserEnvelopTweetEventStringified](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/site/UserEnvelopTweetEventStringified) - [UserEnvelopTwitterListEvent](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/site/UserEnvelopTwitterListEvent) and [UserEnvelopTwitterListEventStringified](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/site/UserEnvelopTwitterListEventStringified) - [UserEnvelopFriendsLists](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/site/UserEnvelopFriendsLists) and [UserEnvelopFriendsListsEventStringified](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/site/UserEnvelopFriendsListsStringified) - [UserEnvelopWarningMessage](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/site/UserEnvelopWarningMessage) and [UserEnvelopWarningMessageStringified](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/entities/streaming/site/UserEnvelopWarningMessageStringified) ### Documentation The complete scaladoc with all the available streams for the `TwitterStreamingClient` can be found [here](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/TwitterStreamingClient). Twitter REST Client ------------------- [TwitterRestClient](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/TwitterRestClient) is the client for the REST endpoints offered by the Twitter REST Api. Once you have configured your consumer and access token, you can initialize an instance of `TwitterRestClient` as follows: ```scala import com.danielasfregola.twitter4s.TwitterRestClient val client = TwitterRestClient() ``` For example, you can get the home timeline of the authenticated user: ```scala client.homeTimeline() ``` or you can get the timeline of a specific user: ```scala client.userTimelineForUser("DanielaSfregola") ``` You can also update your tweet status: ```scala client.tweet(status = "Test") ``` Asynchronous upload of images or short videos is also supported: ```scala for { upload <- client.uploadMediaFromPath("/path/to/file.png") tweet <- client.tweet(status = "Test with media", media_ids = Seq(upload.media_id)) } yield tweet ``` ### Documentation The complete scaladoc with all the available functionalities for the `TwitterRestClient` can be found [here](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/TwitterRestClient). [TwitterRestClient](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/TwitterRestClient) is composed by several traits. A list of the supported resources is following: - [account](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/http/clients/rest/account/TwitterAccountClient) - [application](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/http/clients/rest/application/TwitterApplicationClient) - [blocks](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/http/clients/rest/blocks/TwitterBlockClient) - [direct_messages](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/http/clients/rest/directmessages/TwitterDirectMessageClient) - [favorites](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/http/clients/rest/favorites/TwitterFavoriteClient) - [followers](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/http/clients/rest/followers/TwitterFollowerClient) - [friends](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/http/clients/rest/friends/TwitterFriendClient) - [friendships](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/http/clients/rest/friendships/TwitterFriendshipClient) - [geo](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/http/clients/rest/geo/TwitterGeoClient) - [help](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/http/clients/rest/help/TwitterHelpClient) - [lists](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/http/clients/rest/lists/TwitterListClient) - [mutes](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/http/clients/rest/mutes/TwitterMuteClient) - [saved_searches](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/http/clients/rest/savedsearches/TwitterSavedSearchClient) - [searches](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/http/clients/rest/search/TwitterSearchClient) - [statuses](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/http/clients/rest/statuses/TwitterStatusClient) - [suggestions](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/http/clients/rest/suggestions/TwitterSuggestionClient) - [users](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/http/clients/rest/users/TwitterUserClient) - [trends](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/http/clients/rest/trends/TwitterTrendClient) - [media](http://danielasfregola.github.io/twitter4s/8.0/api/com/danielasfregola/twitter4s/http/clients/rest/media/TwitterMediaClient) Proxy Support ------------- If needed, you can redefine the domain used for each of the twitter api by overriding the following settings in your configuration file: ```scala twitter { rest { api = "https://api.twitter.com" media = "https://upload.twitter.com" } streaming { public = "https://stream.twitter.com" user = "https://userstream.twitter.com" site = "https://sitestream.twitter.com" } } ``` Logging ------- Twitter4s uses [scala-logging](https://github.com/typesafehub/scala-logging) and can be used in your `twitter4s` application. In your application you will need a logging backend (logback, logstash). [logback-classic](https://github.com/qos-ch/logback) is easy to use and will suit most needs. You can find a sample configuration in [twitter4s-demo](https://github.com/DanielaSfregola/twitter4s-demo) and in the Giter8 template [twitter4s.g8](https://github.com/DanielaSfregola/twitter4s.g8) Examples -------- Have a look at the repository [twitter4s-demo](https://github.com/DanielaSfregola/twitter4s-demo) for more examples on how to use `twitter4s`. Snapshot Versions ----------------- To use a snapshot version of this library, make sure you have the resolver for maven central (snapshot repositories) in your SBT settings: ```scala resolvers += Resolver.sonatypeRepo("snapshots") ``` Then, add the library as your dependency: ```scala libraryDependencies += "com.danielasfregola" %% "twitter4s" % "8.1-SNAPSHOT" ``` Coming up Features --------------- - OAuth1 support - Advanced query support - Support for dump to file - ... How to Contribute ----------------- Contributions and feature requests are always welcome! - Fork the repo and checkout the code - Make sure to run sbt with jdk8+ - Run the tests with `sbt test` - ...you can now do your magic and submit a PR when you are ready! :dancers: ================================================ FILE: build.sbt ================================================ import com.typesafe.sbt.SbtGit.{GitKeys => git} enablePlugins(GhpagesPlugin, SiteScaladocPlugin) name := "twitter4s" version := "8.1-SNAPSHOT" scalaVersion := "2.13.6" resolvers ++= Seq( Resolver.sonatypeRepo("releases"), Resolver.jcenterRepo ) libraryDependencies ++= { val Typesafe = "1.4.2" val Akka = "2.6.19" val AkkaHttp = "10.2.9" val AkkaHttpJson4s = "1.39.2" val Json4s = "4.0.5" val Specs2 = "4.15.0" val ScalaLogging = "3.9.4" val RandomDataGenerator = "2.8" Seq( "com.typesafe" % "config" % Typesafe, "com.typesafe.akka" %% "akka-actor" % Akka, "com.typesafe.akka" %% "akka-stream" % Akka, "com.typesafe.akka" %% "akka-http" % AkkaHttp, "de.heikoseeberger" %% "akka-http-json4s" % AkkaHttpJson4s, "org.json4s" %% "json4s-native" % Json4s, "org.json4s" %% "json4s-ext" % Json4s, "com.typesafe.scala-logging" %% "scala-logging" % ScalaLogging, "org.specs2" %% "specs2-core" % Specs2 % "test", "org.specs2" %% "specs2-mock" % Specs2 % "test", "com.typesafe.akka" %% "akka-testkit" % Akka % "test", "com.danielasfregola" %% "random-data-generator" % RandomDataGenerator % "test" ) } ThisBuild / scalacOptions ++= Seq("-language:postfixOps", "-language:implicitConversions", "-language:existentials", "-Xfatal-warnings", "-feature", "-deprecation:false") lazy val standardSettings = Seq( organization := "com.danielasfregola", licenses += ("Apache-2.0", url("http://www.apache.org/licenses/LICENSE-2.0.html")), homepage := Some(url("https://github.com/DanielaSfregola/twitter4s")), scmInfo := Some( ScmInfo(url("https://github.com/DanielaSfregola/twitter4s"), "scm:git:git@github.com:DanielaSfregola/twitter4s.git")), apiURL := Some(url("http://DanielaSfregola.github.io/twitter4s/latest/api/")), crossScalaVersions := Seq(scalaVersion.value, "2.12.15"), pomExtra := DanielaSfregola Daniela Sfregola http://danielasfregola.com/ , publishMavenStyle := true, publishTo := { if (version.value.trim.endsWith("SNAPSHOT")) Some(Opts.resolver.sonatypeSnapshots) else Some(Opts.resolver.sonatypeStaging) }, git.gitRemoteRepo := "git@github.com:DanielaSfregola/twitter4s.git", scalacOptions ++= Seq( "-encoding", "UTF-8", "-Xlint", "-deprecation:false", "-Xfatal-warnings", "-feature", "-language:postfixOps", "-unchecked" ), Compile / doc / scalacOptions ++= Seq("-sourcepath", baseDirectory.value.getAbsolutePath), autoAPIMappings := true, Compile / doc / scalacOptions ++= { val branch = if (version.value.trim.endsWith("SNAPSHOT")) "master" else version.value Seq( "-doc-source-url", "https://github.com/DanielaSfregola/twitter4s/tree/" + branch + "€{FILE_PATH}.scala" ) } ) lazy val coverageSettings = Seq( coverageExcludedPackages := "com.danielasfregola.twitter4s.processors.*;com.danielasfregola.twitter4s.Twitter*Client", coverageMinimum := 85 ) ThisBuild / scalafmtOnCompile := true ThisBuild / scalafmtTestOnCompile := true SiteScaladoc / siteSubdirName := version + "/api" lazy val root = (project in file(".")) .settings(standardSettings ++ coverageSettings) .settings( name := "twitter4s" ) ================================================ FILE: project/build.properties ================================================ sbt.version = 1.6.2 ================================================ FILE: project/plugins.sbt ================================================ addSbtPlugin("com.typesafe.sbt" % "sbt-site" % "1.4.1") addSbtPlugin("com.typesafe.sbt" % "sbt-ghpages" % "0.6.3") addSbtPlugin("com.github.sbt" % "sbt-unidoc" % "0.5.0") resolvers += Classpaths.sbtPluginReleases addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.6.0") addSbtPlugin("org.scoverage" % "sbt-coveralls" % "1.3.2") addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.9.12") addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.1.2") addSbtPlugin("com.lucidchart" % "sbt-scalafmt-coursier" % "1.16") Test / parallelExecution := false ================================================ FILE: sonatype.sbt ================================================ sonatypeProfileName := "com.danielasfregola" ================================================ FILE: src/main/resources/reference.conf ================================================ twitter { rest { api = "https://api.twitter.com" media = "https://upload.twitter.com" } streaming { public = "https://stream.twitter.com" user = "https://userstream.twitter.com" site = "https://sitestream.twitter.com" } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/TwitterAuthenticationClient.scala ================================================ package com.danielasfregola.twitter4s import akka.actor.ActorSystem import com.danielasfregola.twitter4s.entities.ConsumerToken import com.danielasfregola.twitter4s.http.clients.authentication.AuthenticationClient import com.danielasfregola.twitter4s.http.clients.authentication.oauth.TwitterOAuthClient import com.danielasfregola.twitter4s.util.Configurations._ import com.danielasfregola.twitter4s.util.SystemShutdown /** Represents the functionalities offered by the Twitter REST API for authentication */ class TwitterAuthenticationClient private (val consumerToken: ConsumerToken)(implicit _system: ActorSystem = ActorSystem("twitter4s-auth")) extends TwitterAuthClients with SystemShutdown { protected val system = _system protected val authenticationClient = new AuthenticationClient(consumerToken) } trait TwitterAuthClients extends TwitterOAuthClient object TwitterAuthenticationClient { def apply(): TwitterAuthenticationClient = { val consumerToken = ConsumerToken(key = consumerTokenKey, secret = consumerTokenSecret) apply(consumerToken) } def apply(consumerToken: ConsumerToken): TwitterAuthenticationClient = new TwitterAuthenticationClient(consumerToken) def withActorSystem(system: ActorSystem): TwitterAuthenticationClient = { val consumerToken = ConsumerToken(key = consumerTokenKey, secret = consumerTokenSecret) withActorSystem(consumerToken)(system) } def withActorSystem(consumerToken: ConsumerToken)(system: ActorSystem): TwitterAuthenticationClient = new TwitterAuthenticationClient(consumerToken)(system) } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/TwitterRestClient.scala ================================================ package com.danielasfregola.twitter4s import akka.actor.ActorSystem import com.danielasfregola.twitter4s.entities.{AccessToken, ConsumerToken} import com.danielasfregola.twitter4s.http.clients.rest.RestClient import com.danielasfregola.twitter4s.http.clients.rest.account.TwitterAccountClient import com.danielasfregola.twitter4s.http.clients.rest.accountactivity.TwitterAccountActivityClient import com.danielasfregola.twitter4s.http.clients.rest.application.TwitterApplicationClient import com.danielasfregola.twitter4s.http.clients.rest.blocks.TwitterBlockClient import com.danielasfregola.twitter4s.http.clients.rest.directmessages.TwitterDirectMessageClient import com.danielasfregola.twitter4s.http.clients.rest.favorites.TwitterFavoriteClient import com.danielasfregola.twitter4s.http.clients.rest.followers.TwitterFollowerClient import com.danielasfregola.twitter4s.http.clients.rest.friends.TwitterFriendClient import com.danielasfregola.twitter4s.http.clients.rest.friendships.TwitterFriendshipClient import com.danielasfregola.twitter4s.http.clients.rest.geo.TwitterGeoClient import com.danielasfregola.twitter4s.http.clients.rest.help.TwitterHelpClient import com.danielasfregola.twitter4s.http.clients.rest.lists.TwitterListClient import com.danielasfregola.twitter4s.http.clients.rest.media.TwitterMediaClient import com.danielasfregola.twitter4s.http.clients.rest.mutes.TwitterMuteClient import com.danielasfregola.twitter4s.http.clients.rest.savedsearches.TwitterSavedSearchClient import com.danielasfregola.twitter4s.http.clients.rest.search.TwitterSearchClient import com.danielasfregola.twitter4s.http.clients.rest.statuses.TwitterStatusClient import com.danielasfregola.twitter4s.http.clients.rest.suggestions.TwitterSuggestionClient import com.danielasfregola.twitter4s.http.clients.rest.trends.TwitterTrendClient import com.danielasfregola.twitter4s.http.clients.rest.users.TwitterUserClient import com.danielasfregola.twitter4s.util.Configurations._ import com.danielasfregola.twitter4s.util.SystemShutdown /** Represents the functionalities offered by the Twitter REST API */ class TwitterRestClient(val consumerToken: ConsumerToken, val accessToken: AccessToken)(implicit _system: ActorSystem = ActorSystem("twitter4s-rest")) extends RestClients with SystemShutdown { protected val system = _system protected val restClient = new RestClient(consumerToken, accessToken) } trait RestClients extends TwitterAccountClient with TwitterAccountActivityClient with TwitterApplicationClient with TwitterBlockClient with TwitterDirectMessageClient with TwitterFavoriteClient with TwitterFollowerClient with TwitterFriendClient with TwitterFriendshipClient with TwitterGeoClient with TwitterHelpClient with TwitterListClient with TwitterMediaClient with TwitterMuteClient with TwitterSavedSearchClient with TwitterSearchClient with TwitterStatusClient with TwitterSuggestionClient with TwitterTrendClient with TwitterUserClient object TwitterRestClient { def apply(): TwitterRestClient = { val consumerToken = ConsumerToken(key = consumerTokenKey, secret = consumerTokenSecret) val accessToken = AccessToken(key = accessTokenKey, secret = accessTokenSecret) apply(consumerToken, accessToken) } def apply(consumerToken: ConsumerToken, accessToken: AccessToken): TwitterRestClient = new TwitterRestClient(consumerToken, accessToken) def withActorSystem(system: ActorSystem): TwitterRestClient = { val consumerToken = ConsumerToken(key = consumerTokenKey, secret = consumerTokenSecret) val accessToken = AccessToken(key = accessTokenKey, secret = accessTokenSecret) withActorSystem(consumerToken, accessToken)(system) } def withActorSystem(consumerToken: ConsumerToken, accessToken: AccessToken)(system: ActorSystem): TwitterRestClient = new TwitterRestClient(consumerToken, accessToken)(system) } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/TwitterRestV2Client.scala ================================================ package com.danielasfregola.twitter4s import akka.actor.ActorSystem import com.danielasfregola.twitter4s.entities.{AccessToken, ConsumerToken} import com.danielasfregola.twitter4s.http.clients.rest.RestClient import com.danielasfregola.twitter4s.http.clients.rest.v2.tweets.{ TwitterSearchTweetsClient, TwitterTimelinesClient, TwitterTweetLookupClient } import com.danielasfregola.twitter4s.http.clients.rest.v2.users.TwitterUserLookupClient import com.danielasfregola.twitter4s.util.Configurations._ import com.danielasfregola.twitter4s.util.SystemShutdown /** Represents the functionalities offered by the V2 Twitter REST API */ class TwitterRestV2Client(val consumerToken: ConsumerToken, val accessToken: AccessToken)( implicit _system: ActorSystem = ActorSystem("twitter4s-rest-v2")) extends V2RestClients with SystemShutdown { protected val system = _system protected val restClient = new RestClient(consumerToken, accessToken) } trait V2RestClients extends TwitterTimelinesClient with TwitterTweetLookupClient with TwitterSearchTweetsClient with TwitterUserLookupClient object TwitterRestV2Client { def apply(): TwitterRestV2Client = { val consumerToken = ConsumerToken(key = consumerTokenKey, secret = consumerTokenSecret) val accessToken = AccessToken(key = accessTokenKey, secret = accessTokenSecret) apply(consumerToken, accessToken) } def apply(consumerToken: ConsumerToken, accessToken: AccessToken): TwitterRestV2Client = new TwitterRestV2Client(consumerToken, accessToken) def withActorSystem(system: ActorSystem): TwitterRestV2Client = { val consumerToken = ConsumerToken(key = consumerTokenKey, secret = consumerTokenSecret) val accessToken = AccessToken(key = accessTokenKey, secret = accessTokenSecret) withActorSystem(consumerToken, accessToken)(system) } def withActorSystem(consumerToken: ConsumerToken, accessToken: AccessToken)( system: ActorSystem): TwitterRestV2Client = new TwitterRestV2Client(consumerToken, accessToken)(system) } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/TwitterStreamingClient.scala ================================================ package com.danielasfregola.twitter4s import akka.actor.ActorSystem import com.danielasfregola.twitter4s.entities.{AccessToken, ConsumerToken} import com.danielasfregola.twitter4s.http.clients.streaming.StreamingClient import com.danielasfregola.twitter4s.http.clients.streaming.sites.TwitterSiteClient import com.danielasfregola.twitter4s.http.clients.streaming.statuses.TwitterStatusClient import com.danielasfregola.twitter4s.http.clients.streaming.users.TwitterUserClient import com.danielasfregola.twitter4s.util.Configurations._ import com.danielasfregola.twitter4s.util.SystemShutdown /** Represents the functionalities offered by the Twitter Streaming API */ class TwitterStreamingClient private (val consumerToken: ConsumerToken, val accessToken: AccessToken)( implicit _system: ActorSystem = ActorSystem("twitter4s-streaming")) extends StreamingClients with SystemShutdown { protected val system = _system protected val streamingClient = new StreamingClient(consumerToken, accessToken) } trait StreamingClients extends TwitterStatusClient with TwitterUserClient with TwitterSiteClient object TwitterStreamingClient { def apply(): TwitterStreamingClient = { val consumerToken = ConsumerToken(key = consumerTokenKey, secret = consumerTokenSecret) val accessToken = AccessToken(key = accessTokenKey, secret = accessTokenSecret) apply(consumerToken, accessToken) } def apply(consumerToken: ConsumerToken, accessToken: AccessToken): TwitterStreamingClient = new TwitterStreamingClient(consumerToken, accessToken) def withActorSystem(system: ActorSystem): TwitterStreamingClient = { val consumerToken = ConsumerToken(key = consumerTokenKey, secret = consumerTokenSecret) val accessToken = AccessToken(key = accessTokenKey, secret = accessTokenSecret) withActorSystem(consumerToken, accessToken)(system) } def withActorSystem(consumerToken: ConsumerToken, accessToken: AccessToken)( system: ActorSystem): TwitterStreamingClient = new TwitterStreamingClient(consumerToken, accessToken)(system) } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/AccessToken.scala ================================================ package com.danielasfregola.twitter4s.entities final case class AccessToken(key: String, secret: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Accuracy.scala ================================================ package com.danielasfregola.twitter4s.entities import com.danielasfregola.twitter4s.entities.enums.Measure import com.danielasfregola.twitter4s.entities.enums.Measure.Measure final case class Accuracy(amount: Int, unit: Measure) { override def toString = s"$amount$unit" } object Accuracy { val Default = Accuracy(0, Measure.Meter) } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Area.scala ================================================ package com.danielasfregola.twitter4s.entities final case class Area(coordinates: Seq[Seq[Seq[Double]]], `type`: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Banners.scala ================================================ package com.danielasfregola.twitter4s.entities final case class Banners(sizes: Map[String, Banner] = Map.empty) final case class Banner(h: Int, w: Int, url: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Category.scala ================================================ package com.danielasfregola.twitter4s.entities final case class Category(name: String, slug: String, size: Int) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Configuration.scala ================================================ package com.danielasfregola.twitter4s.entities final case class Configuration(dm_text_character_limit: Long, characters_reserved_per_media: Int, max_media_per_upload: Int, non_username_paths: Seq[String] = Seq.empty, photo_size_limit: Long, photo_sizes: Map[String, Size] = Map.empty, short_url_length: Int, short_url_length_https: Int) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/ConsumerToken.scala ================================================ package com.danielasfregola.twitter4s.entities final case class ConsumerToken(key: String, secret: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Contributor.scala ================================================ package com.danielasfregola.twitter4s.entities final case class Contributor(id: Long, id_str: String, screen_name: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Coordinate.scala ================================================ package com.danielasfregola.twitter4s.entities final case class Coordinate(longitude: Double, latitude: Double) { def toLngLatPair: (Double, Double) = (longitude, latitude) } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Coordinates.scala ================================================ package com.danielasfregola.twitter4s.entities final case class Coordinates(coordinates: Seq[Double] = Seq.empty, `type`: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/DirectMessage.scala ================================================ package com.danielasfregola.twitter4s.entities import java.time.Instant import com.danielasfregola.twitter4s.entities.streaming.UserStreamingMessage final case class DirectMessage(created_at: Instant, entities: Option[Entities], id: Long, id_str: String, recipient: User, recipient_id: Long, recipient_id_str: String, recipient_screen_name: String, sender: User, sender_id: Long, sender_id_str: String, sender_screen_name: String, text: String) extends UserStreamingMessage ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/DirectMessageEvent.scala ================================================ package com.danielasfregola.twitter4s.entities import java.time.Instant final case class DirectMessageEvent(`type`: String, id: String, created_timestamp: Instant, message_create: MessageCreate) final case class MessageCreate(target: Target, sender_id: Option[String], message_data: MessageData) final case class Target(recipient_id: String) final case class MessageData(text: String, entities: Option[Entities] = None, attachment: Option[Attachment] = None) final case class Attachment(`type`: String, media: Media) final case class Apps(id: String, name: String, url: String) final case class Event(event: DirectMessageEvent, apps: Map[String, App] = Map.empty) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/DirectMessageEventList.scala ================================================ package com.danielasfregola.twitter4s.entities import com.danielasfregola.twitter4s.entities.streaming.UserStreamingMessage final case class DirectMessageEventList(events: List[DirectMessageEvent], apps: Map[String, Apps] = Map.empty, next_cursor: Option[String]) extends UserStreamingMessage ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Entities.scala ================================================ package com.danielasfregola.twitter4s.entities // TODO - conversion to clean this representation? see url vs urls // unfortunately Twitter is not consistent when representing this entity... final case class Entities(hashtags: Seq[HashTag] = Seq.empty, media: Seq[Media] = Seq.empty, symbols: Seq[Symbol] = Seq.empty, url: Option[Urls] = None, urls: Seq[UrlDetails] = Seq.empty, user_mentions: Seq[UserMention] = Seq.empty, description: Option[Urls] = None) final case class Urls(urls: Seq[UrlDetails] = Seq.empty) final case class UrlDetails(url: String, expanded_url: String, display_url: String, indices: Seq[Int]) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/ExtendedTweet.scala ================================================ package com.danielasfregola.twitter4s.entities final case class ExtendedTweet(full_text: String, display_text_range: Seq[Int] = Seq.empty, entities: Option[Entities] = None, extended_entities: Option[Entities] = None) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Geo.scala ================================================ package com.danielasfregola.twitter4s.entities final case class Geo(coordinates: Seq[Double] = Seq.empty, `type`: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/GeoBoundingBox.scala ================================================ package com.danielasfregola.twitter4s.entities final case class GeoBoundingBox(southwest: Coordinate, northeast: Coordinate) { def toLngLatPairs: Seq[(Double, Double)] = Seq(southwest.toLngLatPair, northeast.toLngLatPair) } object GeoBoundingBox { def toLngLatPairs(boundingBoxes: Seq[GeoBoundingBox]): Seq[(Double, Double)] = { boundingBoxes.flatMap(_.toLngLatPairs) } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/GeoCode.scala ================================================ package com.danielasfregola.twitter4s.entities final case class GeoCode(latitude: Double, longitude: Double, radius: Accuracy) { override def toString = s"$latitude,$longitude,$radius" } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/GeoPlace.scala ================================================ package com.danielasfregola.twitter4s.entities final case class GeoPlace(attributes: Map[String, String], bounding_box: Area, country: String, country_code: String, full_name: String, id: String, name: String, place_type: String, url: String, contained_within: Seq[GeoPlace], centroid: Seq[Double] = Seq.empty, polylines: Seq[String] = Seq.empty) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/GeoSearch.scala ================================================ package com.danielasfregola.twitter4s.entities final case class GeoSearch(query: GeoQuery, result: GeoResult) final case class GeoQuery(params: GeoParams, `type`: String, url: String) final case class GeoResult(places: Seq[GeoPlace] = Seq.empty) final case class GeoParams(accuracy: String, granularity: String, coordinates: Option[Coordinates] = None, query: Option[String] = None, autocomplete: Boolean = false, trim_place: Boolean = false) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/HashTag.scala ================================================ package com.danielasfregola.twitter4s.entities final case class HashTag(text: String, indices: Seq[Int]) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Image.scala ================================================ package com.danielasfregola.twitter4s.entities final case class Image(w: Int, h: Int, image_type: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/LanguageDetails.scala ================================================ package com.danielasfregola.twitter4s.entities final case class LanguageDetails(code: String, status: String, name: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Location.scala ================================================ package com.danielasfregola.twitter4s.entities final case class Location(country: String, countryCode: Option[String], name: String, parentid: Long, placeType: PlaceType, url: String, woeid: Long) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/LocationTrends.scala ================================================ package com.danielasfregola.twitter4s.entities final case class LocationTrends(as_of: String, // TODO - convert to Instant? Different date format here... created_at: String, // TODO - convert to Instant? Different date format here... locations: Seq[LocationOverview] = Seq.empty, trends: Seq[Trend] = Seq.empty) final case class LocationOverview(name: String, woeid: Long) // TODO - support 'promoted_content' and 'events' final case class Trend(name: String, query: String, url: String, tweet_volume: Option[Long]) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/LookupEntities.scala ================================================ package com.danielasfregola.twitter4s.entities final case class LookupEntities(url: LookupUrls, description: LookupUrls) final case class LookupUrls(urls: Seq[LookupUrl]) final case class LookupUrl(url: String, expanded_url: String, display_url: String, indices: Seq[Int]) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/LookupMapped.scala ================================================ package com.danielasfregola.twitter4s.entities final case class LookupMapped(id: Map[String, Tweet] = Map.empty) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/LookupRelationship.scala ================================================ package com.danielasfregola.twitter4s.entities final case class LookupRelationship(connections: Seq[String] = Seq.empty, id: Long, id_str: String, name: String, screen_name: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/LookupTweet.scala ================================================ package com.danielasfregola.twitter4s.entities import java.time.Instant final case class LookupTweet( contributors: Seq[Contributor], coordinates: Seq[Seq[Seq[Double]]] = Seq.empty, created_at: Instant, entities: Option[Entities], favorite_count: Int = 0, favorited: Boolean = false, id: Long, id_str: String, in_reply_to_screen_name: Option[String], in_reply_to_status_id: Option[Long], in_reply_to_status_id_str: Option[String], in_reply_to_user_id: Option[Long], in_reply_to_user_id_str: Option[String], is_quote_status: Boolean = false, lang: Option[String], place: Option[GeoPlace], possibly_sensitive: Boolean = false, retweet_count: Long = 0, retweeted: Boolean = false, source: String, text: String, truncated: Boolean = false, user: Option[LookupUser] ) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/LookupUser.scala ================================================ package com.danielasfregola.twitter4s.entities import java.time.Instant final case class LookupUser( contributors_enabled: Boolean = false, created_at: Instant, default_profile: Boolean = false, default_profile_image: Boolean = false, description: Option[String] = None, entities: Option[LookupEntities] = None, favourites_count: Int, follow_request_sent: Boolean = false, following: Boolean = false, followers_count: Int, friends_count: Int, geo_enabled: Boolean = false, has_extended_profile: Boolean = false, id: Long, id_str: String, is_translator: Boolean = false, is_translation_enabled: Boolean = false, lang: String, listed_count: Int, location: Option[String] = None, name: String, notifications: Boolean = false, profile_background_color: String, profile_background_image_url: String, profile_background_image_url_https: String, profile_background_tile: Boolean = false, profile_banner_url: Option[String] = None, profile_image_url: Option[ProfileImage], profile_image_url_https: Option[ProfileImage], profile_link_color: String, profile_sidebar_border_color: String, profile_sidebar_fill_color: String, profile_text_color: String, profile_use_background_image: Boolean = false, `protected`: Boolean = false, screen_name: String, statuses_count: Int, time_zone: Option[String] = None, url: Option[String] = None, utc_offset: Option[Int] = None, verified: Boolean = false, withheld_in_countries: Option[String] = None, withheld_scope: Option[String] = None ) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Media.scala ================================================ package com.danielasfregola.twitter4s.entities final case class Media(display_url: String, expanded_url: String, id: Long, id_str: String, indices: Seq[Int], media_url: String, media_url_https: String, sizes: Map[String, Size], source_status_id: Option[Long], source_status_id_str: Option[String], `type`: String, url: String, video_info: Option[VideoInfo]) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/MediaDetails.scala ================================================ package com.danielasfregola.twitter4s.entities final case class MediaDetails(media_id: Long, media_id_string: String, expires_after_secs: Option[Int] = None, size: Option[Long] = None, image: Option[Image] = None, video: Option[Video] = None, processing_info: Option[ProcessingInfo] = None) final case class ProcessingInfo(state: String, progress_percent: Option[Long], check_after_secs: Option[Int], error: Option[ProcessingError]) final case class ProcessingError(code: Int, name: String, message: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/MediaUpload.scala ================================================ package com.danielasfregola.twitter4s.entities final case class MediaUpload(media: String, additional_owners: Option[String]) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/OEmbedTweet.scala ================================================ package com.danielasfregola.twitter4s.entities final case class OEmbedTweet(author_name: Option[String], author_url: Option[String], cache_age: Option[String], height: Option[Int], html: String, provider_url: Option[String], provider_name: Option[String], title: Option[String], `type`: String, url: String, version: String, width: Option[Int]) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/PrivacyPolicy.scala ================================================ package com.danielasfregola.twitter4s.entities final case class PrivacyPolicy(privacy: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/ProfileImage.scala ================================================ package com.danielasfregola.twitter4s.entities final case class ProfileImage(mini: String, normal: String, bigger: String, default: String) object ProfileImage { def apply(original: String): ProfileImage = { val mini = resize(original, "_mini") val normal = resize(original, "_normal") val big = resize(original, "_bigger") val default = resize(original, "") apply(mini, normal, big, default) } private def resize(original: String, size: String): String = { val lastUnderscore = original.lastIndexOf('_') val lastDot = original.lastIndexOf('.') val prefix = original.substring(0, lastUnderscore) val suffix = original.substring(lastDot) s"$prefix$size$suffix" } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/ProfileUpdate.scala ================================================ package com.danielasfregola.twitter4s.entities final case class ProfileUpdate(name: Option[String] = None, url: Option[String] = None, description: Option[String] = None, location: Option[String] = None, profile_link_color: Option[String] = None, include_entities: Boolean = true, skip_status: Boolean = false) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/RateLimit.scala ================================================ package com.danielasfregola.twitter4s.entities import java.time.Instant import akka.http.scaladsl.model.{HttpHeader, StatusCodes} import com.danielasfregola.twitter4s.exceptions.TwitterException final case class RateLimit(limit: Int, remaining: Int, reset: Instant) object RateLimit { def apply(limit: Int, remaining: Int, reset: Long): RateLimit = apply(limit, remaining, Instant.ofEpochSecond(reset)) def apply(headers: Seq[HttpHeader]): RateLimit = { val errorMsg = s"""Rate Information expected but not found. | |Please report it at https://github.com/DanielaSfregola/twitter4s/issues/new |Headers names were: ${headers.map(_.lowercaseName).mkString(", ")}""".stripMargin def extractHeaderValue[T](name: String)(f: String => T): T = headers .find(_.lowercaseName == name) .map(h => f(h.value)) .getOrElse(throw TwitterException(StatusCodes.InternalServerError, errorMsg)) val limit = extractHeaderValue("x-rate-limit-limit")(_.toInt) val remaining = extractHeaderValue("x-rate-limit-remaining")(_.toInt) val reset = extractHeaderValue("x-rate-limit-reset")(_.toLong) apply(limit, remaining, reset) } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/RateLimits.scala ================================================ package com.danielasfregola.twitter4s.entities final case class RateLimits(rate_limit_context: RateLimitContext, resources: Resources) final case class RateLimitContext(access_token: String) final case class Resources(lists: Map[String, RateLimit] = Map.empty, application: Map[String, RateLimit] = Map.empty, mutes: Map[String, RateLimit] = Map.empty, friendships: Map[String, RateLimit] = Map.empty, blocks: Map[String, RateLimit] = Map.empty, geo: Map[String, RateLimit] = Map.empty, users: Map[String, RateLimit] = Map.empty, followers: Map[String, RateLimit] = Map.empty, collections: Map[String, RateLimit] = Map.empty, statuses: Map[String, RateLimit] = Map.empty, contacts: Map[String, RateLimit] = Map.empty, moments: Map[String, RateLimit] = Map.empty, help: Map[String, RateLimit] = Map.empty, friends: Map[String, RateLimit] = Map.empty, direct_messages: Map[String, RateLimit] = Map.empty, account: Map[String, RateLimit] = Map.empty, favorites: Map[String, RateLimit] = Map.empty, device: Map[String, RateLimit] = Map.empty, saved_searches: Map[String, RateLimit] = Map.empty, search: Map[String, RateLimit] = Map.empty, trends: Map[String, RateLimit] = Map.empty) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/RatedData.scala ================================================ package com.danielasfregola.twitter4s.entities /** A wrapper for data that have rate limitation. * Have a look at `rate_limit` for more information on current rates usage. */ final case class RatedData[T](rate_limit: RateLimit, data: T) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Relationship.scala ================================================ package com.danielasfregola.twitter4s.entities final case class Relationship(relationship: RelationshipOverview) final case class RelationshipOverview(source: RelationshipSource, target: RelationshipTarget) final case class RelationshipSource(id: Long, id_str: String, screen_name: String, following: Boolean = false, followed_by: Boolean = false, following_received: Boolean = false, following_requested: Boolean = false, notifications_enabled: Boolean = false, can_dm: Boolean = false, blocking: Boolean = false, blocked_by: Boolean = false, muting: Boolean = false, want_retweets: Boolean = false, all_replies: Boolean = false, marked_spam: Boolean = false) final case class RelationshipTarget(id: Long, id_str: String, screen_name: String, following: Boolean = false, followed_by: Boolean = false, following_received: Boolean = false, following_requested: Boolean = false) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/SavedSearch.scala ================================================ package com.danielasfregola.twitter4s.entities import java.time.Instant final case class SavedSearch(created_at: Instant, id: Long, id_str: String, name: String, query: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Settings.scala ================================================ package com.danielasfregola.twitter4s.entities final case class Settings(allow_contributor_request: String, allow_dm_groups_from: String, allow_dms_from: String, always_use_https: Boolean = false, discoverable_by_email: Boolean = false, discoverable_by_mobile_phone: Boolean = false, geo_enabled: Boolean = false, language: String, `protected`: Boolean = false, screen_name: String, sleep_time: SleepTime, show_all_inline_media: Boolean = false, use_cookie_personalization: Boolean = false, time_zone: Option[TimeZoneRecord] = None, trend_location: Seq[Location] = Seq.empty) final case class SleepTime(enabled: Boolean = false, end_time: Option[String] = None, start_time: Option[String] = None) final case class TimeZoneRecord(name: String, tzinfo_name: String, utc_offset: Int) final case class PlaceType(code: String, name: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/SettingsOptions.scala ================================================ package com.danielasfregola.twitter4s.entities import com.danielasfregola.twitter4s.entities.enums.ContributorType.ContributorType import com.danielasfregola.twitter4s.entities.enums.Hour.Hour import com.danielasfregola.twitter4s.entities.enums.Language.Language import com.danielasfregola.twitter4s.entities.enums.TimeZone.TimeZone /** * woeid: "Where on Earth Identifiers, by Yahoo!! see http://woeid.rosselliot.co.nz/" * */ final case class SettingsOptions(allow_contributor_request: Option[ContributorType] = None, sleep_time_enabled: Option[Boolean] = None, start_sleep_time: Option[Hour] = None, end_sleep_time: Option[Hour] = None, lang: Option[Language] = None, time_zone: Option[TimeZone] = None, trend_location_woeid: Option[Long] = None) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Size.scala ================================================ package com.danielasfregola.twitter4s.entities final case class Size(h: Int, resize: String, w: Int) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/StatusMediaDetails.scala ================================================ package com.danielasfregola.twitter4s.entities final case class StatusMediaDetails(media_id: Long, media_id_string: String, expires_after_secs: Int) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Suggestions.scala ================================================ package com.danielasfregola.twitter4s.entities final case class Suggestions(name: String, slug: String, size: Int, users: Seq[User] = Seq.empty) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Symbol.scala ================================================ package com.danielasfregola.twitter4s.entities final case class Symbol(text: String, indices: Seq[Int]) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/TermsOfService.scala ================================================ package com.danielasfregola.twitter4s.entities final case class TermsOfService(tos: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Tweet.scala ================================================ package com.danielasfregola.twitter4s.entities import java.time.Instant import com.danielasfregola.twitter4s.entities.streaming.CommonStreamingMessage final case class Tweet(contributors: Seq[Contributor] = Seq.empty, coordinates: Option[Coordinates] = None, created_at: Instant, current_user_retweet: Option[TweetId] = None, entities: Option[Entities] = None, extended_entities: Option[Entities] = None, extended_tweet: Option[ExtendedTweet] = None, favorite_count: Int = 0, favorited: Boolean = false, filter_level: Option[String] = None, geo: Option[Geo] = None, id: Long, id_str: String, in_reply_to_screen_name: Option[String] = None, in_reply_to_status_id: Option[Long] = None, in_reply_to_status_id_str: Option[String] = None, in_reply_to_user_id: Option[Long] = None, in_reply_to_user_id_str: Option[String] = None, is_quote_status: Boolean = false, lang: Option[String] = None, place: Option[GeoPlace] = None, possibly_sensitive: Boolean = false, quoted_status_id: Option[Long] = None, quoted_status_id_str: Option[String] = None, quoted_status: Option[Tweet] = None, scopes: Map[String, Boolean] = Map.empty, retweet_count: Long = 0, retweeted: Boolean = false, retweeted_status: Option[Tweet] = None, source: String, text: String, truncated: Boolean = false, display_text_range: Option[Seq[Int]] = None, user: Option[User] = None, withheld_copyright: Boolean = false, withheld_in_countries: Seq[String] = Seq.empty, withheld_scope: Option[String] = None, metadata: Option[StatusMetadata] = None) extends CommonStreamingMessage ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/TweetId.scala ================================================ package com.danielasfregola.twitter4s.entities final case class TweetId(id: Long, id_str: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/TweetSearch.scala ================================================ package com.danielasfregola.twitter4s.entities final case class StatusSearch(statuses: List[Tweet], search_metadata: SearchMetadata) final case class SearchMetadata(completed_in: Double, max_id: Long, max_id_str: String, next_results: Option[String], query: String, refresh_url: Option[String], count: Int, since_id: Long, since_id_str: String) final case class StatusMetadata(iso_language_code: String, result_type: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/TweetUpdate.scala ================================================ package com.danielasfregola.twitter4s.entities final case class TweetUpdate(status: String, in_reply_to_status_id: Option[Long] = None, possibly_sensitive: Boolean = false, lat: Option[Long] = None, long: Option[Long] = None, place_id: Option[String] = None, display_coordinates: Boolean = false, trim_user: Boolean = false, media_ids: Seq[Long] = Seq.empty) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/TwitterList.scala ================================================ package com.danielasfregola.twitter4s.entities import java.time.Instant final case class TwitterList(created_at: Instant, description: String, following: Boolean, full_name: String, id: Long, id_str: String, name: String, subscriber_count: Int, uri: String, member_count: Int, mode: String, slug: String, user: User) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/TwitterListUpdate.scala ================================================ package com.danielasfregola.twitter4s.entities import com.danielasfregola.twitter4s.entities.enums.Mode.Mode final case class TwitterListUpdate(description: Option[String] = None, mode: Option[Mode] = None, name: Option[String] = None) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/TwitterLists.scala ================================================ package com.danielasfregola.twitter4s.entities final case class TwitterLists(lists: Seq[TwitterList] = Seq.empty, next_cursor: Long, previous_cursor: Long) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/UploadedMedia.scala ================================================ package com.danielasfregola.twitter4s.entities final case class UploadedMedia(media_id: Long, media_id_str: String, size: Int, image: Option[Image] = None, video: Option[Video] = None) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Url.scala ================================================ package com.danielasfregola.twitter4s.entities final case class Url(indices: Seq[Int] = Seq.empty, url: String, display_url: String, expanded_url: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/User.scala ================================================ package com.danielasfregola.twitter4s.entities import java.time.Instant final case class User(blocked_by: Boolean = false, blocking: Boolean = false, contributors_enabled: Boolean = false, created_at: Instant, default_profile: Boolean = false, default_profile_image: Boolean = false, description: Option[String] = None, email: Option[String] = None, entities: Option[Entities] = None, favourites_count: Int, follow_request_sent: Boolean = false, following: Boolean = false, followers_count: Int, friends_count: Int, geo_enabled: Boolean = false, has_extended_profile: Boolean = false, id: Long, id_str: String, is_translation_enabled: Boolean = false, is_translator: Boolean = false, lang: String, listed_count: Int, location: Option[String] = None, muting: Boolean = false, name: String, notifications: Boolean = false, profile_background_color: String, profile_background_image_url: String, profile_background_image_url_https: String, profile_background_tile: Boolean = false, profile_banner_url: Option[String] = None, profile_image_url: Option[ProfileImage], profile_image_url_https: Option[ProfileImage], profile_link_color: String, profile_location: Option[String], profile_sidebar_border_color: String, profile_sidebar_fill_color: String, profile_text_color: String, profile_use_background_image: Boolean = false, `protected`: Boolean = false, screen_name: String, show_all_inline_media: Boolean = false, status: Option[Tweet] = None, statuses_count: Int, time_zone: Option[String] = None, translator_type: Option[String] = None, url: Option[String] = None, utc_offset: Option[Int] = None, verified: Boolean = false, withheld_in_countries: Option[String] = None, withheld_scope: Option[String] = None) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/UserIds.scala ================================================ package com.danielasfregola.twitter4s.entities final case class UserIds(ids: Seq[Long] = Seq.empty, next_cursor: Long, previous_cursor: Long) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/UserMention.scala ================================================ package com.danielasfregola.twitter4s.entities final case class UserMention(id: Long, id_str: String, indices: Seq[Int] = Seq.empty, name: String, screen_name: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/UserStringifiedIds.scala ================================================ package com.danielasfregola.twitter4s.entities final case class UserStringifiedIds(ids: Seq[String] = Seq.empty, next_cursor: Long, previous_cursor: Long) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Users.scala ================================================ package com.danielasfregola.twitter4s.entities final case class Users(users: Seq[User] = Seq.empty, next_cursor: Long, previous_cursor: Long) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Variant.scala ================================================ package com.danielasfregola.twitter4s.entities final case class Variant(bitrate: Option[Long], content_type: String, url: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Video.scala ================================================ package com.danielasfregola.twitter4s.entities final case class Video(video_type: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/VideoInfo.scala ================================================ package com.danielasfregola.twitter4s.entities final case class VideoInfo(aspect_ratio: Seq[Int], duration_millis: Option[Long], variants: Seq[Variant]) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/Webhook.scala ================================================ package com.danielasfregola.twitter4s.entities import java.time.ZonedDateTime final case class Webhook(id: String, url: String, valid: Boolean, created_timestamp: ZonedDateTime) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/authentication/OAuthAccessToken.scala ================================================ package com.danielasfregola.twitter4s.entities.authentication import com.danielasfregola.twitter4s.entities.AccessToken import com.danielasfregola.twitter4s.http.serializers.FromMap final case class OAuthAccessToken(accessToken: AccessToken, user_id: Long, screen_name: String) object OAuthAccessToken { implicit val oAuthAccessTokenFromMap = new FromMap[OAuthAccessToken] { def apply(m: Map[String, String]): Option[OAuthAccessToken] = for { key <- m.get("oauth_token") secret <- m.get("oauth_token_secret") userId <- m.get("user_id") screenName <- m.get("screen_name") } yield OAuthAccessToken(AccessToken(key, secret), userId.toLong, screenName) } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/authentication/OAuthRequestToken.scala ================================================ package com.danielasfregola.twitter4s.entities.authentication import com.danielasfregola.twitter4s.http.serializers.FromMap final case class OAuthRequestToken(token: RequestToken, oauth_callback_confirmed: Boolean) final case class RequestToken(key: String, secret: String) object OAuthRequestToken { implicit val oAuthRequestTokenFromMap = new FromMap[OAuthRequestToken] { def apply(m: Map[String, String]): Option[OAuthRequestToken] = for { key <- m.get("oauth_token") secret <- m.get("oauth_token_secret") callbackConfirmed <- m.get("oauth_callback_confirmed") } yield OAuthRequestToken(RequestToken(key, secret), toBoolean(callbackConfirmed)) } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/enums/AccessType.scala ================================================ package com.danielasfregola.twitter4s.entities.enums object AccessType extends Enumeration { type AccessType = Value val Read = Value("read") val Write = Value("write") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/enums/Alignment.scala ================================================ package com.danielasfregola.twitter4s.entities.enums object Alignment extends Enumeration { type Alignment = Value val Left = Value("left") val Right = Value("right") val Center = Value("center") val None = Value("none") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/enums/ContributorType.scala ================================================ package com.danielasfregola.twitter4s.entities.enums object ContributorType extends Enumeration { type ContributorType = Value val All = Value("all") val Following = Value("following") val `None` = Value("none") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/enums/DisconnectionCode.scala ================================================ package com.danielasfregola.twitter4s.entities.enums object DisconnectionCode extends Enumeration { type DisconnectionCode = Value val Shutdown = Value(1) val DuplicateStream = Value(2) val ControlRequest = Value(3) val Stall = Value(4) val Normal = Value(5) val TokenRevoked = Value(6) val AdminLogout = Value(7) val Internal = Value(8) val MaxMessageLimit = Value(9) val StreamException = Value(10) val BrokerStall = Value(11) val ShedLoad = Value(12) } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/enums/EventCode.scala ================================================ package com.danielasfregola.twitter4s.entities.enums abstract class EventCode extends Enumeration object SimpleEventCode extends EventCode { type SimpleEventCode = Value val AccessRevoked = Value("access_revoked") val Block = Value("block") val Unblock = Value("unblock") val Follow = Value("follow") val Unfollow = Value("unfollow") val UserUpdate = Value("user_update") } object TweetEventCode extends EventCode { type TweetEventCode = Value val Favorite = Value("favorite") val FavoritedRetweet = Value("favorited_retweet") val Unfavorite = Value("unfavorite") val QuotedTweet = Value("quoted_tweet") } object TwitterListEventCode extends EventCode { type TwitterListEventCode = Value val ListCreated = Value("list_created") val ListDestroyed = Value("list_destroyed") val ListUpdated = Value("list_updated") val ListMemberAdded = Value("list_member_added") val ListMemberRemoved = Value("list_member_removed") val ListUserSubscribed = Value("list_user_subscribed") val ListUserUnsubscribed = Value("list_user_unsubscribed") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/enums/FilterLevel.scala ================================================ package com.danielasfregola.twitter4s.entities.enums object FilterLevel extends Enumeration { type FilterLevel = Value val None = Value("none") val Low = Value("low") val Medium = Value("medium") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/enums/Granularity.scala ================================================ package com.danielasfregola.twitter4s.entities.enums object Granularity extends Enumeration { type Granularity = Value val Admin = Value("admim") val City = Value("city") val Country = Value("country") val Neighborhood = Value("neighborhood") val Poi = Value("poi") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/enums/Hour.scala ================================================ package com.danielasfregola.twitter4s.entities.enums object Hour extends Enumeration { type Hour = Value val MIDNIGHT = Value("00") val ONE_AM = Value("01") val TWO_AM = Value("02") val THREE_AM = Value("03") val FOUR_AM = Value("04") val FIVE_AM = Value("05") val SIX_AM = Value("06") val SEVEN_AM = Value("07") val EIGHT_AM = Value("08") val NIGHT_AM = Value("09") val TEN_AM = Value("10") val ELEVEN_AM = Value("11") val MIDDAY = Value("12") val ONE_PM = Value("13") val TWO_PM = Value("14") val THREE_PM = Value("15") val FOUR_PM = Value("16") val FIVE_PM = Value("17") val SIX_PM = Value("18") val SEVEN_PM = Value("19") val EIGHT_PM = Value("20") val NIGHT_PM = Value("21") val TEN_PM = Value("22") val ELEVEN_PM = Value("23") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/enums/Language.scala ================================================ package com.danielasfregola.twitter4s.entities.enums object Language extends Enumeration { type Language = Value val English = Value("en") val Arabic = Value("ar") val Bengali = Value("bn") val Czech = Value("cs") val Danish = Value("da") val German = Value("de") val Greek = Value("el") val Spanish = Value("es") val Persian = Value("fa") val Finnish = Value("fi") val Filipino = Value("fil") val French = Value("fr") val Hebrew = Value("he") val Hindi = Value("hi") val Hungarian = Value("hu") val Indonesian = Value("id") val Italian = Value("it") val Japanese = Value("ja") val Korean = Value("ko") val Malay = Value("msa") val Dutch = Value("nl") val Norwegian = Value("no") val Polish = Value("pl") val Portuguese = Value("pt") val Romanian = Value("ro") val Russian = Value("ru") val Swedish = Value("sv") val Thai = Value("th") val Turkish = Value("tr") val Ukrainian = Value("uk") val Urdu = Value("ur") val Vietnamese = Value("vi") val ChineseSimplified = Value("zh-cn") val Chinese = Value("zh-tw") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/enums/Measure.scala ================================================ package com.danielasfregola.twitter4s.entities.enums object Measure extends Enumeration { type Measure = Value val Meter = Value("m") val Feet = Value("ft") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/enums/MediaType.scala ================================================ package com.danielasfregola.twitter4s.entities.enums object MediaType extends Enumeration { type MediaType = Value val PNG = Value("image/png") val JPG = Value("image/jpeg") val GIF = Value("image/gif") val WEBP = Value("image/webp") val MP4 = Value("video/mp4") val MOV = Value("video/quicktime") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/enums/Mode.scala ================================================ package com.danielasfregola.twitter4s.entities.enums object Mode extends Enumeration { type Mode = Value val Private = Value("private") val Public = Value("public") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/enums/Resource.scala ================================================ package com.danielasfregola.twitter4s.entities.enums object Resource extends Enumeration { type Resource = Value val Account = Value("account") val Application = Value("application") val Blocks = Value("blocks") val Collections = Value("collections") val Contacts = Value("contacts") val Device = Value("device") val DirectMessages = Value("direct_messages") val Favorites = Value("favorites") val Followers = Value("followers") val Friends = Value("friends") val Friendships = Value("friendships") val Geo = Value("geo") val Help = Value("help") val Lists = Value("lists") val Moments = Value("moments") val Mutes = Value("mutes") val SavedSearches = Value("saved_searches") val Search = Value("search") val Statuses = Value("statuses") val Trends = Value("trends") val Users = Value("users") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/enums/ResultType.scala ================================================ package com.danielasfregola.twitter4s.entities.enums object ResultType extends Enumeration { type ResultType = Value val Mixed = Value("mixed") val Recent = Value("recent") val Popular = Value("popular") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/enums/TimeZone.scala ================================================ package com.danielasfregola.twitter4s.entities.enums object TimeZone extends Enumeration { type TimeZone = Value val Africa_Algiers = Value("Africa/Algiers") val Africa_Cairo = Value("Africa/Cairo") val Africa_Casablanca = Value("Africa/Casablanca") val Africa_Harare = Value("Africa/Harare") val Africa_Johannesburg = Value("Africa/Johannesburg") val Africa_Monrovia = Value("Africa/Monrovia") val Africa_Nairobi = Value("Africa/Nairobi") val America_Argentina_Buenos_Aires = Value("America/Argentina_Buenos_Aires") val America_Bogota = Value("America/Bogota") val America_Caracas = Value("America/Caracas") val America_Chicago = Value("America/Chicago") val America_Chihuahua = Value("America/Chihuahua") val America_Denver = Value("America/Denver") val America_Godthab = Value("America/Godthab") val America_Guatemala = Value("America/Guatemala") val America_Guyana = Value("America/Guyana") val America_Halifax = Value("America/Halifax") val America_Indiana_Indianapolis = Value("America/Indiana_Indianapolis") val America_Juneau = Value("America/Juneau") val America_La_Paz = Value("America/La_Paz") val America_Lima = Value("America/Lima") val America_Los_Angeles = Value("America/Los_Angeles") val America_Mazatlan = Value("America/Mazatlan") val America_Mexico_City = Value("America/Mexico_City") val America_Monterrey = Value("America/Monterrey") val America_Montevideo = Value("America/Montevideo") val America_New_York = Value("America/New_York") val America_Phoenix = Value("America/Phoenix") val America_Regina = Value("America/Regina") val America_Santiago = Value("America/Santiago") val America_Sao_Paulo = Value("America/Sao_Paulo") val America_St_Johns = Value("America/St_Johns") val America_Tijuana = Value("America/Tijuana") val Asia_Almaty = Value("Asia/Almaty") val Asia_Baghdad = Value("Asia/Baghdad") val Asia_Baku = Value("Asia/Baku") val Asia_Bangkok = Value("Asia/Bangkok") val Asia_Chongqing = Value("Asia/Chongqing") val Asia_Colombo = Value("Asia/Colombo") val Asia_Dhaka = Value("Asia/Dhaka") val Asia_Hong_Kong = Value("Asia/Hong_Kong") val Asia_Irkutsk = Value("Asia/Irkutsk") val Asia_Jakarta = Value("Asia/Jakarta") val Asia_Jerusalem = Value("Asia/Jerusalem") val Asia_Kabul = Value("Asia/Kabul") val Asia_Kamchatka = Value("Asia/Kamchatka") val Asia_Karachi = Value("Asia/Karachi") val Asia_Kathmandu = Value("Asia/Kathmandu") val Asia_Kolkata = Value("Asia/Kolkata") val Asia_Krasnoyarsk = Value("Asia/Krasnoyarsk") val Asia_Kuala_Lumpur = Value("Asia/Kuala_Lumpur") val Asia_Kuwait = Value("Asia/Kuwait") val Asia_Magadan = Value("Asia/Magadan") val Asia_Muscat = Value("Asia/Muscat") val Asia_Novosibirsk = Value("Asia/Novosibirsk") val Asia_Rangoon = Value("Asia/Rangoon") val Asia_Riyadh = Value("Asia/Riyadh") val Asia_Seoul = Value("Asia/Seoul") val Asia_Shanghai = Value("Asia/Shanghai") val Asia_Singapore = Value("Asia/Singapore") val Asia_Srednekolymsk = Value("Asia/Srednekolymsk") val Asia_Taipei = Value("Asia/Taipei") val Asia_Tashkent = Value("Asia/Tashkent") val Asia_Tbilisi = Value("Asia/Tbilisi") val Asia_Tehran = Value("Asia/Tehran") val Asia_Tokyo = Value("Asia/Tokyo") val Asia_Ulaanbaatar = Value("Asia/Ulaanbaatar") val Asia_Urumqi = Value("Asia/Urumqi") val Asia_Vladivostok = Value("Asia/Vladivostok") val Asia_Yakutsk = Value("Asia/Yakutsk") val Asia_Yekaterinburg = Value("Asia/Yekaterinburg") val Asia_Yerevan = Value("Asia/Yerevan") val Atlantic_Azores = Value("Atlantic/Azores") val Atlantic_Cape_Verde = Value("Atlantic/Cape_Verde") val Atlantic_South_Georgia = Value("Atlantic/South_Georgia") val Australia_Adelaide = Value("Australia_Adelaide") val Australia_Brisbane = Value("Australia_Brisbane") val Australia_Darwin = Value("Australia_Darwin") val Australia_Hobart = Value("Australia_Hobart") val Australia_Melbourne = Value("Australia_Melbourne") val Australia_Perth = Value("Australia_Perth") val Australia_Sydney = Value("Australia_Sydney") val Etc_UTC = Value("Etc_UTC") val Europe_Amsterdam = Value("Europe/Amsterdam") val Europe_Athens = Value("Europe/Athens") val Europe_Belgrade = Value("Europe/Belgrade") val Europe_Berlin = Value("Europe/Berlin") val Europe_Bratislava = Value("Europe/Bratislava") val Europe_Brussels = Value("Europe/Brussels") val Europe_Bucharest = Value("Europe/Bucharest") val Europe_Budapest = Value("Europe/Budapest") val Europe_Copenhagen = Value("Europe/Copenhagen") val Europe_Dublin = Value("Europe/Dublin") val Europe_Helsinki = Value("Europe/Helsinki") val Europe_Istanbul = Value("Europe/Istanbul") val Europe_Kaliningrad = Value("Europe/Kaliningrad") val Europe_Kiev = Value("Europe/Kiev") val Europe_Lisbon = Value("Europe/Lisbon") val Europe_Ljubljana = Value("Europe/Ljubljana") val Europe_London = Value("Europe/London") val Europe_Madrid = Value("Europe/Madrid") val Europe_Minsk = Value("Europe/Minsk") val Europe_Moscow = Value("Europe/Moscow") val Europe_Paris = Value("Europe/Paris") val Europe_Prague = Value("Europe/Prague") val Europe_Riga = Value("Europe/Riga") val Europe_Rome = Value("Europe/Rome") val Europe_Samara = Value("Europe/Samara") val Europe_Sarajevo = Value("Europe/Sarajevo") val Europe_Skopje = Value("Europe/Skopje") val Europe_Sofia = Value("Europe/Sofia") val Europe_Stockholm = Value("Europe/Stockholm") val Europe_Tallinn = Value("Europe/Tallinn") val Europe_Vienna = Value("Europe/Vienna") val Europe_Vilnius = Value("Europe/Vilnius") val Europe_Volgograd = Value("Europe/Volgograd") val Europe_Warsaw = Value("Europe/Warsaw") val Europe_Zagreb = Value("Europe/Zagreb") val Pacific_Apia = Value("Pacific/Apia") val Pacific_Auckland = Value("Pacific/Auckland") val Pacific_Chatham = Value("Pacific/Chatham") val Pacific_Fakaofo = Value("Pacific/Fakaofo") val Pacific_Fiji = Value("Pacific/Fiji") val Pacific_Guadalcanal = Value("Pacific/Guadalcanal") val Pacific_Guam = Value("Pacific/Guam") val Pacific_Honolulu = Value("Pacific/Honolulu") val Pacific_Majuro = Value("Pacific/Majuro") val Pacific_Midway = Value("Pacific/Midway") val Pacific_Noumea = Value("Pacific/Noumea") val Pacific_Pago_Pago = Value("Pacific/Pago_Pago") val Pacific_Port_Moresby = Value("Pacific/Port_Moresby") val Pacific_Tongatapu = Value("Pacific/Tongatapu") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/enums/TweetMode.scala ================================================ package com.danielasfregola.twitter4s.entities.enums object TweetMode extends Enumeration { type TweetMode = Value val Extended = Value("extended") val Classic = Value("") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/enums/WidgetType.scala ================================================ package com.danielasfregola.twitter4s.entities.enums object WidgetType extends Enumeration { type WidgetType = Value val Video = Value("video") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/enums/WithFilter.scala ================================================ package com.danielasfregola.twitter4s.entities.enums object WithFilter extends Enumeration { type WithFilter = Value val User = Value("user") val Followings = Value("followings") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/streaming/StreamingUpdate.scala ================================================ package com.danielasfregola.twitter4s.entities.streaming final case class StreamingUpdate(streamingEvent: StreamingMessage) trait StreamingMessage trait CommonStreamingMessage extends UserStreamingMessage with SiteStreamingMessage trait UserStreamingMessage extends StreamingMessage trait SiteStreamingMessage extends StreamingMessage ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/streaming/common/DisconnectMessage.scala ================================================ package com.danielasfregola.twitter4s.entities.streaming.common import com.danielasfregola.twitter4s.entities.enums.DisconnectionCode.DisconnectionCode import com.danielasfregola.twitter4s.entities.streaming.CommonStreamingMessage /** Streams may be shut down for a variety of reasons. * The streaming API will attempt to deliver a message indicating why a stream was closed. * Note that if the disconnect was due to network issues or a client reading too slowly, * it is possible that this message will not be received. * For more information see * * https://developer.twitter.com/en/docs/tweets/filter-realtime/guides/streaming-message-types. */ final case class DisconnectMessage(disconnect: DisconnectMessageInfo) extends CommonStreamingMessage final case class DisconnectMessageInfo(code: DisconnectionCode, stream_name: String, reason: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/streaming/common/LimitNotice.scala ================================================ package com.danielasfregola.twitter4s.entities.streaming.common import com.danielasfregola.twitter4s.entities.streaming.CommonStreamingMessage /** These messages indicate that a filtered stream has matched more Tweets * than its current rate limit allows to be delivered. Limit notices contain * a total count of the number of undelivered Tweets since the connection was opened, * making them useful for tracking counts of track terms, for example. * Note that the counts do not specify which filter predicates undelivered messages matched. * For more information see * * https://developer.twitter.com/en/docs/tweets/filter-realtime/guides/streaming-message-types. */ final case class LimitNotice(limit: LimitTrack) extends CommonStreamingMessage final case class LimitTrack(track: Long) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/streaming/common/LocationDeletionNotice.scala ================================================ package com.danielasfregola.twitter4s.entities.streaming.common import com.danielasfregola.twitter4s.entities.streaming.CommonStreamingMessage /** These messages indicate that geolocated data must be stripped from a range of Tweets. * Clients must honor these messages by deleting geocoded data from Tweets which fall before * the given status ID and belong to the specified user. These messages may also arrive before * a Tweet which falls into the specified range, although this is rare. * For more information see * * https://developer.twitter.com/en/docs/tweets/filter-realtime/guides/streaming-message-types. */ final case class LocationDeletionNotice(scrub_geo: LocationDeletionId) extends CommonStreamingMessage final case class LocationDeletionId(user_id: Long, user_id_str: String, up_to_status_id: Long, up_to_status_id_str: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/streaming/common/StatusDeletionNotice.scala ================================================ package com.danielasfregola.twitter4s.entities.streaming.common import com.danielasfregola.twitter4s.entities.streaming.CommonStreamingMessage /** These messages indicate that a given Tweet has been deleted. * Client code must honor these messages by clearing the referenced Tweet from memory and any * storage or archive, even in the rare case where a deletion message arrives earlier * in the stream that the Tweet it references. * For more information see * * https://developer.twitter.com/en/docs/tweets/filter-realtime/guides/streaming-message-types. */ final case class StatusDeletionNotice(delete: StatusDeletionNoticeInfo) extends CommonStreamingMessage final case class StatusDeletionNoticeInfo(status: StatusDeletionId) final case class StatusDeletionId(id: Long, id_str: String, user_id: Long, user_id_str: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/streaming/common/StatusWithheldNotice.scala ================================================ package com.danielasfregola.twitter4s.entities.streaming.common import com.danielasfregola.twitter4s.entities.streaming.CommonStreamingMessage /** These events contain an id field indicating the status ID, a user_id indicating the user, * and a collection of withheld_in_countries uppercase two-letter country codes. * For more information see * * https://developer.twitter.com/en/docs/tweets/filter-realtime/guides/streaming-message-types. */ final case class StatusWithheldNotice(status_withheld: StatusWithheldId) extends CommonStreamingMessage final case class StatusWithheldId(id: Long, user_id: Long, withheld_in_countries: List[String]) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/streaming/common/UserWithheldNotice.scala ================================================ package com.danielasfregola.twitter4s.entities.streaming.common import com.danielasfregola.twitter4s.entities.streaming.CommonStreamingMessage /** These events contain an id field indicating the user ID and a collection of * withheld_in_countries uppercase two-letter country codes. * For more information see * * https://developer.twitter.com/en/docs/tweets/filter-realtime/guides/streaming-message-types. */ final case class UserWithheldNotice(user_withheld: UserWithheldId) extends CommonStreamingMessage final case class UserWithheldId(id: Long, withheld_in_countries: List[String]) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/streaming/common/WarningMessage.scala ================================================ package com.danielasfregola.twitter4s.entities.streaming.common import com.danielasfregola.twitter4s.entities.streaming.CommonStreamingMessage /** When connected to a stream using the stall_warnings parameter, * you may receive status notices indicating the current health of the connection. * For more information see * * https://developer.twitter.com/en/docs/tweets/filter-realtime/guides/streaming-message-types. */ final case class WarningMessage(warning: WarningMessageInfo) extends CommonStreamingMessage final case class WarningMessageInfo(code: String, message: String, percent_full: Option[Int] = None, user_id: Option[Long] = None) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/streaming/site/ControlMessage.scala ================================================ package com.danielasfregola.twitter4s.entities.streaming.site import com.danielasfregola.twitter4s.entities.streaming.SiteStreamingMessage /** New Site Streams connections will receive a control message which may be used to modify the Site Streams connection without reconnecting. * See Control Streams for Site Streams for details. Note that this message will not necessarily be the first message delivered on a Site Streams connection. * For more information see * https://developer.twitter.com/en/docs/tweets/filter-realtime/guides/streaming-message-types */ final case class ControlMessage(control: ControlMessageInfo) extends SiteStreamingMessage final case class ControlMessageInfo(control_uri: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/streaming/site/UserEnvelop.scala ================================================ package com.danielasfregola.twitter4s.entities.streaming.site import com.danielasfregola.twitter4s.entities.streaming._ import com.danielasfregola.twitter4s.entities.streaming.common.WarningMessage import com.danielasfregola.twitter4s.entities.streaming.user._ import com.danielasfregola.twitter4s.entities.{DirectMessage, Tweet} /** Site Streams are sent the same messages as User Streams (including friends lists in the preamble), * but for multiple users instead of a single user.The same types of messages are streamed, but to identify the target of each message, * an additional wrapper is placed around every message, except for blank keep-alive lines. * For more information see * https://developer.twitter.com/en/docs/tweets/filter-realtime/guides/streaming-message-types */ abstract class UserEnvelop[T <: StreamingMessage](for_user: Long, message: T) extends SiteStreamingMessage final case class UserEnvelopTweet(for_user: Long, message: Tweet) extends UserEnvelop(for_user, message) final case class UserEnvelopDirectMessage(for_user: Long, message: DirectMessage) extends UserEnvelop(for_user, message) final case class UserEnvelopSimpleEvent(for_user: Long, message: SimpleEvent) extends UserEnvelop(for_user, message) final case class UserEnvelopTweetEvent(for_user: Long, message: TweetEvent) extends UserEnvelop(for_user, message) final case class UserEnvelopTwitterListEvent(for_user: Long, message: TwitterListEvent) extends UserEnvelop(for_user, message) final case class UserEnvelopFriendsLists(for_user: Long, message: FriendsLists) extends UserEnvelop(for_user, message) final case class UserEnvelopWarningMessage(for_user: Long, message: WarningMessage) extends UserEnvelop(for_user, message) /** Site Streams are sent the same messages as User Streams (including friends lists in the preamble), * but for multiple users instead of a single user.The same types of messages are streamed, but to identify the target of each message, * an additional wrapper is placed around every message, except for blank keep-alive lines. * For more information see * https://developer.twitter.com/en/docs/tweets/filter-realtime/guides/streaming-message-types */ abstract class UserEnvelopStringified[T <: StreamingMessage](for_user: String, message: StreamingMessage) extends SiteStreamingMessage final case class UserEnvelopTweetStringified(for_user: String, message: Tweet) extends UserEnvelopStringified[Tweet](for_user, message) final case class UserEnvelopDirectMessageStringified(for_user: String, message: DirectMessage) extends UserEnvelopStringified[DirectMessage](for_user, message) final case class UserEnvelopSimpleEventStringified(for_user: String, message: SimpleEvent) extends UserEnvelopStringified[SimpleEvent](for_user, message) final case class UserEnvelopTweetEventStringified(for_user: String, message: TweetEvent) extends UserEnvelopStringified[TweetEvent](for_user, message) final case class UserEnvelopTwitterListEventStringified(for_user: String, message: TwitterListEvent) extends UserEnvelopStringified[TwitterListEvent](for_user, message) final case class UserEnvelopFriendsListsStringified(for_user: String, message: FriendsLists) extends UserEnvelopStringified[FriendsLists](for_user, message) final case class UserEnvelopWarningMessageStringified(for_user: String, message: WarningMessage) extends UserEnvelopStringified[WarningMessage](for_user, message) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/streaming/user/Event.scala ================================================ package com.danielasfregola.twitter4s.entities.streaming.user import java.time.Instant import com.danielasfregola.twitter4s.entities.enums.EventCode import com.danielasfregola.twitter4s.entities.enums.SimpleEventCode.SimpleEventCode import com.danielasfregola.twitter4s.entities.enums.TweetEventCode.TweetEventCode import com.danielasfregola.twitter4s.entities.enums.TwitterListEventCode.TwitterListEventCode import com.danielasfregola.twitter4s.entities.streaming.UserStreamingMessage import com.danielasfregola.twitter4s.entities.{Tweet, TwitterList, User} /** Notifications about non-Tweet events are also sent over a user stream. * The values present will be different based on the type of event. * For more information see * * https://developer.twitter.com/en/docs/tweets/filter-realtime/guides/streaming-message-types. */ abstract class Event[T](created_at: Instant, event: EventCode#Value, target: User, source: User, target_object: Option[T]) extends UserStreamingMessage final case class SimpleEvent(created_at: Instant, event: SimpleEventCode, target: User, source: User, target_object: Option[String]) extends Event(created_at, event, target, source, target_object) final case class TweetEvent(created_at: Instant, event: TweetEventCode, target: User, source: User, target_object: Tweet) extends Event(created_at, event, target, source, Some(target_object)) final case class TwitterListEvent(created_at: Instant, event: TwitterListEventCode, target: User, source: User, target_object: TwitterList) extends Event(created_at, event, target, source, Some(target_object)) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/streaming/user/FriendsLists.scala ================================================ package com.danielasfregola.twitter4s.entities.streaming.user import com.danielasfregola.twitter4s.entities.streaming.UserStreamingMessage /** Upon establishing a User Stream connection, Twitter will send a preamble before starting regular message delivery. * This preamble contains a list of the user’s friends. This is represented as an array of user ids as longs. * For more information see * https://developer.twitter.com/en/docs/tweets/filter-realtime/guides/streaming-message-types */ final case class FriendsLists(friends: Seq[Long]) extends UserStreamingMessage /** Upon establishing a User Stream connection, Twitter will send a preamble before starting regular message delivery. * This preamble contains a list of the user’s friends. This is represented as an array of user ids as strings. * For more information see * https://developer.twitter.com/en/docs/tweets/filter-realtime/guides/streaming-message-types */ final case class FriendsListsStringified(friends: Seq[String]) extends UserStreamingMessage ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/Error.scala ================================================ package com.danielasfregola.twitter4s.entities.v2 final case class Error(detail: String, field: Option[String], parameter: Option[String], resource_id: Option[String], resource_type: Option[String], section: Option[String], title: String, `type`: Option[String], value: Option[String]) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/Media.scala ================================================ package com.danielasfregola.twitter4s.entities.v2 import com.danielasfregola.twitter4s.entities.v2.enums.MediaType.MediaType final case class Media(media_key: String, `type`: MediaType, duration_ms: Option[Int], height: Option[Int], non_public_metrics: Option[MediaNonPublicMetrics], organic_metrics: Option[MediaOrganicMetrics], preview_image_url: Option[String], promoted_metrics: Option[MediaPromotedMetrics], public_metrics: Option[MediaPublicMetrics], url: Option[String], width: Option[Int]) final case class MediaNonPublicMetrics(playback_0_count: Int, playback_100_count: Int, playback_25_count: Int, playback_50_count: Int, playback_75_count: Int) final case class MediaOrganicMetrics(playback_0_count: Int, playback_100_count: Int, playback_25_count: Int, playback_50_count: Int, playback_75_count: Int, view_count: Int) final case class MediaPromotedMetrics(playback_0_count: Int, playback_100_count: Int, playback_25_count: Int, playback_50_count: Int, playback_75_count: Int, view_count: Int) final case class MediaPublicMetrics(view_count: Int) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/Meta.scala ================================================ package com.danielasfregola.twitter4s.entities.v2 final case class Meta(result_count: Int, newest_id: Option[String], oldest_id: Option[String], next_token: Option[String], previous_token: Option[String]) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/Place.scala ================================================ package com.danielasfregola.twitter4s.entities.v2 // https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/place final case class Place(full_name: String, id: String, contained_within: Seq[String], country: Option[String], country_code: Option[String], geo: Option[GeoJSON], name: Option[String], place_type: Option[String]) final case class GeoJSON(value: String) extends AnyVal ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/Poll.scala ================================================ package com.danielasfregola.twitter4s.entities.v2 import java.time.Instant // https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/poll final case class Poll(id: String, options: Seq[PollOption], duration_minutes: Option[Int], end_datetime: Option[Instant], voting_status: Option[String]) final case class PollOption(position: Int, label: String, votes: Int) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/Tweet.scala ================================================ package com.danielasfregola.twitter4s.entities.v2 import com.danielasfregola.twitter4s.entities.v2.enums.CoordinatesType.CoordinatesType import com.danielasfregola.twitter4s.entities.v2.enums.ReferencedTweetType.ReferencedTweetType import com.danielasfregola.twitter4s.entities.v2.enums.TweetReplySetting.TweetReplySetting import java.time.Instant final case class Tweet(id: String, text: String, attachments: Option[TweetAttachments], author_id: Option[String], context_annotations: Option[Seq[TweetContextAnnotation]], conversation_id: Option[String], created_at: Option[Instant], entities: Option[TweetEntities], geo: Option[TweetGeo], in_reply_to_user_id: Option[String], lang: Option[String], non_public_metrics: Option[TweetNonPublicMetrics], organic_metrics: Option[TweetOrganicMetrics], possibly_sensitive: Option[Boolean], promoted_metrics: Option[TweetPromotedMetrics], public_metrics: Option[TweetPublicMetrics], referenced_tweets: Option[Seq[TweetReferencedTweet]], reply_settings: Option[TweetReplySetting], source: Option[String], withheld: Option[Withheld]) final case class TweetAttachments(media_keys: Seq[String], poll_ids: Seq[String]) final case class TweetContextAnnotation(domain: TweetDomain, entity: TweetEntity) final case class TweetGeo(coordinates: Option[TweetCoordinates], place_id: Option[String]) final case class TweetCoordinates(`type`: CoordinatesType, coordinates: (Double, Double)) final case class TweetNonPublicMetrics(impression_count: Int, url_link_clicks: Option[Int], user_profile_clicks: Int) final case class TweetOrganicMetrics(impression_count: Int, url_link_clicks: Option[Int], user_profile_clicks: Int, retweet_count: Int, reply_count: Int, like_count: Int) final case class TweetPromotedMetrics(impression_count: Int, url_link_clicks: Option[Int], user_profile_clicks: Int, retweet_count: Int, reply_count: Int, like_count: Int) final case class TweetPublicMetrics(retweet_count: Int, reply_count: Int, like_count: Int, quote_count: Int) final case class TweetReferencedTweet(`type`: ReferencedTweetType, id: String) final case class TweetDomain(id: String, name: String, description: Option[String]) final case class TweetEntity(id: String, name: String, description: Option[String]) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/TweetEntities.scala ================================================ package com.danielasfregola.twitter4s.entities.v2 final case class TweetEntities(annotations: Seq[TweetEntitiesAnnotation], urls: Seq[TweetEntitiesURL], hashtags: Seq[TweetEntitiesHashtag], mentions: Seq[TweetEntitiesMention], cashtags: Seq[TweetEntitiesCashtag]) final case class TweetEntitiesAnnotation(start: Int, end: Int, probability: Float, `type`: String, normalized_text: String) final case class TweetEntitiesURL(start: Int, end: Int, url: String, expanded_url: String, display_url: String, unwound_url: Option[String]) final case class TweetEntitiesHashtag(start: Int, end: Int, tag: String) final case class TweetEntitiesMention(start: Int, end: Int, username: Option[String], id: Option[String]) final case class TweetEntitiesCashtag(start: Int, end: Int, tag: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/TweetIncludes.scala ================================================ package com.danielasfregola.twitter4s.entities.v2 final case class TweetIncludes(tweets: Seq[Tweet], users: Seq[User], media: Seq[Media], places: Seq[Place], polls: Seq[Poll]) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/User.scala ================================================ package com.danielasfregola.twitter4s.entities.v2 import java.time.Instant final case class User(id: String, name: String, username: String, created_at: Option[Instant], `protected`: Option[Boolean], withheld: Option[Withheld], location: Option[String], url: Option[String], description: Option[String], verified: Option[Boolean], entities: Option[UserEntities], profile_image_url: Option[String], public_metrics: Option[UserPublicMetrics], pinned_tweet_id: Option[String]) final case class UserPublicMetrics(followers_count: Int, following_count: Int, tweet_count: Int, listed_count: Int) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/UserEntities.scala ================================================ package com.danielasfregola.twitter4s.entities.v2 final case class UserEntities(url: Option[UserURLContainer], description: Option[UserEntitiesDescription]) final case class UserURLContainer(urls: Seq[UserEntitiesURL]) final case class UserEntitiesURL(start: Int, end: Int, url: String, expanded_url: String, display_url: String) final case class UserEntitiesDescription(urls: Seq[UserEntitiesURL], hashtags: Seq[UserEntitiesHashtag], mentions: Seq[UserEntitiesMention], cashtags: Seq[UserEntitiesCashtag]) final case class UserEntitiesHashtag(start: Int, end: Int, tag: String) final case class UserEntitiesMention(start: Int, end: Int, username: String) final case class UserEntitiesCashtag(start: Int, end: Int, tag: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/UserIncludes.scala ================================================ package com.danielasfregola.twitter4s.entities.v2 case class UserIncludes(tweets: Seq[Tweet], users: Seq[User]) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/Withheld.scala ================================================ package com.danielasfregola.twitter4s.entities.v2 import com.danielasfregola.twitter4s.entities.v2.enums.WithheldScope.WithheldScope final case class Withheld(copyright: Boolean, country_codes: Seq[String], scope: WithheldScope) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/enums/CoordinatesType.scala ================================================ package com.danielasfregola.twitter4s.entities.v2.enums object CoordinatesType extends Enumeration { type CoordinatesType = Value val Point = Value("Point") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/enums/MediaType.scala ================================================ package com.danielasfregola.twitter4s.entities.v2.enums object MediaType extends Enumeration { type MediaType = Value val AnimatedGIF = Value("animated_gif") val Photo = Value("photo") val Video = Value("video") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/enums/ReferencedTweetType.scala ================================================ package com.danielasfregola.twitter4s.entities.v2.enums object ReferencedTweetType extends Enumeration { type ReferencedTweetType = Value val Retweeted = Value("retweeted") val Quoted = Value("quoted") val RepliedTo = Value("replied_to") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/enums/TweetReplySetting.scala ================================================ package com.danielasfregola.twitter4s.entities.v2.enums object TweetReplySetting extends Enumeration { type TweetReplySetting = Value val Everyone = Value("everyone") val MentionedUsers = Value("mentioned_users") val Followers = Value("followers") val Following = Value("following") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/enums/WithheldScope.scala ================================================ package com.danielasfregola.twitter4s.entities.v2.enums object WithheldScope extends Enumeration { type WithheldScope = Value val Tweet = Value("tweet") val User = Value("user") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/enums/expansions/TweetExpansions.scala ================================================ package com.danielasfregola.twitter4s.entities.v2.enums.expansions object TweetExpansions extends Enumeration { type TweetExpansions = Value val `Attachments.PollIds` = Value("attachments.poll_ids") val `Attachments.MediaKeys` = Value("attachments.media_keys") val AuthorId = Value("author_id") val `Entities.Mentions.Username` = Value("entities.mentions.username") val `Geo.PlaceId` = Value("geo.place_id") val InReplyToUser = Value("in_reply_to_user_id") val `ReferencedTweets.Id` = Value("referenced_tweets.id") val `ReferencedTweets.Id.AuthorId` = Value("referenced_tweets.id.author_id") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/enums/expansions/UserExpansions.scala ================================================ package com.danielasfregola.twitter4s.entities.v2.enums.expansions object UserExpansions extends Enumeration { type UserExpansions = Value val PinnedTweetId = Value("pinned_tweet_id") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/enums/fields/MediaFields.scala ================================================ package com.danielasfregola.twitter4s.entities.v2.enums.fields object MediaFields extends Enumeration { type MediaFields = Value val DurationMs = Value("duration_ms") val Height = Value("height") val MediaKey = Value("media_key") val PreviewImageUrl = Value("preview_image_url") val Type = Value("type") val Url = Value("url") val Width = Value("width") val PublicMetrics = Value("public_metrics") val NonPublicMetrics = Value("non_public_metrics") val OrganicMetrics = Value("organic_metrics") val PromotedMetrics = Value("promoted_metrics") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/enums/fields/PlaceFields.scala ================================================ package com.danielasfregola.twitter4s.entities.v2.enums.fields object PlaceFields extends Enumeration { type PlaceFields = Value val ContainedWithin = Value("contained_within") val Country = Value("country") val CountryCode = Value("country_code") val FullName = Value("full_name") val Geo = Value("geo") val Id = Value("id") val Name = Value("name") val PlaceType = Value("place_type") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/enums/fields/PollFields.scala ================================================ package com.danielasfregola.twitter4s.entities.v2.enums.fields object PollFields extends Enumeration { type PollFields = Value val DurationMinutes = Value("duration_minutes") val EndDatetime = Value("end_datetime") val Id = Value("id") val Options = Value("options") val VotingStatus = Value("voting_status") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/enums/fields/TweetFields.scala ================================================ package com.danielasfregola.twitter4s.entities.v2.enums.fields object TweetFields extends Enumeration { type TweetFields = Value val Attachments = Value("attachments") val AuthorId = Value("author_id") val ContextAnnotations = Value("context_annotations") val ConversationId = Value("conversation_id") val CreatedAt = Value("created_at") val Entities = Value("entities") val Geo = Value("geo") val Id = Value("id") val InReplyToUserId = Value("in_reply_to_user_id") val Lang = Value("lang") val NonPublicMetrics = Value("non_public_metrics") val PublicMetrics = Value("public_metrics") val OrganicMetrics = Value("organic_metrics") val PromotedMetrics = Value("promoted_metrics") val PossiblySensitive = Value("possibly_sensitive") val ReferencedTweets = Value("referenced_tweets") val ReplySettings = Value("reply_settings") val Source = Value("source") val Text = Value("text") val Withheld = Value("withheld") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/enums/fields/UserFields.scala ================================================ package com.danielasfregola.twitter4s.entities.v2.enums.fields object UserFields extends Enumeration { type UserFields = Value val CreatedAt = Value("created_at") val Description = Value("description") val Entities = Value("entities") val Id = Value("id") val Location = Value("location") val Name = Value("name") val PinnedTweetId = Value("pinned_tweet_id") val ProfileImageUrl = Value("profile_image_url") val Protected = Value("protected") val PublicMetrics = Value("public_metrics") val Url = Value("url") val Username = Value("username") val Verified = Value("verified") val Withheld = Value("withheld") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/enums/rest/TimelineExclude.scala ================================================ package com.danielasfregola.twitter4s.entities.v2.enums.rest object TimelineExclude extends Enumeration { type TimelineExclude = Value val Retweets = Value("retweets") val Replies = Value("replies") } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/responses/TweetResponse.scala ================================================ package com.danielasfregola.twitter4s.entities.v2.responses import com.danielasfregola.twitter4s.entities.v2.{Error, TweetIncludes, Tweet} final case class TweetResponse(data: Option[Tweet], includes: Option[TweetIncludes], errors: Seq[Error]) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/responses/TweetsResponse.scala ================================================ package com.danielasfregola.twitter4s.entities.v2.responses import com.danielasfregola.twitter4s.entities.v2.{Error, Meta, Tweet, TweetIncludes} final case class TweetsResponse(data: Seq[Tweet], includes: Option[TweetIncludes], meta: Option[Meta], errors: Seq[Error]) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/responses/UserResponse.scala ================================================ package com.danielasfregola.twitter4s.entities.v2.responses import com.danielasfregola.twitter4s.entities.v2.{Error, UserIncludes, User} case class UserResponse(data: Option[User], includes: Option[UserIncludes], errors: Seq[Error]) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/entities/v2/responses/UsersResponse.scala ================================================ package com.danielasfregola.twitter4s.entities.v2.responses import com.danielasfregola.twitter4s.entities.v2.{User, UserIncludes, Error} case class UsersResponse(data: Seq[User], includes: Option[UserIncludes], errors: Seq[Error]) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/exceptions/TwitterException.scala ================================================ package com.danielasfregola.twitter4s.exceptions import akka.http.scaladsl.model.StatusCode final case class TwitterError(message: String, code: Int) { override def toString = s"$message ($code)" } final case class Errors(errors: TwitterError*) { override def toString = errors.mkString(", ") } object Errors { def apply(throwable: Throwable): Errors = { val error = TwitterError(throwable.getMessage, code = -1) apply(error) } def apply(msg: String): Errors = { val error = TwitterError(msg, code = -1) apply(error) } } final case class TwitterException(code: StatusCode, errors: Errors) extends Exception(s"[$code] $errors") object TwitterException { def apply(code: StatusCode, msg: String): TwitterException = { val error = TwitterError(msg, code.intValue) TwitterException(code, Errors(error)) } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/Client.scala ================================================ package com.danielasfregola.twitter4s.http.clients import akka.actor.ActorSystem import akka.http.scaladsl.model.{HttpRequest, HttpResponse} import akka.stream.Materializer import akka.stream.scaladsl.{Sink, Source} import com.danielasfregola.twitter4s.http.oauth.OAuth1Provider import scala.concurrent.Future trait Client extends OAuthClient { val withLogRequest = false val withLogRequestResponse = true def oauthProvider: OAuth1Provider protected def sendAndReceive[T](request: HttpRequest, f: HttpResponse => Future[T])( implicit system: ActorSystem, materializer: Materializer): Future[T] = { implicit val r: HttpRequest = request val requestStartTime = System.currentTimeMillis if (withLogRequest) logRequest Source .single(request) .via(connection) .mapAsync(1)(implicit response => unmarshal(requestStartTime, f)) .runWith(Sink.head) } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/CommonClient.scala ================================================ package com.danielasfregola.twitter4s.http.clients import akka.actor.ActorSystem import akka.http.scaladsl.Http import akka.http.scaladsl.model.{HttpEntity, HttpRequest, HttpResponse} import akka.stream.Materializer import com.danielasfregola.twitter4s.exceptions.{Errors, TwitterException} import com.danielasfregola.twitter4s.http.serializers.JsonSupport import com.typesafe.scalalogging.LazyLogging import org.json4s.native.Serialization import scala.concurrent.Future import scala.concurrent.duration._ import scala.util.Try private[twitter4s] trait CommonClient extends JsonSupport with LazyLogging { def withLogRequest: Boolean def withLogRequestResponse: Boolean protected def connection(implicit request: HttpRequest, system: ActorSystem) = { val scheme = request.uri.scheme val host = request.uri.authority.host.toString val port = request.uri.effectivePort if (scheme == "https") Http().outgoingConnectionHttps(host, port) else Http().outgoingConnection(host, port) } protected def unmarshal[T](requestStartTime: Long, f: HttpResponse => Future[T])(implicit request: HttpRequest, response: HttpResponse, materializer: Materializer) = { implicit val ec = materializer.executionContext if (withLogRequestResponse) logRequestResponse(requestStartTime) if (response.status.isSuccess) f(response) else parseFailedResponse(response).flatMap(Future.failed) } protected def parseFailedResponse(response: HttpResponse)(implicit materializer: Materializer) = { implicit val ec = materializer.executionContext response.entity.toStrict(50 seconds).map { sink => val body = sink.data.utf8String val errors = Try { Serialization.read[Errors](body) } getOrElse Errors(body) TwitterException(response.status, errors) } } // TODO - logRequest, logRequestResponse customisable? def logRequest(implicit request: HttpRequest, materializer: Materializer): HttpRequest = { implicit val ec = materializer.executionContext logger.info(s"${request.method.value} ${request.uri}") if (logger.underlying.isDebugEnabled) { for { requestBody <- toBody(request.entity) } yield logger.debug(s"${request.method.value} ${request.uri} | $requestBody") } request } def logRequestResponse(requestStartTime: Long)(implicit request: HttpRequest, materializer: Materializer): HttpResponse => HttpResponse = { response => implicit val ec = materializer.executionContext val elapsed = System.currentTimeMillis - requestStartTime logger.info(s"${request.method.value} ${request.uri} (${response.status}) | ${elapsed}ms") if (logger.underlying.isDebugEnabled) { for { responseBody <- toBody(response.entity) } yield logger.debug( s"${request.method.value} ${request.uri} (${response.status}) | ${response.headers.mkString(", ")} | $responseBody") } response } private def toBody(entity: HttpEntity)(implicit materializer: Materializer): Future[String] = { implicit val ec = materializer.executionContext entity.toStrict(5 seconds).map(_.data.decodeString("UTF-8")) } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/OAuthClient.scala ================================================ package com.danielasfregola.twitter4s.http.clients import akka.http.scaladsl.client.RequestBuilding import akka.http.scaladsl.model.HttpMethods._ import akka.http.scaladsl.model._ import akka.stream.Materializer import com.danielasfregola.twitter4s.http.marshalling.{BodyEncoder, Parameters} import com.danielasfregola.twitter4s.http.oauth.OAuth1Provider import scala.concurrent.{ExecutionContext, Future} private[twitter4s] trait OAuthClient extends CommonClient with RequestBuilding { def oauthProvider: OAuth1Provider def withOAuthHeader(callback: Option[String])( implicit materializer: Materializer): HttpRequest => Future[HttpRequest] = { request => implicit val ec = materializer.executionContext for { authorizationHeader <- oauthProvider.oauth1Header(callback)(request, materializer) } yield request.withHeaders(request.headers :+ authorizationHeader) } def withSimpleOAuthHeader(callback: Option[String])( implicit materializer: Materializer): HttpRequest => Future[HttpRequest] = { request => implicit val ec = materializer.executionContext for { authorizationHeader <- oauthProvider.oauth1Header(callback)(request.withEntity(HttpEntity.Empty), materializer) } yield request.withHeaders(request.headers :+ authorizationHeader) } override val Get = new OAuthRequestBuilder(GET) override val Post = new OAuthRequestBuilder(POST) override val Put = new OAuthRequestBuilder(PUT) override val Patch = new OAuthRequestBuilder(PATCH) override val Delete = new OAuthRequestBuilder(DELETE) override val Options = new OAuthRequestBuilder(OPTIONS) override val Head = new OAuthRequestBuilder(HEAD) private[twitter4s] class OAuthRequestBuilder(method: HttpMethod) extends RequestBuilder(method) with BodyEncoder { def apply(uri: String, parameters: Parameters): HttpRequest = if (parameters.toString.nonEmpty) apply(s"$uri?$parameters") else apply(uri) def apply(uri: String, content: Product): HttpRequest = { val data = toBodyAsEncodedParams(content) val contentType = ContentType(MediaTypes.`application/x-www-form-urlencoded`) apply(uri, data, contentType) } def asJson[A <: AnyRef](uri: String, content: A): HttpRequest = { val jsonData = org.json4s.native.Serialization.write(content) val contentType = ContentType(MediaTypes.`application/json`) apply(uri, jsonData, contentType) } def apply(uri: String, content: Product, contentType: ContentType): HttpRequest = { val data = toBodyAsParams(content) apply(uri, data, contentType) } def apply(uri: String, data: String, contentType: ContentType): HttpRequest = apply(uri).withEntity(HttpEntity(data).withContentType(contentType)) def apply(uri: String, multipartFormData: Multipart.FormData)(implicit ec: ExecutionContext): HttpRequest = apply(Uri(uri), Some(multipartFormData)) } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/authentication/AuthenticationClient.scala ================================================ package com.danielasfregola.twitter4s.http.clients.authentication import akka.actor.ActorSystem import akka.http.scaladsl.model.HttpRequest import akka.stream.{ActorMaterializer, Materializer} import com.danielasfregola.twitter4s.entities.ConsumerToken import com.danielasfregola.twitter4s.http.clients.Client import com.danielasfregola.twitter4s.http.oauth.OAuth1Provider import com.danielasfregola.twitter4s.http.serializers.{FormSupport, FromMap} import scala.concurrent.Future private[twitter4s] class AuthenticationClient(val consumerToken: ConsumerToken)(implicit val system: ActorSystem) extends Client { lazy val oauthProvider = new OAuth1Provider(consumerToken, None) private[twitter4s] implicit class RichRestHttpRequest(val request: HttpRequest) { implicit val materializer = ActorMaterializer() implicit val ec = materializer.executionContext def respondAs[T: Manifest](implicit fromMap: FromMap[T]): Future[T] = respondAs[T](None) def respondAs[T: Manifest](callback: Option[String])(implicit fromMap: FromMap[T]): Future[T] = for { requestWithAuth <- withOAuthHeader(callback)(materializer)(request) t <- sendReceiveAs[T](requestWithAuth) } yield t } def sendReceiveAs[T: Manifest](httpRequest: HttpRequest)(implicit system: ActorSystem, materializer: Materializer, fromMap: FromMap[T]): Future[T] = { sendAndReceive(httpRequest, response => FormSupport.unmarshallText(response)) } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/authentication/oauth/TwitterOAuthClient.scala ================================================ package com.danielasfregola.twitter4s.http package clients.authentication.oauth import com.danielasfregola.twitter4s.entities.authentication.{OAuthAccessToken, OAuthRequestToken, RequestToken} import com.danielasfregola.twitter4s.entities.enums.AccessType.AccessType import com.danielasfregola.twitter4s.http.clients.authentication.AuthenticationClient import com.danielasfregola.twitter4s.http.clients.authentication.oauth.parameters.{ AccessTokenParameters, RequestTokenParameters } import com.danielasfregola.twitter4s.util.Configurations._ import scala.concurrent.Future /** Implements the available requests for the `oauth` resource. * */ trait TwitterOAuthClient { protected val authenticationClient: AuthenticationClient private val oauthUrl = s"$apiTwitterUrl/oauth" /** Allows a Consumer application to obtain an OAuth Request Token to request user authorization. * This method fulfills Section 6.1 of the * OAuth 1.0 authentication flow. * For more information see * * https://developer.twitter.com/en/docs/basics/authentication/api-reference/request_token. * * @param oauth_callback : Optional, by default is `None`. * For OAuth 1.0a compliance this parameter is required. * The value you specify here will be used as the URL a user is redirected * to should they approve your application’s access to their account. * Set this to oob for out-of-band pin mode. This is also how you specify * custom callbacks for use in desktop/mobile applications. * @param x_auth_access_type : Optional, by default is `None`. * Overrides the access level an application requests to a users account. * Supported values are read or write . This parameter is intended to * allow a developer to register a read/write application but also request * read only access when appropriate. * @return : The authentication request token. * */ def requestToken(oauth_callback: Option[String] = None, x_auth_access_type: Option[AccessType] = None): Future[OAuthRequestToken] = { import authenticationClient._ val parameters = RequestTokenParameters(x_auth_access_type) Post(s"$oauthUrl/request_token", parameters).respondAs[OAuthRequestToken](oauth_callback) } /** Allows a Consumer application to use an OAuth request_token to request user authorization. * This method is a replacement of Section 6.2 * of the OAuth 1.0 authentication flow * for applications using the callback authentication flow. * The method will use the currently logged in user as the account for access authorization unless * the `force_login` parameter is set to true. * This method differs from [[authorizeUrl]] in that if the user has already granted the application permission, * the redirect will occur without the user having to re-approve the application. * To realize this behavior, you must enable the `Use Sign in with Twitter` setting on your * application record. * For more information see * * https://developer.twitter.com/en/docs/basics/authentication/api-reference/authenticate. * * @param token : The OAuthRequestToken.token obtained from [[requestToken]] * @param force_login : By default is `false`. When set to `true`, it forces the user to * enter their credentials to ensure the correct users account is authorized. * @param screen_name : Optional, by default it is `None`. * It prefills the username input box of the OAuth login screen with the given value. * @return : The authentication url to use in a web browser for the user to complete the authentication process. * */ def authenticateUrl(token: RequestToken, force_login: Boolean = false, screen_name: Option[String] = None): String = genericOAuthUrl("authenticate")(token, force_login, screen_name) /** Allows a Consumer application to use an OAuth Request Token to request user authorization. * This method fulfills Section 6.2 * of the OAuth 1.0 authentication flow. * Desktop applications must use this method (and cannot use [[authenticateUrl]]). * For more information see * * https://developer.twitter.com/en/docs/basics/authentication/api-reference/authenticate. * * @param token : The OAuthRequestToken.token obtained from [[requestToken]] * @param force_login : By default is `false`. When set to `true`, it forces the user to * enter their credentials to ensure the correct users account is authorized. * @param screen_name : Optional, by default it is `None`. * It prefills the username input box of the OAuth login screen with the given value. * @return : The url to use in a web browser for the user to complete the authorization process. * */ def authorizeUrl(token: RequestToken, force_login: Boolean = false, screen_name: Option[String] = None): String = genericOAuthUrl("authorize")(token, force_login, screen_name) private def genericOAuthUrl( path: String)(token: RequestToken, force_login: Boolean, screen_name: Option[String]): String = { val params = { val queryParams = List(Some("oauth_token" -> token.key), Some("force_login" -> force_login), screen_name.map(n => "screen_name" -> n)) queryParams.flatten.map { case (key, value) => s"$key=$value" }.mkString("&") } s"$oauthUrl/$path?$params" } /** Allows a Consumer application to exchange the OAuth Request Token for an OAuth Access Token using xAuth. * This method fulfills Section 6.3 * of the OAuth 1.0 authentication flow. * For more information see * * https://developer.twitter.com/en/docs/basics/authentication/api-reference/access_token. * * @param x_auth_username : The username of the user to obtain a token for. * @param x_auth_password : The password of the user for which to obtain a token for. * @return : The access token for the requested user. * */ def accessToken(x_auth_username: String, x_auth_password: String): Future[OAuthAccessToken] = { val parameters = AccessTokenParameters(x_auth_username = Some(x_auth_username), x_auth_password = Some(x_auth_password), x_auth_mode = Some("client_auth")) import authenticationClient._ Post(s"$oauthUrl/access_token", parameters).respondAs[OAuthAccessToken] } /** Allows a Consumer application to exchange the OAuth Request Token for an OAuth Access Token using OAuth 1.0. * This method fulfills Section 6.3 * of the OAuth 1.0 authentication flow. * For more information see * * https://developer.twitter.com/en/docs/basics/authentication/api-reference/access_token. * * @param token : The OAuthRequestToken.token obtained from [[requestToken]] * @param oauth_verifier : the `oauth_verifier` returned in the callback of the URL * provided by [[authenticateUrl]] or [[authorizeUrl]]. * @return : The access token for the requested user. * */ def accessToken(token: RequestToken, oauth_verifier: String): Future[OAuthAccessToken] = { val parameters = AccessTokenParameters(oauth_token = Some(token.key), oauth_verifier = Some(oauth_verifier)) import authenticationClient._ Post(s"$oauthUrl/access_token", parameters).respondAs[OAuthAccessToken] } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/authentication/oauth/parameters/AccessTokenParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.authentication.oauth.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class AccessTokenParameters(x_auth_username: Option[String] = None, x_auth_password: Option[String] = None, x_auth_mode: Option[String] = None, oauth_verifier: Option[String] = None, oauth_token: Option[String] = None) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/authentication/oauth/parameters/RequestTokenParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.authentication.oauth.parameters import com.danielasfregola.twitter4s.entities.enums.AccessType.AccessType import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class RequestTokenParameters(x_auth_access_type: Option[AccessType]) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/RestClient.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest import akka.actor.ActorSystem import akka.http.scaladsl.model.{HttpRequest, HttpResponse} import akka.http.scaladsl.unmarshalling.Unmarshal import akka.stream.{ActorMaterializer, Materializer} import com.danielasfregola.twitter4s.entities.{AccessToken, ConsumerToken, RateLimit, RatedData} import com.danielasfregola.twitter4s.http.clients.Client import com.danielasfregola.twitter4s.http.oauth.OAuth1Provider import scala.concurrent.Future private[twitter4s] class RestClient(val consumerToken: ConsumerToken, val accessToken: AccessToken)( implicit val system: ActorSystem) extends Client { lazy val oauthProvider = new OAuth1Provider(consumerToken, Some(accessToken)) private[twitter4s] implicit class RichRestHttpRequest(val request: HttpRequest) { implicit val materializer = ActorMaterializer() implicit val ec = materializer.executionContext def respondAs[T: Manifest]: Future[T] = for { requestWithAuth <- withOAuthHeader(None)(materializer)(request) t <- sendReceiveAs[T](requestWithAuth) } yield t def respondAsRated[T: Manifest]: Future[RatedData[T]] = for { requestWithAuth <- withOAuthHeader(None)(materializer)(request) t <- sendReceiveAsRated[T](requestWithAuth) } yield t def sendAsFormData: Future[Unit] = for { requestWithAuth <- withSimpleOAuthHeader(None)(materializer)(request) _ <- sendIgnoreResponse(requestWithAuth) } yield () } def sendIgnoreResponse(httpRequest: HttpRequest)(implicit system: ActorSystem, materializer: Materializer): Future[Unit] = { sendAndReceive(httpRequest, _ => Future.successful((): Unit)) } def sendReceiveAs[T: Manifest](httpRequest: HttpRequest)(implicit system: ActorSystem, materializer: Materializer): Future[T] = { implicit val ec = materializer.executionContext implicit val jsonSerialization = serialization sendAndReceive(httpRequest, response => Unmarshal(response.entity).to[T]) } def sendReceiveAsRated[T: Manifest](httpRequest: HttpRequest)(implicit system: ActorSystem, materializer: Materializer): Future[RatedData[T]] = { implicit val ec = materializer.executionContext implicit val jsonSerialization = serialization val unmarshallRated: HttpResponse => Future[RatedData[T]] = { response => val rate = RateLimit(response.headers) val data = Unmarshal(response.entity).to[T] data.map(d => RatedData(rate, d)) } sendAndReceive(httpRequest, unmarshallRated) } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/account/TwitterAccountClient.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.account import com.danielasfregola.twitter4s.entities._ import com.danielasfregola.twitter4s.entities.enums.ContributorType.ContributorType import com.danielasfregola.twitter4s.entities.enums.Hour._ import com.danielasfregola.twitter4s.entities.enums.Language._ import com.danielasfregola.twitter4s.entities.enums.TimeZone._ import com.danielasfregola.twitter4s.http.clients.rest.RestClient import com.danielasfregola.twitter4s.http.clients.rest.account.parameters.CredentialsParameters import com.danielasfregola.twitter4s.util.Configurations._ import scala.concurrent.Future /** Implements the available requests for the `account` resource. * */ trait TwitterAccountClient { protected val restClient: RestClient private val accountUrl = s"$apiTwitterUrl/$twitterVersion/account" /** Returns settings (including current trend, geo and sleep time information) for the authenticating user. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/get-account-settings. * * @return : The account settings for the authenticating user. * */ def settings(): Future[RatedData[Settings]] = { import restClient._ Get(s"$accountUrl/settings.json").respondAsRated[Settings] } /** Updates the authenticating user’s settings. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/post-account-remove_profile_banner. * * @param allow_contributor_request : Optional, by default it is `None`. * Whether to allow others to include user as contributor. * Possible values include `All` (anyone can include user), * `Following` (only followers can include user) or `None`. * @param sleep_time_enabled : Optional, by default it is `None`. * When set to `true`, will enable sleep time for the user. * Sleep time is the time when push or SMS notifications should not be sent to the user. * @param start_sleep_time : Optional, by default it is `None`. * The hour that sleep time should begin if it is enabled. * The time is considered to be in the same timezone as the user’s time_zone setting. * @param end_sleep_time : Optional, by default it is `None`. * The hour that sleep time should end if it is enabled. * The time is considered to be in the same timezone as the user’s time_zone setting. * @param lang : Optional, by default it is `None`. * The language which Twitter should render in for this user. * @param time_zone : Optional, by default it is `None`. * The timezone dates and times should be displayed in for the user. * @param trend_location_woeid : Optional, by default it is `None`. * The Yahoo! Where On Earth ID to use as the user’s default trend location. * Global information is available by using 1 as the WOEID. * The woeid must be one of the locations returned by [node:59]. * @return : The updated settings. * */ def updateSettings(allow_contributor_request: Option[ContributorType] = None, sleep_time_enabled: Option[Boolean] = None, start_sleep_time: Option[Hour] = None, end_sleep_time: Option[Hour] = None, lang: Option[Language] = None, time_zone: Option[TimeZone] = None, trend_location_woeid: Option[Long] = None): Future[Settings] = { val options = SettingsOptions(allow_contributor_request, sleep_time_enabled, start_sleep_time, end_sleep_time, lang, time_zone, trend_location_woeid) updateSettings(options) } /** Updates the authenticating user’s settings. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/post-account-remove_profile_banner. * * @param settings_options : The setting options to update. Only the parameters specified will be updated. * @return : The updated settings. * */ def updateSettings(settings_options: SettingsOptions): Future[Settings] = { import restClient._ Post(s"$accountUrl/settings.json", settings_options).respondAs[Settings] } /** Returns a representation of the requesting user if authentication was successful; it throws a [[com.danielasfregola.twitter4s.exceptions.TwitterException]] if not. * Use this method to test if supplied user credentials are valid. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/get-account-verify_credentials. * * @param include_entities : By default it is `true`. * The parameters node will not be included when set to false. * @param skip_status : By default it is `false`. * When set to either `true` statuses will not be included in the returned user object. * @param include_email : By default it is `false`. * When set to `true` email will be returned in the user objects. * If the user does not have an email address on their account, or if the email address is un-verified, null will be returned. * @return : The user representation. * */ def verifyCredentials(include_entities: Boolean = true, skip_status: Boolean = false, include_email: Boolean = false): Future[RatedData[User]] = { import restClient._ val parameters = CredentialsParameters(include_entities, skip_status, include_email) Get(s"$accountUrl/verify_credentials.json", parameters).respondAsRated[User] } /** Sets the name that users are able to set under the “Account” tab of their settings page. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/post-account-update_profile. * * @param name : Full name associated with the profile. Maximum of 20 characters. * @param include_entities : By default it is `true`. * The parameters node will not be included when set to false. * @param skip_status : By default it is `false`. * When set to either `true` statuses will not be included in the returned user object. * @return : The user representation. * */ def updateProfileName(name: String, include_entities: Boolean = true, skip_status: Boolean = false): Future[User] = { val update = ProfileUpdate(name = Some(name), include_entities = include_entities, skip_status = skip_status) updateProfile(update) } /** Sets the url that users are able to set under the “Account” tab of their settings page. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/post-account-update_profile. * * @param url : URL associated with the profile. Will be prepended with “http://” if not present. * Maximum of 100 characters. * @param include_entities : By default it is `true`. * The parameters node will not be included when set to false. * @param skip_status : By default it is `false`. * When set to either `true` statuses will not be included in the returned user object. * @return : The user representation. * */ def updateProfileUrl(url: String, include_entities: Boolean = true, skip_status: Boolean = false): Future[User] = { val update = ProfileUpdate(url = Some(url), include_entities = include_entities, skip_status = skip_status) updateProfile(update) } /** Sets the location that users are able to set under the “Account” tab of their settings page. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/post-account-update_profile. * * @param location : The city or country describing where the user of the account is located. * The contents are not normalized or geocoded in any way. Maximum of 30 characters. * @param include_entities : By default it is `true`. * The parameters node will not be included when set to false. * @param skip_status : By default it is `false`. * When set to either `true` statuses will not be included in the returned user object. * @return : The user representation. * */ def updateProfileLocation(location: String, include_entities: Boolean = true, skip_status: Boolean = false): Future[User] = { val update = ProfileUpdate(location = Some(location), include_entities = include_entities, skip_status = skip_status) updateProfile(update) } /** Sets the description that users are able to set under the “Account” tab of their settings page. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/post-account-update_profile. * * @param description : A description of the user owning the account. Maximum of 160 characters. * @param include_entities : By default it is `true`. * The parameters node will not be included when set to false. * @param skip_status : By default it is `false`. * When set to either `true` statuses will not be included in the returned user object. * @return : The user representation. * */ def updateProfileDescription(description: String, include_entities: Boolean = true, skip_status: Boolean = false): Future[User] = { val update = ProfileUpdate(description = Some(description), include_entities = include_entities, skip_status = skip_status) updateProfile(update) } /** Sets the link color that users are able to set under the “Account” tab of their settings page. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/post-account-update_profile. * * @param link_color : Sets a hex value that controls the color scheme of links used on the authenticating user’s profile page on twitter.com. * This must be a valid hexadecimal value, and may be either three or six characters (ex: F00 or FF0000). * @param include_entities : By default it is `true`. * The parameters node will not be included when set to false. * @param skip_status : By default it is `false`. * When set to either `true` statuses will not be included in the returned user object. * @return : The user representation. * */ def updateProfileLinkColor(link_color: String, include_entities: Boolean = true, skip_status: Boolean = false): Future[User] = { val update = ProfileUpdate(profile_link_color = Some(link_color), include_entities = include_entities, skip_status = skip_status) updateProfile(update) } /** Sets some values that users are able to set under the “Account” tab of their settings page. Only the parameters specified will be updated. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/post-account-update_profile. * * @param update : The profile values to update. * @return : The user representation. * */ def updateProfile(update: ProfileUpdate): Future[User] = { import restClient._ Post(s"$accountUrl/update_profile.json", update).respondAs[User] } /** Removes the uploaded profile banner for the authenticating user. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/manage-account-settings/api-reference/post-account-remove_profile_banner. * */ def removeProfileBanner(): Future[Unit] = { import restClient._ Post(s"$accountUrl/remove_profile_banner.json").respondAs[Unit] } // TODO - support update_profile_backgroung_image // TODO - support update_profile_image // TODO - support update_profile_banner } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/account/parameters/CredentialsParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.account.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class CredentialsParameters(include_entities: Boolean, skip_status: Boolean, include_email: Boolean) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/accountactivity/TwitterAccountActivityClient.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.accountactivity import com.danielasfregola.twitter4s.entities._ import com.danielasfregola.twitter4s.http.clients.rest.RestClient import com.danielasfregola.twitter4s.http.clients.rest.accountactivity.parameters.WebhooksParameters import com.danielasfregola.twitter4s.util.Configurations._ import scala.concurrent.Future /** Implements the available requests for the `account_activity` resource. * */ trait TwitterAccountActivityClient { protected val restClient: RestClient private val accountUrl = s"$apiTwitterUrl/$twitterVersion/account_activity/all" /** Registers a webhook URL for your environment. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/aaa-premium#post-account-activity-all-env-name-webhooks. * * @param env_name : The environment name is the name of the App that provide the access to the Account Activity API. * @param url : The encoded URL for the webhook callback endpoint. * @return : The webhook representation. * */ def registerWebhook(env_name: String, url: String): Future[Webhook] = { import restClient._ val parameters = WebhooksParameters(url) Post(s"$accountUrl/$env_name/webhooks.json", parameters).respondAs[Webhook] } /** Removes the webhook from the provided application. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/aaa-premium#delete-account-activity-all-env-name-webhooks-webhook-id. * * @param env_name : The environment name is the name of the App that provide the access to the Account Activity API. * @param webhookId : The id of the webhook that you want to remove. * */ def removeWebhook(env_name: String, webhookId: String): Future[Unit] = { import restClient._ Delete(s"$accountUrl/$env_name/webhooks/$webhookId.json").sendAsFormData } /** Reenables the webhook by setting its status to valid. It triggers the challenge response check (CRC) for the given enviroments webhook for all activites. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/aaa-premium#put-account-activity-all-env-name-webhooks-webhook-id. * * @param env_name : The environment name is the name of the App that provide the access to the Account Activity API. * @param webhookId : The id of the webhook that you want to remove. * */ def reenableWebhook(env_name: String, webhookId: String): Future[Unit] = { import restClient._ Put(s"$accountUrl/$env_name/webhooks/$webhookId.json").sendAsFormData } /** Subscribes the provided application to all events for the provided environment for all message types. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/aaa-premium#post-account-activity-all-env-name-subscriptions. * * @param env_name : The environment name is the name of the App that provide the access to the Account Activity API. * */ def subscribeAll(env_name: String): Future[Unit] = { import restClient._ Post(s"$accountUrl/$env_name/subscriptions.json").sendAsFormData } /** Deactivates subscription(s) for the provided user context and application for all activities. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/aaa-premium#delete-account-activity-all-env-name-subscriptions-deprecated-. * * @param env_name : The environment name is the name of the App that provide the access to the Account Activity API. * */ def unsubscribeAll(env_name: String): Future[Unit] = { import restClient._ Delete(s"$accountUrl/$env_name/subscriptions.json").sendAsFormData } /** Provides a way to determine if a webhook configuration is subscribed to the provided user’s events. If the provided user context has an active subscription with provided application, returns 204 OK. If the response code is not 204, then the user does not have an active subscription. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/aaa-premium#get-account-activity-all-env-name-subscriptions. * * @param env_name : The environment name is the name of the App that provide the access to the Account Activity API. * */ def isUserSubscribed(env_name: String): Future[Unit] = { import restClient._ Get(s"$accountUrl/$env_name/subscriptions.json").sendAsFormData } // The following routes require a Bearer token to authenticate the corresponding requests // TODO - GET webhooks.json https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/aaa-premium#get-account-activity-all-webhooks // TODO - GET subscriptions/count.json https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/aaa-premium#get-account-activity-all-subscriptions-count // TODO - GET :env_name/subscriptions/list.json https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/aaa-premium#get-account-activity-all-env-name-subscriptions-list // TODO - DELETE :env_name/subscriptions/:user_id.json (deprecate unsubscribeAll when implementing this endpoint) https://developer.twitter.com/en/docs/accounts-and-users/subscribe-account-activity/api-reference/aaa-premium#delete-account-activity-all-env-name-subscriptions-user-id-json } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/accountactivity/parameters/WebhooksParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.accountactivity.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class WebhooksParameters(url: String) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/application/TwitterApplicationClient.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.application import com.danielasfregola.twitter4s.entities.enums.Resource.Resource import com.danielasfregola.twitter4s.entities.{RateLimits, RatedData} import com.danielasfregola.twitter4s.http.clients.rest.RestClient import com.danielasfregola.twitter4s.http.clients.rest.application.parameters.RatesParameters import com.danielasfregola.twitter4s.util.Configurations._ import scala.concurrent.Future /** Implements the available requests for the `application` resource. */ trait TwitterApplicationClient { protected val restClient: RestClient private val applicationUrl = s"$apiTwitterUrl/$twitterVersion/application" /** Returns the current rate limits for methods belonging to the specified resource families. * For more information see * * https://developer.twitter.com/en/docs/developer-utilities/rate-limit-status/api-reference/get-application-rate_limit_status. * * @param resources : A comma-separated list of resource families you want to know the current rate limit disposition for. * If no resources are specified, all the resources are considered. * @return : The current rate limits for methods belonging to the specified resource families. */ def rateLimits(resources: Resource*): Future[RatedData[RateLimits]] = { import restClient._ val parameters = RatesParameters(Option(resources.mkString(",")).filter(_.trim.nonEmpty)) Get(s"$applicationUrl/rate_limit_status.json", parameters).respondAsRated[RateLimits] } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/application/parameters/RatesParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.application.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class RatesParameters(resources: Option[String]) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/blocks/TwitterBlockClient.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.blocks import com.danielasfregola.twitter4s.entities._ import com.danielasfregola.twitter4s.http.clients.rest.RestClient import com.danielasfregola.twitter4s.http.clients.rest.blocks.parameters.{ BlockParameters, BlockedUserIdsParameters, BlockedUsersParameters } import com.danielasfregola.twitter4s.util.Configurations._ import scala.concurrent.Future /** Implements the available requests for the `blocks` resource. */ trait TwitterBlockClient { protected val restClient: RestClient private val blocksUrl = s"$apiTwitterUrl/$twitterVersion/blocks" /** Returns the users that the authenticating user is blocking. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/mute-block-report-users/api-reference/get-blocks-list. * * @param include_entities : By default it is `true`. * The parameters node will not be included when set to false. * @param skip_status : By default it is `false`. * When set to either `true` statuses will not be included in the returned user object. * @param cursor : By default it is `-1`, which is the first “page”. * Causes the list of blocked users to be broken into pages of no more than 5000 IDs at a time. * The number of IDs returned is not guaranteed to be 5000 as suspended users are filtered out after connections are queried. * @return : The cursored representation of blocked users. */ def blockedUsers(include_entities: Boolean = true, skip_status: Boolean = false, cursor: Long = -1): Future[RatedData[Users]] = { import restClient._ val parameters = BlockedUsersParameters(include_entities, skip_status, cursor) Get(s"$blocksUrl/list.json", parameters).respondAsRated[Users] } /** Returns an array of user ids the authenticating user is blocking. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/mute-block-report-users/api-reference/get-blocks-ids. * * @param cursor : By default it is `-1`, which is the first “page”. * Causes the list of blocked users to be broken into pages of no more than 5000 IDs at a time. * The number of IDs returned is not guaranteed to be 5000 as suspended users are filtered out after connections are queried. * @return : The cursored representation of user ids. */ def blockedUserIds(cursor: Long = -1): Future[RatedData[UserIds]] = { val parameters = BlockedUserIdsParameters(stringify_ids = false, cursor) genericGetBlockedUserIds[UserIds](parameters) } /** Returns an array of user stringified ids the authenticating user is blocking. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/mute-block-report-users/api-reference/get-blocks-ids. * * @param cursor : By default it is `-1`, which is the first “page”. * Causes the list of blocked users to be broken into pages of no more than 5000 IDs at a time. * The number of IDs returned is not guaranteed to be 5000 as suspended users are filtered out after connections are queried. * @return : The cursored representation of user stringified ids with cursors. */ def blockedUserStringifiedIds(cursor: Long = -1): Future[RatedData[UserStringifiedIds]] = { val parameters = BlockedUserIdsParameters(stringify_ids = true, cursor) genericGetBlockedUserIds[UserStringifiedIds](parameters) } private def genericGetBlockedUserIds[T: Manifest](parameters: BlockedUserIdsParameters): Future[RatedData[T]] = { import restClient._ Get(s"$blocksUrl/ids.json", parameters).respondAsRated[T] } /** Blocks the specified user from following the authenticating user. * In addition the blocked user will not show in the authenticating users mentions or timeline (unless retweeted by another user). * If a follow or friend relationship exists it is destroyed. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/mute-block-report-users/api-reference/post-blocks-create. * * @param screen_name : The screen name of the potentially blocked user. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param include_entities : By default it is `true`. * The parameters node will not be included when set to false. * @param skip_status : By default it is `false`. * When set to either `true` statuses will not be included in the returned user object. * @return : The representation of the blocked user. */ def blockUser(screen_name: String, include_entities: Boolean = true, skip_status: Boolean = false): Future[User] = { val parameters = BlockParameters(user_id = None, Some(screen_name), include_entities, skip_status) genericBlock(parameters) } /** Blocks the specified user id from following the authenticating user. * In addition the blocked user will not show in the authenticating users mentions or timeline (unless retweeted by another user). * If a follow or friend relationship exists it is destroyed. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/mute-block-report-users/api-reference/post-blocks-create. * * @param user_id : The ID of the potentially blocked user. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param include_entities : By default it is `true`. * The parameters node will not be included when set to false. * @param skip_status : By default it is `false`. * When set to either `true` statuses will not be included in the returned user object. * @return : The representation of the blocked user. */ def blockUserId(user_id: Long, include_entities: Boolean = true, skip_status: Boolean = false): Future[User] = { val parameters = BlockParameters(Some(user_id), screen_name = None, include_entities, skip_status) genericBlock(parameters) } private def genericBlock(parameters: BlockParameters): Future[User] = { import restClient._ Post(s"$blocksUrl/create.json", parameters).respondAs[User] } /** Un-blocks the user for the authenticating user. * Returns the un-blocked user in the requested format when successful. * If relationships existed before the block was instated, they will not be restored. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/mute-block-report-users/api-reference/post-blocks-destroy. * * @param screen_name : The screen name of the potentially blocked user. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param include_entities : By default it is `true`. * The parameters node will not be included when set to false. * @param skip_status : By default it is `false`. * When set to either `true` statuses will not be included in the returned user object. * @return : The representation of the unblocked user. */ def unblockUser(screen_name: String, include_entities: Boolean = true, skip_status: Boolean = false): Future[User] = { val parameters = BlockParameters(user_id = None, Some(screen_name), include_entities, skip_status) genericUnblock(parameters) } /** Un-blocks the user specified id for the authenticating user. * Returns the un-blocked user in the requested format when successful. * If relationships existed before the block was instated, they will not be restored. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/mute-block-report-users/api-reference/post-blocks-destroy. * * @param user_id : The ID of the potentially blocked user. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param include_entities : By default it is `true`. * The parameters node will not be included when set to false. * @param skip_status : By default it is `false`. * When set to either `true` statuses will not be included in the returned user object. * @return : The representation of the unblocked user. */ def unblockUserId(user_id: Long, include_entities: Boolean = true, skip_status: Boolean = false): Future[User] = { val parameters = BlockParameters(Some(user_id), screen_name = None, include_entities, skip_status) genericUnblock(parameters) } private def genericUnblock(parameters: BlockParameters): Future[User] = { import restClient._ Post(s"$blocksUrl/destroy.json", parameters).respondAs[User] } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/blocks/parameters/BlockParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.blocks.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class BlockParameters(user_id: Option[Long], screen_name: Option[String], include_entities: Boolean, skip_status: Boolean) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/blocks/parameters/BlockedUserIdsParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.blocks.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class BlockedUserIdsParameters(stringify_ids: Boolean, cursor: Long) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/blocks/parameters/BlockedUsersParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.blocks.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class BlockedUsersParameters(include_entities: Boolean, skip_status: Boolean, cursor: Long) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/directmessages/TwitterDirectMessageClient.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.directmessages import com.danielasfregola.twitter4s.entities._ import com.danielasfregola.twitter4s.http.clients.rest.RestClient import com.danielasfregola.twitter4s.http.clients.rest.directmessages.parameters._ import com.danielasfregola.twitter4s.util.Configurations._ import scala.concurrent.Future /** Implements the available requests for the `direct_messages` resource. * */ trait TwitterDirectMessageClient { protected val restClient: RestClient private val directMessagesUrl = s"$apiTwitterUrl/$twitterVersion/direct_messages" private val events = s"$directMessagesUrl/events" /** Returns all Direct Message events (both sent and received) within the last 30 days, * sorted in reverse-chronological order. * For more information see * * https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/list-events. * * @param count : Optional parameter. Max number of events to be returned. 20 default. 50 max. * @param cursor : Optional parameter. For paging through result sets greater than 1 page, * use the “next_cursor” property from the previous request. * @return : list of events */ def eventsList(count: Int = 20, cursor: Option[String] = None): Future[DirectMessageEventList] = { import restClient._ val parameters = EventListParameters(count, cursor) Get(s"$events/list.json", parameters).respondAs[DirectMessageEventList] } /** Returns Direct Message event (both sent and received) by Id. * For more information see * * https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/get-event. * * @param id : The id of event to return. * @return : the requested event */ def directMessageEvent(id: String): Future[Event] = { import restClient._ val parameters = ShowParameters(id) Get(s"$events/show.json", parameters).respondAs[Event] } // TODO - support creation of messages with attachments and entities // TODO - new endpoint to delete messages /** Sends a new direct message to the specified user from the authenticating user. * For more information see * * https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/new-event. * * @param user_id : The ID of the user who should receive the direct message. * Note: this must be the user id, not its screen name. * @param text : The text of your direct message. * @return : The sent message. */ def createDirectMessageEvent(user_id: Long, text: String): Future[Event] = { val parameters = CreateEventParameters(user_id.toString, text) genericCreateDirectMessageEvent(parameters) } private def genericCreateDirectMessageEvent(parameters: CreateEventParameters): Future[Event] = { import restClient._ Post.asJson(s"$events/new.json", parameters).respondAs[Event] } /** Returns a single direct message, specified by an id parameter. * For more information see * * https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/get-message. * * @param id : The ID of the direct message. * @return : The direct message. * */ @deprecated("Twitter endpoint deprecated from 17th Sep 2018. Please use 'eventShow' instead.", "twitter4s 6.0") def directMessage(id: Long): Future[RatedData[DirectMessage]] = { import restClient._ val parameters = ShowParameters(id.toString) Get(s"$directMessagesUrl/show.json", parameters).respondAsRated[DirectMessage] } /** Sends a new direct message to the specified user from the authenticating user. * For more information see * * https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/new-message. * * @param user_id : The ID of the user who should receive the direct message. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param text : The text of your direct message. Be sure to URL encode as necessary, * and keep the message under 140 characters. * @return : The sent direct message. * */ @deprecated("Twitter endpoint deprecated from 17th Sep 2018. Please use 'createDirectMessageEvent' instead.", "twitter4s 6.0") def createDirectMessage(user_id: Long, text: String): Future[DirectMessage] = { val parameters = CreateParameters(user_id = Some(user_id), text = text) genericCreateDirectMessage(parameters) } /** Sends a new direct message to the specified user from the authenticating user. * For more information see * * https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/new-message. * * @param screen_name : The screen name of the user who should receive the direct message. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param text : The text of your direct message. Be sure to URL encode as necessary, * and keep the message under 140 characters. * @return : The sent direct message. * */ @deprecated("Twitter endpoint deprecated from 17th Sep 2018. Please use 'createDirectMessageEvent' instead.", "twitter4s 6.0") def createDirectMessage(screen_name: String, text: String): Future[DirectMessage] = { val parameters = CreateParameters(screen_name = Some(screen_name), text = text) genericCreateDirectMessage(parameters) } private def genericCreateDirectMessage(parameters: CreateParameters): Future[DirectMessage] = { import restClient._ Post(s"$directMessagesUrl/new.json", parameters).respondAs[DirectMessage] } /** Returns the 20 most recent direct messages sent by the authenticating user. * Includes detailed information about the sender and recipient user. * You can request up to 200 direct messages per call, up to a maximum of 800 outgoing DMs. * For more information see * * https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/get-sent-message. * * @param since_id : Optional, by default it is `None`. * Returns results with an ID greater than (that is, more recent than) the specified ID. * There are limits to the number of Tweets which can be accessed through the API. * If the limit of Tweets has occured since the since_id, the since_id will be forced to the oldest ID available. * @param max_id : Optional, by default it is `None`. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param count : By default it is 200. * Specifies the number of records to retrieve. Must be less than or equal to 200. * @return : The sequence of sent direct messages. * */ @deprecated("Twitter endpoint deprecated from 17th Sep 2018. Please use 'eventsList' instead.", "twitter4s 6.0") def sentDirectMessages(since_id: Option[Long] = None, max_id: Option[Long] = None, count: Int = 200, include_entities: Boolean = true, page: Int = -1): Future[RatedData[Seq[DirectMessage]]] = { import restClient._ val parameters = SentParameters(since_id, max_id, count, include_entities, page) Get(s"$directMessagesUrl/sent.json", parameters).respondAsRated[Seq[DirectMessage]] } /** Returns the 20 most recent direct messages sent to the authenticating user. * Includes detailed information about the sender and recipient user. * You can request up to 200 direct messages per call, and only the most recent 200 DMs will be available using this endpoint. * For more information see * * https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/get-messages. * * @param since_id : Optional, by default it is `None`. * Returns results with an ID greater than (that is, more recent than) the specified ID. * There are limits to the number of Tweets which can be accessed through the API. * If the limit of Tweets has occured since the since_id, the since_id will be forced to the oldest ID available. * @param max_id : Optional, by default it is `None`. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param count : By default it is 200. * Specifies the number of direct messages to try and retrieve, up to a maximum of 200. * The value of count is best thought of as a limit to the number of Tweets to return * because suspended or deleted content is removed after the count has been applied. * @param include_entities : By default it is `true`. * The parameters node will not be included when set to false. * @param skip_status : By default it is `false`. * When set to either `true` statuses will not be included in the returned user object. * @return : The sequence of received direct messages. * */ @deprecated("Twitter endpoint deprecated from 17th Sep 2018. Please use 'eventsList' instead.", "twitter4s 6.0") def receivedDirectMessages(since_id: Option[Long] = None, max_id: Option[Long] = None, count: Int = 200, include_entities: Boolean = true, skip_status: Boolean = false): Future[RatedData[Seq[DirectMessage]]] = { import restClient._ val parameters = ReceivedParameters(since_id, max_id, count, include_entities, skip_status) Get(s"$directMessagesUrl.json", parameters).respondAsRated[Seq[DirectMessage]] } /** Destroys the direct message specified in the required ID parameter. * The authenticating user must be the recipient of the specified direct message. * For more information see * * https://developer.twitter.com/en/docs/direct-messages/sending-and-receiving/api-reference/delete-message. * * @param id : The ID of the direct message to delete. * @param include_entities : By default it is `true`. * The parameters node will not be included when set to false. * @return : The deleted direct message. * */ def deleteDirectMessage(id: Long, include_entities: Boolean = true): Future[DirectMessage] = { import restClient._ val parameters = DestroyParameters(id, include_entities) Post(s"$directMessagesUrl/destroy.json", parameters).respondAs[DirectMessage] } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/directmessages/parameters/CreateEventParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.directmessages.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class CreateEventParameters(event: CreateDirectMessageEventParameters) extends Parameters private[twitter4s] object CreateEventParameters { def apply(recipient_id: String, text: String): CreateEventParameters = { val target = Target(recipient_id) val messageData = MessageData(text) val messageCreate = MessageCreateParameter(target, messageData) val event = CreateDirectMessageEventParameters(messageCreate) apply(event) } } private[twitter4s] final case class CreateDirectMessageEventParameters(message_create: MessageCreateParameter, `type`: String = "message_create") private[twitter4s] final case class MessageCreateParameter(target: Target, message_data: MessageData) private[twitter4s] final case class Target(recipient_id: String) private[twitter4s] final case class MessageData(text: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/directmessages/parameters/CreateParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.directmessages.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class CreateParameters(user_id: Option[Long] = None, screen_name: Option[String] = None, text: String) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/directmessages/parameters/DestroyParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.directmessages.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class DestroyParameters(id: Long, include_entities: Boolean) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/directmessages/parameters/EventListParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.directmessages.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class EventListParameters(count: Int, next_cursor: Option[String]) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/directmessages/parameters/ReceivedParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.directmessages.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class ReceivedParameters(since_id: Option[Long], max_id: Option[Long], count: Int, include_entities: Boolean, skip_status: Boolean) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/directmessages/parameters/SentParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.directmessages.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class SentParameters(since_id: Option[Long], max_id: Option[Long], count: Int, include_entities: Boolean, page: Int) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/directmessages/parameters/ShowParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.directmessages.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class ShowParameters(id: String) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/favorites/TwitterFavoriteClient.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.favorites import com.danielasfregola.twitter4s.entities.{RatedData, Tweet} import com.danielasfregola.twitter4s.http.clients.rest.RestClient import com.danielasfregola.twitter4s.http.clients.rest.favorites.parameters.{FavoriteParameters, FavoritesParameters} import com.danielasfregola.twitter4s.util.Configurations._ import scala.concurrent.Future /** Implements the available requests for the `favorites` resource. * */ trait TwitterFavoriteClient { protected val restClient: RestClient private val favoritesUrl = s"$apiTwitterUrl/$twitterVersion/favorites" /** Returns the 20 most recent Tweets liked by the specified user. * For more information see * * https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/get-favorites-list. * * @param screen_name : The screen name of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param count : By default it is `200`. * Specifies the number of records to retrieve. * Must be less than or equal to 200; defaults to 20. * The value of count is best thought of as a limit to the number of tweets to return * because suspended or deleted content is removed after the count has been applied. * @param since_id : Optional, by default it is `None`. * Returns results with an ID greater than (that is, more recent than) the specified ID. * There are limits to the number of Tweets which can be accessed through the API. * If the limit of Tweets has occurred since the since_id, the since_id will be forced to the oldest ID available. * @param max_id : Optional, by default it is `None`. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param include_entities : By default it is `true`. * The parameters node will not be included when set to false. * @return : The sequence of favorite statuses. * */ def favoriteStatusesForUser(screen_name: String, count: Int = 20, since_id: Option[Long] = None, max_id: Option[Long] = None, include_entities: Boolean = true): Future[RatedData[Seq[Tweet]]] = { val parameters = FavoritesParameters(user_id = None, Some(screen_name), count, since_id, max_id, include_entities) genericGetFavoriteStatuses(parameters) } /** Returns the 20 most recent Tweets liked by the specified user id. * For more information see * * https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/get-favorites-list. * * @param user_id : The ID of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param count : By default it is `200`. * Specifies the number of records to retrieve. * Must be less than or equal to 200; defaults to 20. * The value of count is best thought of as a limit to the number of tweets to return * because suspended or deleted content is removed after the count has been applied. * @param since_id : Optional, by default it is `None`. * Returns results with an ID greater than (that is, more recent than) the specified ID. * There are limits to the number of Tweets which can be accessed through the API. * If the limit of Tweets has occured since the since_id, the since_id will be forced to the oldest ID available. * @param max_id : Optional, by default it is `None`. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param include_entities : By default it is `true`. * The parameters node will not be included when set to false. * @return : The sequence of favorite statuses. * */ def favoriteStatusesForUserId(user_id: Long, count: Int = 20, since_id: Option[Long] = None, max_id: Option[Long] = None, include_entities: Boolean = true): Future[RatedData[Seq[Tweet]]] = { val parameters = FavoritesParameters(Some(user_id), screen_name = None, count, since_id, max_id, include_entities) genericGetFavoriteStatuses(parameters) } private def genericGetFavoriteStatuses(parameters: FavoritesParameters): Future[RatedData[Seq[Tweet]]] = { import restClient._ Get(s"$favoritesUrl/list.json", parameters).respondAsRated[Seq[Tweet]] } /** Likes the status specified in the ID parameter as the authenticating user. * Note: the like action was known as favorite before November 3, 2015; * the historical naming remains in API methods and object properties. * For more information see * * https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/post-favorites-create. * * @param id : The numerical ID of the desired status. * @param include_entities : By default it is `true`. * The parameters node will not be included when set to false. * @return : The liked status. * */ def favoriteStatus(id: Long, include_entities: Boolean = true): Future[Tweet] = { import restClient._ val parameters = FavoriteParameters(id, include_entities) Post(s"$favoritesUrl/create.json", parameters).respondAs[Tweet] } /** Un-likes the status specified in the ID parameter as the authenticating user. * Note: the like action was known as favorite before November 3, 2015; * the historical naming remains in API methods and object properties. * For more information see * * https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/post-favorites-destroy. * * @param id : The numerical ID of the desired status. * @param include_entities : By default it is `true`. * The parameters node will not be included when set to false. * @return : The un-liked status. * */ def unfavoriteStatus(id: Long, include_entities: Boolean = true): Future[Tweet] = { import restClient._ val parameters = FavoriteParameters(id, include_entities) Post(s"$favoritesUrl/destroy.json", parameters).respondAs[Tweet] } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/favorites/parameters/FavoriteParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.favorites.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class FavoriteParameters(id: Long, include_entities: Boolean) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/favorites/parameters/FavoritesParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.favorites.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class FavoritesParameters(user_id: Option[Long], screen_name: Option[String], count: Int, since_id: Option[Long], max_id: Option[Long], include_entities: Boolean) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/followers/TwitterFollowerClient.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.followers import com.danielasfregola.twitter4s.entities.{RatedData, UserIds, UserStringifiedIds, Users} import com.danielasfregola.twitter4s.http.clients.rest.RestClient import com.danielasfregola.twitter4s.http.clients.rest.followers.parameters.{FollowersParameters, FollowingParameters} import com.danielasfregola.twitter4s.util.Configurations._ import scala.concurrent.Future /** Implements the available requests for the `followers` resource. * */ trait TwitterFollowerClient { protected val restClient: RestClient private val followersUrl = s"$apiTwitterUrl/$twitterVersion/followers" /** Returns a cursored collection of user IDs for every user following the specified user id. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-followers-ids. * * @param user_id : The ID of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param cursor : By default it is `-1`, which is the first “page”. * Causes the list of blocked users to be broken into pages of no more than 5000 IDs at a time. * The number of IDs returned is not guaranteed to be 5000 as suspended users are filtered out after connections are queried. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param count : By default it is `5000`. * Specifies the number of IDs attempt retrieval of, up to a maximum of 5,000 per distinct request. * The value of count is best thought of as a limit to the number of results to return. * When using the count parameter with this method, it is wise to use a consistent count value across all requests to the same user’s collection. * Usage of this parameter is encouraged in environments where all 5,000 IDs constitutes too large of a response. * @return : The cursored representation of the users ids following the specified user. * */ def followerIdsForUserId(user_id: Long, cursor: Long = -1, count: Int = 5000): Future[RatedData[UserIds]] = { val parameters = FollowingParameters(Some(user_id), screen_name = None, cursor, count, stringify_ids = false) genericFollowerIds[UserIds](parameters) } /** Returns a cursored collection of user IDs for every user following the specified user. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-followers-ids. * * @param screen_name : The screen name of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param cursor : By default it is `-1`, which is the first “page”. * Causes the list of blocked users to be broken into pages of no more than 5000 IDs at a time. * The number of IDs returned is not guaranteed to be 5000 as suspended users are filtered out after connections are queried. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param count : By default it is `5000`. * Specifies the number of IDs attempt retrieval of, up to a maximum of 5,000 per distinct request. * The value of count is best thought of as a limit to the number of results to return. * When using the count parameter with this method, it is wise to use a consistent count value across all requests to the same user’s collection. * Usage of this parameter is encouraged in environments where all 5,000 IDs constitutes too large of a response. * @return : The cursored representation of the users ids following the specified user. * */ def followerIdsForUser(screen_name: String, cursor: Long = -1, count: Int = 5000): Future[RatedData[UserIds]] = { val parameters = FollowingParameters(user_id = None, Some(screen_name), cursor, count, stringify_ids = false) genericFollowerIds[UserIds](parameters) } /** Returns a cursored collection of user stringified IDs for every user following the specified user id. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-followers-ids. * * @param user_id : The ID of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param cursor : By default it is `-1`, which is the first “page”. * Causes the list of blocked users to be broken into pages of no more than 5000 IDs at a time. * The number of IDs returned is not guaranteed to be 5000 as suspended users are filtered out after connections are queried. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param count : By default it is `5000`. * Specifies the number of IDs attempt retrieval of, up to a maximum of 5,000 per distinct request. * The value of count is best thought of as a limit to the number of results to return. * When using the count parameter with this method, it is wise to use a consistent count value across all requests to the same user’s collection. * Usage of this parameter is encouraged in environments where all 5,000 IDs constitutes too large of a response. * @return : The cursored representation of the users stringified ids following the specified user. * */ def followerStringifiedIdsForUserId(user_id: Long, cursor: Long = -1, count: Int = 5000): Future[RatedData[UserStringifiedIds]] = { val parameters = FollowingParameters(Some(user_id), screen_name = None, cursor, count, stringify_ids = true) genericFollowerIds[UserStringifiedIds](parameters) } /** Returns a cursored collection of user stringified IDs for every user following the specified user. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-followers-ids. * * @param screen_name : The screen name of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param cursor : By default it is `-1`, which is the first “page”. * Causes the list of blocked users to be broken into pages of no more than 5000 IDs at a time. * The number of IDs returned is not guaranteed to be 5000 as suspended users are filtered out after connections are queried. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param count : By default it is `5000`. * Specifies the number of IDs attempt retrieval of, up to a maximum of 5,000 per distinct request. * The value of count is best thought of as a limit to the number of results to return. * When using the count parameter with this method, it is wise to use a consistent count value across all requests to the same user’s collection. * Usage of this parameter is encouraged in environments where all 5,000 IDs constitutes too large of a response. * @return : The cursored representation of the users stringified ids following the specified user. * */ def followersStringifiedIdsForUser(screen_name: String, cursor: Long = -1, count: Int = 5000): Future[RatedData[UserStringifiedIds]] = { val parameters = FollowingParameters(user_id = None, Some(screen_name), cursor, count, stringify_ids = true) genericFollowerIds[UserStringifiedIds](parameters) } private def genericFollowerIds[T: Manifest](parameters: FollowingParameters): Future[RatedData[T]] = { import restClient._ Get(s"$followersUrl/ids.json", parameters).respondAsRated[T] } /** Returns a cursored collection of user objects for users following the specified user. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-followers-list. * * @param screen_name : The screen name of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param cursor : By default it is `-1`, which is the first “page”. * Causes the list of blocked users to be broken into pages of no more than 5000 IDs at a time. * The number of IDs returned is not guaranteed to be 5000 as suspended users are filtered out after connections are queried. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param count : By default it is `20`. * The number of users to return per page, up to a maximum of 200. * @param skip_status : By default it is `false`. * When set to either `true` statuses will not be included in the returned user objects. * @param include_user_entities : By default it is `true`. * The user object parameters node will not be included when set to false. * @return : The cursored representation of the users following the specified user. * */ def followersForUser(screen_name: String, cursor: Long = -1, count: Int = 20, skip_status: Boolean = false, include_user_entities: Boolean = true): Future[RatedData[Users]] = { val parameters = FollowersParameters(user_id = None, screen_name = Some(screen_name), cursor, count, skip_status, include_user_entities) genericGetFollowers(parameters) } /** Returns a cursored collection of user objects for users following the specified user id. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-followers-list. * * @param user_id : The screen name of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param cursor : By default it is `-1`, which is the first “page”. * Causes the list of blocked users to be broken into pages of no more than 5000 IDs at a time. * The number of IDs returned is not guaranteed to be 5000 as suspended users are filtered out after connections are queried. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param count : By default it is `20`. * The number of users to return per page, up to a maximum of 200. * @param skip_status : By default it is `false`. * When set to either `true` statuses will not be included in the returned user objects. * @param include_user_entities : By default it is `true`. * The user object parameters node will not be included when set to false. * @return : The cursored representation of the users following the specified user. * */ def followersForUserId(user_id: Long, cursor: Long = -1, count: Int = 20, skip_status: Boolean = false, include_user_entities: Boolean = true): Future[RatedData[Users]] = { val parameters = FollowersParameters(user_id = Some(user_id), screen_name = None, cursor, count, skip_status, include_user_entities) genericGetFollowers(parameters) } private def genericGetFollowers(parameters: FollowersParameters): Future[RatedData[Users]] = { import restClient._ Get(s"$followersUrl/list.json", parameters).respondAsRated[Users] } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/followers/parameters/FollowersParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.followers.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class FollowersParameters(user_id: Option[Long], screen_name: Option[String], cursor: Long, count: Int, skip_status: Boolean, include_user_entities: Boolean) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/followers/parameters/FollowingParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.followers.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class FollowingParameters(user_id: Option[Long], screen_name: Option[String], cursor: Long, count: Int, stringify_ids: Boolean) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/friends/TwitterFriendClient.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.friends import com.danielasfregola.twitter4s.entities.{RatedData, UserIds, UserStringifiedIds, Users} import com.danielasfregola.twitter4s.http.clients.rest.RestClient import com.danielasfregola.twitter4s.http.clients.rest.friends.parameters.{FriendParameters, FriendsParameters} import com.danielasfregola.twitter4s.util.Configurations._ import scala.concurrent.Future /** Implements the available requests for the `friends` resource. * */ trait TwitterFriendClient { protected val restClient: RestClient private val friendsUrl = s"$apiTwitterUrl/$twitterVersion/friends" /** Returns a cursored collection of user IDs for every user the specified user id is following (otherwise known as their “friends”). * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friends-ids. * * @param user_id : The ID of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param cursor : By default it is `-1`, which is the first “page”. * Causes the list of blocked users to be broken into pages of no more than 5000 IDs at a time. * The number of IDs returned is not guaranteed to be 5000 as suspended users are filtered out after connections are queried. * @param max_id : Optional, by default it is `None`. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param count : By default it is `5000`. * Specifies the number of IDs attempt retrieval of, up to a maximum of 5,000 per distinct request. * The value of count is best thought of as a limit to the number of results to return. * When using the count parameter with this method, it is wise to use a consistent count value across all requests to the same user’s collection. * Usage of this parameter is encouraged in environments where all 5,000 IDs constitutes too large of a response. * @return : The cursored representation of the user ids the specified user id is following. * */ def friendIdsForUserId(user_id: Long, cursor: Long = -1, count: Int = 5000): Future[RatedData[UserIds]] = { val parameters = FriendParameters(Some(user_id), screen_name = None, cursor, count, stringify_ids = false) genericGetFriendIds[UserIds](parameters) } /** Returns a cursored collection of user IDs for every user the specified user is following (otherwise known as their “friends”). * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friends-ids. * * @param screen_name : The screen name of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param cursor : By default it is `-1`, which is the first “page”. * Causes the list of blocked users to be broken into pages of no more than 5000 IDs at a time. * The number of IDs returned is not guaranteed to be 5000 as suspended users are filtered out after connections are queried. * @param max_id : Optional, by default it is `None`. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param count : By default it is `5000`. * Specifies the number of IDs attempt retrieval of, up to a maximum of 5,000 per distinct request. * The value of count is best thought of as a limit to the number of results to return. * When using the count parameter with this method, it is wise to use a consistent count value across all requests to the same user’s collection. * Usage of this parameter is encouraged in environments where all 5,000 IDs constitutes too large of a response. * @return : The cursored representation of the user ids the specified user is following. * */ def friendIdsForUser(screen_name: String, cursor: Long = -1, count: Int = 5000): Future[RatedData[UserIds]] = { val parameters = FriendParameters(user_id = None, Some(screen_name), cursor, count, stringify_ids = false) genericGetFriendIds[UserIds](parameters) } /** Returns a cursored collection of user stringified IDs for every user the specified user id is following (otherwise known as their “friends”). * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friends-ids. * * @param user_id : The ID of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param cursor : By default it is `-1`, which is the first “page”. * Causes the list of blocked users to be broken into pages of no more than 5000 IDs at a time. * The number of IDs returned is not guaranteed to be 5000 as suspended users are filtered out after connections are queried. * @param max_id : Optional, by default it is `None`. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param count : By default it is `5000`. * Specifies the number of IDs attempt retrieval of, up to a maximum of 5,000 per distinct request. * The value of count is best thought of as a limit to the number of results to return. * When using the count parameter with this method, it is wise to use a consistent count value across all requests to the same user’s collection. * Usage of this parameter is encouraged in environments where all 5,000 IDs constitutes too large of a response. * @return : The cursored representation of the user stringified ids the specified user id is following. * */ def friendStringifiedIdsForUserId(user_id: Long, cursor: Long = -1, count: Int = 5000): Future[RatedData[UserStringifiedIds]] = { val parameters = FriendParameters(Some(user_id), screen_name = None, cursor, count, stringify_ids = true) genericGetFriendIds[UserStringifiedIds](parameters) } /** Returns a cursored collection of user stringified IDs for every user the specified user is following (otherwise known as their “friends”). * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friends-ids. * * @param screen_name : The screen name of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param cursor : By default it is `-1`, which is the first “page”. * Causes the list of blocked users to be broken into pages of no more than 5000 IDs at a time. * The number of IDs returned is not guaranteed to be 5000 as suspended users are filtered out after connections are queried. * @param max_id : Optional, by default it is `None`. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param count : By default it is `5000`. * Specifies the number of IDs attempt retrieval of, up to a maximum of 5,000 per distinct request. * The value of count is best thought of as a limit to the number of results to return. * When using the count parameter with this method, it is wise to use a consistent count value across all requests to the same user’s collection. * Usage of this parameter is encouraged in environments where all 5,000 IDs constitutes too large of a response. * @return : The cursored representation of the user stringified ids the specified user is following. * */ def friendStringifiedIdsForUser(screen_name: String, cursor: Long = -1, count: Int = 5000): Future[RatedData[UserStringifiedIds]] = { val parameters = FriendParameters(user_id = None, Some(screen_name), cursor, count, stringify_ids = true) genericGetFriendIds[UserStringifiedIds](parameters) } private def genericGetFriendIds[T: Manifest](parameters: FriendParameters): Future[RatedData[T]] = { import restClient._ Get(s"$friendsUrl/ids.json", parameters).respondAsRated[T] } /** Returns a cursored collection of user objects for every user the specified user is following (otherwise known as their “friends”). * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friends-list. * * @param screen_name : The screen name of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param cursor : By default it is `-1`, which is the first “page”. * Causes the list of blocked users to be broken into pages of no more than 5000 IDs at a time. * The number of IDs returned is not guaranteed to be 5000 as suspended users are filtered out after connections are queried. * @param max_id : Optional, by default it is `None`. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param count : By default it is `20`. * The number of users to return per page, up to a maximum of 200. * @param skip_status : By default it is `false`. * When set to either `true` statuses will not be included in the returned user objects. * @param include_user_entities : By default it is `true`. * The user object parameters node will not be included when set to false. * @return : The cursored representation of the users the specified user is following. * */ def friendsForUser(screen_name: String, cursor: Long = -1, count: Int = 20, skip_status: Boolean = false, include_user_entities: Boolean = true): Future[RatedData[Users]] = { val parameters = FriendsParameters(user_id = None, Some(screen_name), cursor, count, skip_status, include_user_entities) genericGetFriends(parameters) } /** Returns a cursored collection of user objects for every user the specified user id is following (otherwise known as their “friends”). * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friends-list. * * @param user_id : The ID of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param cursor : By default it is `-1`, which is the first “page”. * Causes the list of blocked users to be broken into pages of no more than 5000 IDs at a time. * The number of IDs returned is not guaranteed to be 5000 as suspended users are filtered out after connections are queried. * @param max_id : Optional, by default it is `None`. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param count : By default it is `20`. * The number of users to return per page, up to a maximum of 200. * @param skip_status : By default it is `false`. * When set to either `true` statuses will not be included in the returned user objects. * @param include_user_entities : By default it is `true`. * The user object parameters node will not be included when set to false. * @return : The cursored representation of the users the specified user id is following. * */ def friendsForUserId(user_id: Long, cursor: Long = -1, count: Int = 20, skip_status: Boolean = false, include_user_entities: Boolean = true): Future[RatedData[Users]] = { val parameters = FriendsParameters(Some(user_id), screen_name = None, cursor, count, skip_status, include_user_entities) genericGetFriends(parameters) } private def genericGetFriends(parameters: FriendsParameters): Future[RatedData[Users]] = { import restClient._ Get(s"$friendsUrl/list.json", parameters).respondAsRated[Users] } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/friends/parameters/FriendParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.friends.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class FriendParameters(user_id: Option[Long], screen_name: Option[String], cursor: Long, count: Int, stringify_ids: Boolean) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/friends/parameters/FriendsParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.friends.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class FriendsParameters(user_id: Option[Long], screen_name: Option[String], cursor: Long, count: Int, skip_status: Boolean, include_user_entities: Boolean) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/friendships/TwitterFriendshipClient.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.friendships import com.danielasfregola.twitter4s.entities._ import com.danielasfregola.twitter4s.http.clients.rest.RestClient import com.danielasfregola.twitter4s.http.clients.rest.friendships.parameters._ import com.danielasfregola.twitter4s.util.Configurations._ import scala.concurrent.Future /** Implements the available requests for the `friendships` resource. * */ trait TwitterFriendshipClient { protected val restClient: RestClient private val friendshipsUrl = s"$apiTwitterUrl/$twitterVersion/friendships" /** Returns a collection of user ids that the currently authenticated user does not want to receive retweets from. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friendships-no_retweets-ids. * * @return : The sequence of user ids the currently authenticated user does not want to receive retweets from. * */ def noRetweetsUserIds(): Future[RatedData[Seq[Long]]] = { val parameters = BlockedParameters(stringify_ids = false) genericGetNoRetweetsUserIds[Seq[Long]](parameters) } /** Returns a collection of user stringified ids that the currently authenticated user does not want to receive retweets from. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friendships-no_retweets-ids. * * @return : The sequence of the user stringified ids the currently authenticated user does not want to receive retweets from. * */ def noRetweetsUserStringifiedIds(): Future[RatedData[Seq[String]]] = { val parameters = BlockedParameters(stringify_ids = true) genericGetNoRetweetsUserIds[Seq[String]](parameters) } private def genericGetNoRetweetsUserIds[T: Manifest](parameters: BlockedParameters): Future[RatedData[T]] = { import restClient._ Get(s"$friendshipsUrl/no_retweets/ids.json", parameters).respondAsRated[T] } /** Returns a collection of numeric IDs for every user who has a pending request to follow the authenticating user. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friendships-incoming. * * @param cursor : By default it is `-1`, which is the first “page”. * Causes the list of blocked users to be broken into pages of no more than 5000 IDs at a time. * The number of IDs returned is not guaranteed to be 5000 as suspended users are filtered out after connections are queried. * @return : The sequence of the user ids that have a pending request to follow the authenticating user. * */ def incomingFriendshipIds(cursor: Long = -1): Future[RatedData[UserIds]] = { val parameters = FriendshipParameters(cursor, stringify_ids = false) genericGetIncomingFriendships[UserIds](parameters) } /** Returns a collection of numeric stringified IDs for every user who has a pending request to follow the authenticating user. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friendships-incoming. * * @param cursor : By default it is `-1`, which is the first “page”. * Causes the list of blocked users to be broken into pages of no more than 5000 IDs at a time. * The number of IDs returned is not guaranteed to be 5000 as suspended users are filtered out after connections are queried. * @return : The sequence of the user stringified ids that have a pending request to follow the authenticating user. * */ def incomingFriendshipStringifiedIds(cursor: Long = -1): Future[RatedData[UserStringifiedIds]] = { val parameters = FriendshipParameters(cursor, stringify_ids = true) genericGetIncomingFriendships[UserStringifiedIds](parameters) } private def genericGetIncomingFriendships[T: Manifest](parameters: FriendshipParameters): Future[RatedData[T]] = { import restClient._ Get(s"$friendshipsUrl/incoming.json", parameters).respondAsRated[T] } /** Returns a collection of numeric IDs for every protected user for whom the authenticating user has a pending follow request. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friendships-outgoing. * * @param cursor : By default it is `-1`, which is the first “page”. * Causes the list of blocked users to be broken into pages of no more than 5000 IDs at a time. * The number of IDs returned is not guaranteed to be 5000 as suspended users are filtered out after connections are queried. * @return : The sequence of the user ids that have a pending follow request from the authenticating user. * */ def outgoingFriendshipIds(cursor: Long = -1): Future[RatedData[UserIds]] = { val parameters = FriendshipParameters(cursor, stringify_ids = false) genericOutgoingFriendships[UserIds](parameters) } /** Returns a collection of numeric stringified IDs for every protected user for whom the authenticating user has a pending follow request. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friendships-outgoing. * * @param cursor : By default it is `-1`, which is the first “page”. * Causes the list of blocked users to be broken into pages of no more than 5000 IDs at a time. * The number of IDs returned is not guaranteed to be 5000 as suspended users are filtered out after connections are queried. * @return : The sequence of the user stringified ids that have a pending follow request from the authenticating user. * */ def outgoingFriendshipStringifiedIds(cursor: Long = -1): Future[RatedData[UserStringifiedIds]] = { val parameters = FriendshipParameters(cursor, stringify_ids = true) genericOutgoingFriendships[UserStringifiedIds](parameters) } private def genericOutgoingFriendships[T: Manifest](parameters: FriendshipParameters): Future[RatedData[T]] = { import restClient._ Get(s"$friendshipsUrl/outgoing.json", parameters).respondAsRated[T] } /** Allows the authenticating users to follow the specified user id. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/post-friendships-create. * * @param user_id : The ID of the user for whom to befriend. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param notify : By default it is `true`. * Enable notifications for the target user. * @return : The user representation of the target user. * */ def followUserId(user_id: Long, notify: Boolean = true): Future[User] = { val parameters = FollowParameters(Some(user_id), screen_name = None, notify) genericFollow(parameters) } /** Allows the authenticating users to follow the specified user. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/post-friendships-create. * * @param screen_name : The screen name of the user for whom to befriend. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param notify : By default it is `true`. * Enable notifications for the target user. * @return : The user representation of the target user. * */ def followUser(screen_name: String, notify: Boolean = true): Future[User] = { val parameters = FollowParameters(user_id = None, Some(screen_name), notify) genericFollow(parameters) } private def genericFollow(parameters: FollowParameters): Future[User] = { import restClient._ Post(s"$friendshipsUrl/create.json", parameters).respondAs[User] } /** Allows the authenticating users to unfollow the specified user id. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/post-friendships-destroy. * * @param user_id : The ID of the user for whom to unfollow. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @return : The user representation of the target user. * */ def unfollowUserId(user_id: Long): Future[User] = { val parameters: UnfollowParameters = UnfollowParameters(Some(user_id), screen_name = None) genericUnfollow(parameters) } /** Allows the authenticating users to unfollow the specified user. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/post-friendships-destroy. * * @param screen_name : The screen name of the user for whom to unfollow. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @return : The user representation of the target user. * */ def unfollowUser(screen_name: String): Future[User] = { val parameters: UnfollowParameters = UnfollowParameters(user_id = None, Some(screen_name)) genericUnfollow(parameters) } private def genericUnfollow(parameters: UnfollowParameters): Future[User] = { import restClient._ Post(s"$friendshipsUrl/destroy.json", parameters).respondAs[User] } /** Allows one to enable retweets from the specified user. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/post-friendships-update. * * @param screen_name : The screen name of the user for whom to befriend. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @return : The user representation of the target user. * */ def enableRetweetsNotificationsForUser(screen_name: String): Future[Relationship] = { val parameters = RetweetNotificationParameters(user_id = None, Some(screen_name), retweets = true) genericNotifications(parameters) } /** Allows one to enable retweets from the specified user id. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/post-friendships-update. * * @param user_id : The ID of the user for whom to befriend. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @return : The user representation of the target user. * */ def enableRetweetsNotificationsForUserId(user_id: Long): Future[Relationship] = { val parameters = RetweetNotificationParameters(Some(user_id), screen_name = None, retweets = true) genericNotifications(parameters) } /** Allows one to disable retweets from the specified user. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/post-friendships-update. * * @param screen_name : The screen name of the user for whom to befriend. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @return : The user representation of the target user. * */ def disableRetweetsNotificationsForUser(screen_name: String): Future[Relationship] = { val parameters = RetweetNotificationParameters(user_id = None, Some(screen_name), retweets = false) genericNotifications(parameters) } /** Allows one to disable retweets from the specified user id. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/post-friendships-update. * * @param user_id : The ID of the user for whom to befriend. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @return : The user representation of the target user. * */ def disableRetweetsNotificationsForUserId(user_id: Long): Future[Relationship] = { val parameters = RetweetNotificationParameters(Some(user_id), screen_name = None, retweets = false) genericNotifications(parameters) } /** Allows one to enable device notifications from the specified user. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/post-friendships-update. * * @param screen_name : The screen name of the user for whom to befriend. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @return : The user representation of the target user. * */ def enableDeviceNotificationsForUser(screen_name: String): Future[Relationship] = { val parameters = DeviceNotificationParameters(user_id = None, Some(screen_name), device = true) genericNotifications(parameters) } /** Allows one to enable device notifications from the specified user id. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/post-friendships-update. * * @param user_id : The ID of the user for whom to befriend. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @return : The user representation of the target user. * */ def enableDeviceNotificationsForUserId(user_id: Long): Future[Relationship] = { val parameters = DeviceNotificationParameters(Some(user_id), screen_name = None, device = true) genericNotifications(parameters) } /** Allows one to disable device notifications from the specified user. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/post-friendships-update. * * @param screen_name : The screen name of the user for whom to befriend. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @return : The user representation of the target user. * */ def disableDeviceNotificationsForUser(screen_name: String): Future[Relationship] = { val parameters = DeviceNotificationParameters(user_id = None, Some(screen_name), device = false) genericNotifications(parameters) } /** Allows one to disable device notifications from the specified user id. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/post-friendships-update. * * @param user_id : The ID of the user for whom to befriend. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @return : The user representation of the target user. * */ def disableDeviceNotificationsForUserId(user_id: Long): Future[Relationship] = { val parameters = DeviceNotificationParameters(Some(user_id), screen_name = None, device = false) genericNotifications(parameters) } private def genericNotifications(parameters: NotificationParameters): Future[Relationship] = { import restClient._ Post(s"$friendshipsUrl/update.json", parameters).respondAs[Relationship] } /** Returns detailed information about the relationship between two arbitrary users ids. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friendships-show. * * @param source_id : The user id of the subject user. * @param target_id : The user id of the target user. * @return : The representation of the relationship between the two users. * */ def relationshipBetweenUserIds(source_id: Long, target_id: Long): Future[RatedData[Relationship]] = { val parameters = RelationshipParametersByIds(source_id, target_id) genericGetRelationship(parameters) } /** Returns detailed information about the relationship between two arbitrary users. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friendships-show. * * @param source_screen_name : The screen name of the subject user. * @param target_screen_name : The screen name of the target user. * @return : The representation of the relationship between the two users. * */ def relationshipBetweenUsers(source_screen_name: String, target_screen_name: String): Future[RatedData[Relationship]] = { val parameters = RelationshipParametersByNames(source_screen_name, target_screen_name) genericGetRelationship(parameters) } private def genericGetRelationship(parameters: RelationshipParameters): Future[RatedData[Relationship]] = { import restClient._ Get(s"$friendshipsUrl/show.json", parameters).respondAsRated[Relationship] } /** Returns the relationships of the authenticating user of up to 100 user screen names. * Values for connections can be: `following`, `following_requested`, `followed_by`, `none`, `blocking`, `muting`. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friendships-lookup. * * @param screen_names : The list of screen names. * At least 1 screen name needs to be provided. Up to 100 are allowed in a single request. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @return : The sequence of the lookup relationships. * */ def relationshipsWithUsers(screen_names: String*): Future[RatedData[Seq[LookupRelationship]]] = { require(screen_names.nonEmpty, "please, provide at least one screen name") val parameters = RelationshipsParameters(user_id = None, screen_name = Some(screen_names.mkString(","))) genericGetRelationships(parameters) } /** Returns the relationships of the authenticating user of up to 100 user ids. * Values for connections can be: `following`, `following_requested`, `followed_by`, `none`, `blocking`, `muting`. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friendships-lookup. * * @param user_ids : The list of user ids. * At least 1 user id needs to be provided. Up to 100 are allowed in a single request. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @return : The sequence of the lookup relationships. * */ def relationshipsWithUserIds(user_ids: Long*): Future[RatedData[Seq[LookupRelationship]]] = { require(user_ids.nonEmpty, "please, provide at least one user id") val parameters = RelationshipsParameters(user_id = Some(user_ids.mkString(",")), screen_name = None) genericGetRelationships(parameters) } private def genericGetRelationships( parameters: RelationshipsParameters): Future[RatedData[Seq[LookupRelationship]]] = { import restClient._ Get(s"$friendshipsUrl/lookup.json", parameters).respondAsRated[Seq[LookupRelationship]] } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/friendships/parameters/BlockedParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.friendships.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class BlockedParameters(stringify_ids: Boolean) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/friendships/parameters/FollowParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.friendships.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class FollowParameters(user_id: Option[Long], screen_name: Option[String], follow: Boolean) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/friendships/parameters/FriendshipParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.friendships.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class FriendshipParameters(cursor: Long, stringify_ids: Boolean) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/friendships/parameters/NotificationParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.friendships.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters abstract class NotificationParameters extends Parameters private[twitter4s] final case class RetweetNotificationParameters(user_id: Option[Long], screen_name: Option[String], retweets: Boolean) extends NotificationParameters private[twitter4s] final case class DeviceNotificationParameters(user_id: Option[Long], screen_name: Option[String], device: Boolean) extends NotificationParameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/friendships/parameters/RelationshipParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.friendships.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters abstract class RelationshipParameters extends Parameters private[twitter4s] final case class RelationshipParametersByIds(source_id: Long, target_id: Long) extends RelationshipParameters private[twitter4s] final case class RelationshipParametersByNames(source_screen_name: String, target_screen_name: String) extends RelationshipParameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/friendships/parameters/RelationshipsParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.friendships.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class RelationshipsParameters(user_id: Option[String], screen_name: Option[String]) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/friendships/parameters/UnfollowParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.friendships.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class UnfollowParameters(user_id: Option[Long], screen_name: Option[String]) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/geo/TwitterGeoClient.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.geo import com.danielasfregola.twitter4s.entities.enums.Granularity import com.danielasfregola.twitter4s.entities.enums.Granularity._ import com.danielasfregola.twitter4s.entities.{Accuracy, GeoPlace, GeoSearch, RatedData} import com.danielasfregola.twitter4s.http.clients.rest.RestClient import com.danielasfregola.twitter4s.http.clients.rest.geo.parameters.{GeoSearchParameters, ReverseGeoCodeParameters} import com.danielasfregola.twitter4s.util.Configurations._ import scala.concurrent.Future /** Implements the available requests for the `geo` resource. * */ trait TwitterGeoClient { protected val restClient: RestClient private val geoUrl = s"$apiTwitterUrl/$twitterVersion/geo" /** Returns all the information about a known place. * For more information see * * https://developer.twitter.com/en/docs/geo/place-information/api-reference/get-geo-id-place_id. * * @param place_id : A place id in the world. * @return : A set of information about place. * */ def geoPlace(place_id: String): Future[RatedData[GeoPlace]] = { import restClient._ Get(s"$geoUrl/id/$place_id.json").respondAsRated[GeoPlace] } /** Given a latitude and a longitude, searches for up to 20 places that can be used as a place id when updating a status. * For more information see * * https://developer.twitter.com/en/docs/geo/places-near-location/api-reference/get-geo-reverse_geocode. * * @param latitude : The latitude to search around. * This parameter will be ignored unless it is inside the range -90.0 to +90.0 (North is positive) inclusive. * It will also be ignored if there isn’t a corresponding long parameter. * @param longitude : The longitude to search around. * The valid ranges for longitude is -180.0 to +180.0 (East is positive) inclusive. * This parameter will be ignored if outside that range, if it is not a number, * if geo_enabled is disabled, or if there not a corresponding lat parameter. * @param accuracy : By default it is `Default`, which is 0 meters. * A hint on the “region” in which to search. * @param granularity : By default it is `Neighborhood` * This is the minimal granularity of place types to return. * @param max_results : Optional, by default it is `None`. * A hint as to the number of results to return. * This does not guarantee that the number of results returned will equal max_results, but instead informs how many “nearby” results to return. * Ideally, only pass in the number of places you intend to display to the user here. * @param callback : Optional, by default it is `None`. * If supplied, the response will use the JSONP format with a callback of the given name. * @return : The geo search result. * */ def reverseGeocode(latitude: Double, longitude: Double, accuracy: Accuracy = Accuracy.Default, granularity: Granularity = Granularity.Neighborhood, max_results: Option[Int] = None, callback: Option[String] = None): Future[RatedData[GeoSearch]] = { import restClient._ val parameters = ReverseGeoCodeParameters(latitude, longitude, accuracy, granularity, max_results, callback) Get(s"$geoUrl/reverse_geocode.json", parameters).respondAsRated[GeoSearch] } /** Search for places that can be attached to a statuses/update. * For more information see * * https://developer.twitter.com/en/docs/geo/places-near-location/api-reference/get-geo-search. * * @param query : Free-form text to match against while executing a geo-based query, best suited for finding nearby locations by name. * @return : The geo search result. * */ def searchGeoPlace(query: String): Future[RatedData[GeoSearch]] = advancedSearchGeoPlace(query = Some(query)) /** Advanced search for places that can be attached to a statuses/update. * Given a latitude and a longitude pair, an IP address, or a name, this request will return a list of all the valid places that can be used as the place_id when updating a status. * For more information see * * https://developer.twitter.com/en/docs/geo/places-near-location/api-reference/get-geo-search. * * @param latitude : Optional, by default it is `None`. * The latitude to search around. * This parameter will be ignored unless it is inside the range -90.0 to +90.0 (North is positive) inclusive. * It will also be ignored if there isn’t a corresponding `longitude` parameter. * @param longitude : Optional, by default it is `None`. * The longitude to search around. * The valid ranges for longitude is -180.0 to +180.0 (East is positive) inclusive. * This parameter will be ignored if outside that range, if geo_enabled is disabled, * or if there not a corresponding `latitude` parameter. * @param query : Optional, by default it is `None`. * Free-form text to match against while executing a geo-based query, best suited for finding nearby locations by name. * @param ip : Optional, by default it is `None`. * An IP address. Used when attempting to fix geolocation based off of the user’s IP address. * @param granularity : By default it is `Neighborhood` * This is the minimal granularity of place types to return. * @param max_results : Optional, by default it is `None`. * A hint as to the number of results to return. * This does not guarantee that the number of results returned will equal max_results, but instead informs how many “nearby” results to return. * Ideally, only pass in the number of places you intend to display to the user here. * @param contained_within : Optional, by default it is `None`. * This is the place id which you would like to restrict the search results to. * Setting this value means only places within the given place id will be found. * @param street_address : Optional, by default it is `None`. * This parameter searches for places which have this given street address. * There are other well-known, and application specific attributes available. * Custom attributes are also permitted. * @param callback : Optional, by default it is `None`. * If supplied, the response will use the JSONP format with a callback of the given name. * @return : The geo search result. * */ def advancedSearchGeoPlace(latitude: Option[Double] = None, longitude: Option[Double] = None, query: Option[String] = None, ip: Option[String] = None, granularity: Option[Granularity] = None, accuracy: Option[Accuracy] = None, max_results: Option[Int] = None, contained_within: Option[String] = None, street_address: Option[String] = None, callback: Option[String] = None): Future[RatedData[GeoSearch]] = { import restClient._ require( latitude.isDefined || longitude.isDefined || ip.isDefined || query.isDefined, "please, provide at least one of the following: 'latitude', 'longitude', 'query', 'ip'" ) val parameters = GeoSearchParameters(latitude, longitude, query, ip, granularity, accuracy, max_results, contained_within, street_address, callback) Get(s"$geoUrl/search.json", parameters).respondAsRated[GeoSearch] } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/geo/parameters/GeoSearchParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.geo.parameters import com.danielasfregola.twitter4s.entities.Accuracy import com.danielasfregola.twitter4s.entities.enums.Granularity._ import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class GeoSearchParameters(lat: Option[Double], long: Option[Double], query: Option[String], ip: Option[String], granularity: Option[Granularity], accuracy: Option[Accuracy], max_results: Option[Int], contained_within: Option[String], `attribute:street_address`: Option[String], callback: Option[String]) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/geo/parameters/ReverseGeoCodeParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.geo.parameters import com.danielasfregola.twitter4s.entities.Accuracy import com.danielasfregola.twitter4s.entities.enums.Granularity.Granularity import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class ReverseGeoCodeParameters(lat: Double, long: Double, accuracy: Accuracy, granularity: Granularity, max_results: Option[Int], callback: Option[String]) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/help/TwitterHelpClient.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.help import com.danielasfregola.twitter4s.entities._ import com.danielasfregola.twitter4s.http.clients.rest.RestClient import com.danielasfregola.twitter4s.util.Configurations._ import scala.concurrent.Future /** Implements the available requests for the `help` resource. * */ trait TwitterHelpClient { protected val restClient: RestClient private val helpUrl = s"$apiTwitterUrl/$twitterVersion/help" /** Returns the current configuration used by Twitter including twitter.com slugs which are not usernames, maximum photo resolutions, and t.co shortened URL length. * For more information see * * https://developer.twitter.com/en/docs/developer-utilities/configuration/api-reference/get-help-configuration. * * @return : The current Twitter configuration. * */ def configuration(): Future[RatedData[Configuration]] = { import restClient._ Get(s"$helpUrl/configuration.json").respondAsRated[Configuration] } /** Returns the list of languages supported by Twitter along with the language code supported by Twitter. * For more information see * * https://developer.twitter.com/en/docs/developer-utilities/supported-languages/api-reference/get-help-languages. * * @return : The list of languages supported by Twitter. * */ def supportedLanguages(): Future[RatedData[Seq[LanguageDetails]]] = { import restClient._ Get(s"$helpUrl/languages.json").respondAsRated[Seq[LanguageDetails]] } /** Returns Twitter’s Privacy Policy. * For more information see * * https://developer.twitter.com/en/docs/developer-utilities/privacy-policy/api-reference/get-help-privacy. * * @return : The Twitter's Privacy Policy. * */ def privacyPolicy(): Future[RatedData[PrivacyPolicy]] = { import restClient._ Get(s"$helpUrl/privacy.json").respondAsRated[PrivacyPolicy] } /** Returns the Twitter Terms of Service. * Note: these are not the same as the Developer Policy. * For more information see * * https://developer.twitter.com/en/docs/developer-utilities/terms-of-service/api-reference/get-help-tos. * * @return : the Twitter Terms of Service. * */ def termsOfService(): Future[RatedData[TermsOfService]] = { import restClient._ Get(s"$helpUrl/tos.json").respondAsRated[TermsOfService] } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/lists/TwitterListClient.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.lists import com.danielasfregola.twitter4s.entities._ import com.danielasfregola.twitter4s.entities.enums.Mode.Mode import com.danielasfregola.twitter4s.entities.enums.TweetMode.TweetMode import com.danielasfregola.twitter4s.entities.enums.{Mode, TweetMode} import com.danielasfregola.twitter4s.http.clients.rest.RestClient import com.danielasfregola.twitter4s.http.clients.rest.lists.parameters._ import com.danielasfregola.twitter4s.util.Configurations._ import scala.concurrent.Future /** Implements the available requests for the `lists` resource. */ trait TwitterListClient { protected val restClient: RestClient private val listsUrl = s"$apiTwitterUrl/$twitterVersion/lists" /** Returns all lists the specified user subscribes to, including their own. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-list. * * @param screen_name : The screen name of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param reverse : By default it is `false`. * Set this to true if you would like owned lists to be returned first. * @return : The sequence of all lists the specified user subscribes to. */ def listsForUser(screen_name: String, reverse: Boolean = false): Future[RatedData[Seq[TwitterList]]] = { val parameters = ListsParameters(user_id = None, Some(screen_name), reverse) genericGetLists(parameters) } /** Returns all lists the specified user subscribes to, including their own. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-list. * * @param user_id : The ID of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param reverse : By default it is `false`. * Set this to true if you would like owned lists to be returned first. * @return : The sequence of all lists the specified user subscribes to. */ def listsForUserId(user_id: Long, reverse: Boolean = false): Future[RatedData[Seq[TwitterList]]] = { val parameters = ListsParameters(Some(user_id), screen_name = None, reverse) genericGetLists(parameters) } private def genericGetLists(parameters: ListsParameters): Future[RatedData[Seq[TwitterList]]] = { import restClient._ Get(s"$listsUrl/list.json", parameters).respondAsRated[Seq[TwitterList]] } /** Returns a timeline of tweets authored by members of the specified list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-statuses. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_id : The user ID of the user who owns the list being requested by a `slug`. * @param count : By default it is `20`. * Specifies the number of results to retrieve per "page". * @param since_id : Optional, by default it is `None`. * Returns results with an ID greater than (that is, more recent than) the specified ID. * There are limits to the number of Tweets which can be accessed through the API. * If the limit of Tweets has occured since the `since_id`, the `since_id` will be forced to the oldest ID available. * @param max_id : Optional, by default it is `None`. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param include_entities : By default it is `true`. * his node offers a variety of metadata about the tweet in a discreet structure, including: user_mentions, urls, and hashtags. * You can omit parameters from the result by setting `include_entities` to `false`. * @param include_rts : By default it is `false`. * When set to `true`, the list timeline will contain native retweets (if they exist) in addition to the standard stream of tweets. * @param tweet_mode : Optional, by default it is `Classic`. * When set to `Extended` prevents tweet text truncating, see https://developer.twitter.com/en/docs/tweets/tweet-updates * @return : The sequence of tweets for the specified list. */ def listTimelineBySlugAndOwnerId(slug: String, owner_id: Long, count: Int = 20, since_id: Option[Long] = None, max_id: Option[Long] = None, include_entities: Boolean = true, include_rts: Boolean = false, tweet_mode: TweetMode = TweetMode.Classic): Future[RatedData[Seq[Tweet]]] = { val parameters = ListTimelineParameters( slug = Some(slug), owner_id = Some(owner_id), count = count, since_id = since_id, max_id = max_id, include_entities = include_entities, include_rts = include_rts, tweet_mode = tweet_mode ) genericGetListTimeline(parameters) } /** Returns a timeline of tweets authored by members of the specified list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-statuses. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_screen_name : TThe screen name of the user who owns the list being requested by a `slug`. * @param count : By default it is `20`. * Specifies the number of results to retrieve per "page". * @param since_id : Optional, by default it is `None`. * Returns results with an ID greater than (that is, more recent than) the specified ID. * There are limits to the number of Tweets which can be accessed through the API. * If the limit of Tweets has occured since the `since_id`, the `since_id` will be forced to the oldest ID available. * @param max_id : Optional, by default it is `None`. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param include_entities : By default it is `true`. * his node offers a variety of metadata about the tweet in a discreet structure, including: user_mentions, urls, and hashtags. * You can omit parameters from the result by setting `include_entities` to `false`. * @param include_rts : By default it is `false`. * When set to `true`, the list timeline will contain native retweets (if they exist) in addition to the standard stream of tweets. * @param tweet_mode : Optional, by default it is `Classic`. * When set to `Extended` prevents tweet text truncating, see https://developer.twitter.com/en/docs/tweets/tweet-updates * @return : The sequence of tweets for the specified list. */ def listTimelineBySlugAndOwnerName(slug: String, owner_screen_name: String, count: Int = 20, since_id: Option[Long] = None, max_id: Option[Long] = None, include_entities: Boolean = true, include_rts: Boolean = false, tweet_mode: TweetMode = TweetMode.Classic): Future[RatedData[Seq[Tweet]]] = { val parameters = ListTimelineParameters( slug = Some(slug), owner_screen_name = Some(owner_screen_name), count = count, since_id = since_id, max_id = max_id, include_entities = include_entities, include_rts = include_rts, tweet_mode = tweet_mode ) genericGetListTimeline(parameters) } /** Returns a timeline of tweets authored by members of the specified list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-statuses. * * @param list_id : The numerical id of the list. * @param count : By default it is `20`. * Specifies the number of results to retrieve per "page". * @param since_id : Optional, by default it is `None`. * Returns results with an ID greater than (that is, more recent than) the specified ID. * There are limits to the number of Tweets which can be accessed through the API. * If the limit of Tweets has occured since the `since_id`, the `since_id` will be forced to the oldest ID available. * @param max_id : Optional, by default it is `None`. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param include_entities : By default it is `true`. * his node offers a variety of metadata about the tweet in a discreet structure, including: user_mentions, urls, and hashtags. * You can omit parameters from the result by setting `include_entities` to `false`. * @param include_rts : By default it is `false`. * When set to `true`, the list timeline will contain native retweets (if they exist) in addition to the standard stream of tweets. * @param tweet_mode : Optional, by default it is `Classic`. * When set to `Extended` prevents tweet text truncating, see https://developer.twitter.com/en/docs/tweets/tweet-updates * @return : The sequence of tweets for the specified list. */ def listTimelineByListId(list_id: Long, count: Int = 20, since_id: Option[Long] = None, max_id: Option[Long] = None, include_entities: Boolean = true, include_rts: Boolean = false, tweet_mode: TweetMode = TweetMode.Classic): Future[RatedData[Seq[Tweet]]] = { val parameters = ListTimelineParameters(list_id = Some(list_id), count = count, since_id = since_id, max_id = max_id, include_entities = include_entities, include_rts = include_rts, tweet_mode = tweet_mode) genericGetListTimeline(parameters) } private def genericGetListTimeline(parameters: ListTimelineParameters): Future[RatedData[Seq[Tweet]]] = { import restClient._ Get(s"$listsUrl/statuses.json", parameters).respondAsRated[Seq[Tweet]] } /** Removes the specified member from the list. The authenticated user must be the list’s owner to remove members from the list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-destroy. * * @param list_id : The numerical id of the list. * @param member_screen_name : The screen name of the user for whom to remove from the list. * Helpful for disambiguating when a valid screen name is also a user ID. */ def removeListMemberByListId(list_id: Long, member_screen_name: String): Future[Unit] = { val parameters = RemoveMemberParameters(list_id = Some(list_id), screen_name = Some(member_screen_name)) genericRemoveListMember(parameters) } /** Removes the specified member from the list. The authenticated user must be the list’s owner to remove members from the list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-destroy. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_screen_name : The screen name of the user who owns the list being requested by a `slug`. * @param member_screen_name : The screen name of the user for whom to remove from the list. * Helpful for disambiguating when a valid screen name is also a user ID. */ def removeListMemberBySlugAndOwnerName(slug: String, owner_screen_name: String, member_screen_name: String): Future[Unit] = { val parameters = RemoveMemberParameters(slug = Some(slug), owner_screen_name = Some(owner_screen_name), screen_name = Some(member_screen_name)) genericRemoveListMember(parameters) } /** Removes the specified member from the list. The authenticated user must be the list’s owner to remove members from the list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-destroy. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_id : The user ID of the user who owns the list being requested by a `slug`. * @param member_screen_name : The screen name of the user for whom to remove from the list. * Helpful for disambiguating when a valid screen name is also a user ID. */ def removeListMemberBySlugAndOwnerId(slug: String, owner_id: Long, member_screen_name: String): Future[Unit] = { val parameters = RemoveMemberParameters(slug = Some(slug), owner_id = Some(owner_id), screen_name = Some(member_screen_name)) genericRemoveListMember(parameters) } /** Removes the specified member from the list. The authenticated user must be the list’s owner to remove members from the list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-destroy. * * @param list_id : The numerical id of the list. * @param member_id : The ID of the user to remove from the list. * Helpful for disambiguating when a valid user ID is also a valid screen name. */ def removeListMemberIdByListId(list_id: Long, member_id: Long): Future[Unit] = { val parameters = RemoveMemberParameters(list_id = Some(list_id), user_id = Some(member_id)) genericRemoveListMember(parameters) } /** Removes the specified member from the list. The authenticated user must be the list’s owner to remove members from the list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-destroy. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_screen_name : The screen name of the user who owns the list being requested by a `slug`. * @param member_id : The ID of the user to remove from the list. * Helpful for disambiguating when a valid user ID is also a valid screen name. */ def removeListMemberIdBySlugAndOwnerName(slug: String, owner_screen_name: String, member_id: Long): Future[Unit] = { val parameters = RemoveMemberParameters(slug = Some(slug), owner_screen_name = Some(owner_screen_name), user_id = Some(member_id)) genericRemoveListMember(parameters) } /** Removes the specified member from the list. The authenticated user must be the list’s owner to remove members from the list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-destroy. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_id : The user ID of the user who owns the list being requested by a `slug`. * @param member_id : The ID of the user to remove from the list. * Helpful for disambiguating when a valid user ID is also a valid screen name. */ def removeListMemberIdBySlugAndOwnerId(slug: String, owner_id: Long, member_id: Long): Future[Unit] = { val parameters = RemoveMemberParameters(slug = Some(slug), owner_id = Some(owner_id), user_id = Some(member_id)) genericRemoveListMember(parameters) } private def genericRemoveListMember(parameters: RemoveMemberParameters): Future[Unit] = { import restClient._ Post(s"$listsUrl/members/destroy.json", parameters).respondAs[Unit] } /** Returns the twitter lists the specified user has been added to. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-memberships. * * @param screen_name : The screen name of the user for whom to return results for. * Helpful for disambiguating when a valid screen name is also a user ID. * @param count : By default it is `20`. * The amount of results to return per page. Defaults to 20. * No more than 1000 results will ever be returned in a single page. * @param cursor : By default it is `-1`, which is the first “page”. * Breaks the results into pages. Provide values as returned in the response body’s `next_cursor` and `previous_cursor` attributes to page back and forth in the list. * @param filter_to_owned_lists : By default it is `false`. * When set to `true`, will return just lists the authenticating user owns, and the user represented by user_id or screen_name is a member of. * @return : The twitter lists the specified user has been added to. */ def listMembershipsForUser(screen_name: String, count: Int = 20, cursor: Long = -1, filter_to_owned_lists: Boolean = false): Future[RatedData[TwitterLists]] = { val parameters = MembershipsParameters(user_id = None, Some(screen_name), count, cursor, filter_to_owned_lists) genericGetListMemberships(parameters) } /** Returns the twitter lists the specified user has been added to. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-memberships. * * @param user_id : The ID of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param count : By default it is `20`. * The amount of results to return per page. Defaults to 20. * No more than 1000 results will ever be returned in a single page. * @param cursor : By default it is `-1`, which is the first “page”. * Breaks the results into pages. Provide values as returned in the response body’s `next_cursor` and `previous_cursor` attributes to page back and forth in the list. * @param filter_to_owned_lists : By default it is `false`. * When set to `true`, will return just lists the authenticating user owns, and the user represented by user_id or screen_name is a member of. * @return : The twitter lists the specified user has been added to. */ def listMembershipsForUserId(user_id: Long, count: Int = 20, cursor: Long = -1, filter_to_owned_lists: Boolean = false): Future[RatedData[TwitterLists]] = { val parameters = MembershipsParameters(Some(user_id), screen_name = None, count, cursor, filter_to_owned_lists) genericGetListMemberships(parameters) } private def genericGetListMemberships(parameters: MembershipsParameters): Future[RatedData[TwitterLists]] = { import restClient._ Get(s"$listsUrl/memberships.json", parameters).respondAsRated[TwitterLists] } /** Adds multiple members to a list. The authenticated user must own the list to be able to add members to it. * Note that lists can’t have more than 5,000 members, and you are limited to adding up to 100 members to a list at a time with this method. * Please note that there can be issues with lists that rapidly remove and add memberships. * Take care when using these methods such that you are not too rapidly switching between removals and adds on the same list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-create_all. * * @param list_id : The numerical id of the list. * @param user_ids : The list of user IDs to add, up to 100 are allowed in a single request. */ def addListMemberIdsByListId(list_id: Long, user_ids: Seq[Long]): Future[Unit] = { require(user_ids.nonEmpty, "please, provide at least one user id") val parameters = MembersParameters(list_id = Some(list_id), user_id = Some(user_ids.mkString(","))) genericAddListMembers(parameters) } /** Adds multiple members to a list. The authenticated user must own the list to be able to add members to it. * Note that lists can’t have more than 5,000 members, and you are limited to adding up to 100 members to a list at a time with this method. * Please note that there can be issues with lists that rapidly remove and add memberships. * Take care when using these methods such that you are not too rapidly switching between removals and adds on the same list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-create_all. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_screen_name : The screen name of the user who owns the list being requested by a `slug`. * @param user_ids : The list of user IDs to add, up to 100 are allowed in a single request. */ def addListMemberIdsBySlugAndOwnerName(slug: String, owner_screen_name: String, user_ids: Seq[Long]): Future[Unit] = { require(user_ids.nonEmpty, "please, provide at least one user id") val parameters = MembersParameters(slug = Some(slug), owner_screen_name = Some(owner_screen_name), user_id = Some(user_ids.mkString(","))) genericAddListMembers(parameters) } /** Adds multiple members to a list. The authenticated user must own the list to be able to add members to it. * Note that lists can’t have more than 5,000 members, and you are limited to adding up to 100 members to a list at a time with this method. * Please note that there can be issues with lists that rapidly remove and add memberships. * Take care when using these methods such that you are not too rapidly switching between removals and adds on the same list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-create_all. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_id : The user ID of the user who owns the list being requested by a `slug`. * @param user_ids : The list of user IDs to add, up to 100 are allowed in a single request. */ def addListMemberIdsBySlugAndOwnerId(slug: String, owner_id: Long, user_ids: Seq[Long]): Future[Unit] = { require(user_ids.nonEmpty, "please, provide at least one user id") val parameters = MembersParameters(slug = Some(slug), owner_id = Some(owner_id), user_id = Some(user_ids.mkString(","))) genericAddListMembers(parameters) } /** Adds multiple members to a list. The authenticated user must own the list to be able to add members to it. * Note that lists can’t have more than 5,000 members, and you are limited to adding up to 100 members to a list at a time with this method. * Please note that there can be issues with lists that rapidly remove and add memberships. * Take care when using these methods such that you are not too rapidly switching between removals and adds on the same list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-create_all. * * @param list_id : The numerical id of the list. * @param screen_names : The list of user screen names to add, up to 100 are allowed in a single request. */ def addListMembersByListId(list_id: Long, screen_names: Seq[String]): Future[Unit] = { require(screen_names.nonEmpty, "please, provide at least one screen name") val parameters = MembersParameters(list_id = Some(list_id), screen_name = Some(screen_names.mkString(","))) genericAddListMembers(parameters) } /** Adds multiple members to a list. The authenticated user must own the list to be able to add members to it. * Note that lists can’t have more than 5,000 members, and you are limited to adding up to 100 members to a list at a time with this method. * Please note that there can be issues with lists that rapidly remove and add memberships. * Take care when using these methods such that you are not too rapidly switching between removals and adds on the same list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-create_all. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_screen_name : The screen name of the user who owns the list being requested by a `slug`. * @param screen_names : The list of user screen names to add, up to 100 are allowed in a single request. */ def addListMembersBySlugAndOwnerName(slug: String, owner_screen_name: String, screen_names: Seq[String]): Future[Unit] = { require(screen_names.nonEmpty, "please, provide at least one screen name") val parameters = MembersParameters(slug = Some(slug), owner_screen_name = Some(owner_screen_name), screen_name = Some(screen_names.mkString(","))) genericAddListMembers(parameters) } /** Adds multiple members to a list. The authenticated user must own the list to be able to add members to it. * Note that lists can’t have more than 5,000 members, and you are limited to adding up to 100 members to a list at a time with this method. * Please note that there can be issues with lists that rapidly remove and add memberships. * Take care when using these methods such that you are not too rapidly switching between removals and adds on the same list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-create_all. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_id : The user ID of the user who owns the list being requested by a `slug`. * @param screen_names : The list of user screen names to add, up to 100 are allowed in a single request. */ def addListMembersBySlugAndOwnerId(slug: String, owner_id: Long, screen_names: Seq[String]): Future[Unit] = { require(screen_names.nonEmpty, "please, provide at least one screen name") val parameters = MembersParameters(slug = Some(slug), owner_id = Some(owner_id), screen_name = Some(screen_names.mkString(","))) genericAddListMembers(parameters) } private def genericAddListMembers(parameters: MembersParameters): Future[Unit] = { import restClient._ Post(s"$listsUrl/members/create_all.json", parameters).respondAs[Unit] } /** Check if the specified user is a member of the specified list. * If the user is a member of the specified list, his user representation is returned. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-members-show. * * @param list_id : The numerical id of the list. * @param user_id : The ID of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param include_entities : By default it is `true`. * his node offers a variety of metadata about the tweet in a discreet structure, including: user_mentions, urls, and hashtags. * You can omit parameters from the result by setting `include_entities` to `false`. * @param skip_status : By default it is `false`. * When set to either `true`, statuses will not be included in the returned user objects. * @return : The user representation if the specified user is a member of the specified list, it throws an `TwitterException` instead. */ def checkListMemberByUserIdAndListId(list_id: Long, user_id: Long, include_entities: Boolean = true, skip_status: Boolean = false): Future[RatedData[User]] = { val parameters = MemberParameters(list_id = Some(list_id), user_id = Some(user_id), include_entities = include_entities, skip_status = skip_status) genericCheckListMember(parameters) } /** Check if the specified user is a member of the specified list. * If the user is a member of the specified list, his user representation is returned. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-members-show. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_screen_name : The screen name of the user who owns the list being requested by a `slug`. * @param user_id : The ID of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param include_entities : By default it is `true`. * his node offers a variety of metadata about the tweet in a discreet structure, including: user_mentions, urls, and hashtags. * You can omit parameters from the result by setting `include_entities` to `false`. * @param skip_status : By default it is `false`. * When set to either `true`, statuses will not be included in the returned user objects. * @return : The user representation if the specified user is a member of the specified list, it throws an `TwitterException` instead. */ def checkListMemberByUserIdSlugAndOwnerName(slug: String, owner_screen_name: String, user_id: Long, include_entities: Boolean = true, skip_status: Boolean = false): Future[RatedData[User]] = { val parameters = MemberParameters(slug = Some(slug), owner_screen_name = Some(owner_screen_name), user_id = Some(user_id), include_entities = include_entities, skip_status = skip_status) genericCheckListMember(parameters) } /** Check if the specified user is a member of the specified list. * If the user is a member of the specified list, his user representation is returned. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-members-show. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_id : The user ID of the user who owns the list being requested by a `slug`. * @param user_id : The ID of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param include_entities : By default it is `true`. * his node offers a variety of metadata about the tweet in a discreet structure, including: user_mentions, urls, and hashtags. * You can omit parameters from the result by setting `include_entities` to `false`. * @param skip_status : By default it is `false`. * When set to either `true`, statuses will not be included in the returned user objects. * @return : The user representation if the specified user is a member of the specified list, it throws an `TwitterException` instead. */ def checkListMemberByUserIdSlugAndOwnerId(slug: String, owner_id: Long, user_id: Long, include_entities: Boolean = true, skip_status: Boolean = false): Future[RatedData[User]] = { val parameters = MemberParameters(slug = Some(slug), owner_id = Some(owner_id), user_id = Some(user_id), include_entities = include_entities, skip_status = skip_status) genericCheckListMember(parameters) } /** Check if the specified user is a member of the specified list. * If the user is a member of the specified list, his user representation is returned. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-members-show. * * @param list_id : The numerical id of the list. * @param screen_name : The screen name of the user for whom to return results for. * Helpful for disambiguating when a valid screen name is also a user ID. * @param include_entities : By default it is `true`. * his node offers a variety of metadata about the tweet in a discreet structure, including: user_mentions, urls, and hashtags. * You can omit parameters from the result by setting `include_entities` to `false`. * @param skip_status : By default it is `false`. * When set to either `true`, statuses will not be included in the returned user objects. * @return : The user representation if the specified user is a member of the specified list, it throws an `TwitterException` instead. */ def checkListMemberByUserAndListId(list_id: Long, screen_name: String, include_entities: Boolean = true, skip_status: Boolean = false): Future[RatedData[User]] = { val parameters = MemberParameters(list_id = Some(list_id), screen_name = Some(screen_name), include_entities = include_entities, skip_status = skip_status) genericCheckListMember(parameters) } /** Check if the specified user is a member of the specified list. * If the user is a member of the specified list, his user representation is returned. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-members-show. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_screen_name : The screen name of the user who owns the list being requested by a `slug`. * @param screen_name : The screen name of the user for whom to return results for. * Helpful for disambiguating when a valid screen name is also a user ID. * @param include_entities : By default it is `true`. * his node offers a variety of metadata about the tweet in a discreet structure, including: user_mentions, urls, and hashtags. * You can omit parameters from the result by setting `include_entities` to `false`. * @param skip_status : By default it is `false`. * When set to either `true`, statuses will not be included in the returned user objects. * @return : The user representation if the specified user is a member of the specified list, it throws an `TwitterException` instead. */ def checkListMemberByUserSlugAndOwnerName(slug: String, owner_screen_name: String, screen_name: String, include_entities: Boolean = true, skip_status: Boolean = false): Future[RatedData[User]] = { val parameters = MemberParameters(slug = Some(slug), owner_screen_name = Some(owner_screen_name), screen_name = Some(screen_name), include_entities = include_entities, skip_status = skip_status) genericCheckListMember(parameters) } /** Check if the specified user is a member of the specified list. * If the user is a member of the specified list, his user representation is returned. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-members-show. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_id : The user ID of the user who owns the list being requested by a `slug`. * @param screen_name : The screen name of the user for whom to return results for. * Helpful for disambiguating when a valid screen name is also a user ID. * @param include_entities : By default it is `true`. * his node offers a variety of metadata about the tweet in a discreet structure, including: user_mentions, urls, and hashtags. * You can omit parameters from the result by setting `include_entities` to `false`. * @param skip_status : By default it is `false`. * When set to either `true`, statuses will not be included in the returned user objects. * @return : The user representation if the specified user is a member of the specified list, it throws an `TwitterException` instead. */ def checkListMemberByUserSlugAndOwnerId(slug: String, owner_id: Long, screen_name: String, include_entities: Boolean = true, skip_status: Boolean = false): Future[RatedData[User]] = { val parameters = MemberParameters(slug = Some(slug), owner_id = Some(owner_id), screen_name = Some(screen_name), include_entities = include_entities, skip_status = skip_status) genericCheckListMember(parameters) } private def genericCheckListMember(parameters: MemberParameters): Future[RatedData[User]] = { import restClient._ Get(s"$listsUrl/members/show.json", parameters).respondAsRated[User] } /** Returns the members of the specified list. Private list members will only be shown if the authenticated user owns the specified list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-members. * * @param list_id : The numerical id of the list. * @param count : By default it is `20`. * The amount of results to return per page. Defaults to 20. * No more than 1000 results will ever be returned in a single page. * @param cursor : By default it is `-1`, which is the first “page”. * Breaks the results into pages. Provide values as returned in the response body’s `next_cursor` and `previous_cursor` attributes to page back and forth in the list. * @param include_entities : By default it is `true`. * his node offers a variety of metadata about the tweet in a discreet structure, including: user_mentions, urls, and hashtags. * You can omit parameters from the result by setting `include_entities` to `false`. * @param skip_status : By default it is `false`. * When set to either `true`, statuses will not be included in the returned user objects. * @return : The users representation of the members of the list. */ def listMembersByListId(list_id: Long, count: Int = 20, cursor: Long = -1, include_entities: Boolean = true, skip_status: Boolean = false): Future[RatedData[Users]] = { val parameters = ListMembersParameters(list_id = Some(list_id), count = count, cursor = cursor, include_entities = include_entities, skip_status = skip_status) genericGetListMembers(parameters) } /** Returns the members of the specified list. Private list members will only be shown if the authenticated user owns the specified list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-members. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_screen_name : The screen name of the user who owns the list being requested by a `slug`. * @param count : By default it is `20`. * The amount of results to return per page. Defaults to 20. * No more than 1000 results will ever be returned in a single page. * @param cursor : By default it is `-1`, which is the first “page”. * Breaks the results into pages. Provide values as returned in the response body’s `next_cursor` and `previous_cursor` attributes to page back and forth in the list. * @param include_entities : By default it is `true`. * his node offers a variety of metadata about the tweet in a discreet structure, including: user_mentions, urls, and hashtags. * You can omit parameters from the result by setting `include_entities` to `false`. * @param skip_status : By default it is `false`. * When set to either `true`, statuses will not be included in the returned user objects. * @return : The users representation of the members of the list. */ def listMembersBySlugAndOwnerName(slug: String, owner_screen_name: String, count: Int = 20, cursor: Long = -1, include_entities: Boolean = true, skip_status: Boolean = false): Future[RatedData[Users]] = { val parameters = ListMembersParameters(slug = Some(slug), owner_screen_name = Some(owner_screen_name), count = count, cursor = cursor, include_entities = include_entities, skip_status = skip_status) genericGetListMembers(parameters) } /** Returns the members of the specified list. Private list members will only be shown if the authenticated user owns the specified list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-members. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_id : The user ID of the user who owns the list being requested by a `slug`. * @param count : By default it is `20`. * The amount of results to return per page. Defaults to 20. * No more than 1000 results will ever be returned in a single page. * @param cursor : By default it is `-1`, which is the first “page”. * Breaks the results into pages. Provide values as returned in the response body’s `next_cursor` and `previous_cursor` attributes to page back and forth in the list. * @param include_entities : By default it is `true`. * his node offers a variety of metadata about the tweet in a discreet structure, including: user_mentions, urls, and hashtags. * You can omit parameters from the result by setting `include_entities` to `false`. * @param skip_status : By default it is `false`. * When set to either `true`, statuses will not be included in the returned user objects. * @return : The users representation of the members of the list. */ def listMembersBySlugAndOwnerId(slug: String, owner_id: Long, count: Int = 20, cursor: Long = -1, include_entities: Boolean = true, skip_status: Boolean = false): Future[RatedData[Users]] = { val parameters = ListMembersParameters(slug = Some(slug), owner_id = Some(owner_id), count = count, cursor = cursor, include_entities = include_entities, skip_status = skip_status) genericGetListMembers(parameters) } private def genericGetListMembers(parameters: ListMembersParameters): Future[RatedData[Users]] = { import restClient._ Get(s"$listsUrl/members.json", parameters).respondAsRated[Users] } /** Add a member to a list. The authenticated user must own the list to be able to add members to it. * Note that lists cannot have more than 5,000 members. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-create. * * @param list_id : The numerical id of the list. * @param user_id : The ID of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. */ def addListMemberIdByListId(list_id: Long, user_id: Long): Future[Unit] = { val parameters = AddMemberParameters(list_id = Some(list_id), user_id = Some(user_id)) genericAddListMember(parameters) } /** Add a member to a list. The authenticated user must own the list to be able to add members to it. * Note that lists cannot have more than 5,000 members. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-create. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_screen_name : The screen name of the user who owns the list being requested by a `slug`. * @param user_id : The ID of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. */ def addListMemberIdBySlugAndOwnerName(slug: String, owner_screen_name: String, user_id: Long): Future[Unit] = { val parameters = AddMemberParameters(slug = Some(slug), owner_screen_name = Some(owner_screen_name), user_id = Some(user_id)) genericAddListMember(parameters) } /** Add a member to a list. The authenticated user must own the list to be able to add members to it. * Note that lists cannot have more than 5,000 members. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-create. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_id : The user ID of the user who owns the list being requested by a `slug`. * @param user_id : The ID of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. */ def addListMemberIdBySlugAndOwnerId(slug: String, owner_id: Long, user_id: Long): Future[Unit] = { val parameters = AddMemberParameters(slug = Some(slug), owner_id = Some(owner_id), user_id = Some(user_id)) genericAddListMember(parameters) } /** Add a member to a list. The authenticated user must own the list to be able to add members to it. * Note that lists cannot have more than 5,000 members. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-create. * * @param list_id : The numerical id of the list. * @param screen_name : The screen name of the user for whom to return results for. * Helpful for disambiguating when a valid screen name is also a user ID. */ def addListMemberByListId(list_id: Long, screen_name: String): Future[Unit] = { val parameters = AddMemberParameters(list_id = Some(list_id), screen_name = Some(screen_name)) genericAddListMember(parameters) } /** Add a member to a list. The authenticated user must own the list to be able to add members to it. * Note that lists cannot have more than 5,000 members. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-create. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_screen_name : The screen name of the user who owns the list being requested by a `slug`. * @param screen_name : The screen name of the user for whom to return results for. * Helpful for disambiguating when a valid screen name is also a user ID. */ def addListMemberBySlugAndOwnerName(slug: String, owner_screen_name: String, screen_name: String): Future[Unit] = { val parameters = AddMemberParameters(slug = Some(slug), owner_screen_name = Some(owner_screen_name), screen_name = Some(screen_name)) genericAddListMember(parameters) } /** Add a member to a list. The authenticated user must own the list to be able to add members to it. * Note that lists cannot have more than 5,000 members. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-create. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_id : The user ID of the user who owns the list being requested by a `slug`. * @param screen_name : The screen name of the user for whom to return results for. * Helpful for disambiguating when a valid screen name is also a user ID. */ def addListMemberBySlugAndOwnerId(slug: String, owner_id: Long, screen_name: String): Future[Unit] = { val parameters = AddMemberParameters(slug = Some(slug), owner_id = Some(owner_id), screen_name = Some(screen_name)) genericAddListMember(parameters) } private def genericAddListMember(parameters: AddMemberParameters): Future[Unit] = { import restClient._ Post(s"$listsUrl/members/create.json", parameters).respondAs[Unit] } /** Deletes the specified list. The authenticated user must own the list to be able to destroy it. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-destroy. * * @param list_id : The numerical id of the list. * @return : The representation of the deleted twitter list */ def deleteListById(list_id: Long): Future[TwitterList] = { val parameters = ListParameters(list_id = Some(list_id)) genericDeleteList(parameters) } /** Deletes the specified list. The authenticated user must own the list to be able to destroy it. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-destroy. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_screen_name : The screen name of the user who owns the list being requested by a `slug`. * @return : The representation of the deleted twitter list */ def deleteListBySlugAndOwnerName(slug: String, owner_screen_name: String): Future[TwitterList] = { val parameters = ListParameters(slug = Some(slug), owner_screen_name = Some(owner_screen_name)) genericDeleteList(parameters) } /** Deletes the specified list. The authenticated user must own the list to be able to destroy it. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-destroy. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_id : The user ID of the user who owns the list being requested by a `slug`. * @return : The representation of the deleted twitter list */ def deleteListBySlugAndOwnerId(slug: String, owner_id: Long): Future[TwitterList] = { val parameters = ListParameters(slug = Some(slug), owner_id = Some(owner_id)) genericDeleteList(parameters) } private def genericDeleteList(parameters: ListParameters): Future[TwitterList] = { import restClient._ Post(s"$listsUrl/destroy.json", parameters).respondAs[TwitterList] } /** Updates the specified list. The authenticated user must own the list to be able to update it. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-update. * * @param list_id : The numerical id of the list. * @param mode : Whether your list is public or private. */ def updateListMode(list_id: Long, mode: Mode): Future[Unit] = { val parameters = ListParameters(list_id = Some(list_id)) val update = TwitterListUpdate(mode = Some(mode)) genericUpdateList(parameters, update) } /** Updates the specified list. The authenticated user must own the list to be able to update it. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-update. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_screen_name : The screen name of the user who owns the list being requested by a `slug`. * @param mode : Whether your list is public or private. */ def updateListModeBySlugAndOwnerName(slug: String, owner_screen_name: String, mode: Mode): Future[Unit] = { val parameters = ListParameters(slug = Some(slug), owner_screen_name = Some(owner_screen_name)) val update = TwitterListUpdate(mode = Some(mode)) genericUpdateList(parameters, update) } /** Updates the specified list. The authenticated user must own the list to be able to update it. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-update. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_id : The user ID of the user who owns the list being requested by a `slug`. * @param mode : Whether your list is public or private. */ def updateListModeBySlugAndOwnerId(slug: String, owner_id: Long, mode: Mode): Future[Unit] = { val parameters = ListParameters(slug = Some(slug), owner_id = Some(owner_id)) val update = TwitterListUpdate(mode = Some(mode)) genericUpdateList(parameters, update) } /** Updates the specified list. The authenticated user must own the list to be able to update it. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-update. * * @param list_id : The numerical id of the list. * @param name : The name for the list. */ def updateListName(list_id: Long, name: String): Future[Unit] = { val parameters = ListParameters(list_id = Some(list_id)) val update = TwitterListUpdate(name = Some(name)) genericUpdateList(parameters, update) } /** Updates the specified list. The authenticated user must own the list to be able to update it. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-update. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_screen_name : The screen name of the user who owns the list being requested by a `slug`. * @param name : The name for the list. */ def updateListNameBySlugAndOwnerName(slug: String, owner_screen_name: String, name: String): Future[Unit] = { val parameters = ListParameters(slug = Some(slug), owner_screen_name = Some(owner_screen_name)) val update = TwitterListUpdate(name = Some(name)) genericUpdateList(parameters, update) } /** Updates the specified list. The authenticated user must own the list to be able to update it. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-update. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_id : The user ID of the user who owns the list being requested by a `slug`. * @param name : The name for the list. */ def updateListNameBySlugAndOwnerId(slug: String, owner_id: Long, name: String): Future[Unit] = { val parameters = ListParameters(slug = Some(slug), owner_id = Some(owner_id)) val update = TwitterListUpdate(name = Some(name)) genericUpdateList(parameters, update) } /** Updates the specified list. The authenticated user must own the list to be able to update it. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-update. * * @param list_id : The numerical id of the list. * @param description : The description to give the list. */ def updateListDescription(list_id: Long, description: String): Future[Unit] = { val parameters = ListParameters(list_id = Some(list_id)) val update = TwitterListUpdate(description = Some(description)) genericUpdateList(parameters, update) } /** Updates the specified list. The authenticated user must own the list to be able to update it. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-update. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_screen_name : The screen name of the user who owns the list being requested by a `slug`. * @param description : The description to give the list. */ def updateListDescriptionBySlugAndOwnerName(slug: String, owner_screen_name: String, description: String): Future[Unit] = { val parameters = ListParameters(slug = Some(slug), owner_screen_name = Some(owner_screen_name)) val update = TwitterListUpdate(description = Some(description)) genericUpdateList(parameters, update) } /** Updates the specified list. The authenticated user must own the list to be able to update it. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-update. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_id : The user ID of the user who owns the list being requested by a `slug`. * @param description : The description to give the list. */ def updateListDescriptionBySlugAndOwnerId(slug: String, owner_id: Long, description: String): Future[Unit] = { val parameters = ListParameters(slug = Some(slug), owner_id = Some(owner_id)) val update = TwitterListUpdate(description = Some(description)) genericUpdateList(parameters, update) } /** Updates the specified list. The authenticated user must own the list to be able to update it. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-update. * * @param list_id : The numerical id of the list. * @param update : The updates to perform on the list. */ def updateList(list_id: Long, update: TwitterListUpdate): Future[Unit] = { val parameters = ListParameters(list_id = Some(list_id)) genericUpdateList(parameters, update) } /** Updates the specified list. The authenticated user must own the list to be able to update it. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-update. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_screen_name : The screen name of the user who owns the list being requested by a `slug`. * @param update : The updates to perform on the list. */ def updateListBySlugAndOwnerName(slug: String, owner_screen_name: String, update: TwitterListUpdate): Future[Unit] = { val parameters = ListParameters(slug = Some(slug), owner_screen_name = Some(owner_screen_name)) genericUpdateList(parameters, update) } /** Updates the specified list. The authenticated user must own the list to be able to update it. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-update. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_id : The user ID of the user who owns the list being requested by a `slug`. * @param update : The updates to perform on the list. */ def updateListBySlugAndOwnerId(slug: String, owner_id: Long, update: TwitterListUpdate): Future[Unit] = { val parameters = ListParameters(slug = Some(slug), owner_id = Some(owner_id)) genericUpdateList(parameters, update) } private def genericUpdateList(parameters: ListParameters, update: TwitterListUpdate): Future[Unit] = { import restClient._ val listUpdate = UpdateListParameters( list_id = parameters.list_id, slug = parameters.slug, owner_screen_name = parameters.owner_screen_name, owner_id = parameters.owner_id, description = update.description, name = update.name, mode = update.mode ) Post(s"$listsUrl/update.json", listUpdate).respondAs[Unit] } /** Creates a new list for the authenticated user. Note that you can create up to 1000 lists per account. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-create. * * @param name : The name for the list. * A list’s name must start with a letter and can consist only of 25 or fewer letters, numbers, “-“, or “_” characters. * @param mode : By default it is `Public`. * Whether your list is public or private. * @param description : Optional, by default it is `None`. * The description to give the list. * @return : The new created Twitter list. */ def createList(name: String, mode: Mode = Mode.Public, description: Option[String] = None): Future[TwitterList] = { import restClient._ val parameters = CreateListParameters(name, mode, description) Post(s"$listsUrl/create.json", parameters).respondAs[TwitterList] } /** Returns the specified list. Private lists will only be shown if the authenticated user owns the specified list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-show. * * @param list_id : The numerical id of the list. * @return : The Twitter list. */ def listById(list_id: Long): Future[RatedData[TwitterList]] = { val parameters = ListParameters(list_id = Some(list_id)) genericList(parameters) } /** Returns the specified list. Private lists will only be shown if the authenticated user owns the specified list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-show. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_screen_name : The screen name of the user who owns the list being requested by a `slug`. * @return : The Twitter list. */ def listBySlugAndOwnerName(slug: String, owner_screen_name: String): Future[RatedData[TwitterList]] = { val parameters = ListParameters(slug = Some(slug), owner_screen_name = Some(owner_screen_name)) genericList(parameters) } /** Returns the specified list. Private lists will only be shown if the authenticated user owns the specified list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-show. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_id : The user ID of the user who owns the list being requested by a `slug`. * @return : The Twitter list. */ def listBySlugAndOwnerId(slug: String, owner_id: Long): Future[RatedData[TwitterList]] = { val parameters = ListParameters(slug = Some(slug), owner_id = Some(owner_id)) genericList(parameters) } private def genericList(parameters: ListParameters): Future[RatedData[TwitterList]] = { import restClient._ Get(s"$listsUrl/show.json", parameters).respondAsRated[TwitterList] } /** Obtain a collection of the lists the specified user is subscribed to, 20 lists per page by default. * Does not include the user’s own lists. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-subscriptions. * * @param screen_name : The screen name of the user for whom to return results for. * Helpful for disambiguating when a valid screen name is also a user ID. * @param count : By default it is `20`. * The amount of results to return per page. Defaults to 20. * No more than 1000 results will ever be returned in a single page. * @param cursor : By default it is `-1`, which is the first “page”. * Breaks the results into pages. Provide values as returned in the response body’s `next_cursor` and `previous_cursor` attributes to page back and forth in the list. * @return : The Twitter lists the specified user is subscribed to. */ def listSubscriptions(screen_name: String, count: Int = 20, cursor: Long = -1): Future[RatedData[TwitterLists]] = { val parameters = SubscriptionsParameters(user_id = None, Some(screen_name), count, cursor) genericListSubscriptions(parameters) } /** Obtain a collection of the lists the specified user is subscribed to, 20 lists per page by default. * Does not include the user’s own lists. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-subscriptions. * * @param user_id : The ID of the user for whom to return results for. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @param count : By default it is `20`. * The amount of results to return per page. Defaults to 20. * No more than 1000 results will ever be returned in a single page. * @param cursor : By default it is `-1`, which is the first “page”. * Breaks the results into pages. Provide values as returned in the response body’s `next_cursor` and `previous_cursor` attributes to page back and forth in the list. * @return : The Twitter lists the specified user is subscribed to. */ def listSubscriptionsByUserId(user_id: Long, count: Int = 20, cursor: Long = -1): Future[RatedData[TwitterLists]] = { val parameters = SubscriptionsParameters(Some(user_id), screen_name = None, count, cursor) genericListSubscriptions(parameters) } private def genericListSubscriptions(parameters: SubscriptionsParameters): Future[RatedData[TwitterLists]] = { import restClient._ Get(s"$listsUrl/subscriptions.json", parameters).respondAsRated[TwitterLists] } /** Removes multiple members from a list. The authenticated user must own the list to be able to remove members from it. * Note that lists can’t have more than 500 members, and you are limited to removing up to 100 members to a list at a time with this method. * Please note that there can be issues with lists that rapidly remove and add memberships. Take care when using these methods such that you are not too rapidly switching between removals and adds on the same list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-destroy_all. * * @param list_id : The numerical id of the list. * @param members_screen_names : A sequence of screen names to remove from the list, up to 100 are allowed in a single request. */ def removeListMembers(list_id: Long, members_screen_names: Seq[String]): Future[Unit] = { require(members_screen_names.nonEmpty, "please, provide at least one screen name") val parameters = RemoveMembersParameters(list_id = Some(list_id), screen_name = Some(members_screen_names.mkString(","))) genericRemoveMembers(parameters) } /** Removes multiple members from a list. The authenticated user must own the list to be able to remove members from it. * Note that lists can’t have more than 500 members, and you are limited to removing up to 100 members to a list at a time with this method. * Please note that there can be issues with lists that rapidly remove and add memberships. Take care when using these methods such that you are not too rapidly switching between removals and adds on the same list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-destroy_all. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_screen_name : The screen name of the user who owns the list being requested by a `slug`. * @param members_screen_names : A sequence of screen names to remove from the list, up to 100 are allowed in a single request. */ def removeListMembersBySlugAndOwnerName(slug: String, owner_screen_name: String, members_screen_names: Seq[String]): Future[Unit] = { require(members_screen_names.nonEmpty, "please, provide at least one screen name") val parameters = RemoveMembersParameters(slug = Some(slug), owner_screen_name = Some(owner_screen_name), screen_name = Some(members_screen_names.mkString(","))) genericRemoveMembers(parameters) } /** Removes multiple members from a list. The authenticated user must own the list to be able to remove members from it. * Note that lists can’t have more than 500 members, and you are limited to removing up to 100 members to a list at a time with this method. * Please note that there can be issues with lists that rapidly remove and add memberships. Take care when using these methods such that you are not too rapidly switching between removals and adds on the same list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-destroy_all. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_id : The user ID of the user who owns the list being requested by a `slug`. * @param members_screen_names : A sequence of screen names to remove from the list, up to 100 are allowed in a single request. */ def removeListMembersBySlugAndOwnerId(slug: String, owner_id: Long, members_screen_names: Seq[String]): Future[Unit] = { require(members_screen_names.nonEmpty, "please, provide at least one screen name") val parameters = RemoveMembersParameters(slug = Some(slug), owner_id = Some(owner_id), screen_name = Some(members_screen_names.mkString(","))) genericRemoveMembers(parameters) } /** Removes multiple members from a list. The authenticated user must own the list to be able to remove members from it. * Note that lists can’t have more than 500 members, and you are limited to removing up to 100 members to a list at a time with this method. * Please note that there can be issues with lists that rapidly remove and add memberships. Take care when using these methods such that you are not too rapidly switching between removals and adds on the same list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-destroy_all. * * @param list_id : The numerical id of the list. * @param members_ids : A sequence of user ids to remove from the list, up to 100 are allowed in a single request. */ def removeListMembersIds(list_id: Long, members_ids: Seq[Long]): Future[Unit] = { require(members_ids.nonEmpty, "please, provide at least one user id") val parameters = RemoveMembersParameters(list_id = Some(list_id), user_id = Some(members_ids.mkString(","))) genericRemoveMembers(parameters) } /** Removes multiple members from a list. The authenticated user must own the list to be able to remove members from it. * Note that lists can’t have more than 500 members, and you are limited to removing up to 100 members to a list at a time with this method. * Please note that there can be issues with lists that rapidly remove and add memberships. Take care when using these methods such that you are not too rapidly switching between removals and adds on the same list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-destroy_all. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_screen_name : The screen name of the user who owns the list being requested by a `slug`. * @param members_ids : A sequence of user ids to remove from the list, up to 100 are allowed in a single request. */ def removeListMembersIdsBySlugAndOwnerName(slug: String, owner_screen_name: String, members_ids: Seq[Long]): Future[Unit] = { require(members_ids.nonEmpty, "please, provide at least one user id") val parameters = RemoveMembersParameters(slug = Some(slug), owner_screen_name = Some(owner_screen_name), user_id = Some(members_ids.mkString(","))) genericRemoveMembers(parameters) } /** Removes multiple members from a list. The authenticated user must own the list to be able to remove members from it. * Note that lists can’t have more than 500 members, and you are limited to removing up to 100 members to a list at a time with this method. * Please note that there can be issues with lists that rapidly remove and add memberships. Take care when using these methods such that you are not too rapidly switching between removals and adds on the same list. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/post-lists-members-destroy_all. * * @param slug : You can identify a list by its slug instead of its numerical id. * @param owner_id : The user ID of the user who owns the list being requested by a `slug`. * @param members_ids : A sequence of user ids to remove from the list, up to 100 are allowed in a single request. */ def removeListMembersIdsBySlugAndOwnerId(slug: String, owner_id: Long, members_ids: Seq[Long]): Future[Unit] = { require(members_ids.nonEmpty, "please, provide at least one user id") val parameters = RemoveMembersParameters(slug = Some(slug), owner_id = Some(owner_id), user_id = Some(members_ids.mkString(","))) genericRemoveMembers(parameters) } private def genericRemoveMembers(parameters: RemoveMembersParameters): Future[Unit] = { import restClient._ Post(s"$listsUrl/members/destroy_all.json", parameters).respondAs[Unit] } /** Returns the lists owned by the specified Twitter user. * Private lists will only be shown if the authenticated user is also the owner of the lists. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-ownerships. * * @param screen_name : The screen name of the user for whom to return results for. * Helpful for disambiguating when a valid screen name is also a user ID. * @param count : By default it is `20`. * The amount of results to return per page. Defaults to 20. * No more than 1000 results will ever be returned in a single page. * @param cursor : By default it is `-1`, which is the first “page”. * Breaks the results into pages. Provide values as returned in the response body’s `next_cursor` and `previous_cursor` attributes to page back and forth in the list. * @return : The Twitter lists owned by the specified user. */ def listOwnerships(screen_name: String, count: Int = 20, cursor: Long = -1): Future[RatedData[TwitterLists]] = { val parameters = OwnershipsParameters(user_id = None, Some(screen_name), count, cursor) genericGetListOwnerships(parameters) } /** Returns the lists owned by the specified Twitter user. * Private lists will only be shown if the authenticated user is also the owner of the lists. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/create-manage-lists/api-reference/get-lists-ownerships. * * @param user_id : The ID of the user for whom to return results for. * @param count : By default it is `20`. * The amount of results to return per page. Defaults to 20. * No more than 1000 results will ever be returned in a single page. * @param cursor : By default it is `-1`, which is the first “page”. * Breaks the results into pages. Provide values as returned in the response body’s `next_cursor` and `previous_cursor` attributes to page back and forth in the list. * @return : The Twitter lists owned by the specified user. */ def listOwnershipsForUserId(user_id: Long, count: Int = 20, cursor: Long = -1): Future[RatedData[TwitterLists]] = { val parameters = OwnershipsParameters(Some(user_id), screen_name = None, count, cursor) genericGetListOwnerships(parameters) } private def genericGetListOwnerships(parameters: OwnershipsParameters): Future[RatedData[TwitterLists]] = { import restClient._ Get(s"$listsUrl/ownerships.json", parameters).respondAsRated[TwitterLists] } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/lists/parameters/AddMemberParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.lists.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class AddMemberParameters(list_id: Option[Long] = None, slug: Option[String] = None, user_id: Option[Long] = None, screen_name: Option[String] = None, owner_screen_name: Option[String] = None, owner_id: Option[Long] = None) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/lists/parameters/CreateListParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.lists.parameters import com.danielasfregola.twitter4s.entities.enums.Mode.Mode import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class CreateListParameters(name: String, mode: Mode, description: Option[String]) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/lists/parameters/ListMembersParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.lists.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class ListMembersParameters(list_id: Option[Long] = None, slug: Option[String] = None, owner_screen_name: Option[String] = None, owner_id: Option[Long] = None, count: Int, cursor: Long, include_entities: Boolean, skip_status: Boolean) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/lists/parameters/ListParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.lists.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class ListParameters(list_id: Option[Long] = None, slug: Option[String] = None, owner_screen_name: Option[String] = None, owner_id: Option[Long] = None) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/lists/parameters/ListTimelineParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.lists.parameters import com.danielasfregola.twitter4s.entities.enums.TweetMode.TweetMode import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class ListTimelineParameters(list_id: Option[Long] = None, slug: Option[String] = None, owner_screen_name: Option[String] = None, owner_id: Option[Long] = None, count: Int, since_id: Option[Long] = None, max_id: Option[Long] = None, include_entities: Boolean, include_rts: Boolean, tweet_mode: TweetMode) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/lists/parameters/ListsParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.lists.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class ListsParameters(user_id: Option[Long], screen_name: Option[String], reverse: Boolean) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/lists/parameters/MemberParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.lists.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class MemberParameters(list_id: Option[Long] = None, slug: Option[String] = None, user_id: Option[Long] = None, screen_name: Option[String] = None, owner_screen_name: Option[String] = None, owner_id: Option[Long] = None, include_entities: Boolean, skip_status: Boolean) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/lists/parameters/MembersParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.lists.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class MembersParameters(list_id: Option[Long] = None, slug: Option[String] = None, user_id: Option[String] = None, screen_name: Option[String] = None, owner_screen_name: Option[String] = None, owner_id: Option[Long] = None) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/lists/parameters/MembershipsParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.lists.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class MembershipsParameters(user_id: Option[Long], screen_name: Option[String], count: Int, cursor: Long, filter_to_owned_lists: Boolean) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/lists/parameters/OwnershipsParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.lists.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class OwnershipsParameters(user_id: Option[Long], screen_name: Option[String], count: Int, cursor: Long) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/lists/parameters/RemoveMemberParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.lists.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class RemoveMemberParameters(list_id: Option[Long] = None, slug: Option[String] = None, user_id: Option[Long] = None, screen_name: Option[String] = None, owner_screen_name: Option[String] = None, owner_id: Option[Long] = None) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/lists/parameters/RemoveMembersParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.lists.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class RemoveMembersParameters(list_id: Option[Long] = None, slug: Option[String] = None, user_id: Option[String] = None, screen_name: Option[String] = None, owner_screen_name: Option[String] = None, owner_id: Option[Long] = None) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/lists/parameters/SubscribersParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.lists.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class SubscribersParameters(list_id: Option[Long], slug: Option[String], owner_screen_name: Option[String], owner_id: Option[Long], count: Int, cursor: Long, include_entities: Boolean, skip_status: Boolean) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/lists/parameters/SubscriptionsParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.lists.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class SubscriptionsParameters(user_id: Option[Long], screen_name: Option[String], count: Int, cursor: Long) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/lists/parameters/UpdateListParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.lists.parameters import com.danielasfregola.twitter4s.entities.enums.Mode.Mode import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class UpdateListParameters(list_id: Option[Long], slug: Option[String], owner_screen_name: Option[String], owner_id: Option[Long], description: Option[String], name: Option[String], mode: Option[Mode]) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/media/TwitterMediaClient.scala ================================================ package com.danielasfregola.twitter4s.http package clients.rest.media import java.io.{File, FileInputStream, InputStream} import java.net.URLConnection import akka.http.scaladsl.model.Multipart._ import akka.http.scaladsl.model.{ContentTypes, MediaType} import akka.stream.scaladsl.Source import com.danielasfregola.twitter4s.entities.MediaDetails import com.danielasfregola.twitter4s.http.clients.rest.RestClient import com.danielasfregola.twitter4s.http.clients.rest.media.parameters._ import com.danielasfregola.twitter4s.util.Configurations._ import com.danielasfregola.twitter4s.util.{Chunk, MediaReader} import org.json4s.native.Serialization import scala.concurrent.{ExecutionContext, Future} /** Implements the available endpoints for the MEDIA API. */ trait TwitterMediaClient { protected val restClient: RestClient private val mediaUrl = s"$mediaTwitterUrl/$twitterVersion/media" private val chunkSize = 5 * 1024 * 1024 // 5 MB private val mediaReader = new MediaReader(chunkSize) /** Uploads media asynchronously from an absolute file path. * For more information see * * https://developer.twitter.com/en/docs/media/upload-media/api-reference/post-media-upload. * * @param filePath : the absolute path of the file to upload. * @param additional_owners : By default is empty. * A comma-separated list of user IDs to set as additional owners * allowed to use the returned media_id in Tweets or Cards. * Up to 100 additional owners may be specified. * @return : The media details * */ def uploadMediaFromPath(filePath: String, additional_owners: Seq[Long] = Seq.empty): Future[MediaDetails] = { uploadMediaFromFile(new File(filePath), additional_owners) } /** Uploads media asynchronously from a file. * For more information see * * https://developer.twitter.com/en/docs/media/upload-media/api-reference/post-media-upload. * * @param file : the file to upload. * @param additional_owners : By default is empty. * A comma-separated list of user IDs to set as additional owners * allowed to use the returned media_id in Tweets or Cards. * Up to 100 additional owners may be specified. * @return : The media details * */ def uploadMediaFromFile(file: File, additional_owners: Seq[Long] = Seq.empty): Future[MediaDetails] = { val size = file.length val inputStream = new FileInputStream(file) val filename = file.getName val mediaType = URLConnection.guessContentTypeFromName(filename) uploadMediaFromInputStream(inputStream, size, mediaType, Some(filename), additional_owners) } /** Uploads media asynchronously from an input stream. * For more information see * * https://developer.twitter.com/en/docs/media/upload-media/api-reference/post-media-upload. * * @param inputStream : the input stream to upload. * @param size : the size of the data to upload. * @param media_type : the type of the media to upload. * @param filename : By default is `None`. * The filename used when uploading the media. * @param additional_owners : By default is empty. * A comma-separated list of user IDs to set as additional owners * allowed to use the returned media_id in Tweets or Cards. * Up to 100 additional owners may be specified. * @return : The media details * */ def uploadMediaFromInputStream(inputStream: InputStream, size: Long, media_type: MediaType, filename: Option[String] = None, additional_owners: Seq[Long] = Seq.empty): Future[MediaDetails] = uploadMediaFromInputStream(inputStream, size, media_type.value, filename, additional_owners) private def uploadMediaFromInputStream(inputStream: InputStream, size: Long, media_type: String, filename: Option[String], additional_owners: Seq[Long]): Future[MediaDetails] = { def filenameBuilder(mediaId: Long) = { val extension = media_type.split("/", 2) filename.getOrElse(s"twitter4s-$mediaId.$extension") } implicit val ec: ExecutionContext = restClient.system.dispatcher for { details <- initMedia(size, media_type, additional_owners) uploads <- appendMedia(details.media_id, inputStream, filenameBuilder(details.media_id)) finalize <- finalizeMedia(details.media_id) } yield finalize } private def initMedia(size: Long, media_type: String, additional_owners: Seq[Long]): Future[MediaDetails] = { import restClient._ val media_category = media_type.toLowerCase match { case mediaType if mediaType.startsWith("image/gif") => Some("tweet_gif") case mediaType if mediaType.startsWith("image/") => Some("tweet_image") case mediaType if mediaType.startsWith("video/") => Some("tweet_video") case _ => None } val parameters = MediaInitParameters(size, media_type, media_category, Some(additional_owners.mkString(","))) Post(s"$mediaUrl/upload.json", parameters).respondAs[MediaDetails] } private def appendMedia(mediaId: Long, inputStream: InputStream, filename: String)( implicit ec: ExecutionContext): Future[Seq[Unit]] = { val appendMediaById = appendMediaChunk(mediaId, filename) _ Future.sequence(mediaReader.processAsChunks(inputStream, appendMediaById)) } private def appendMediaChunk(mediaId: Long, filename: String)(chunk: Chunk, idx: Int)( implicit ec: ExecutionContext): Future[Unit] = { import restClient._ val formData: FormData = FormData( Source( List( FormData.BodyPart.Strict("command", "APPEND"), FormData.BodyPart.Strict("media_id", mediaId.toString), FormData.BodyPart.Strict("segment_index", idx.toString), FormData.BodyPart.Strict("media_data", chunk.base64Data.mkString) ))) Post(s"$mediaUrl/upload.json", formData).sendAsFormData } private def finalizeMedia(mediaId: Long): Future[MediaDetails] = { import restClient._ val entity = MediaFinalizeParameters(mediaId) Post(s"$mediaUrl/upload.json", entity).respondAs[MediaDetails] } /** Returns the status of a media upload for pulling purposes. * For more information see * * https://developer.twitter.com/en/docs/media/upload-media/api-reference/get-media-upload-status. * * @param media_id : The id of the media. * @return : The media details * */ def statusMedia(media_id: Long): Future[MediaDetails] = { import restClient._ val entity = MediaStatusParameters(media_id) Get(s"$mediaUrl/upload.json", entity).respondAs[MediaDetails] } /** This endpoint can be used to provide additional information about the uploaded media_id. * This feature is currently only supported for images and GIFs. * For more information see * * https://developer.twitter.com/en/docs/media/upload-media/api-reference/post-media-metadata-create. * * @param media_id : The id of the media. * @param description : The description of the media * */ def createMediaDescription(media_id: Long, description: String): Future[Unit] = { import restClient._ val entity = MediaMetadataCreation(media_id.toString, description) val jsonEntity = Serialization.write(entity) Post(s"$mediaUrl/metadata/create.json", jsonEntity, ContentTypes.`application/json`).sendAsFormData } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/media/parameters/MediaAppendParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.media.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class MediaAppendParameters(media_id: Long, segment_index: Int, media: String, command: String = "APPEND") extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/media/parameters/MediaFinalizeParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.media.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class MediaFinalizeParameters(media_id: Long, command: String = "FINALIZE") extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/media/parameters/MediaInitParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.media.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class MediaInitParameters(total_bytes: Long, media_type: String, media_category: Option[String], additional_owners: Option[String], command: String = "INIT") extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/media/parameters/MediaMetadataCreation.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.media.parameters private[twitter4s] final case class MediaMetadataCreation(media_id: String, description: String) ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/media/parameters/MediaStatusParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.media.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class MediaStatusParameters(media_id: Long, command: String = "STATUS") extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/mutes/TwitterMuteClient.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.mutes import com.danielasfregola.twitter4s.entities.{RatedData, User, UserIds, Users} import com.danielasfregola.twitter4s.http.clients.rest.RestClient import com.danielasfregola.twitter4s.http.clients.rest.mutes.parameters.{ MuteParameters, MutedUsersIdsParameters, MutedUsersParameters } import com.danielasfregola.twitter4s.util.Configurations._ import scala.concurrent.Future /** Implements the available requests for the `mutes` resource. */ trait TwitterMuteClient { protected val restClient: RestClient private val mutesUrl = s"$apiTwitterUrl/$twitterVersion/mutes/users" /** Mutes the user specified for the authenticating user. * Actions taken in this method are asynchronous and changes will be eventually consistent. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/mute-block-report-users/api-reference/post-mutes-users-create. * * @param screen_name : The screen name of the potentially muted user. * Helpful for disambiguating when a valid screen name is also a user ID. * @return : The muted user representation. */ def muteUser(screen_name: String): Future[User] = { val parameters = MuteParameters(user_id = None, Some(screen_name)) genericMuteUser(parameters) } /** Mutes the user ID specified for the authenticating user. * Actions taken in this method are asynchronous and changes will be eventually consistent. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/mute-block-report-users/api-reference/post-mutes-users-create. * * @param user_id : The ID of the potentially muted user. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @return : The muted user representation. */ def muteUserId(user_id: Long): Future[User] = { val parameters = MuteParameters(Some(user_id), screen_name = None) genericMuteUser(parameters) } private def genericMuteUser(parameters: MuteParameters): Future[User] = { import restClient._ Post(s"$mutesUrl/create.json", parameters).respondAs[User] } /** Un-mutes the user specified for the authenticating user. * Actions taken in this method are asynchronous and changes will be eventually consistent. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/mute-block-report-users/api-reference/post-mutes-users-destroy. * * @param screen_name : The screen name of the potentially muted user. * Helpful for disambiguating when a valid screen name is also a user ID. * @return : The un-muted user representation. */ def unmuteUser(screen_name: String): Future[User] = { val parameters = MuteParameters(user_id = None, Some(screen_name)) genericUnmuteUser(parameters) } /** Un-mutes the user ID specified for the authenticating user. * Actions taken in this method are asynchronous and changes will be eventually consistent. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/mute-block-report-users/api-reference/post-mutes-users-destroy. * * @param user_id : The ID of the potentially muted user. * Helpful for disambiguating when a valid user ID is also a valid screen name. * @return : The un-muted user representation. */ def unmuteUserId(user_id: Long): Future[User] = { val parameters = MuteParameters(Some(user_id), screen_name = None) genericUnmuteUser(parameters) } private def genericUnmuteUser(parameters: MuteParameters): Future[User] = { import restClient._ Post(s"$mutesUrl/destroy.json", parameters).respondAs[User] } /** Returns an array of numeric user ids the authenticating user has muted. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/mute-block-report-users/api-reference/get-mutes-users-ids. * * @param cursor : By default it is `-1`, which is the first “page”. * Causes the list of IDs to be broken into pages of no more than 5000 IDs at a time. * The number of IDs returned is not guaranteed to be 5000 as suspended users are filtered out. * The response from the API will include a previous_cursor and next_cursor to allow paging back and forth. * See [node:10362, title=”Using cursors to navigate collections”] for more information. * @return : The representation of the muted user ids. */ def mutedUserIds(cursor: Long = -1): Future[RatedData[UserIds]] = { import restClient._ val parameters = MutedUsersIdsParameters(cursor) Get(s"$mutesUrl/ids.json", parameters).respondAsRated[UserIds] } /** Returns the users representation that the authenticating user has muted. * For more information see * * https://developer.twitter.com/en/docs/accounts-and-users/mute-block-report-users/api-reference/get-mutes-users-list. * * @param cursor : By default it is `-1`, which is the first “page”. * Causes the list of IDs to be broken into pages of no more than 5000 IDs at a time. * The number of IDs returned is not guaranteed to be 5000 as suspended users are filtered out. * The response from the API will include a previous_cursor and next_cursor to allow paging back and forth. * See [node:10362, title=”Using cursors to navigate collections”] for more information. * @param include_entities : By default it is `true`. * his node offers a variety of metadata about the tweet in a discreet structure, including: user_mentions, urls, and hashtags. * You can omit parameters from the result by setting `include_entities` to `false`. * @param skip_status : By default it is `false`. * When set to either `true`, statuses will not be included in the returned user objects. * @return : The representation of the muted users. */ def mutedUsers(cursor: Long = -1, include_entities: Boolean = true, skip_status: Boolean = false): Future[RatedData[Users]] = { import restClient._ val parameters = MutedUsersParameters(cursor, include_entities, skip_status) Get(s"$mutesUrl/list.json", parameters).respondAsRated[Users] } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/mutes/parameters/MuteParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.mutes.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class MuteParameters(user_id: Option[Long], screen_name: Option[String]) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/mutes/parameters/MutedUsersIdsParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.mutes.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class MutedUsersIdsParameters(cursor: Long) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/mutes/parameters/MutedUsersParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.mutes.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class MutedUsersParameters(cursor: Long, include_entities: Boolean, skip_status: Boolean) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/savedsearches/TwitterSavedSearchClient.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.savedsearches import com.danielasfregola.twitter4s.entities.{RatedData, SavedSearch} import com.danielasfregola.twitter4s.http.clients.rest.RestClient import com.danielasfregola.twitter4s.http.clients.rest.savedsearches.parameters.SaveSearchParameters import com.danielasfregola.twitter4s.util.Configurations._ import scala.concurrent.Future /** Implements the available requests for the `saved_searches` resource. */ trait TwitterSavedSearchClient { protected val restClient: RestClient private val savedSearchUrl = s"$apiTwitterUrl/$twitterVersion/saved_searches" /** Returns the authenticated user’s saved search queries. * For more information see * * https://developer.twitter.com/en/docs/tweets/search/api-reference/get-saved_searches-list. * * @return : The sequence of saved searches. */ def savedSearches(): Future[RatedData[Seq[SavedSearch]]] = { import restClient._ Get(s"$savedSearchUrl/list.json").respondAsRated[Seq[SavedSearch]] } /** Create a new saved search for the authenticated user. * A user may only have 25 saved searches. * For more information see * * https://developer.twitter.com/en/docs/tweets/search/api-reference/post-saved_searches-create. * * @param query : The query of the search the user would like to save. * @return : The saved search representation. */ def saveSearch(query: String): Future[SavedSearch] = { import restClient._ val parameters = SaveSearchParameters(query) Post(s"$savedSearchUrl/create.json", parameters).respondAs[SavedSearch] } /** Destroys a saved search for the authenticating user. * The authenticating user must be the owner of saved search id being destroyed. * For more information see * * https://developer.twitter.com/en/docs/tweets/search/api-reference/post-saved_searches-destroy-id. * * @return : The deleted search representation. */ def deleteSavedSearch(id: Long): Future[SavedSearch] = { import restClient._ Post(s"$savedSearchUrl/destroy/$id.json").respondAs[SavedSearch] } /** Retrieve the information for the saved search represented by the given id. * The authenticating user must be the owner of saved search ID being requested. * For more information see * * https://developer.twitter.com/en/docs/tweets/search/api-reference/get-saved_searches-show-id. * * @return : The saved search representation. */ def savedSearch(id: Long): Future[RatedData[SavedSearch]] = { import restClient._ Get(s"$savedSearchUrl/show/$id.json").respondAsRated[SavedSearch] } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/savedsearches/parameters/SaveSearchParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.savedsearches.parameters import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class SaveSearchParameters(query: String) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/search/TwitterSearchClient.scala ================================================ package com.danielasfregola.twitter4s.http package clients.rest.search import java.time.LocalDate import com.danielasfregola.twitter4s.entities._ import com.danielasfregola.twitter4s.entities.enums.Language._ import com.danielasfregola.twitter4s.entities.enums.ResultType._ import com.danielasfregola.twitter4s.entities.enums.TweetMode.TweetMode import com.danielasfregola.twitter4s.entities.enums.{ResultType, TweetMode} import com.danielasfregola.twitter4s.http.clients.rest.RestClient import com.danielasfregola.twitter4s.http.clients.rest.search.parameters.TweetSearchParameters import com.danielasfregola.twitter4s.util.Configurations._ import scala.concurrent.Future /** Implements the available requests for the `search` resource. */ trait TwitterSearchClient { protected val restClient: RestClient private val searchUrl = s"$apiTwitterUrl/$twitterVersion/search" /** Returns a collection of relevant Tweets matching a specified query. * For more information see * * https://developer.twitter.com/en/docs/tweets/search/api-reference/get-search-tweets. * * @param query : The search query of 500 characters maximum, including operators. * Queries may additionally be limited by complexity. * @param count : By default it is `15`. * The number of tweets to return per page, up to a maximum of 100. * @param include_entities : By default it is `true`. * The parameters node will be disincluded when set to `false`. * @param result_type : By default it is `Mixed`. * Specifies what type of search results you would prefer to receive. * Valid values include: * - `Mixed`: Include both popular and real time results in the response. * - `Recent`: return only the most recent results in the response * - `Popular`: return only the most popular results in the response. * @param geocode : Optional, by default it is `None`. * Returns tweets by users located within a given radius of the given latitude/longitude. * The location is preferentially taking from the Geotagging API, but will fall back to their Twitter profile. * Note that you cannot use the near operator via the API to geocode arbitrary locations; * however you can use this geocode parameter to search near geocodes directly. * A maximum of 1,000 distinct “sub-regions” will be considered when using the radius modifier. * @param language : Optional, by default it is `None`. * Restricts tweets to the given language. Language detection is best-effort. * @param locale : Optional, by default it is `None`. * Specify the language of the query you are sending (only `ja` is currently effective). * This is intended for language-specific consumers and the default should work in the majority of cases. * @param until : Optional, by default it is `None`. * Returns tweets created before the given date. * Keep in mind that the search index has a 7-day limit. * In other words, no tweets will be found for a date older than one week. * @param since_id : Optional, by default it is `None`. * Returns results with an ID greater than (that is, more recent than) the specified ID. * There are limits to the number of Tweets which can be accessed through the API. * If the limit of Tweets has occured since the since_id, the since_id will be forced to the oldest ID available. * @param max_id : Optional, by default it is `None`. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param callback : Optional, by default it is `None`. * If supplied, the response will use the JSONP format with a callback of the given name. * The usefulness of this parameter is somewhat diminished by the requirement of authentication for requests to this endpoint. * @param tweet_mode : Optional, by default it is `Classic`. * When set to `Extended` prevents tweet text truncating, see https://developer.twitter.com/en/docs/tweets/tweet-updates * @return : The representation of the search results. */ def searchTweet(query: String, count: Int = 15, include_entities: Boolean = true, result_type: ResultType = ResultType.Mixed, geocode: Option[GeoCode] = None, language: Option[Language] = None, locale: Option[String] = None, until: Option[LocalDate] = None, since_id: Option[Long] = None, max_id: Option[Long] = None, callback: Option[String] = None, tweet_mode: TweetMode = TweetMode.Classic): Future[RatedData[StatusSearch]] = { import restClient._ val parameters = TweetSearchParameters( query, count, include_entities, result_type, geocode, language, locale, until, since_id, max_id, callback, tweet_mode ) Get(s"$searchUrl/tweets.json", parameters).respondAsRated[StatusSearch] } } ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/search/parameters/TweetSearchParameters.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.search.parameters import java.time.LocalDate import com.danielasfregola.twitter4s.entities.GeoCode import com.danielasfregola.twitter4s.entities.enums.Language.Language import com.danielasfregola.twitter4s.entities.enums.ResultType.ResultType import com.danielasfregola.twitter4s.entities.enums.TweetMode.TweetMode import com.danielasfregola.twitter4s.http.marshalling.Parameters private[twitter4s] final case class TweetSearchParameters(q: String, count: Int, include_entities: Boolean, result_type: ResultType, geocode: Option[GeoCode], lang: Option[Language], locale: Option[String], until: Option[LocalDate], since_id: Option[Long], max_id: Option[Long], callback: Option[String], tweet_mode: TweetMode) extends Parameters ================================================ FILE: src/main/scala/com/danielasfregola/twitter4s/http/clients/rest/statuses/TwitterStatusClient.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.statuses import com.danielasfregola.twitter4s.entities._ import com.danielasfregola.twitter4s.entities.enums.Alignment.Alignment import com.danielasfregola.twitter4s.entities.enums.Language.Language import com.danielasfregola.twitter4s.entities.enums.TweetMode.TweetMode import com.danielasfregola.twitter4s.entities.enums.WidgetType.WidgetType import com.danielasfregola.twitter4s.entities.enums.{Alignment, Language, TweetMode} import com.danielasfregola.twitter4s.http.clients.rest.RestClient import com.danielasfregola.twitter4s.http.clients.rest.statuses.parameters._ import com.danielasfregola.twitter4s.util.Configurations._ import scala.concurrent.Future /** Implements the available requests for the `statuses` resource. */ trait TwitterStatusClient { protected val restClient: RestClient private val statusesUrl = s"$apiTwitterUrl/$twitterVersion/statuses" /** Returns the 20 most recent mentions (tweets containing a users’s @screen_name) for the authenticating user. * The timeline returned is the equivalent of the one seen when you view your mentions on twitter.com. * This method can only return up to 800 tweets. * For more information see * * https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-mentions_timeline. * * @param count : By default it is `200`. * Specifies the number of tweets to try and retrieve, up to a maximum of 200. * The value of count is best thought of as a limit to the number of tweets to return because suspended or deleted content is removed after the count has been applied. * @param since_id : Optional, by default it is `None`. * Returns results with an ID greater than (that is, more recent than) the specified ID. * There are limits to the number of Tweets which can be accessed through the API. * If the limit of Tweets has occured since the `since_id`, the `since_id` will be forced to the oldest ID available. * @param max_id : Optional, by default it is `None`. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param trim_user : By default it is `false`. * When set to `true`, each tweet returned in a timeline will include a user object including only the status authors numerical ID. * Set this parameter to `false` to receive the complete user object. * @param contributor_details : By default it is `false`. * When set to `true`, this parameter enhances the contributors element of the status response to include the screen_name of the contributor. * When set to `false`, only the user_id of the contributor is included. * @param include_entities : By default it is `true`. * The parameters node will be disincluded when set to `false`. * @param tweet_mode : Optional, by default it is `Classic`. * When set to `Extended` prevents tweet text truncating, see https://developer.twitter.com/en/docs/tweets/tweet-updates * @return : The sequence of tweets. */ def mentionsTimeline(count: Int = 200, since_id: Option[Long] = None, max_id: Option[Long] = None, trim_user: Boolean = false, contributor_details: Boolean = false, include_entities: Boolean = true, tweet_mode: TweetMode = TweetMode.Classic): Future[RatedData[Seq[Tweet]]] = { import restClient._ val parameters = MentionsParameters(count, since_id, max_id, trim_user, contributor_details, include_entities, tweet_mode) Get(s"$statusesUrl/mentions_timeline.json", parameters).respondAsRated[Seq[Tweet]] } /** Returns a collection of the most recent Tweets posted by the user indicated. * User timelines belonging to protected users may only be requested when the authenticated user either “owns” the timeline or is an approved follower of the owner. * The timeline returned is the equivalent of the one seen when you view a user’s profile on twitter.com. * This method can only return up to 3,200 of a user’s most recent Tweets. * Native retweets of other statuses by the user is included in this total, regardless of whether `include_rts` is set to false when requesting this resource. * For more information see * * https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-user_timeline. * * @param screen_name : The screen name of the user for whom to return results for. * @param since_id : Optional, by default it is `None`. * Returns results with an ID greater than (that is, more recent than) the specified ID. * There are limits to the number of Tweets which can be accessed through the API. * If the limit of Tweets has occured since the `since_id`, the `since_id` will be forced to the oldest ID available. * @param count : By default it is `200`. * Specifies the number of tweets to try and retrieve, up to a maximum of 200. * The value of count is best thought of as a limit to the number of tweets to return because suspended or deleted content is removed after the count has been applied. * We include retweets in the count, even if `include_rts` is not supplied. * It is recommended you always send `include_rts`=`true` when using this API method. * @param max_id : Optional, by default it is `None`. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param trim_user : By default it is `false`. * When set to `true`, each tweet returned in a timeline will include a user object including only the status authors numerical ID. * Set this parameter to `false` to receive the complete user object. * @param exclude_replies : By default it is `false`. * This parameter will prevent replies from appearing in the returned timeline. * Using exclude_replies with the count parameter will mean you will receive up-to count tweets — this is because the count parameter retrieves that many tweets before filtering out retweets and replies. * @param contributor_details : By default it is `false`. * When set to `true`, this parameter enhances the contributors element of the status response to include the screen_name of the contributor. * When set to `false`, only the user_id of the contributor is included. * @param include_rts : By default it is `true`. * When set to `false`, the timeline will strip any native retweets (though they will still count toward both the maximal length of the timeline and the slice selected by the count parameter). * Note: If you’re using the `trim_user` parameter in conjunction with `include_rts`, the retweets will still contain a full user object. * @param tweet_mode : Optional, by default it is `Classic`. * When set to `Extended` prevents tweet text truncating, see https://developer.twitter.com/en/docs/tweets/tweet-updates * @return : The sequence of tweets. */ def userTimelineForUser(screen_name: String, since_id: Option[Long] = None, count: Int = 200, max_id: Option[Long] = None, trim_user: Boolean = false, exclude_replies: Boolean = false, contributor_details: Boolean = false, include_rts: Boolean = true, tweet_mode: TweetMode = TweetMode.Classic): Future[RatedData[Seq[Tweet]]] = { val parameters = UserTimelineParameters( user_id = None, Some(screen_name), since_id, count, max_id, trim_user, exclude_replies, contributor_details, include_rts, tweet_mode ) genericGetUserTimeline(parameters) } /** Returns a collection of the most recent Tweets posted by the user id indicated. * User timelines belonging to protected users may only be requested when the authenticated user either “owns” the timeline or is an approved follower of the owner. * The timeline returned is the equivalent of the one seen when you view a user’s profile on twitter.com. * This method can only return up to 3,200 of a user’s most recent Tweets. * Native retweets of other statuses by the user is included in this total, regardless of whether `include_rts` is set to false when requesting this resource. * For more information see * * https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-user_timeline. * * @param user_id : The ID of the user for whom to return results for. * @param since_id : Optional, by default it is `None`. * Returns results with an ID greater than (that is, more recent than) the specified ID. * There are limits to the number of Tweets which can be accessed through the API. * If the limit of Tweets has occured since the `since_id`, the `since_id` will be forced to the oldest ID available. * @param count : By default it is `200`. * Specifies the number of tweets to try and retrieve, up to a maximum of 200. * The value of count is best thought of as a limit to the number of tweets to return because suspended or deleted content is removed after the count has been applied. * We include retweets in the count, even if `include_rts` is not supplied. * It is recommended you always send `include_rts`=`true` when using this API method. * @param max_id : Optional, by default it is `None`. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param trim_user : By default it is `false`. * When set to `true`, each tweet returned in a timeline will include a user object including only the status authors numerical ID. * Set this parameter to `false` to receive the complete user object. * @param exclude_replies : By default it is `false`. * This parameter will prevent replies from appearing in the returned timeline. * Using exclude_replies with the count parameter will mean you will receive up-to count tweets — this is because the count parameter retrieves that many tweets before filtering out retweets and replies. * @param contributor_details : By default it is `false`. * When set to `true`, this parameter enhances the contributors element of the status response to include the screen_name of the contributor. * When set to `false`, only the user_id of the contributor is included. * @param include_rts : By default it is `true`. * When set to `false`, the timeline will strip any native retweets (though they will still count toward both the maximal length of the timeline and the slice selected by the count parameter). * Note: If you’re using the `trim_user` parameter in conjunction with `include_rts`, the retweets will still contain a full user object. * @param tweet_mode : Optional, by default it is `Classic`. * When set to `Extended` prevents tweet text truncating, see https://developer.twitter.com/en/docs/tweets/tweet-updates * @return : The sequence of tweets. */ def userTimelineForUserId(user_id: Long, since_id: Option[Long] = None, count: Int = 200, max_id: Option[Long] = None, trim_user: Boolean = false, exclude_replies: Boolean = false, contributor_details: Boolean = false, include_rts: Boolean = true, tweet_mode: TweetMode = TweetMode.Classic): Future[RatedData[Seq[Tweet]]] = { val parameters = UserTimelineParameters( Some(user_id), None, since_id, count, max_id, trim_user, exclude_replies, contributor_details, include_rts, tweet_mode ) genericGetUserTimeline(parameters) } private def genericGetUserTimeline(parameters: UserTimelineParameters): Future[RatedData[Seq[Tweet]]] = { import restClient._ Get(s"$statusesUrl/user_timeline.json", parameters).respondAsRated[Seq[Tweet]] } /** Returns a collection of the most recent Tweets and retweets posted by the authenticating user and the users they follow. * The home timeline is central to how most users interact with the Twitter service. * Up to 800 Tweets are obtainable on the home timeline. * It is more volatile for users that follow many users or follow users who tweet frequently. * For more information see * * https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-home_timeline. * * @param count : By default it is `20`. * Specifies the number of records to retrieve. Must be less than or equal to 200. * The value of count is best thought of as a limit to the number of tweets to return because suspended or deleted content is removed after the count has been applied. * @param since_id : Optional, by default it is `None`. * Returns results with an ID greater than (that is, more recent than) the specified ID. * There are limits to the number of Tweets which can be accessed through the API. * If the limit of Tweets has occured since the `since_id`, the `since_id` will be forced to the oldest ID available. * @param max_id : Optional, by default it is `None`. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param trim_user : By default it is `false`. * When set to `true`, each tweet returned in a timeline will include a user object including only the status authors numerical ID. * Set this parameter to `false` to receive the complete user object. * @param exclude_replies : By default it is `false`. * This parameter will prevent replies from appearing in the returned timeline. * Using exclude_replies with the count parameter will mean you will receive up-to count tweets — this is because the count parameter retrieves that many tweets before filtering out retweets and replies. * @param contributor_details : By default it is `false`. * When set to `true`, this parameter enhances the contributors element of the status response to include the screen_name of the contributor. * When set to `false`, only the user_id of the contributor is included. * @param include_entities : By default it is `true`. * When set to `false`, The parameters node will be disincluded when set to false. * @param tweet_mode : Optional, by default it is `Classic`. * When set to `Extended` prevents tweet text truncating, see https://developer.twitter.com/en/docs/tweets/tweet-updates * @return : The sequence of tweets. */ def homeTimeline(count: Int = 20, since_id: Option[Long] = None, max_id: Option[Long] = None, trim_user: Boolean = false, exclude_replies: Boolean = false, contributor_details: Boolean = false, include_entities: Boolean = true, tweet_mode: TweetMode = TweetMode.Classic): Future[RatedData[Seq[Tweet]]] = { import restClient._ val parameters = HomeTimelineParameters( count, since_id, max_id, trim_user, exclude_replies, contributor_details, include_entities, tweet_mode ) Get(s"$statusesUrl/home_timeline.json", parameters).respondAsRated[Seq[Tweet]] } /** Returns the most recent tweets authored by the authenticating user that have been retweeted by others. * For more information see * * https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/get-statuses-retweets_of_me. * * @param count : By default it is `20`. * Specifies the number of records to retrieve. Must be less than or equal to 100. * @param since_id : Optional, by default it is `None`. * Returns results with an ID greater than (that is, more recent than) the specified ID. * There are limits to the number of Tweets which can be accessed through the API. * If the limit of Tweets has occured since the `since_id`, the `since_id` will be forced to the oldest ID available. * @param max_id : Optional, by default it is `None`. * Returns results with an ID less than (that is, older than) or equal to the specified ID. * @param trim_user : By default it is `false`. * When set to `true`, each tweet returned in a timeline will include a user object including only the status authors numerical ID. * Set this parameter to `false` to receive the complete user object. * @param exclude_replies : By default it is `false`. * This parameter will prevent replies from appearing in the returned timeline. * Using exclude_replies with the count parameter will mean you will receive up-to count tweets — this is because the count parameter retrieves that many tweets before filtering out retweets and replies. * @param contributor_details : By default it is `false`. * When set to `true`, this parameter enhances the contributors element of the status response to include the screen_name of the contributor. * When set to `false`, only the user_id of the contributor is included. * @param include_entities : By default it is `true`. * When set to `false`, The parameters node will be disincluded when set to false. * @param tweet_mode : Optional, by default it is `Classic`. * When set to `Extended` prevents tweet text truncating, see https://developer.twitter.com/en/docs/tweets/tweet-updates * @return : The sequence of tweets. */ def retweetsOfMe(count: Int = 20, since_id: Option[Long] = None, max_id: Option[Long] = None, trim_user: Boolean = false, exclude_replies: Boolean = false, contributor_details: Boolean = false, include_entities: Boolean = true, tweet_mode: TweetMode = TweetMode.Classic): Future[RatedData[Seq[Tweet]]] = { import restClient._ val parameters = RetweetsOfMeParameters( count, since_id, max_id, trim_user, exclude_replies, contributor_details, include_entities, tweet_mode ) Get(s"$statusesUrl/retweets_of_me.json", parameters).respondAsRated[Seq[Tweet]] } /** Returns a collection of the 100 most recent retweets of the tweet specified by the id parameter. * For more information see * * https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/get-statuses-retweets-id. * * @param id : The numerical ID of the desired status. * @param count : By default it is `100`. * Specifies the number of records to retrieve. Must be less than or equal to 100. * @param trim_user : By default it is `false`. * When set to `true`, each tweet returned in a timeline will include a user object including only the status authors numerical ID. * Set this parameter to `false` to receive the complete user object. * @param tweet_mode : Optional, by default it is `Classic`. * When set to `Extended` prevents tweet text truncating, see https://developer.twitter.com/en/docs/tweets/tweet-updates * @return : The sequence of tweets. */ def retweets(id: Long, count: Int = 100, trim_user: Boolean = false, tweet_mode: TweetMode = TweetMode.Classic): Future[RatedData[Seq[Tweet]]] = { import restClient._ val parameters = RetweetsParameters(count, trim_user, tweet_mode) Get(s"$statusesUrl/retweets/$id.json", parameters).respondAsRated[Seq[Tweet]] } /** Returns a single Tweet, specified by the id parameter. The Tweet’s author will also be embedded within the tweet. * For more information see * * https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/get-statuses-show-id. * * @param id : The numerical ID of the desired status. * @param trim_user : By default it is `false`. * When set to `true`, each tweet returned in a timeline will include a user object including only the status authors numerical ID. * Set this parameter to `false` to receive the complete user object. * @param include_my_retweet : By default it is `false`. * When set to `true`, any Tweets returned that have been retweeted by the authenticating user will include an additional `current_user_retweet` node, containing the ID of the source status for the retweet. * @param include_entities : By default it is `true`. * When set to `false`, The parameters node will be disincluded when set to false. * @param tweet_mode : Optional, by default it is `Classic`. * When set to `Extended` prevents tweet text truncating, see https://developer.twitter.com/en/docs/tweets/tweet-updates * @return : The representation of the tweet. */ def getTweet(id: Long, trim_user: Boolean = false, include_my_retweet: Boolean = false, include_entities: Boolean = true, tweet_mode: TweetMode = TweetMode.Classic): Future[RatedData[Tweet]] = { import restClient._ val parameters = ShowParameters(id, trim_user, include_my_retweet, include_entities, tweet_mode) Get(s"$statusesUrl/show.json", parameters).respondAsRated[Tweet] } /** Destroys the status specified by the required ID parameter. * The authenticating user must be the author of the specified status. * Returns the destroyed status if successful. * For more information see * * https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/post-statuses-destroy-id. * * @param id : The numerical ID of the desired status. * @param trim_user : By default it is `false`. * When set to `true`, each tweet returned in a timeline will include a user object including only the status authors numerical ID. * Set this parameter to `false` to receive the complete user object. * @param tweet_mode : Optional, by default it is `Classic`. * When set to `Extended` prevents tweet text truncating, see https://developer.twitter.com/en/docs/tweets/tweet-updates * @return : The representation of the deleted tweet. */ def deleteTweet(id: Long, trim_user: Boolean = false, tweet_mode: TweetMode = TweetMode.Classic): Future[Tweet] = { import restClient._ val parameters = PostParameters(trim_user, tweet_mode) Post(s"$statusesUrl/destroy/$id.json", parameters).respondAs[Tweet] } /** Updates the authenticating user’s current status, also known as Tweeting. * For each update attempt, the update text is compared with the authenticating user’s recent Tweets. * Any attempt that would result in duplication will be blocked, resulting in a `TwitterException` error. * Therefore, a user cannot submit the same status twice in a row. * For more information see * * https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/post-statuses-update. * * @param status : The text of your status update, typically up to 140 characters. * @param in_reply_to_status_id : Optional, by default it is `None`. * The ID of an existing status that the update is in reply to. * Note that this parameter will be ignored unless the author of the tweet this parameter references is mentioned within the status text. * Therefore, you must include @username, where username is the author of the referenced tweet, within the update. * @param possibly_sensitive : By default it is `false`. * If you upload Tweet media that might be considered sensitive content such as nudity, violence, or medical procedures, you should set this value to `true`. * @param latitude : Optional, by default it is `None`. * The latitude of the location this tweet refers to. * This parameter will be ignored unless it is inside the range -90.0 to +90.0 (North is positive) inclusive. * It will also be ignored if there isn’t a corresponding `longitude` parameter. * @param longitude : Optional, by default is `None`. * The longitude of the location this tweet refers to. * The valid ranges for longitude is -180.0 to +180.0 (East is positive) inclusive. * This parameter will be ignored if outside that range, if it is not a number, if geo_enabled is disabled, or if there not a corresponding `latitude` parameter. * @param place_id : Optional, by default it is `None`. * A place in the world identified by an id. * @param display_coordinates : By default it is `false`. * Whether or not to put a pin on the exact coordinates a tweet has been sent from. * @param trim_user : By default it is `false`. * When set to `true`, each tweet returned in a timeline will include a user object including only the status authors numerical ID. * Set this parameter to `false` to receive the complete user object. * @param media_ids : By default it is an empty sequence. * A list of media_ids to associate with the Tweet. You may include up to 4 photos or 1 animated GIF or 1 video in a Tweet. * @return : The representation of the created tweet. */ //TODO: does this method should support extended tweet_mode? (https://github.com/DanielaSfregola/twitter4s/issues/102) def createTweet(status: String, in_reply_to_status_id: Option[Long] = None, possibly_sensitive: Boolean = false, latitude: Option[Long] = None, longitude: Option[Long] = None, place_id: Option[String] = None, display_coordinates: Boolean = false, trim_user: Boolean = false, media_ids: Seq[Long] = Seq.empty): Future[Tweet] = { import restClient._ val entity = TweetUpdate(status, in_reply_to_status_id, possibly_sensitive, latitude, longitude, place_id, display_coordinates, trim_user, media_ids) Post(s"$statusesUrl/update.json", entity).respondAs[Tweet] } /** Sends a direct message to a specified user. * For more information see * * https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/post-statuses-update. * * @param message : The text of your direct message. * @param screen_name : : The screen name of the user that should receive the message. * Helpful for disambiguating when a valid screen name is also a user ID. * @param in_reply_to_status_id : Optional, by default it is `None`. * The ID of an existing status that the update is in reply to. * Note that this parameter will be ignored unless the author of the tweet this parameter references is mentioned within the status text. * Therefore, you must include @username, where username is the author of the referenced tweet, within the update. * @param possibly_sensitive : By default it is `false`. * If you upload Tweet media that might be considered sensitive content such as nudity, violence, or medical procedures, you should set this value to `true`. * @param latitude : Optional, by default it is `None`. * The latitude of the location this tweet refers to. * This parameter will be ignored unless it is inside the range -90.0 to +90.0 (North is positive) inclusive. * It will also be ignored if there isn’t a corresponding `longitude` parameter. * @param longitude : Optional, by default is `None`. * The longitude of the location this tweet refers to. * The valid ranges for longitude is -180.0 to +180.0 (East is positive) inclusive. * This parameter will be ignored if outside that range, if it is not a number, if geo_enabled is disabled, or if there not a corresponding `latitude` parameter. * @param place_id : Optional, by default it is `None`. * A place in the world identified by an id. * @param display_coordinates : By default it is `false`. * Whether or not to put a pin on the exact coordinates a tweet has been sent from. * @param trim_user : By default it is `false`. * When set to `true`, each tweet returned in a timeline will include a user object including only the status authors numerical ID. * Set this parameter to `false` to receive the complete user object. * @param media_ids : By default it is an empty sequence. * A list of media_ids to associate with the Tweet. You may include up to 4 photos or 1 animated GIF or 1 video in a Tweet. * @return : The representation of the created direct message. */ def createDirectMessageAsTweet(message: String, screen_name: String, in_reply_to_status_id: Option[Long] = None, possibly_sensitive: Boolean = false, latitude: Option[Long] = None, longitude: Option[Long] = None, place_id: Option[String] = None, display_coordinates: Boolean = false, trim_user: Boolean = false, media_ids: Seq[Long] = Seq.empty): Future[Tweet] = { val directMessage = s"D $screen_name $message" createTweet(directMessage, in_reply_to_status_id, possibly_sensitive, latitude, longitude, place_id, display_coordinates, trim_user, media_ids) } /** Retweets a tweet. Returns the original tweet with retweet details embedded. * For more information see * * https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/get-statuses-retweets-id. * * @param id : The numerical ID of the desired status. * @param trim_user : By default it is `false`. * When set to `true`, each tweet returned in a timeline will include a user object including only the status authors numerical ID. * Set this parameter to `false` to receive the complete user object. * @param tweet_mode : Optional, by default it is `Classic`. * When set to `Extended` prevents tweet text truncating, see https://developer.twitter.com/en/docs/tweets/tweet-updates * @return : The representation of the original tweet with retweet details embedded. */ def retweet(id: Long, trim_user: Boolean = false, tweet_mode: TweetMode = TweetMode.Classic): Future[Tweet] = { import restClient._ val parameters = PostParameters(trim_user, tweet_mode) Post(s"$statusesUrl/retweet/$id.json", parameters).respondAs[Tweet] } /** Returns a single Tweet, specified by the Tweet ID, in an oEmbed-compatible format. * The returned HTML snippet will be automatically recognized as an Embedded Tweet when Twitter’s widget JavaScript is included on the page. * The oEmbed endpoint allows customization of the final appearance of an Embedded Tweet by setting the corresponding properties in HTML markup to be interpreted by Twitter’s JavaScript bundled with the HTML response by default. * The format of the returned markup may change over time as Twitter adds new features or adjusts its Tweet representation. * The Tweet fallback markup is meant to be cached on your servers for up to the suggested cache lifetime specified in the cache_age. * For more information see * * https://developer.twitter.com/en/docs/tweets/post-and-engage/api-reference/get-statuses-oembed. * * @param id : The numerical ID of the desired status. * @param max_width : Optional, by default it is `None`. * The maximum width of a rendered Tweet in whole pixels. This value must be between 220 and 550 inclusive. * A supplied value under or over the allowed range will be returned as the minimum or maximum supported width respectively; the reset width value will be reflected in the returned width property. * Note that Twitter does not support the oEmbed max_height parameter. * Tweets are fundamentally text, and are therefore of unpredictable height that cannot be scaled like an image or video. * Relatedly, the oEmbed response will not provide a value for height. * Implementations that need consistent heights for Tweets should refer to the hide_thread and hide_media parameters below. * @param hide_media : By default, it is `false`. * When set to `true`, links in a Tweet are not expanded to photo, video, or link previews. * @param hide_thread : By default, it is `false`. * When set to `true`, a collapsed version of the previous Tweet in a conversation thread will not be displayed when the requested Tweet is in reply to another Tweet. * @param omit_script : By default, it is `false`. * When set to `true`, the `", "provider_url": "https://twitter.com", "provider_name": "Twitter", "type": "rich", "url": "https://twitter.com/decksetapp/statuses/648866645855879168", "version": "1.0", "width": 550 } ================================================ FILE: src/test/resources/fixtures/rest/statuses/retweet.json ================================================ { "contributors": [], "created_at": "Wed Sep 30 17:34:55 +0100 2015", "entities": { "hashtags": [], "media": [], "urls": [], "user_mentions": [] }, "favorite_count": 0, "favorited": false, "id": 649261149893074944, "id_str": "649261149893074944", "is_quote_status": false, "lang": "en", "possibly_sensitive": false, "scopes": { }, "retweet_count": 0, "retweeted": false, "source": "scala-twitter-tutorial", "text": "This is a test", "truncated": false, "user": { "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "entities": { "hashtags": [], "media": [], "url": { "urls": [ { "indices": [ 0, 23 ], "url": "https://t.co/0FKNGVnRwX", "display_url": "danielasfregola.com", "expanded_url": "https://www.danielasfregola.com/" } ] }, "urls": [], "user_mentions": [], "description": { "urls": [] } }, "favourites_count": 68, "follow_request_sent": false, "following": false, "followers_count": 132, "friends_count": 93, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "statuses_count": 187, "url": "https://t.co/0FKNGVnRwX", "verified": false }, "withheld_copyright": false, "withheld_in_countries": [] } ================================================ FILE: src/test/resources/fixtures/rest/statuses/retweeters_ids.json ================================================ { "ids": [ 3185001906, 2864749010, 2728578117, 2390428970, 2392623769, 2298388902, 2218822532, 2294010576, 2298665443, 2295646148, 2392372830, 2489878842, 2537896318, 1456646244, 2369342556, 908315570, 134681213, 2207996772, 1323648805, 2209966914, 1377248521, 450742576, 2169915990, 2168731405, 1032613423, 1897558387, 1651460672, 552136201, 1961595428, 622040005, 1723067108, 1940180042, 1921253352, 1916881861, 1909516183, 1899472064, 1409030454, 551190078, 98585322, 1287005810, 1857413564, 1507117872, 616207096, 1707416846, 795061039, 245171204, 1671544250, 550058321, 1661133924, 302907601, 1184312352, 1360513801, 1627139449, 1633417872, 1624546278, 1549848770, 1606806666, 1286204832, 102781433, 1547689992, 1549487112, 1546030177, 1232717508, 1366161096, 1470134192, 1538866020, 1525394654, 1360382390, 1485097536, 1520331235, 1360663580, 1517720449, 62084055, 1092628730, 1362034669, 1214653182, 556802885, 364135790 ], "next_cursor": 0, "previous_cursor": 0 } ================================================ FILE: src/test/resources/fixtures/rest/statuses/retweeters_ids_stringified.json ================================================ { "ids": [ "3185001906", "2864749010", "2728578117", "2390428970", "2392623769", "2298388902", "2218822532", "2294010576", "2298665443", "2295646148", "2392372830", "2489878842", "2537896318", "1456646244", "2369342556", "908315570", "134681213", "2207996772", "1323648805", "2209966914", "1377248521", "450742576", "2169915990", "2168731405", "1032613423", "1897558387", "1651460672", "552136201", "1961595428", "622040005", "1723067108", "1940180042", "1921253352", "1916881861", "1909516183", "1899472064", "1409030454", "551190078", "98585322", "1287005810", "1857413564", "1507117872", "616207096", "1707416846", "795061039", "245171204", "1671544250", "550058321", "1661133924", "302907601", "1184312352", "1360513801", "1627139449", "1633417872", "1624546278", "1549848770", "1606806666", "1286204832", "102781433", "1547689992", "1549487112", "1546030177", "1232717508", "1366161096", "1470134192", "1538866020", "1525394654", "1360382390", "1485097536", "1520331235", "1360663580", "1517720449", "62084055", "1092628730", "1362034669", "1214653182", "556802885", "364135790" ], "next_cursor": 0, "previous_cursor": 0 } ================================================ FILE: src/test/resources/fixtures/rest/statuses/retweets.json ================================================ [ { "contributors": [ ], "coordinates": null, "created_at": "Wed Sep 30 06:31:32 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "type": "photo", "url": "http://t.co/hIdTA3v2zE" } ], "url": null, "urls": [ { "url": "http://t.co/irHM9eIN6B", "expanded_url": "http://apple.co/1ig68dx", "display_url": "apple.co/1ig68dx", "indices": [ 106, 128 ] } ], "user_mentions": [ { "id": 2251684044, "id_str": "2251684044", "indices": [ 3, 14 ], "name": "Deckset", "screen_name": "decksetapp" } ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "type": "photo", "url": "http://t.co/hIdTA3v2zE", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 649109302582595584, "id_str": "649109302582595584", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 73, "retweeted": false, "retweeted_status": { "contributors": [ ], "coordinates": null, "created_at": "Tue Sep 29 14:27:18 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/hIdTA3v2zE" } ], "url": null, "urls": [ { "url": "http://t.co/irHM9eIN6B", "expanded_url": "http://apple.co/1ig68dx", "display_url": "apple.co/1ig68dx", "indices": [ 90, 112 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/hIdTA3v2zE", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 28, "favorited": false, "filter_level": null, "id": 648866645855879168, "id_str": "648866645855879168", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 73, "retweeted": false, "retweeted_status": null, "source": "Twitter Web Client", "text": "💥New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http://t.co/irHM9eIN6B http://t.co/hIdTA3v2zE", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "default_profile": false, "default_profile_image": false, "description": "Turn your notes into beautiful presentations.", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/qZdruXQkI0", "expanded_url": "http://www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 477, "follow_request_sent": false, "following": false, "followers_count": 1838, "friends_count": 31, "geo_enabled": false, "has_extended_profile": false, "id": 2251684044, "id_str": "2251684044", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 67, "location": "Your Mac", "muting": false, "name": "Deckset", "notifications": false, "profile_background_color": "323740", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/2251684044/1401122921", "profile_image_url": "http://pbs.twimg.com/profile_images/452858703981461504/nLm-Lvvn_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/452858703981461504/nLm-Lvvn_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "protected": false, "screen_name": "decksetapp", "show_all_inline_media": false, "status": null, "statuses_count": 1222, "time_zone": null, "url": "http://t.co/qZdruXQkI0", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, "source": "Tweetbot for iΟS", "text": "RT @decksetapp: 💥New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http://t.co/irHM9eIN6B http://t.c\u2026", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Wed Dec 02 07:58:34 +0000 2009", "default_profile": false, "default_profile_image": false, "description": "I make apps that make your phone go beep for @VOKALmobile by day and @justhum by night. Tech here, personal nonsense over at @loudguitars.", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/CNcfzb3sFC", "expanded_url": "http://www.designatednerd.com", "display_url": "designatednerd.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 4784, "follow_request_sent": false, "following": false, "followers_count": 1372, "friends_count": 316, "geo_enabled": false, "has_extended_profile": false, "id": 94045596, "id_str": "94045596", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 91, "location": "Chicago, IL", "muting": false, "name": "Ellen Shapiro", "notifications": false, "profile_background_color": "709397", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme6/bg.gif", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme6/bg.gif", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/94045596/1398228767", "profile_image_url": "http://pbs.twimg.com/profile_images/476185528774057985/gHqyiSXW_normal.jpeg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/476185528774057985/gHqyiSXW_normal.jpeg", "profile_link_color": "AD3E3E", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "designatednerd", "show_all_inline_media": false, "status": null, "statuses_count": 14237, "time_zone": "Central Time (US & Canada)", "url": "http://t.co/CNcfzb3sFC", "utc_offset": -18000, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Wed Sep 30 04:07:31 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "type": "photo", "url": "http://t.co/hIdTA3v2zE" } ], "url": null, "urls": [ { "url": "http://t.co/irHM9eIN6B", "expanded_url": "http://apple.co/1ig68dx", "display_url": "apple.co/1ig68dx", "indices": [ 106, 128 ] } ], "user_mentions": [ { "id": 2251684044, "id_str": "2251684044", "indices": [ 3, 14 ], "name": "Deckset", "screen_name": "decksetapp" } ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "type": "photo", "url": "http://t.co/hIdTA3v2zE", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 649073059345797120, "id_str": "649073059345797120", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 73, "retweeted": false, "retweeted_status": { "contributors": [ ], "coordinates": null, "created_at": "Tue Sep 29 14:27:18 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/hIdTA3v2zE" } ], "url": null, "urls": [ { "url": "http://t.co/irHM9eIN6B", "expanded_url": "http://apple.co/1ig68dx", "display_url": "apple.co/1ig68dx", "indices": [ 90, 112 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/hIdTA3v2zE", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 28, "favorited": false, "filter_level": null, "id": 648866645855879168, "id_str": "648866645855879168", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 73, "retweeted": false, "retweeted_status": null, "source": "Twitter Web Client", "text": "💥New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http://t.co/irHM9eIN6B http://t.co/hIdTA3v2zE", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "default_profile": false, "default_profile_image": false, "description": "Turn your notes into beautiful presentations.", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/qZdruXQkI0", "expanded_url": "http://www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 477, "follow_request_sent": false, "following": false, "followers_count": 1838, "friends_count": 31, "geo_enabled": false, "has_extended_profile": false, "id": 2251684044, "id_str": "2251684044", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 67, "location": "Your Mac", "muting": false, "name": "Deckset", "notifications": false, "profile_background_color": "323740", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/2251684044/1401122921", "profile_image_url": "http://pbs.twimg.com/profile_images/452858703981461504/nLm-Lvvn_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/452858703981461504/nLm-Lvvn_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "protected": false, "screen_name": "decksetapp", "show_all_inline_media": false, "status": null, "statuses_count": 1222, "time_zone": null, "url": "http://t.co/qZdruXQkI0", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, "source": "Tweetbot for iΟS", "text": "RT @decksetapp: 💥New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http://t.co/irHM9eIN6B http://t.c\u2026", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Sat Jul 11 13:15:44 +0000 2009", "default_profile": false, "default_profile_image": false, "description": "스윙재즈와 린디합을 좋아하는 과묵한 웹개발 노동자.", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": null, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 76480, "follow_request_sent": false, "following": false, "followers_count": 747, "friends_count": 1093, "geo_enabled": false, "has_extended_profile": false, "id": 55828016, "id_str": "55828016", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 29, "location": "", "muting": false, "name": "Heesang", "notifications": false, "profile_background_color": "C6E2EE", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme2/bg.gif", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme2/bg.gif", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/2998268211/81c92fe5fb3a85767e4553f6916c1e6b_normal.jpeg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/2998268211/81c92fe5fb3a85767e4553f6916c1e6b_normal.jpeg", "profile_link_color": "1F98C7", "profile_sidebar_border_color": "C6E2EE", "profile_sidebar_fill_color": "DAECF4", "profile_text_color": "663B12", "profile_use_background_image": true, "protected": false, "screen_name": "soletheand", "show_all_inline_media": false, "status": null, "statuses_count": 34987, "time_zone": "Seoul", "url": null, "utc_offset": 32400, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Wed Sep 30 01:54:33 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "type": "photo", "url": "http://t.co/hIdTA3v2zE" } ], "url": null, "urls": [ { "url": "http://t.co/irHM9eIN6B", "expanded_url": "http://apple.co/1ig68dx", "display_url": "apple.co/1ig68dx", "indices": [ 106, 128 ] } ], "user_mentions": [ { "id": 2251684044, "id_str": "2251684044", "indices": [ 3, 14 ], "name": "Deckset", "screen_name": "decksetapp" } ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "type": "photo", "url": "http://t.co/hIdTA3v2zE", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 649039597586944000, "id_str": "649039597586944000", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 73, "retweeted": false, "retweeted_status": { "contributors": [ ], "coordinates": null, "created_at": "Tue Sep 29 14:27:18 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/hIdTA3v2zE" } ], "url": null, "urls": [ { "url": "http://t.co/irHM9eIN6B", "expanded_url": "http://apple.co/1ig68dx", "display_url": "apple.co/1ig68dx", "indices": [ 90, 112 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/hIdTA3v2zE", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 28, "favorited": false, "filter_level": null, "id": 648866645855879168, "id_str": "648866645855879168", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 73, "retweeted": false, "retweeted_status": null, "source": "Twitter Web Client", "text": "💥New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http://t.co/irHM9eIN6B http://t.co/hIdTA3v2zE", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "default_profile": false, "default_profile_image": false, "description": "Turn your notes into beautiful presentations.", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/qZdruXQkI0", "expanded_url": "http://www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 477, "follow_request_sent": false, "following": false, "followers_count": 1838, "friends_count": 31, "geo_enabled": false, "has_extended_profile": false, "id": 2251684044, "id_str": "2251684044", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 67, "location": "Your Mac", "muting": false, "name": "Deckset", "notifications": false, "profile_background_color": "323740", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/2251684044/1401122921", "profile_image_url": "http://pbs.twimg.com/profile_images/452858703981461504/nLm-Lvvn_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/452858703981461504/nLm-Lvvn_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "protected": false, "screen_name": "decksetapp", "show_all_inline_media": false, "status": null, "statuses_count": 1222, "time_zone": null, "url": "http://t.co/qZdruXQkI0", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, "source": "Twitter for iPhone", "text": "RT @decksetapp: 💥New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http://t.co/irHM9eIN6B http://t.c\u2026", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Thu Dec 27 13:54:50 +0000 2007", "default_profile": false, "default_profile_image": false, "description": "\\\\٩( 'ω' )و ////", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": null, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 1618, "follow_request_sent": false, "following": false, "followers_count": 233, "friends_count": 267, "geo_enabled": false, "has_extended_profile": false, "id": 11566092, "id_str": "11566092", "is_translation_enabled": false, "is_translator": false, "lang": "ja", "listed_count": 25, "location": "B3F", "muting": false, "name": "TAMAYAN", "notifications": false, "profile_background_color": "1A1B1F", "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/34520193/Speaker_A.jpg", "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/34520193/Speaker_A.jpg", "profile_background_tile": true, "profile_banner_url": "https://pbs.twimg.com/profile_banners/11566092/1411225329", "profile_image_url": "http://pbs.twimg.com/profile_images/604606785782022145/h4ePX-yO_normal.jpg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/604606785782022145/h4ePX-yO_normal.jpg", "profile_link_color": "2FC2EF", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "252429", "profile_text_color": "666666", "profile_use_background_image": true, "protected": false, "screen_name": "Gyoku", "show_all_inline_media": false, "status": null, "statuses_count": 17929, "time_zone": "Tokyo", "url": null, "utc_offset": 32400, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Wed Sep 30 00:16:47 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "type": "photo", "url": "http://t.co/hIdTA3v2zE" } ], "url": null, "urls": [ { "url": "http://t.co/irHM9eIN6B", "expanded_url": "http://apple.co/1ig68dx", "display_url": "apple.co/1ig68dx", "indices": [ 106, 128 ] } ], "user_mentions": [ { "id": 2251684044, "id_str": "2251684044", "indices": [ 3, 14 ], "name": "Deckset", "screen_name": "decksetapp" } ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "type": "photo", "url": "http://t.co/hIdTA3v2zE", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 649014996140212225, "id_str": "649014996140212225", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 73, "retweeted": false, "retweeted_status": { "contributors": [ ], "coordinates": null, "created_at": "Tue Sep 29 14:27:18 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/hIdTA3v2zE" } ], "url": null, "urls": [ { "url": "http://t.co/irHM9eIN6B", "expanded_url": "http://apple.co/1ig68dx", "display_url": "apple.co/1ig68dx", "indices": [ 90, 112 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/hIdTA3v2zE", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 28, "favorited": false, "filter_level": null, "id": 648866645855879168, "id_str": "648866645855879168", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 73, "retweeted": false, "retweeted_status": null, "source": "Twitter Web Client", "text": "💥New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http://t.co/irHM9eIN6B http://t.co/hIdTA3v2zE", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "default_profile": false, "default_profile_image": false, "description": "Turn your notes into beautiful presentations.", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/qZdruXQkI0", "expanded_url": "http://www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 477, "follow_request_sent": false, "following": false, "followers_count": 1838, "friends_count": 31, "geo_enabled": false, "has_extended_profile": false, "id": 2251684044, "id_str": "2251684044", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 67, "location": "Your Mac", "muting": false, "name": "Deckset", "notifications": false, "profile_background_color": "323740", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/2251684044/1401122921", "profile_image_url": "http://pbs.twimg.com/profile_images/452858703981461504/nLm-Lvvn_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/452858703981461504/nLm-Lvvn_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "protected": false, "screen_name": "decksetapp", "show_all_inline_media": false, "status": null, "statuses_count": 1222, "time_zone": null, "url": "http://t.co/qZdruXQkI0", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, "source": "Twitter for iPhone", "text": "RT @decksetapp: 💥New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http://t.co/irHM9eIN6B http://t.c\u2026", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Wed Jan 23 06:53:39 +0000 2008", "default_profile": false, "default_profile_image": false, "description": "Djangonaut, developer, @revsys employee, @defnado co-founder, @DjangoCon US Chair, DSF Developer Member, and occasional runner. @djangobirthday co-conspirator.", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/Ir0X6UGryn", "expanded_url": "http://jefftriplett.com", "display_url": "jefftriplett.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 4603, "follow_request_sent": false, "following": false, "followers_count": 2146, "friends_count": 708, "geo_enabled": true, "has_extended_profile": false, "id": 12583982, "id_str": "12583982", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 95, "location": "Lawrence, KS", "muting": false, "name": "Jeff Triplett", "notifications": false, "profile_background_color": "FFFFFF", "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/730325544/d2150f2fc1923173bb6ec536e6c6c3a5.jpeg", "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/730325544/d2150f2fc1923173bb6ec536e6c6c3a5.jpeg", "profile_background_tile": true, "profile_banner_url": "https://pbs.twimg.com/profile_banners/12583982/1431286792", "profile_image_url": "http://pbs.twimg.com/profile_images/642449768665456641/MhM2mhYi_normal.jpg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/642449768665456641/MhM2mhYi_normal.jpg", "profile_link_color": "81A8B8", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "CCCCCC", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "webology", "show_all_inline_media": false, "status": null, "statuses_count": 13925, "time_zone": "Central Time (US & Canada)", "url": "http://t.co/Ir0X6UGryn", "utc_offset": -18000, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Tue Sep 29 20:53:54 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "type": "photo", "url": "http://t.co/hIdTA3v2zE" } ], "url": null, "urls": [ { "url": "http://t.co/irHM9eIN6B", "expanded_url": "http://apple.co/1ig68dx", "display_url": "apple.co/1ig68dx", "indices": [ 106, 128 ] } ], "user_mentions": [ { "id": 2251684044, "id_str": "2251684044", "indices": [ 3, 14 ], "name": "Deckset", "screen_name": "decksetapp" } ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "type": "photo", "url": "http://t.co/hIdTA3v2zE", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 648963936394604548, "id_str": "648963936394604548", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 73, "retweeted": false, "retweeted_status": { "contributors": [ ], "coordinates": null, "created_at": "Tue Sep 29 14:27:18 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/hIdTA3v2zE" } ], "url": null, "urls": [ { "url": "http://t.co/irHM9eIN6B", "expanded_url": "http://apple.co/1ig68dx", "display_url": "apple.co/1ig68dx", "indices": [ 90, 112 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/hIdTA3v2zE", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 28, "favorited": false, "filter_level": null, "id": 648866645855879168, "id_str": "648866645855879168", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 73, "retweeted": false, "retweeted_status": null, "source": "Twitter Web Client", "text": "💥New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http://t.co/irHM9eIN6B http://t.co/hIdTA3v2zE", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "default_profile": false, "default_profile_image": false, "description": "Turn your notes into beautiful presentations.", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/qZdruXQkI0", "expanded_url": "http://www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 477, "follow_request_sent": false, "following": false, "followers_count": 1838, "friends_count": 31, "geo_enabled": false, "has_extended_profile": false, "id": 2251684044, "id_str": "2251684044", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 67, "location": "Your Mac", "muting": false, "name": "Deckset", "notifications": false, "profile_background_color": "323740", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/2251684044/1401122921", "profile_image_url": "http://pbs.twimg.com/profile_images/452858703981461504/nLm-Lvvn_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/452858703981461504/nLm-Lvvn_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "protected": false, "screen_name": "decksetapp", "show_all_inline_media": false, "status": null, "statuses_count": 1222, "time_zone": null, "url": "http://t.co/qZdruXQkI0", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, "source": "Tweetlogix", "text": "RT @decksetapp: 💥New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http://t.co/irHM9eIN6B http://t.c\u2026", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Thu Mar 15 09:19:18 +0000 2007", "default_profile": false, "default_profile_image": false, "description": "Consultant CTO & Rails developer; frequent swimmer; photographer (http://t.co/jlC2q0lzrn);\namused dad to my best creations.", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/sTR5UzQ7rR", "expanded_url": "http://ideasasylum.com", "display_url": "ideasasylum.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ { "url": "http://t.co/jlC2q0lzrn", "expanded_url": "http://hotoffthememorycard.com", "display_url": "hotoffthememorycard.com", "indices": [ 66, 88 ] } ] } }, "favourites_count": 884, "follow_request_sent": false, "following": false, "followers_count": 1645, "friends_count": 854, "geo_enabled": true, "has_extended_profile": false, "id": 1211071, "id_str": "1211071", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 148, "location": "Cork, Ireland", "muting": false, "name": "Jamie Lawrence", "notifications": false, "profile_background_color": "1D2A3D", "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/754425864/1b118129596123d88023977799d796d3.jpeg", "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/754425864/1b118129596123d88023977799d796d3.jpeg", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/1211071/1398248501", "profile_image_url": "http://pbs.twimg.com/profile_images/426871844709216256/78r6Tj6-_normal.jpeg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/426871844709216256/78r6Tj6-_normal.jpeg", "profile_link_color": "33BD24", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "F6FFD1", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "ideasasylum", "show_all_inline_media": false, "status": null, "statuses_count": 43874, "time_zone": "Dublin", "url": "http://t.co/sTR5UzQ7rR", "utc_offset": 3600, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Tue Sep 29 19:53:17 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "type": "photo", "url": "http://t.co/hIdTA3v2zE" } ], "url": null, "urls": [ { "url": "http://t.co/irHM9eIN6B", "expanded_url": "http://apple.co/1ig68dx", "display_url": "apple.co/1ig68dx", "indices": [ 106, 128 ] } ], "user_mentions": [ { "id": 2251684044, "id_str": "2251684044", "indices": [ 3, 14 ], "name": "Deckset", "screen_name": "decksetapp" } ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "type": "photo", "url": "http://t.co/hIdTA3v2zE", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 648948683359289344, "id_str": "648948683359289344", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 73, "retweeted": false, "retweeted_status": { "contributors": [ ], "coordinates": null, "created_at": "Tue Sep 29 14:27:18 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/hIdTA3v2zE" } ], "url": null, "urls": [ { "url": "http://t.co/irHM9eIN6B", "expanded_url": "http://apple.co/1ig68dx", "display_url": "apple.co/1ig68dx", "indices": [ 90, 112 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/hIdTA3v2zE", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 28, "favorited": false, "filter_level": null, "id": 648866645855879168, "id_str": "648866645855879168", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 73, "retweeted": false, "retweeted_status": null, "source": "Twitter Web Client", "text": "💥New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http://t.co/irHM9eIN6B http://t.co/hIdTA3v2zE", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "default_profile": false, "default_profile_image": false, "description": "Turn your notes into beautiful presentations.", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/qZdruXQkI0", "expanded_url": "http://www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 477, "follow_request_sent": false, "following": false, "followers_count": 1838, "friends_count": 31, "geo_enabled": false, "has_extended_profile": false, "id": 2251684044, "id_str": "2251684044", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 67, "location": "Your Mac", "muting": false, "name": "Deckset", "notifications": false, "profile_background_color": "323740", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/2251684044/1401122921", "profile_image_url": "http://pbs.twimg.com/profile_images/452858703981461504/nLm-Lvvn_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/452858703981461504/nLm-Lvvn_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "protected": false, "screen_name": "decksetapp", "show_all_inline_media": false, "status": null, "statuses_count": 1222, "time_zone": null, "url": "http://t.co/qZdruXQkI0", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, "source": "Tweetbot for iΟS", "text": "RT @decksetapp: 💥New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http://t.co/irHM9eIN6B http://t.c\u2026", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Sun Dec 18 09:38:31 +0000 2011", "default_profile": false, "default_profile_image": false, "description": "iOS developer at Intellectsoft", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": null, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 105, "follow_request_sent": false, "following": false, "followers_count": 51, "friends_count": 103, "geo_enabled": true, "has_extended_profile": false, "id": 439890252, "id_str": "439890252", "is_translation_enabled": false, "is_translator": false, "lang": "ru", "listed_count": 5, "location": "Belarus", "muting": false, "name": "Eduard Panasiuk", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/439890252/1384086196", "profile_image_url": "http://pbs.twimg.com/profile_images/466650785325932544/JQn8qb8a_normal.jpeg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/466650785325932544/JQn8qb8a_normal.jpeg", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "EdPanasiuk", "show_all_inline_media": false, "status": null, "statuses_count": 1155, "time_zone": null, "url": null, "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Tue Sep 29 19:46:04 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "type": "photo", "url": "http://t.co/hIdTA3v2zE" } ], "url": null, "urls": [ { "url": "http://t.co/irHM9eIN6B", "expanded_url": "http://apple.co/1ig68dx", "display_url": "apple.co/1ig68dx", "indices": [ 106, 128 ] } ], "user_mentions": [ { "id": 2251684044, "id_str": "2251684044", "indices": [ 3, 14 ], "name": "Deckset", "screen_name": "decksetapp" } ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "type": "photo", "url": "http://t.co/hIdTA3v2zE", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 648946868156792832, "id_str": "648946868156792832", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 73, "retweeted": false, "retweeted_status": { "contributors": [ ], "coordinates": null, "created_at": "Tue Sep 29 14:27:18 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/hIdTA3v2zE" } ], "url": null, "urls": [ { "url": "http://t.co/irHM9eIN6B", "expanded_url": "http://apple.co/1ig68dx", "display_url": "apple.co/1ig68dx", "indices": [ 90, 112 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/hIdTA3v2zE", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 28, "favorited": false, "filter_level": null, "id": 648866645855879168, "id_str": "648866645855879168", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 73, "retweeted": false, "retweeted_status": null, "source": "Twitter Web Client", "text": "💥New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http://t.co/irHM9eIN6B http://t.co/hIdTA3v2zE", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "default_profile": false, "default_profile_image": false, "description": "Turn your notes into beautiful presentations.", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/qZdruXQkI0", "expanded_url": "http://www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 477, "follow_request_sent": false, "following": false, "followers_count": 1838, "friends_count": 31, "geo_enabled": false, "has_extended_profile": false, "id": 2251684044, "id_str": "2251684044", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 67, "location": "Your Mac", "muting": false, "name": "Deckset", "notifications": false, "profile_background_color": "323740", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/2251684044/1401122921", "profile_image_url": "http://pbs.twimg.com/profile_images/452858703981461504/nLm-Lvvn_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/452858703981461504/nLm-Lvvn_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "protected": false, "screen_name": "decksetapp", "show_all_inline_media": false, "status": null, "statuses_count": 1222, "time_zone": null, "url": "http://t.co/qZdruXQkI0", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, "source": "Twitter Web Client", "text": "RT @decksetapp: 💥New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http://t.co/irHM9eIN6B http://t.c\u2026", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Sun Mar 25 07:40:06 +0000 2007", "default_profile": false, "default_profile_image": false, "description": "Working in software industry. Visual designer who loves make the web sexier. currently working @HitFoxGroup and part of the @fromthefront team", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/lWYgWFtWjD", "expanded_url": "http://mced.it", "display_url": "mced.it", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 662, "follow_request_sent": false, "following": false, "followers_count": 1000, "friends_count": 825, "geo_enabled": true, "has_extended_profile": false, "id": 2162591, "id_str": "2162591", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 40, "location": "Berlin, Germany", "muting": false, "name": "Emanuela", "notifications": false, "profile_background_color": "FFFFFF", "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/626856698/jzhl2o3akcp5w26j8yrp.png", "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/626856698/jzhl2o3akcp5w26j8yrp.png", "profile_background_tile": true, "profile_banner_url": "https://pbs.twimg.com/profile_banners/2162591/1430571893", "profile_image_url": "http://pbs.twimg.com/profile_images/594488016720240640/bunG7gU6_normal.jpg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/594488016720240640/bunG7gU6_normal.jpg", "profile_link_color": "013541", "profile_sidebar_border_color": "BC4482", "profile_sidebar_fill_color": "FF9191", "profile_text_color": "000000", "profile_use_background_image": true, "protected": false, "screen_name": "brassy", "show_all_inline_media": false, "status": null, "statuses_count": 4381, "time_zone": "Hawaii", "url": "http://t.co/lWYgWFtWjD", "utc_offset": -36000, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Tue Sep 29 19:45:31 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "type": "photo", "url": "http://t.co/hIdTA3v2zE" } ], "url": null, "urls": [ { "url": "http://t.co/irHM9eIN6B", "expanded_url": "http://apple.co/1ig68dx", "display_url": "apple.co/1ig68dx", "indices": [ 106, 128 ] } ], "user_mentions": [ { "id": 2251684044, "id_str": "2251684044", "indices": [ 3, 14 ], "name": "Deckset", "screen_name": "decksetapp" } ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "type": "photo", "url": "http://t.co/hIdTA3v2zE", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 648946726976421888, "id_str": "648946726976421888", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 73, "retweeted": false, "retweeted_status": { "contributors": [ ], "coordinates": null, "created_at": "Tue Sep 29 14:27:18 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/hIdTA3v2zE" } ], "url": null, "urls": [ { "url": "http://t.co/irHM9eIN6B", "expanded_url": "http://apple.co/1ig68dx", "display_url": "apple.co/1ig68dx", "indices": [ 90, 112 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/hIdTA3v2zE", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 28, "favorited": false, "filter_level": null, "id": 648866645855879168, "id_str": "648866645855879168", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 73, "retweeted": false, "retweeted_status": null, "source": "Twitter Web Client", "text": "💥New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http://t.co/irHM9eIN6B http://t.co/hIdTA3v2zE", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "default_profile": false, "default_profile_image": false, "description": "Turn your notes into beautiful presentations.", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/qZdruXQkI0", "expanded_url": "http://www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 477, "follow_request_sent": false, "following": false, "followers_count": 1838, "friends_count": 31, "geo_enabled": false, "has_extended_profile": false, "id": 2251684044, "id_str": "2251684044", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 67, "location": "Your Mac", "muting": false, "name": "Deckset", "notifications": false, "profile_background_color": "323740", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/2251684044/1401122921", "profile_image_url": "http://pbs.twimg.com/profile_images/452858703981461504/nLm-Lvvn_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/452858703981461504/nLm-Lvvn_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "protected": false, "screen_name": "decksetapp", "show_all_inline_media": false, "status": null, "statuses_count": 1222, "time_zone": null, "url": "http://t.co/qZdruXQkI0", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, "source": "Twitter Web Client", "text": "RT @decksetapp: 💥New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http://t.co/irHM9eIN6B http://t.c\u2026", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Fri Apr 04 17:10:06 +0000 2008", "default_profile": false, "default_profile_image": false, "description": "Web designer, comic drawer, video game playing, all-around creative", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/31Mb2Djyk6", "expanded_url": "http://joshnichols.com", "display_url": "joshnichols.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 848, "follow_request_sent": false, "following": false, "followers_count": 378, "friends_count": 245, "geo_enabled": true, "has_extended_profile": false, "id": 14304427, "id_str": "14304427", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 25, "location": "Columbia, MO", "muting": false, "name": "Some Josh", "notifications": false, "profile_background_color": "241601", "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/691391761/b86ac8d95cc828f3bf01a84fac9ee6f6.png", "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/691391761/b86ac8d95cc828f3bf01a84fac9ee6f6.png", "profile_background_tile": true, "profile_banner_url": "https://pbs.twimg.com/profile_banners/14304427/1398279804", "profile_image_url": "http://pbs.twimg.com/profile_images/554763778089172992/ksdITt5e_normal.jpeg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/554763778089172992/ksdITt5e_normal.jpeg", "profile_link_color": "F55B2C", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "DADADA", "profile_text_color": "3C2819", "profile_use_background_image": true, "protected": false, "screen_name": "MrBlank", "show_all_inline_media": false, "status": null, "statuses_count": 10903, "time_zone": "Central Time (US & Canada)", "url": "http://t.co/31Mb2Djyk6", "utc_offset": -18000, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Tue Sep 29 19:13:52 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "type": "photo", "url": "http://t.co/hIdTA3v2zE" } ], "url": null, "urls": [ { "url": "http://t.co/irHM9eIN6B", "expanded_url": "http://apple.co/1ig68dx", "display_url": "apple.co/1ig68dx", "indices": [ 106, 128 ] } ], "user_mentions": [ { "id": 2251684044, "id_str": "2251684044", "indices": [ 3, 14 ], "name": "Deckset", "screen_name": "decksetapp" } ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "type": "photo", "url": "http://t.co/hIdTA3v2zE", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 648938762349752320, "id_str": "648938762349752320", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 73, "retweeted": false, "retweeted_status": { "contributors": [ ], "coordinates": null, "created_at": "Tue Sep 29 14:27:18 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/hIdTA3v2zE" } ], "url": null, "urls": [ { "url": "http://t.co/irHM9eIN6B", "expanded_url": "http://apple.co/1ig68dx", "display_url": "apple.co/1ig68dx", "indices": [ 90, 112 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/hIdTA3v2zE", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 28, "favorited": false, "filter_level": null, "id": 648866645855879168, "id_str": "648866645855879168", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 73, "retweeted": false, "retweeted_status": null, "source": "Twitter Web Client", "text": "💥New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http://t.co/irHM9eIN6B http://t.co/hIdTA3v2zE", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "default_profile": false, "default_profile_image": false, "description": "Turn your notes into beautiful presentations.", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/qZdruXQkI0", "expanded_url": "http://www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 477, "follow_request_sent": false, "following": false, "followers_count": 1838, "friends_count": 31, "geo_enabled": false, "has_extended_profile": false, "id": 2251684044, "id_str": "2251684044", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 67, "location": "Your Mac", "muting": false, "name": "Deckset", "notifications": false, "profile_background_color": "323740", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/2251684044/1401122921", "profile_image_url": "http://pbs.twimg.com/profile_images/452858703981461504/nLm-Lvvn_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/452858703981461504/nLm-Lvvn_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "protected": false, "screen_name": "decksetapp", "show_all_inline_media": false, "status": null, "statuses_count": 1222, "time_zone": null, "url": "http://t.co/qZdruXQkI0", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, "source": "Tweetbot for iΟS", "text": "RT @decksetapp: 💥New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http://t.co/irHM9eIN6B http://t.c\u2026", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Fri Sep 19 09:38:01 +0000 2008", "default_profile": false, "default_profile_image": false, "description": "officially better than google", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": null, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 1066, "follow_request_sent": false, "following": false, "followers_count": 908, "friends_count": 598, "geo_enabled": true, "has_extended_profile": false, "id": 16361412, "id_str": "16361412", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 78, "location": "A large trendy Planet", "muting": false, "name": "Jan", "notifications": false, "profile_background_color": "1A1B1F", "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/65940750/Photoshop_The_nuclear_explosion___bomb_011528_.jpg", "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/65940750/Photoshop_The_nuclear_explosion___bomb_011528_.jpg", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/16361412/1396528725", "profile_image_url": "http://pbs.twimg.com/profile_images/461810309372473344/qyXN2CuZ_normal.jpeg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/461810309372473344/qyXN2CuZ_normal.jpeg", "profile_link_color": "2FC2EF", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "252429", "profile_text_color": "666666", "profile_use_background_image": false, "protected": false, "screen_name": "agento", "show_all_inline_media": false, "status": null, "statuses_count": 14978, "time_zone": "Berlin", "url": null, "utc_offset": 7200, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Tue Sep 29 19:08:13 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "type": "photo", "url": "http://t.co/hIdTA3v2zE" } ], "url": null, "urls": [ { "url": "http://t.co/irHM9eIN6B", "expanded_url": "http://apple.co/1ig68dx", "display_url": "apple.co/1ig68dx", "indices": [ 106, 128 ] } ], "user_mentions": [ { "id": 2251684044, "id_str": "2251684044", "indices": [ 3, 14 ], "name": "Deckset", "screen_name": "decksetapp" } ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "type": "photo", "url": "http://t.co/hIdTA3v2zE", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 648937339620859904, "id_str": "648937339620859904", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 73, "retweeted": false, "retweeted_status": { "contributors": [ ], "coordinates": null, "created_at": "Tue Sep 29 14:27:18 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/hIdTA3v2zE" } ], "url": null, "urls": [ { "url": "http://t.co/irHM9eIN6B", "expanded_url": "http://apple.co/1ig68dx", "display_url": "apple.co/1ig68dx", "indices": [ 90, 112 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/hIdTA3v2zE", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 28, "favorited": false, "filter_level": null, "id": 648866645855879168, "id_str": "648866645855879168", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 73, "retweeted": false, "retweeted_status": null, "source": "Twitter Web Client", "text": "💥New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http://t.co/irHM9eIN6B http://t.co/hIdTA3v2zE", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "default_profile": false, "default_profile_image": false, "description": "Turn your notes into beautiful presentations.", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/qZdruXQkI0", "expanded_url": "http://www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 477, "follow_request_sent": false, "following": false, "followers_count": 1838, "friends_count": 31, "geo_enabled": false, "has_extended_profile": false, "id": 2251684044, "id_str": "2251684044", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 67, "location": "Your Mac", "muting": false, "name": "Deckset", "notifications": false, "profile_background_color": "323740", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/2251684044/1401122921", "profile_image_url": "http://pbs.twimg.com/profile_images/452858703981461504/nLm-Lvvn_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/452858703981461504/nLm-Lvvn_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "protected": false, "screen_name": "decksetapp", "show_all_inline_media": false, "status": null, "statuses_count": 1222, "time_zone": null, "url": "http://t.co/qZdruXQkI0", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, "source": "Twitter for Mac", "text": "RT @decksetapp: 💥New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http://t.co/irHM9eIN6B http://t.c\u2026", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Sat Feb 28 19:38:06 +0000 2009", "default_profile": false, "default_profile_image": false, "description": "I may be a bit biased, but ... #ZenCart really is the best way to do eCommerce!", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": null, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 70, "follow_request_sent": false, "following": false, "followers_count": 125, "friends_count": 267, "geo_enabled": false, "has_extended_profile": false, "id": 22287658, "id_str": "22287658", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 9, "location": "", "muting": false, "name": "Chris Brown", "notifications": false, "profile_background_color": "DBE9ED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme17/bg.gif", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme17/bg.gif", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/22287658/1401309134", "profile_image_url": "http://pbs.twimg.com/profile_images/84687656/drbyte_normal.gif", "profile_image_url_https": "https://pbs.twimg.com/profile_images/84687656/drbyte_normal.gif", "profile_link_color": "CC3366", "profile_sidebar_border_color": "DBE9ED", "profile_sidebar_fill_color": "E6F6F9", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DrByteZC", "show_all_inline_media": false, "status": null, "statuses_count": 163, "time_zone": "Eastern Time (US & Canada)", "url": null, "utc_offset": -14400, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null } ] ================================================ FILE: src/test/resources/fixtures/rest/statuses/retweets_of_me.json ================================================ [ { "contributors": [ ], "coordinates": null, "created_at": "Tue Sep 29 14:14:44 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ ], "url": null, "urls": [ { "url": "http://t.co/3raBctS9qh", "expanded_url": "http://www.commitstrip.com/en/2015/09/28/scumbag-chrome/", "display_url": "commitstrip.com/en/2015/09/28/\u2026", "indices": [ 15, 37 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": null, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 648863485888208896, "id_str": "648863485888208896", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 1, "retweeted": false, "retweeted_status": null, "source": "Twitter Web Client", "text": "Scumbag Chrome http://t.co/3raBctS9qh", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "https://t.co/0FKNGVnRwX", "expanded_url": "https://www.danielasfregola.com/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 68, "follow_request_sent": false, "following": false, "followers_count": 132, "friends_count": 93, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "status": null, "statuses_count": 186, "time_zone": null, "url": "https://t.co/0FKNGVnRwX", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Mon Aug 17 18:48:39 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "Spray", "indices": [ 0, 6 ] }, { "text": "json4s", "indices": [ 42, 49 ] }, { "text": "scala", "indices": [ 73, 79 ] } ], "media": [ ], "url": null, "urls": [ { "url": "http://t.co/CxnHzaH9H1", "expanded_url": "http://wp.me/p5uYrc-7k", "display_url": "wp.me/p5uYrc-7k", "indices": [ 50, 72 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": null, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 633349736943235072, "id_str": "633349736943235072", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 1, "retweeted": false, "retweeted_status": null, "source": "Twitter Web Client", "text": "#Spray: how to (de)serialize objects with #json4s http://t.co/CxnHzaH9H1 #scala", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "https://t.co/0FKNGVnRwX", "expanded_url": "https://www.danielasfregola.com/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 68, "follow_request_sent": false, "following": false, "followers_count": 132, "friends_count": 93, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "status": null, "statuses_count": 186, "time_zone": null, "url": "https://t.co/0FKNGVnRwX", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Mon Jun 29 18:07:35 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "Spray", "indices": [ 16, 22 ] } ], "media": [ ], "url": null, "urls": [ { "url": "http://t.co/KBB3hmnRoA", "expanded_url": "http://danielasfregola.com/2015/06/29/how-to-create-a-spray-custom-authenticator", "display_url": "danielasfregola.com/2015/06/29/how\u2026", "indices": [ 44, 66 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": null, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 615582396868509696, "id_str": "615582396868509696", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 2, "retweeted": false, "retweeted_status": null, "source": "WordPress.com", "text": "How to Create a #Spray Custom Authenticator http://t.co/KBB3hmnRoA", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "https://t.co/0FKNGVnRwX", "expanded_url": "https://www.danielasfregola.com/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 68, "follow_request_sent": false, "following": false, "followers_count": 132, "friends_count": 93, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "status": null, "statuses_count": 186, "time_zone": null, "url": "https://t.co/0FKNGVnRwX", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Thu Jun 25 05:57:44 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 0, 6 ] } ], "media": [ ], "url": null, "urls": [ { "url": "http://t.co/Lcqh19jFeO", "expanded_url": "http://scala-lang.org/news/2.11.7", "display_url": "scala-lang.org/news/2.11.7", "indices": [ 32, 54 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": null, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 613949174871126016, "id_str": "613949174871126016", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 1, "retweeted": false, "retweeted_status": null, "source": "Twitter Web Client", "text": "#Scala 2.11.7 is now available! http://t.co/Lcqh19jFeO", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "https://t.co/0FKNGVnRwX", "expanded_url": "https://www.danielasfregola.com/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 68, "follow_request_sent": false, "following": false, "followers_count": 132, "friends_count": 93, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "status": null, "statuses_count": 186, "time_zone": null, "url": "https://t.co/0FKNGVnRwX", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Tue Jun 23 18:00:37 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 22, 28 ] } ], "media": [ ], "url": null, "urls": [ { "url": "http://t.co/NKwO7cvsZ1", "expanded_url": "http://danielasfregola.com/2015/06/23/static-duck-typing-in-scala", "display_url": "danielasfregola.com/2015/06/23/sta\u2026", "indices": [ 29, 51 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": null, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 613406318406176768, "id_str": "613406318406176768", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 2, "retweeted": false, "retweeted_status": null, "source": "WordPress.com", "text": "Static Duck Typing in #Scala http://t.co/NKwO7cvsZ1", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "https://t.co/0FKNGVnRwX", "expanded_url": "https://www.danielasfregola.com/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 68, "follow_request_sent": false, "following": false, "followers_count": 132, "friends_count": 93, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "status": null, "statuses_count": 186, "time_zone": null, "url": "https://t.co/0FKNGVnRwX", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Thu Jun 18 18:13:56 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 59, 65 ] } ], "media": [ ], "url": null, "urls": [ { "url": "http://t.co/6L9wl8BVoq", "expanded_url": "http://wp.me/p5uYrc-6a", "display_url": "wp.me/p5uYrc-6a", "indices": [ 66, 88 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": null, "favorite_count": 1, "favorited": false, "filter_level": null, "id": 611597729769385984, "id_str": "611597729769385984", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "fr", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 1, "retweeted": false, "retweeted_status": null, "source": "Mobile Web", "text": "Performance Comparison between immutable Seq, List, Vector #Scala http://t.co/6L9wl8BVoq", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "https://t.co/0FKNGVnRwX", "expanded_url": "https://www.danielasfregola.com/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 68, "follow_request_sent": false, "following": false, "followers_count": 132, "friends_count": 93, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "status": null, "statuses_count": 186, "time_zone": null, "url": "https://t.co/0FKNGVnRwX", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Mon Jun 15 20:51:51 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 59, 65 ] } ], "media": [ { "display_url": "pic.twitter.com/XpS3nIcAh1", "expanded_url": "http://twitter.com/DanielaSfregola/status/610550305718013952/photo/1", "id": 610550304732418048, "id_str": "610550304732418048", "indices": [ 89, 111 ], "media_url": "http://pbs.twimg.com/media/CHkcRG8VEAA64MP.png", "media_url_https": "https://pbs.twimg.com/media/CHkcRG8VEAA64MP.png", "sizes": { "thumb": { "h": 101, "resize": "crop", "w": 150 }, "large": { "h": 101, "resize": "fit", "w": 300 }, "small": { "h": 101, "resize": "fit", "w": 300 }, "medium": { "h": 101, "resize": "fit", "w": 300 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/XpS3nIcAh1" } ], "url": null, "urls": [ { "url": "http://t.co/SgUBcs97rj", "expanded_url": "http://danielasfregola.com/2015/06/15/which-immutable-scala-collection", "display_url": "danielasfregola.com/2015/06/15/whi\u2026", "indices": [ 66, 88 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/XpS3nIcAh1", "expanded_url": "http://twitter.com/DanielaSfregola/status/610550305718013952/photo/1", "id": 610550304732418048, "id_str": "610550304732418048", "indices": [ 89, 111 ], "media_url": "http://pbs.twimg.com/media/CHkcRG8VEAA64MP.png", "media_url_https": "https://pbs.twimg.com/media/CHkcRG8VEAA64MP.png", "sizes": { "thumb": { "h": 101, "resize": "crop", "w": 150 }, "large": { "h": 101, "resize": "fit", "w": 300 }, "small": { "h": 101, "resize": "fit", "w": 300 }, "medium": { "h": 101, "resize": "fit", "w": 300 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/XpS3nIcAh1", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 610550305718013952, "id_str": "610550305718013952", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "fr", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 2, "retweeted": false, "retweeted_status": null, "source": "WordPress.com", "text": "Performance comparison between immutable Seq, List, Vector #Scala http://t.co/SgUBcs97rj http://t.co/XpS3nIcAh1", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "https://t.co/0FKNGVnRwX", "expanded_url": "https://www.danielasfregola.com/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 68, "follow_request_sent": false, "following": false, "followers_count": 132, "friends_count": 93, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "status": null, "statuses_count": 186, "time_zone": null, "url": "https://t.co/0FKNGVnRwX", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Wed Jun 10 14:15:58 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "ScalaDays", "indices": [ 31, 41 ] }, { "text": "Akka", "indices": [ 119, 124 ] } ], "media": [ ], "url": null, "urls": [ ], "user_mentions": [ { "id": 24999933, "id_str": "24999933", "indices": [ 14, 27 ], "name": "Michael Nash", "screen_name": "MichaelPNash" } ], "description": null }, "extended_entities": null, "favorite_count": 7, "favorited": false, "filter_level": null, "id": 608638741155049472, "id_str": "608638741155049472", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 8, "retweeted": false, "retweeted_status": null, "source": "Twitter Web Client", "text": "Great talk by @MichaelPNash at #ScalaDays: nice case study to compare the performance between CRUD and DDDD systems... #Akka rocks! :D", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "https://t.co/0FKNGVnRwX", "expanded_url": "https://www.danielasfregola.com/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 68, "follow_request_sent": false, "following": false, "followers_count": 132, "friends_count": 93, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "status": null, "statuses_count": 186, "time_zone": null, "url": "https://t.co/0FKNGVnRwX", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Wed Jun 10 13:46:14 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "ScalaDays", "indices": [ 32, 42 ] } ], "media": [ ], "url": null, "urls": [ ], "user_mentions": [ { "id": 24999933, "id_str": "24999933", "indices": [ 10, 23 ], "name": "Michael Nash", "screen_name": "MichaelPNash" } ], "description": null }, "extended_entities": null, "favorite_count": 2, "favorited": false, "filter_level": null, "id": 608631256788676608, "id_str": "608631256788676608", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "tl", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 3, "retweeted": false, "retweeted_status": null, "source": "Twitter Web Client", "text": "Attending @MichaelPNash talk at #ScalaDays on Akka Scalability", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "https://t.co/0FKNGVnRwX", "expanded_url": "https://www.danielasfregola.com/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 68, "follow_request_sent": false, "following": false, "followers_count": 132, "friends_count": 93, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "status": null, "statuses_count": 186, "time_zone": null, "url": "https://t.co/0FKNGVnRwX", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Tue Jun 09 09:54:00 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "ScalaDays", "indices": [ 61, 71 ] } ], "media": [ ], "url": null, "urls": [ ], "user_mentions": [ { "id": 98145567, "id_str": "98145567", "indices": [ 43, 57 ], "name": "Helena Edelson", "screen_name": "helenaedelson" } ], "description": null }, "extended_entities": null, "favorite_count": 1, "favorited": false, "filter_level": null, "id": 608210429060521984, "id_str": "608210429060521984", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 2, "retweeted": false, "retweeted_status": null, "source": "Twitter Web Client", "text": "\"Your Data is like Candy: you want it now\" @helenaedelson at #ScalaDays", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "https://t.co/0FKNGVnRwX", "expanded_url": "https://www.danielasfregola.com/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 68, "follow_request_sent": false, "following": false, "followers_count": 132, "friends_count": 93, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "status": null, "statuses_count": 186, "time_zone": null, "url": "https://t.co/0FKNGVnRwX", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null } ] ================================================ FILE: src/test/resources/fixtures/rest/statuses/show.json ================================================ { "contributors": [ ], "coordinates": null, "created_at": "Tue Sep 29 14:27:18 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/hIdTA3v2zE" } ], "url": null, "urls": [ { "url": "http://t.co/irHM9eIN6B", "expanded_url": "http://apple.co/1ig68dx", "display_url": "apple.co/1ig68dx", "indices": [ 90, 112 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/hIdTA3v2zE", "expanded_url": "http://twitter.com/decksetapp/status/648866645855879168/photo/1", "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https://pbs.twimg.com/media/CQE8xpPWsAA1lj2.jpg", "sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 191, "resize": "fit", "w": 340 }, "medium": { "h": 337, "resize": "fit", "w": 600 }, "large": { "h": 576, "resize": "fit", "w": 1024 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/hIdTA3v2zE", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 28, "favorited": false, "filter_level": null, "id": 648866645855879168, "id_str": "648866645855879168", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 73, "retweeted": false, "retweeted_status": null, "source": "Twitter Web Client", "text": "💥New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http://t.co/irHM9eIN6B http://t.co/hIdTA3v2zE", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "default_profile": false, "default_profile_image": false, "description": "Turn your notes into beautiful presentations.", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/qZdruXQkI0", "expanded_url": "http://www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 477, "follow_request_sent": false, "following": false, "followers_count": 1838, "friends_count": 31, "geo_enabled": false, "has_extended_profile": false, "id": 2251684044, "id_str": "2251684044", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 67, "location": "Your Mac", "muting": false, "name": "Deckset", "notifications": false, "profile_background_color": "323740", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/2251684044/1401122921", "profile_image_url": "http://pbs.twimg.com/profile_images/452858703981461504/nLm-Lvvn_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/452858703981461504/nLm-Lvvn_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "protected": false, "screen_name": "decksetapp", "show_all_inline_media": false, "status": null, "statuses_count": 1222, "time_zone": null, "url": "http://t.co/qZdruXQkI0", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null } ================================================ FILE: src/test/resources/fixtures/rest/statuses/update.json ================================================ { "contributors": [], "created_at": "Wed Sep 30 17:34:55 +0100 2015", "entities": { "hashtags": [], "media": [], "urls": [], "user_mentions": [] }, "extended_tweet": { "full_text": "This is a full_text test", "display_text_range": [ 13, 125 ], "entities": { "hashtags": [], "media": [], "urls": [], "user_mentions": [] } }, "favorite_count": 0, "favorited": false, "id": 649261149893074944, "id_str": "649261149893074944", "is_quote_status": false, "lang": "en", "possibly_sensitive": false, "scopes": { }, "retweet_count": 0, "retweeted": false, "source": "scala-twitter-tutorial", "text": "This is a test", "truncated": false, "user": { "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "entities": { "hashtags": [], "media": [], "url": { "urls": [ { "indices": [ 0, 23 ], "url": "https://t.co/0FKNGVnRwX", "display_url": "danielasfregola.com", "expanded_url": "https://www.danielasfregola.com/" } ] }, "urls": [], "user_mentions": [], "description": { "urls": [] } }, "favourites_count": 68, "follow_request_sent": false, "following": false, "followers_count": 132, "friends_count": 93, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "statuses_count": 187, "url": "https://t.co/0FKNGVnRwX", "verified": false }, "withheld_copyright": false, "withheld_in_countries": [] } ================================================ FILE: src/test/resources/fixtures/rest/statuses/user_timeline.json ================================================ [ { "contributors": [ ], "coordinates": null, "created_at": "Sat Sep 19 11:57:22 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 51, 57 ] } ], "media": [ ], "url": null, "urls": [ { "url": "https://t.co/XhvYuO20xm", "expanded_url": "https://github.com/bfil/scala-automapper", "display_url": "github.com/bfil/scala-aut\u2026", "indices": [ 70, 93 ] } ], "user_mentions": [ { "id": 161225991, "id_str": "161225991", "indices": [ 3, 10 ], "name": "Bruno Filippone", "screen_name": "BFil85" } ], "description": null }, "extended_entities": null, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 645205037325680640, "id_str": "645205037325680640", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 2, "retweeted": true, "retweeted_status": { "contributors": [ ], "coordinates": null, "created_at": "Thu Sep 17 17:29:03 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 39, 45 ] } ], "media": [ ], "url": null, "urls": [ { "url": "https://t.co/XhvYuO20xm", "expanded_url": "https://github.com/bfil/scala-automapper", "display_url": "github.com/bfil/scala-aut\u2026", "indices": [ 58, 81 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": null, "favorite_count": 1, "favorited": false, "filter_level": null, "id": 644563728940302336, "id_str": "644563728940302336", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 2, "retweeted": true, "retweeted_status": null, "source": "Twitter Web Client", "text": "Hassle-free case class mapping with my #Scala AutoMapper! https://t.co/XhvYuO20xm", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Wed Jun 30 08:54:05 +0000 2010", "default_profile": false, "default_profile_image": false, "description": "Software Engineer @OVOEnergy - Working with Scala / Akka / Spray / AngularJS", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/V7x3oO9RvM", "expanded_url": "http://b-fil.com", "display_url": "b-fil.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 0, "follow_request_sent": false, "following": true, "followers_count": 287, "friends_count": 623, "geo_enabled": false, "has_extended_profile": false, "id": 161225991, "id_str": "161225991", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 11, "location": "London, United Kingdom", "muting": false, "name": "Bruno Filippone", "notifications": false, "profile_background_color": "131516", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme14/bg.gif", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme14/bg.gif", "profile_background_tile": true, "profile_banner_url": "https://pbs.twimg.com/profile_banners/161225991/1416776910", "profile_image_url": "http://pbs.twimg.com/profile_images/467051314992541696/PRg0HD3A_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/467051314992541696/PRg0HD3A_normal.png", "profile_link_color": "363672", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "000000", "profile_text_color": "000000", "profile_use_background_image": true, "protected": false, "screen_name": "BFil85", "show_all_inline_media": false, "status": null, "statuses_count": 314, "time_zone": "London", "url": "http://t.co/V7x3oO9RvM", "utc_offset": 3600, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, "source": "Twitter for Android", "text": "RT @BFil85: Hassle-free case class mapping with my #Scala AutoMapper! https://t.co/XhvYuO20xm", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "https://t.co/0FKNGVnRwX", "expanded_url": "https://www.danielasfregola.com/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 68, "follow_request_sent": false, "following": false, "followers_count": 129, "friends_count": 93, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "status": null, "statuses_count": 185, "time_zone": null, "url": "https://t.co/0FKNGVnRwX", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Sat Sep 19 11:16:14 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "scala", "indices": [ 96, 102 ] } ], "media": [ ], "url": null, "urls": [ { "url": "http://t.co/BLqDHutq4F", "expanded_url": "http://bldrd.us/1NFftyW", "display_url": "bldrd.us/1NFftyW", "indices": [ 73, 95 ] } ], "user_mentions": [ { "id": 431984720, "id_str": "431984720", "indices": [ 3, 14 ], "name": "BoldRadius Solutions", "screen_name": "BoldRadius" } ], "description": null }, "extended_entities": null, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 645194684411846656, "id_str": "645194684411846656", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 4, "retweeted": true, "retweeted_status": { "contributors": [ ], "coordinates": null, "created_at": "Fri Sep 18 18:11:29 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "scala", "indices": [ 80, 86 ] } ], "media": [ ], "url": null, "urls": [ { "url": "http://t.co/BLqDHutq4F", "expanded_url": "http://bldrd.us/1NFftyW", "display_url": "bldrd.us/1NFftyW", "indices": [ 57, 79 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": null, "favorite_count": 5, "favorited": false, "filter_level": null, "id": 644936798498648067, "id_str": "644936798498648067", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 4, "retweeted": true, "retweeted_status": null, "source": "HubSpot", "text": "Exploring the Collections API in Scala\n\nWatch the video: http://t.co/BLqDHutq4F #scala", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Thu Dec 08 22:24:52 +0000 2011", "default_profile": false, "default_profile_image": false, "description": "BoldRadius is an expert consulting, training & software development firm, specializing in the Typesafe Reactive Platform: #Scala, #Akka, #PlayFramework & #Spark", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/oCDcGzSfvA", "expanded_url": "http://www.boldradius.com", "display_url": "boldradius.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 1119, "follow_request_sent": false, "following": false, "followers_count": 759, "friends_count": 681, "geo_enabled": true, "has_extended_profile": false, "id": 431984720, "id_str": "431984720", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 51, "location": "San Francisco | Ottawa", "muting": false, "name": "BoldRadius Solutions", "notifications": false, "profile_background_color": "232130", "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/546542000/TindrTwitterBG.jpg", "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/546542000/TindrTwitterBG.jpg", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/431984720/1427130287", "profile_image_url": "http://pbs.twimg.com/profile_images/446507388300849152/1MTOg3Up_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/446507388300849152/1MTOg3Up_normal.png", "profile_link_color": "208096", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "protected": false, "screen_name": "BoldRadius", "show_all_inline_media": false, "status": null, "statuses_count": 3681, "time_zone": "Atlantic Time (Canada)", "url": "http://t.co/oCDcGzSfvA", "utc_offset": -10800, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, "source": "Twitter for Android", "text": "RT @BoldRadius: Exploring the Collections API in Scala\n\nWatch the video: http://t.co/BLqDHutq4F #scala", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "https://t.co/0FKNGVnRwX", "expanded_url": "https://www.danielasfregola.com/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 68, "follow_request_sent": false, "following": false, "followers_count": 129, "friends_count": 93, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "status": null, "statuses_count": 185, "time_zone": null, "url": "https://t.co/0FKNGVnRwX", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Sat Sep 19 07:44:25 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 50, 56 ] }, { "text": "Spark", "indices": [ 61, 67 ] } ], "media": [ ], "url": null, "urls": [ { "url": "http://t.co/DPnc2SvVKm", "expanded_url": "http://bit.ly/1imnufV", "display_url": "bit.ly/1imnufV", "indices": [ 115, 137 ] } ], "user_mentions": [ { "id": 16602164, "id_str": "16602164", "indices": [ 3, 12 ], "name": "Typesafe", "screen_name": "typesafe" }, { "id": 20847695, "id_str": "20847695", "indices": [ 38, 47 ], "name": "aℕdy ℙetrella", "screen_name": "noootsab" } ], "description": null }, "extended_entities": null, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 645141378830307328, "id_str": "645141378830307328", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 27, "retweeted": true, "retweeted_status": { "contributors": [ ], "coordinates": null, "created_at": "Fri Sep 18 11:15:58 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 36, 42 ] }, { "text": "Spark", "indices": [ 47, 53 ] } ], "media": [ ], "url": null, "urls": [ { "url": "http://t.co/DPnc2SvVKm", "expanded_url": "http://bit.ly/1imnufV", "display_url": "bit.ly/1imnufV", "indices": [ 101, 123 ] } ], "user_mentions": [ { "id": 20847695, "id_str": "20847695", "indices": [ 24, 33 ], "name": "aℕdy ℙetrella", "screen_name": "noootsab" } ], "description": null }, "extended_entities": null, "favorite_count": 34, "favorited": false, "filter_level": null, "id": 644832228913119232, "id_str": "644832228913119232", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 27, "retweeted": true, "retweeted_status": null, "source": "Buffer", "text": "We co-wrote a blog with @noootsab: \"#Scala and #Spark Notebook: The Next Gen Data Science Toolkit\" | http://t.co/DPnc2SvVKm", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Sun Oct 05 14:50:41 +0000 2008", "default_profile": false, "default_profile_image": false, "description": "Typesafe Reactive Platform is a production-grade JVM runtime & toolset for building Reactive Systems. Be successful: http://t.co/o1Bt6dQtgH", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/bzGTwCmOGg", "expanded_url": "http://typesafe.com", "display_url": "typesafe.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ { "url": "http://t.co/o1Bt6dQtgH", "expanded_url": "http://www.typesafe.com/company/contact", "display_url": "typesafe.com/company/contact", "indices": [ 117, 139 ] } ] } }, "favourites_count": 876, "follow_request_sent": false, "following": true, "followers_count": 22854, "friends_count": 180, "geo_enabled": false, "has_extended_profile": false, "id": 16602164, "id_str": "16602164", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 838, "location": "", "muting": false, "name": "Typesafe", "notifications": false, "profile_background_color": "53CCEC", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/16602164/1422404674", "profile_image_url": "http://pbs.twimg.com/profile_images/526790424048828416/b9QDtyl7_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/526790424048828416/b9QDtyl7_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "protected": false, "screen_name": "typesafe", "show_all_inline_media": false, "status": null, "statuses_count": 3587, "time_zone": "Pacific Time (US & Canada)", "url": "http://t.co/bzGTwCmOGg", "utc_offset": -25200, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, "source": "Twitter for Android", "text": "RT @typesafe: We co-wrote a blog with @noootsab: \"#Scala and #Spark Notebook: The Next Gen Data Science Toolkit\" | http://t.co/DPnc2SvVKm", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "https://t.co/0FKNGVnRwX", "expanded_url": "https://www.danielasfregola.com/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 68, "follow_request_sent": false, "following": false, "followers_count": 129, "friends_count": 93, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "status": null, "statuses_count": 185, "time_zone": null, "url": "https://t.co/0FKNGVnRwX", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Thu Sep 17 17:19:24 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ ], "url": null, "urls": [ { "url": "http://t.co/2SKu2nNN1X", "expanded_url": "http://hintjens.com/blog:94", "display_url": "hintjens.com/blog:94", "indices": [ 45, 67 ] } ], "user_mentions": [ { "id": 24012073, "id_str": "24012073", "indices": [ 3, 12 ], "name": "Pieter Hintjens", "screen_name": "hintjens" } ], "description": null }, "extended_entities": null, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 644561300547313664, "id_str": "644561300547313664", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 128, "retweeted": true, "retweeted_status": { "contributors": [ ], "coordinates": null, "created_at": "Thu Sep 17 10:45:19 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ ], "media": [ ], "url": null, "urls": [ { "url": "http://t.co/2SKu2nNN1X", "expanded_url": "http://hintjens.com/blog:94", "display_url": "hintjens.com/blog:94", "indices": [ 31, 53 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": null, "favorite_count": 160, "favorited": false, "filter_level": null, "id": 644462128162828289, "id_str": "644462128162828289", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 128, "retweeted": true, "retweeted_status": null, "source": "Twitter Web Client", "text": "Ten rules for good API design: http://t.co/2SKu2nNN1X", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Thu Mar 12 19:20:47 +0000 2009", "default_profile": false, "default_profile_image": false, "description": "All I want to do is make software fun again", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/RcDIMrOuGM", "expanded_url": "http://hintjens.com", "display_url": "hintjens.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 79, "follow_request_sent": false, "following": false, "followers_count": 3770, "friends_count": 341, "geo_enabled": false, "has_extended_profile": false, "id": 24012073, "id_str": "24012073", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 193, "location": "Brussels, Belgium", "muting": false, "name": "Pieter Hintjens", "notifications": false, "profile_background_color": "CCCCFF", "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/718129238/40febb204cde062020c21612fb3f9ec6.png", "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/718129238/40febb204cde062020c21612fb3f9ec6.png", "profile_background_tile": true, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/533539938747179008/BoeAWxjB_normal.jpeg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/533539938747179008/BoeAWxjB_normal.jpeg", "profile_link_color": "009999", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "hintjens", "show_all_inline_media": false, "status": null, "statuses_count": 12407, "time_zone": "Brussels", "url": "http://t.co/RcDIMrOuGM", "utc_offset": 7200, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, "source": "Twitter for Android", "text": "RT @hintjens: Ten rules for good API design: http://t.co/2SKu2nNN1X", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "https://t.co/0FKNGVnRwX", "expanded_url": "https://www.danielasfregola.com/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 68, "follow_request_sent": false, "following": false, "followers_count": 129, "friends_count": 93, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "status": null, "statuses_count": 185, "time_zone": null, "url": "https://t.co/0FKNGVnRwX", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Tue Sep 08 12:11:00 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "python", "indices": [ 83, 90 ] }, { "text": "MongoDB", "indices": [ 91, 99 ] }, { "text": "pymongo", "indices": [ 100, 108 ] }, { "text": "nosql", "indices": [ 109, 115 ] } ], "media": [ ], "url": null, "urls": [ { "url": "http://t.co/FMhTy4u5Ec", "expanded_url": "http://wp.me/p5y8RO-30", "display_url": "wp.me/p5y8RO-30", "indices": [ 60, 82 ] } ], "user_mentions": [ { "id": 19018614, "id_str": "19018614", "indices": [ 3, 18 ], "name": "Marco Bonzanini", "screen_name": "marcobonzanini" } ], "description": null }, "extended_entities": null, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 641222199026798593, "id_str": "641222199026798593", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 1, "retweeted": true, "retweeted_status": { "contributors": [ ], "coordinates": null, "created_at": "Mon Sep 07 17:58:59 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "python", "indices": [ 63, 70 ] }, { "text": "MongoDB", "indices": [ 71, 79 ] }, { "text": "pymongo", "indices": [ 80, 88 ] }, { "text": "nosql", "indices": [ 89, 95 ] } ], "media": [ ], "url": null, "urls": [ { "url": "http://t.co/FMhTy4u5Ec", "expanded_url": "http://wp.me/p5y8RO-30", "display_url": "wp.me/p5y8RO-30", "indices": [ 40, 62 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": null, "favorite_count": 1, "favorited": false, "filter_level": null, "id": 640947384504197121, "id_str": "640947384504197121", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 1, "retweeted": true, "retweeted_status": null, "source": "Twitter Web Client", "text": "Getting Started with MongoDB and Python http://t.co/FMhTy4u5Ec #python #MongoDB #pymongo #nosql", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Thu Jan 15 11:28:04 +0000 2009", "default_profile": false, "default_profile_image": false, "description": "Data Scientist - Information Retrieval, NLP, Text Analytics, Machine Learning, everything Python. PhD from @QMUL", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/34uCLCPVkH", "expanded_url": "http://marcobonzanini.com", "display_url": "marcobonzanini.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 3, "follow_request_sent": false, "following": true, "followers_count": 231, "friends_count": 202, "geo_enabled": false, "has_extended_profile": false, "id": 19018614, "id_str": "19018614", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 33, "location": "London, United Kingdom", "muting": false, "name": "Marco Bonzanini", "notifications": false, "profile_background_color": "709397", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme6/bg.gif", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme6/bg.gif", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/1436932130/marco-ir_normal.jpg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/1436932130/marco-ir_normal.jpg", "profile_link_color": "FF3300", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "marcobonzanini", "show_all_inline_media": false, "status": null, "statuses_count": 165, "time_zone": "London", "url": "http://t.co/34uCLCPVkH", "utc_offset": 3600, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, "source": "Twitter for Android", "text": "RT @marcobonzanini: Getting Started with MongoDB and Python http://t.co/FMhTy4u5Ec #python #MongoDB #pymongo #nosql", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "https://t.co/0FKNGVnRwX", "expanded_url": "https://www.danielasfregola.com/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 68, "follow_request_sent": false, "following": false, "followers_count": 129, "friends_count": 93, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "status": null, "statuses_count": 185, "time_zone": null, "url": "https://t.co/0FKNGVnRwX", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Fri Sep 04 17:36:39 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "Akka", "indices": [ 14, 19 ] } ], "media": [ ], "url": null, "urls": [ { "url": "http://t.co/pJUqUzlRD3", "expanded_url": "http://tmblr.co/ZlHOLw1tXSL_q", "display_url": "tmblr.co/ZlHOLw1tXSL_q", "indices": [ 41, 63 ] } ], "user_mentions": [ { "id": 440686069, "id_str": "440686069", "indices": [ 3, 12 ], "name": "Akka Team", "screen_name": "akkateam" } ], "description": null }, "extended_entities": null, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 639854600724590592, "id_str": "639854600724590592", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 29, "retweeted": true, "retweeted_status": { "contributors": [ ], "coordinates": null, "created_at": "Fri Sep 04 15:08:52 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "Akka", "indices": [ 0, 5 ] } ], "media": [ ], "url": null, "urls": [ { "url": "http://t.co/pJUqUzlRD3", "expanded_url": "http://tmblr.co/ZlHOLw1tXSL_q", "display_url": "tmblr.co/ZlHOLw1tXSL_q", "indices": [ 27, 49 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": null, "favorite_count": 13, "favorited": false, "filter_level": null, "id": 639817408832794624, "id_str": "639817408832794624", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 29, "retweeted": true, "retweeted_status": null, "source": "Tumblr", "text": "#Akka 2.4.0-RC2 Released \u2026 http://t.co/pJUqUzlRD3", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 19 09:01:02 +0000 2011", "default_profile": false, "default_profile_image": false, "description": "Akka Team - News about the Akka project", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/Z56SglxFTj", "expanded_url": "http://akka.io", "display_url": "akka.io", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 26, "follow_request_sent": false, "following": true, "followers_count": 7489, "friends_count": 0, "geo_enabled": false, "has_extended_profile": false, "id": 440686069, "id_str": "440686069", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 288, "location": "", "muting": false, "name": "Akka Team", "notifications": false, "profile_background_color": "000000", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/527005258891792384/bxLhidly_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/527005258891792384/bxLhidly_normal.png", "profile_link_color": "1897C2", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "000000", "profile_text_color": "000000", "profile_use_background_image": false, "protected": false, "screen_name": "akkateam", "show_all_inline_media": false, "status": null, "statuses_count": 1053, "time_zone": null, "url": "http://t.co/Z56SglxFTj", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, "source": "Twitter for Android", "text": "RT @akkateam: #Akka 2.4.0-RC2 Released \u2026 http://t.co/pJUqUzlRD3", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "https://t.co/0FKNGVnRwX", "expanded_url": "https://www.danielasfregola.com/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 68, "follow_request_sent": false, "following": false, "followers_count": 129, "friends_count": 93, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "status": null, "statuses_count": 185, "time_zone": null, "url": "https://t.co/0FKNGVnRwX", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Tue Sep 01 06:47:36 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 47, 53 ] }, { "text": "docker", "indices": [ 76, 83 ] } ], "media": [ ], "url": null, "urls": [ { "url": "http://t.co/BBOiKtE3Ji", "expanded_url": "http://velvia.github.io/Docker-Scala-Sbt/", "display_url": "velvia.github.io/Docker-Scala-S\u2026", "indices": [ 85, 107 ] } ], "user_mentions": [ { "id": 824776921, "id_str": "824776921", "indices": [ 3, 13 ], "name": "Evan Chan", "screen_name": "Evanfchan" } ], "description": null }, "extended_entities": null, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 638604100184223745, "id_str": "638604100184223745", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 17, "retweeted": true, "retweeted_status": { "contributors": [ ], "coordinates": null, "created_at": "Tue Sep 01 05:22:28 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 32, 38 ] }, { "text": "docker", "indices": [ 61, 68 ] } ], "media": [ ], "url": null, "urls": [ { "url": "http://t.co/BBOiKtE3Ji", "expanded_url": "http://velvia.github.io/Docker-Scala-Sbt/", "display_url": "velvia.github.io/Docker-Scala-S\u2026", "indices": [ 70, 92 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": null, "favorite_count": 27, "favorited": false, "filter_level": null, "id": 638582675171741696, "id_str": "638582675171741696", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 17, "retweeted": true, "retweeted_status": null, "source": "Twitter Web Client", "text": "New blog post: Dockerizing your #Scala apps with sbt-docker #docker http://t.co/BBOiKtE3Ji", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Sat Sep 15 07:43:47 +0000 2012", "default_profile": true, "default_profile_image": false, "description": "Big data & distributed systems hacker. datastax #cassandra MVP. \nfather, follower of Jesus, swing dancer, ramen-fan, big #athletics fan", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/Ru1nyo5KJW", "expanded_url": "http://velvia.github.io", "display_url": "velvia.github.io", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 36, "follow_request_sent": false, "following": false, "followers_count": 780, "friends_count": 175, "geo_enabled": false, "has_extended_profile": false, "id": 824776921, "id_str": "824776921", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 80, "location": "USA", "muting": false, "name": "Evan Chan", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/824776921/1429427764", "profile_image_url": "http://pbs.twimg.com/profile_images/538571806265708544/5A_SJG8a_normal.jpeg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/538571806265708544/5A_SJG8a_normal.jpeg", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "Evanfchan", "show_all_inline_media": false, "status": null, "statuses_count": 5181, "time_zone": "Arizona", "url": "http://t.co/Ru1nyo5KJW", "utc_offset": -25200, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, "source": "Twitter for Android", "text": "RT @Evanfchan: New blog post: Dockerizing your #Scala apps with sbt-docker #docker http://t.co/BBOiKtE3Ji", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "https://t.co/0FKNGVnRwX", "expanded_url": "https://www.danielasfregola.com/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 68, "follow_request_sent": false, "following": false, "followers_count": 129, "friends_count": 93, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "status": null, "statuses_count": 185, "time_zone": null, "url": "https://t.co/0FKNGVnRwX", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Tue Sep 01 06:17:21 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "TextAnalytics", "indices": [ 86, 100 ] }, { "text": "TextMining", "indices": [ 101, 112 ] }, { "text": "NLP", "indices": [ 113, 117 ] } ], "media": [ ], "url": null, "urls": [ { "url": "http://t.co/6zgINQjPUH", "expanded_url": "http://wp.me/p5y8RO-2V", "display_url": "wp.me/p5y8RO-2V", "indices": [ 63, 85 ] } ], "user_mentions": [ { "id": 19018614, "id_str": "19018614", "indices": [ 3, 18 ], "name": "Marco Bonzanini", "screen_name": "marcobonzanini" } ], "description": null }, "extended_entities": null, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 638596486834601985, "id_str": "638596486834601985", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 3, "retweeted": true, "retweeted_status": { "contributors": [ ], "coordinates": null, "created_at": "Mon Aug 31 17:53:41 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "TextAnalytics", "indices": [ 66, 80 ] }, { "text": "TextMining", "indices": [ 81, 92 ] }, { "text": "NLP", "indices": [ 93, 97 ] } ], "media": [ ], "url": null, "urls": [ { "url": "http://t.co/6zgINQjPUH", "expanded_url": "http://wp.me/p5y8RO-2V", "display_url": "wp.me/p5y8RO-2V", "indices": [ 43, 65 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": null, "favorite_count": 4, "favorited": false, "filter_level": null, "id": 638409334519676930, "id_str": "638409334519676930", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 3, "retweeted": true, "retweeted_status": null, "source": "Twitter Web Client", "text": "A Brief Introduction to Text Summarisation http://t.co/6zgINQjPUH #TextAnalytics #TextMining #NLP", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Thu Jan 15 11:28:04 +0000 2009", "default_profile": false, "default_profile_image": false, "description": "Data Scientist - Information Retrieval, NLP, Text Analytics, Machine Learning, everything Python. PhD from @QMUL", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/34uCLCPVkH", "expanded_url": "http://marcobonzanini.com", "display_url": "marcobonzanini.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 3, "follow_request_sent": false, "following": true, "followers_count": 231, "friends_count": 202, "geo_enabled": false, "has_extended_profile": false, "id": 19018614, "id_str": "19018614", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 33, "location": "London, United Kingdom", "muting": false, "name": "Marco Bonzanini", "notifications": false, "profile_background_color": "709397", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme6/bg.gif", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme6/bg.gif", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/1436932130/marco-ir_normal.jpg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/1436932130/marco-ir_normal.jpg", "profile_link_color": "FF3300", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "marcobonzanini", "show_all_inline_media": false, "status": null, "statuses_count": 165, "time_zone": "London", "url": "http://t.co/34uCLCPVkH", "utc_offset": 3600, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, "source": "Twitter for Android", "text": "RT @marcobonzanini: A Brief Introduction to Text Summarisation http://t.co/6zgINQjPUH #TextAnalytics #TextMining #NLP", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "https://t.co/0FKNGVnRwX", "expanded_url": "https://www.danielasfregola.com/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 68, "follow_request_sent": false, "following": false, "followers_count": 129, "friends_count": 93, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "status": null, "statuses_count": 185, "time_zone": null, "url": "https://t.co/0FKNGVnRwX", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Fri Aug 21 22:58:14 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "Reactive", "indices": [ 44, 53 ] }, { "text": "Typesafe", "indices": [ 59, 68 ] }, { "text": "Scala", "indices": [ 73, 79 ] }, { "text": "Akka", "indices": [ 80, 85 ] }, { "text": "Play", "indices": [ 86, 91 ] }, { "text": "Spark", "indices": [ 92, 98 ] } ], "media": [ { "display_url": "pic.twitter.com/6OOYZfryYU", "expanded_url": "http://twitter.com/typesafe/status/634312275638267904/photo/1", "id": 634312275592151041, "id_str": "634312275592151041", "indices": [ 124, 140 ], "media_url": "http://pbs.twimg.com/media/CM2Hp2dXAAExnLF.png", "media_url_https": "https://pbs.twimg.com/media/CM2Hp2dXAAExnLF.png", "sizes": { "medium": { "h": 161, "resize": "fit", "w": 600 }, "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 91, "resize": "fit", "w": 340 }, "large": { "h": 215, "resize": "fit", "w": 800 } }, "source_status_id": 634312275638267904, "source_status_id_str": "634312275638267904", "type": "photo", "url": "http://t.co/6OOYZfryYU" } ], "url": null, "urls": [ { "url": "http://t.co/yUPgIhxD93", "expanded_url": "http://bit.ly/1TV6fnc", "display_url": "bit.ly/1TV6fnc", "indices": [ 101, 123 ] } ], "user_mentions": [ { "id": 16602164, "id_str": "16602164", "indices": [ 3, 12 ], "name": "Typesafe", "screen_name": "typesafe" } ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/6OOYZfryYU", "expanded_url": "http://twitter.com/typesafe/status/634312275638267904/photo/1", "id": 634312275592151041, "id_str": "634312275592151041", "indices": [ 124, 140 ], "media_url": "http://pbs.twimg.com/media/CM2Hp2dXAAExnLF.png", "media_url_https": "https://pbs.twimg.com/media/CM2Hp2dXAAExnLF.png", "sizes": { "medium": { "h": 161, "resize": "fit", "w": 600 }, "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 91, "resize": "fit", "w": 340 }, "large": { "h": 215, "resize": "fit", "w": 800 } }, "source_status_id": 634312275638267904, "source_status_id_str": "634312275638267904", "type": "photo", "url": "http://t.co/6OOYZfryYU", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 634862102180700160, "id_str": "634862102180700160", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 34, "retweeted": true, "retweeted_status": { "contributors": [ ], "coordinates": null, "created_at": "Thu Aug 20 10:33:26 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "Reactive", "indices": [ 30, 39 ] }, { "text": "Typesafe", "indices": [ 45, 54 ] }, { "text": "Scala", "indices": [ 59, 65 ] }, { "text": "Akka", "indices": [ 66, 71 ] }, { "text": "Play", "indices": [ 72, 77 ] }, { "text": "Spark", "indices": [ 78, 84 ] } ], "media": [ { "display_url": "pic.twitter.com/6OOYZfryYU", "expanded_url": "http://twitter.com/typesafe/status/634312275638267904/photo/1", "id": 634312275592151041, "id_str": "634312275592151041", "indices": [ 110, 132 ], "media_url": "http://pbs.twimg.com/media/CM2Hp2dXAAExnLF.png", "media_url_https": "https://pbs.twimg.com/media/CM2Hp2dXAAExnLF.png", "sizes": { "medium": { "h": 161, "resize": "fit", "w": 600 }, "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 91, "resize": "fit", "w": 340 }, "large": { "h": 215, "resize": "fit", "w": 800 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/6OOYZfryYU" } ], "url": null, "urls": [ { "url": "http://t.co/yUPgIhxD93", "expanded_url": "http://bit.ly/1TV6fnc", "display_url": "bit.ly/1TV6fnc", "indices": [ 87, 109 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": { "hashtags": [ ], "media": [ { "display_url": "pic.twitter.com/6OOYZfryYU", "expanded_url": "http://twitter.com/typesafe/status/634312275638267904/photo/1", "id": 634312275592151041, "id_str": "634312275592151041", "indices": [ 110, 132 ], "media_url": "http://pbs.twimg.com/media/CM2Hp2dXAAExnLF.png", "media_url_https": "https://pbs.twimg.com/media/CM2Hp2dXAAExnLF.png", "sizes": { "medium": { "h": 161, "resize": "fit", "w": 600 }, "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 91, "resize": "fit", "w": 340 }, "large": { "h": 215, "resize": "fit", "w": 800 } }, "source_status_id": null, "source_status_id_str": null, "type": "photo", "url": "http://t.co/6OOYZfryYU", "video_info": null } ], "url": null, "urls": [ ], "user_mentions": [ ], "description": null }, "favorite_count": 31, "favorited": false, "filter_level": null, "id": 634312275638267904, "id_str": "634312275638267904", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 34, "retweeted": true, "retweeted_status": null, "source": "Buffer", "text": "How Italy's largest bank went #Reactive with #Typesafe and #Scala #Akka #Play #Spark | http://t.co/yUPgIhxD93 http://t.co/6OOYZfryYU", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Sun Oct 05 14:50:41 +0000 2008", "default_profile": false, "default_profile_image": false, "description": "Typesafe Reactive Platform is a production-grade JVM runtime & toolset for building Reactive Systems. Be successful: http://t.co/o1Bt6dQtgH", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/bzGTwCmOGg", "expanded_url": "http://typesafe.com", "display_url": "typesafe.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ { "url": "http://t.co/o1Bt6dQtgH", "expanded_url": "http://www.typesafe.com/company/contact", "display_url": "typesafe.com/company/contact", "indices": [ 117, 139 ] } ] } }, "favourites_count": 876, "follow_request_sent": false, "following": true, "followers_count": 22854, "friends_count": 180, "geo_enabled": false, "has_extended_profile": false, "id": 16602164, "id_str": "16602164", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 838, "location": "", "muting": false, "name": "Typesafe", "notifications": false, "profile_background_color": "53CCEC", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/16602164/1422404674", "profile_image_url": "http://pbs.twimg.com/profile_images/526790424048828416/b9QDtyl7_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/526790424048828416/b9QDtyl7_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "protected": false, "screen_name": "typesafe", "show_all_inline_media": false, "status": null, "statuses_count": 3587, "time_zone": "Pacific Time (US & Canada)", "url": "http://t.co/bzGTwCmOGg", "utc_offset": -25200, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, "source": "Twitter for Android", "text": "RT @typesafe: How Italy's largest bank went #Reactive with #Typesafe and #Scala #Akka #Play #Spark | http://t.co/yUPgIhxD93 http://t.co/6OO\u2026", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "https://t.co/0FKNGVnRwX", "expanded_url": "https://www.danielasfregola.com/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 68, "follow_request_sent": false, "following": false, "followers_count": 129, "friends_count": 93, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "status": null, "statuses_count": 185, "time_zone": null, "url": "https://t.co/0FKNGVnRwX", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, { "contributors": [ ], "coordinates": null, "created_at": "Wed Aug 19 06:34:17 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "Elasticsearch", "indices": [ 63, 77 ] }, { "text": "AngularJS", "indices": [ 79, 89 ] }, { "text": "Python", "indices": [ 94, 101 ] }, { "text": "Flask", "indices": [ 102, 108 ] } ], "media": [ ], "url": null, "urls": [ { "url": "http://t.co/IoLYJHHcAO", "expanded_url": "http://wp.me/p5y8RO-2Q", "display_url": "wp.me/p5y8RO-2Q", "indices": [ 139, 140 ] } ], "user_mentions": [ { "id": 19018614, "id_str": "19018614", "indices": [ 3, 18 ], "name": "Marco Bonzanini", "screen_name": "marcobonzanini" } ], "description": null }, "extended_entities": null, "favorite_count": 0, "favorited": false, "filter_level": null, "id": 633889705755586560, "id_str": "633889705755586560", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 7, "retweeted": true, "retweeted_status": { "contributors": [ ], "coordinates": null, "created_at": "Tue Aug 18 18:53:52 +0000 2015", "current_user_retweet": null, "entities": { "hashtags": [ { "text": "Elasticsearch", "indices": [ 43, 57 ] }, { "text": "AngularJS", "indices": [ 59, 69 ] }, { "text": "Python", "indices": [ 74, 81 ] }, { "text": "Flask", "indices": [ 82, 88 ] } ], "media": [ ], "url": null, "urls": [ { "url": "http://t.co/IoLYJHHcAO", "expanded_url": "http://wp.me/p5y8RO-2Q", "display_url": "wp.me/p5y8RO-2Q", "indices": [ 108, 130 ] } ], "user_mentions": [ ], "description": null }, "extended_entities": null, "favorite_count": 12, "favorited": false, "filter_level": null, "id": 633713439085621248, "id_str": "633713439085621248", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "is_quote_status": false, "lang": "en", "place": null, "possibly_sensitive": false, "quoted_status_id": null, "quoted_status_id_str": null, "quoted_status": null, "scopes": { }, "retweet_count": 7, "retweeted": true, "retweeted_status": null, "source": "Twitter Web Client", "text": "Building a search-as-you-type feature with #Elasticsearch, #AngularJS and #Python #Flask (Part 2: front-en\u2026 http://t.co/IoLYJHHcAO", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Thu Jan 15 11:28:04 +0000 2009", "default_profile": false, "default_profile_image": false, "description": "Data Scientist - Information Retrieval, NLP, Text Analytics, Machine Learning, everything Python. PhD from @QMUL", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "http://t.co/34uCLCPVkH", "expanded_url": "http://marcobonzanini.com", "display_url": "marcobonzanini.com", "indices": [ 0, 22 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 3, "follow_request_sent": false, "following": true, "followers_count": 231, "friends_count": 202, "geo_enabled": false, "has_extended_profile": false, "id": 19018614, "id_str": "19018614", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 33, "location": "London, United Kingdom", "muting": false, "name": "Marco Bonzanini", "notifications": false, "profile_background_color": "709397", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme6/bg.gif", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme6/bg.gif", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/1436932130/marco-ir_normal.jpg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/1436932130/marco-ir_normal.jpg", "profile_link_color": "FF3300", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "marcobonzanini", "show_all_inline_media": false, "status": null, "statuses_count": 165, "time_zone": "London", "url": "http://t.co/34uCLCPVkH", "utc_offset": 3600, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null }, "source": "Twitter for Android", "text": "RT @marcobonzanini: Building a search-as-you-type feature with #Elasticsearch, #AngularJS and #Python #Flask (Part 2: front-en\u2026 http://t.co\u2026", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "email": null, "entities": { "hashtags": [ ], "media": [ ], "url": { "urls": [ { "url": "https://t.co/0FKNGVnRwX", "expanded_url": "https://www.danielasfregola.com/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "urls": [ ], "user_mentions": [ ], "description": { "urls": [ ] } }, "favourites_count": 68, "follow_request_sent": false, "following": false, "followers_count": 129, "friends_count": 93, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "status": null, "statuses_count": 185, "time_zone": null, "url": "https://t.co/0FKNGVnRwX", "utc_offset": null, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, "withheld_copyright": false, "withheld_in_countries": [ ], "withheld_scope": null, "metadata": null } ] ================================================ FILE: src/test/resources/fixtures/rest/suggestions/categories.json ================================================ [ { "size": 15, "slug": "sports", "name": "Sports" }, { "size": 13, "slug": "television", "name": "Television" }, { "size": 15, "slug": "music", "name": "Music" }, { "size": 15, "slug": "fashion", "name": "Fashion" }, { "size": 14, "slug": "entertainment", "name": "Entertainment" }, { "size": 12, "slug": "books", "name": "Books" }, { "size": 15, "slug": "gaming", "name": "Gaming" }, { "size": 9, "slug": "family", "name": "Family" }, { "size": 15, "slug": "food-drink", "name": "Food & Drink" }, { "size": 15, "slug": "funny", "name": "Funny" }, { "size": 10, "slug": "business", "name": "Business" }, { "size": 14, "slug": "government", "name": "Government" }, { "size": 18, "slug": "news", "name": "News" } ] ================================================ FILE: src/test/resources/fixtures/rest/suggestions/slug_suggestions.json ================================================ { "name": "Twitter", "slug": "twitter", "size": 20, "users": [ { "blocked_by": false, "blocking": false, "contributors_enabled": true, "created_at": "Mon Oct 31 23:10:57 +0000 2011", "default_profile": true, "default_profile_image": false, "description": "Community-konto för Twitter i Sverige. Vi håller er uppdaterade kring vad som händer på Twitter i Sverige.", "email": null, "entities": null, "favourites_count": 0, "follow_request_sent": false, "following": false, "followers_count": 55446, "friends_count": 260, "geo_enabled": false, "has_extended_profile": false, "id": 402357141, "id_str": "402357141", "is_translation_enabled": false, "is_translator": false, "lang": "sv", "listed_count": 43, "location": "Sweden", "muting": false, "name": "Twitter Sverige", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://a0.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://si0.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://a0.twimg.com/profile_images/2284174853/63g4ld4sm6yh4sssy7wy_normal.png", "profile_image_url_https": "https://si0.twimg.com/profile_images/2284174853/63g4ld4sm6yh4sssy7wy_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "twitter_se", "show_all_inline_media": false, "status": null, "statuses_count": 62, "time_zone": "Stockholm", "url": "https://twitter.com/about/translation", "utc_offset": 3600, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, { "blocked_by": false, "blocking": false, "contributors_enabled": true, "created_at": "Mon Oct 31 23:05:34 +0000 2011", "default_profile": true, "default_profile_image": false, "description": "Twitterin suomalainen yhteisötili. Ylläpitäjinä käännösmoderaattorit @Zedinc, @SuihinOkko, @Delzun ja @DiamonDie.", "email": null, "entities": null, "favourites_count": 5, "follow_request_sent": false, "following": false, "followers_count": 64440, "friends_count": 31, "geo_enabled": false, "has_extended_profile": false, "id": 402354593, "id_str": "402354593", "is_translation_enabled": false, "is_translator": false, "lang": "fi", "listed_count": 49, "location": "Finland", "muting": false, "name": "Twitter Suomi", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://a0.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://si0.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://a0.twimg.com/profile_images/2284174783/cwp44h4tg1mkl90cta0p_normal.png", "profile_image_url_https": "https://si0.twimg.com/profile_images/2284174783/cwp44h4tg1mkl90cta0p_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "twitter_fi", "show_all_inline_media": false, "status": null, "statuses_count": 83, "time_zone": "Helsinki", "url": "https://twitter.com/about/translation", "utc_offset": 7200, "verified": false, "withheld_in_countries": null, "withheld_scope": null }, { "blocked_by": false, "blocking": false, "contributors_enabled": true, "created_at": "Sat Dec 04 23:27:01 +0000 2010", "default_profile": false, "default_profile_image": false, "description": "Updates from the Twitter Government & Politics team, tracking creative & effective uses of Twitter for civic engagement. RTs & examples≠political endorsements.", "email": null, "entities": null, "favourites_count": 6, "follow_request_sent": false, "following": true, "followers_count": 149418, "friends_count": 0, "geo_enabled": true, "has_extended_profile": false, "id": 222953824, "id_str": "222953824", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 888, "location": "Washington, DC", "muting": false, "name": "Twitter Government", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://a0.twimg.com/profile_background_images/378138859/townhallbg.jpg", "profile_background_image_url_https": "https://si0.twimg.com/profile_background_images/378138859/townhallbg.jpg", "profile_background_tile": false, "profile_banner_url": null, "profile_image_url": "http://a0.twimg.com/profile_images/2284291316/xu1u3i11ugj03en53ujr_normal.png", "profile_image_url_https": "https://si0.twimg.com/profile_images/2284291316/xu1u3i11ugj03en53ujr_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "gov", "show_all_inline_media": false, "status": null, "statuses_count": 338, "time_zone": "Eastern Time (US & Canada)", "url": "http://twitter.com", "utc_offset": -18000, "verified": true, "withheld_in_countries": null, "withheld_scope": null } ] } ================================================ FILE: src/test/resources/fixtures/rest/suggestions/suggestions_members.json ================================================ [ { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Sat May 15 12:28:50 +0100 2010", "default_profile": false, "default_profile_image": false, "description": "", "favourites_count": 2, "follow_request_sent": false, "following": false, "followers_count": 459357, "friends_count": 1670, "geo_enabled": false, "has_extended_profile": false, "id": 144130505, "id_str": "144130505", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 1167, "location": "", "muting": false, "name": "Total Frat Move", "notifications": false, "profile_background_color": "F2E8BA", "profile_background_image_url": "http://a0.twimg.com/profile_background_images/157156573/sailboat-background-02.png", "profile_background_image_url_https": "https://si0.twimg.com/profile_background_images/157156573/sailboat-background-02.png", "profile_background_tile": true, "profile_image_url": "http://a0.twimg.com/profile_images/1678357868/tfm-social-icon_normal.png", "profile_image_url_https": "https://si0.twimg.com/profile_images/1678357868/tfm-social-icon_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "totalfratmove", "show_all_inline_media": true, "status": { "contributors": [], "created_at": "Fri Aug 24 20:05:26 +0100 2012", "favorite_count": 0, "favorited": false, "id": 239075966431932418, "id_str": "239075966431932418", "is_quote_status": false, "possibly_sensitive": false, "scopes": { }, "retweet_count": 15, "retweeted": false, "retweeted_status": { "contributors": [], "created_at": "Fri Aug 24 20:05:06 +0100 2012", "favorite_count": 0, "favorited": false, "id": 239075883053367297, "id_str": "239075883053367297", "is_quote_status": false, "possibly_sensitive": false, "scopes": { }, "retweet_count": 15, "retweeted": false, "source": "HootSuite", "text": "You don't want to miss this week's Fail Friday. It includes a picture of a Pike in a porno: http://t.co/TypZqAe6", "truncated": false, "withheld_copyright": false, "withheld_in_countries": [] }, "source": "HootSuite", "text": "RT @TFMintern: You don't want to miss this week's Fail Friday. It includes a picture of a Pike in a porno: http://t.co/TypZqAe6", "truncated": false, "withheld_copyright": false, "withheld_in_countries": [] }, "statuses_count": 7065, "time_zone": "Central Time (US & Canada)", "url": "http://totalfratmove.com", "utc_offset": -21600, "verified": true } ] ================================================ FILE: src/test/resources/fixtures/rest/trends/available_locations.json ================================================ [ { "country": "", "name": "Worldwide", "parentid": 0, "placeType": { "code": "19", "name": "Supername" }, "url": "http://where.yahooapis.com/v1/place/1", "woeid": 1 }, { "country": "Canada", "countryCode": "CA", "name": "Winnipeg", "parentid": 23424775, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2972", "woeid": 2972 }, { "country": "Canada", "countryCode": "CA", "name": "Ottawa", "parentid": 23424775, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/3369", "woeid": 3369 }, { "country": "Canada", "countryCode": "CA", "name": "Quebec", "parentid": 23424775, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/3444", "woeid": 3444 }, { "country": "Canada", "countryCode": "CA", "name": "Montreal", "parentid": 23424775, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/3534", "woeid": 3534 }, { "country": "Canada", "countryCode": "CA", "name": "Toronto", "parentid": 23424775, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/4118", "woeid": 4118 }, { "country": "Canada", "countryCode": "CA", "name": "Edmonton", "parentid": 23424775, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/8676", "woeid": 8676 }, { "country": "Canada", "countryCode": "CA", "name": "Calgary", "parentid": 23424775, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/8775", "woeid": 8775 }, { "country": "Canada", "countryCode": "CA", "name": "Vancouver", "parentid": 23424775, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/9807", "woeid": 9807 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Birmingham", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/12723", "woeid": 12723 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Blackpool", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/12903", "woeid": 12903 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Bournemouth", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/13383", "woeid": 13383 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Brighton", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/13911", "woeid": 13911 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Bristol", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/13963", "woeid": 13963 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Cardiff", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/15127", "woeid": 15127 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Coventry", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/17044", "woeid": 17044 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Derby", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/18114", "woeid": 18114 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Edinburgh", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/19344", "woeid": 19344 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Glasgow", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/21125", "woeid": 21125 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Hull", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/25211", "woeid": 25211 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Leeds", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/26042", "woeid": 26042 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Leicester", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/26062", "woeid": 26062 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Liverpool", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/26734", "woeid": 26734 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Manchester", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/28218", "woeid": 28218 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Middlesbrough", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/28869", "woeid": 28869 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Newcastle", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/30079", "woeid": 30079 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Nottingham", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/30720", "woeid": 30720 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Plymouth", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/32185", "woeid": 32185 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Portsmouth", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/32452", "woeid": 32452 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Preston", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/32566", "woeid": 32566 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Sheffield", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/34503", "woeid": 34503 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Stoke-on-Trent", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/36240", "woeid": 36240 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Swansea", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/36758", "woeid": 36758 }, { "country": "United Kingdom", "countryCode": "GB", "name": "London", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/44418", "woeid": 44418 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Belfast", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/44544", "woeid": 44544 }, { "country": "Dominican Republic", "countryCode": "DO", "name": "Santo Domingo", "parentid": 23424800, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/76456", "woeid": 76456 }, { "country": "Guatemala", "countryCode": "GT", "name": "Guatemala City", "parentid": 23424834, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/83123", "woeid": 83123 }, { "country": "Mexico", "countryCode": "MX", "name": "Acapulco", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/110978", "woeid": 110978 }, { "country": "Mexico", "countryCode": "MX", "name": "Aguascalientes", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/111579", "woeid": 111579 }, { "country": "Mexico", "countryCode": "MX", "name": "Chihuahua", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/115958", "woeid": 115958 }, { "country": "Mexico", "countryCode": "MX", "name": "Mexico City", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/116545", "woeid": 116545 }, { "country": "Mexico", "countryCode": "MX", "name": "Ciudad Juarez", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/116556", "woeid": 116556 }, { "country": "Mexico", "countryCode": "MX", "name": "Nezahualcóyotl", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/116564", "woeid": 116564 }, { "country": "Mexico", "countryCode": "MX", "name": "Culiacán", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/117994", "woeid": 117994 }, { "country": "Mexico", "countryCode": "MX", "name": "Ecatepec de Morelos", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/118466", "woeid": 118466 }, { "country": "Mexico", "countryCode": "MX", "name": "Guadalajara", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/124162", "woeid": 124162 }, { "country": "Mexico", "countryCode": "MX", "name": "Hermosillo", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/124785", "woeid": 124785 }, { "country": "Mexico", "countryCode": "MX", "name": "León", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/131068", "woeid": 131068 }, { "country": "Mexico", "countryCode": "MX", "name": "Mérida", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/133327", "woeid": 133327 }, { "country": "Mexico", "countryCode": "MX", "name": "Mexicali", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/133475", "woeid": 133475 }, { "country": "Mexico", "countryCode": "MX", "name": "Monterrey", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/134047", "woeid": 134047 }, { "country": "Mexico", "countryCode": "MX", "name": "Morelia", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/134091", "woeid": 134091 }, { "country": "Mexico", "countryCode": "MX", "name": "Naucalpan de Juárez", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/134395", "woeid": 134395 }, { "country": "Mexico", "countryCode": "MX", "name": "Puebla", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/137612", "woeid": 137612 }, { "country": "Mexico", "countryCode": "MX", "name": "Querétaro", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/138045", "woeid": 138045 }, { "country": "Mexico", "countryCode": "MX", "name": "Saltillo", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/141272", "woeid": 141272 }, { "country": "Mexico", "countryCode": "MX", "name": "San Luis Potosí", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/144265", "woeid": 144265 }, { "country": "Mexico", "countryCode": "MX", "name": "Tijuana", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/149361", "woeid": 149361 }, { "country": "Mexico", "countryCode": "MX", "name": "Toluca", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/149769", "woeid": 149769 }, { "country": "Mexico", "countryCode": "MX", "name": "Zapopan", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/151582", "woeid": 151582 }, { "country": "Argentina", "countryCode": "AR", "name": "Mendoza", "parentid": 23424747, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/332471", "woeid": 332471 }, { "country": "Chile", "countryCode": "CL", "name": "Santiago", "parentid": 23424782, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/349859", "woeid": 349859 }, { "country": "Chile", "countryCode": "CL", "name": "Concepcion", "parentid": 23424782, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/349860", "woeid": 349860 }, { "country": "Chile", "countryCode": "CL", "name": "Valparaiso", "parentid": 23424782, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/349861", "woeid": 349861 }, { "country": "Colombia", "countryCode": "CO", "name": "Bogotá", "parentid": 23424787, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/368148", "woeid": 368148 }, { "country": "Colombia", "countryCode": "CO", "name": "Cali", "parentid": 23424787, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/368149", "woeid": 368149 }, { "country": "Colombia", "countryCode": "CO", "name": "Medellín", "parentid": 23424787, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/368150", "woeid": 368150 }, { "country": "Colombia", "countryCode": "CO", "name": "Barranquilla", "parentid": 23424787, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/368151", "woeid": 368151 }, { "country": "Ecuador", "countryCode": "EC", "name": "Quito", "parentid": 23424801, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/375732", "woeid": 375732 }, { "country": "Ecuador", "countryCode": "EC", "name": "Guayaquil", "parentid": 23424801, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/375733", "woeid": 375733 }, { "country": "Venezuela", "countryCode": "VE", "name": "Caracas", "parentid": 23424982, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/395269", "woeid": 395269 }, { "country": "Venezuela", "countryCode": "VE", "name": "Maracaibo", "parentid": 23424982, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/395270", "woeid": 395270 }, { "country": "Venezuela", "countryCode": "VE", "name": "Maracay", "parentid": 23424982, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/395271", "woeid": 395271 }, { "country": "Venezuela", "countryCode": "VE", "name": "Valencia", "parentid": 23424982, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/395272", "woeid": 395272 }, { "country": "Venezuela", "countryCode": "VE", "name": "Barcelona", "parentid": 23424982, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/395273", "woeid": 395273 }, { "country": "Venezuela", "countryCode": "VE", "name": "Ciudad Guayana", "parentid": 23424982, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/395275", "woeid": 395275 }, { "country": "Venezuela", "countryCode": "VE", "name": "Turmero", "parentid": 23424982, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/395277", "woeid": 395277 }, { "country": "Peru", "countryCode": "PE", "name": "Lima", "parentid": 23424919, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/418440", "woeid": 418440 }, { "country": "Brazil", "countryCode": "BR", "name": "Brasília", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455819", "woeid": 455819 }, { "country": "Brazil", "countryCode": "BR", "name": "Belém", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455820", "woeid": 455820 }, { "country": "Brazil", "countryCode": "BR", "name": "Belo Horizonte", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455821", "woeid": 455821 }, { "country": "Brazil", "countryCode": "BR", "name": "Curitiba", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455822", "woeid": 455822 }, { "country": "Brazil", "countryCode": "BR", "name": "Porto Alegre", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455823", "woeid": 455823 }, { "country": "Brazil", "countryCode": "BR", "name": "Recife", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455824", "woeid": 455824 }, { "country": "Brazil", "countryCode": "BR", "name": "Rio de Janeiro", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455825", "woeid": 455825 }, { "country": "Brazil", "countryCode": "BR", "name": "Salvador", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455826", "woeid": 455826 }, { "country": "Brazil", "countryCode": "BR", "name": "São Paulo", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455827", "woeid": 455827 }, { "country": "Brazil", "countryCode": "BR", "name": "Campinas", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455828", "woeid": 455828 }, { "country": "Brazil", "countryCode": "BR", "name": "Fortaleza", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455830", "woeid": 455830 }, { "country": "Brazil", "countryCode": "BR", "name": "Goiânia", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455831", "woeid": 455831 }, { "country": "Brazil", "countryCode": "BR", "name": "Manaus", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455833", "woeid": 455833 }, { "country": "Brazil", "countryCode": "BR", "name": "São Luís", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455834", "woeid": 455834 }, { "country": "Brazil", "countryCode": "BR", "name": "Guarulhos", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455867", "woeid": 455867 }, { "country": "Argentina", "countryCode": "AR", "name": "Córdoba", "parentid": 23424747, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/466861", "woeid": 466861 }, { "country": "Argentina", "countryCode": "AR", "name": "Rosario", "parentid": 23424747, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/466862", "woeid": 466862 }, { "country": "Venezuela", "countryCode": "VE", "name": "Barquisimeto", "parentid": 23424982, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/468382", "woeid": 468382 }, { "country": "Venezuela", "countryCode": "VE", "name": "Maturín", "parentid": 23424982, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/468384", "woeid": 468384 }, { "country": "Argentina", "countryCode": "AR", "name": "Buenos Aires", "parentid": 23424747, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/468739", "woeid": 468739 }, { "country": "Poland", "countryCode": "PL", "name": "Gdańsk", "parentid": 23424923, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/493417", "woeid": 493417 }, { "country": "Poland", "countryCode": "PL", "name": "Kraków", "parentid": 23424923, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/502075", "woeid": 502075 }, { "country": "Poland", "countryCode": "PL", "name": "Lodz", "parentid": 23424923, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/505120", "woeid": 505120 }, { "country": "Poland", "countryCode": "PL", "name": "Poznań", "parentid": 23424923, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/514048", "woeid": 514048 }, { "country": "Poland", "countryCode": "PL", "name": "Warsaw", "parentid": 23424923, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/523920", "woeid": 523920 }, { "country": "Poland", "countryCode": "PL", "name": "Wroclaw", "parentid": 23424923, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/526363", "woeid": 526363 }, { "country": "Austria", "countryCode": "AT", "name": "Vienna", "parentid": 23424750, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/551801", "woeid": 551801 }, { "country": "Ireland", "countryCode": "IE", "name": "Cork", "parentid": 23424803, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/560472", "woeid": 560472 }, { "country": "Ireland", "countryCode": "IE", "name": "Dublin", "parentid": 23424803, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/560743", "woeid": 560743 }, { "country": "Ireland", "countryCode": "IE", "name": "Galway", "parentid": 23424803, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/560912", "woeid": 560912 }, { "country": "France", "countryCode": "FR", "name": "Bordeaux", "parentid": 23424819, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/580778", "woeid": 580778 }, { "country": "France", "countryCode": "FR", "name": "Lille", "parentid": 23424819, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/608105", "woeid": 608105 }, { "country": "France", "countryCode": "FR", "name": "Lyon", "parentid": 23424819, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/609125", "woeid": 609125 }, { "country": "France", "countryCode": "FR", "name": "Marseille", "parentid": 23424819, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/610264", "woeid": 610264 }, { "country": "France", "countryCode": "FR", "name": "Montpellier", "parentid": 23424819, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/612977", "woeid": 612977 }, { "country": "France", "countryCode": "FR", "name": "Nantes", "parentid": 23424819, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/613858", "woeid": 613858 }, { "country": "France", "countryCode": "FR", "name": "Paris", "parentid": 23424819, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/615702", "woeid": 615702 }, { "country": "France", "countryCode": "FR", "name": "Rennes", "parentid": 23424819, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/619163", "woeid": 619163 }, { "country": "France", "countryCode": "FR", "name": "Strasbourg", "parentid": 23424819, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/627791", "woeid": 627791 }, { "country": "France", "countryCode": "FR", "name": "Toulouse", "parentid": 23424819, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/628886", "woeid": 628886 }, { "country": "Germany", "countryCode": "DE", "name": "Berlin", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/638242", "woeid": 638242 }, { "country": "Germany", "countryCode": "DE", "name": "Bremen", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/641142", "woeid": 641142 }, { "country": "Germany", "countryCode": "DE", "name": "Dortmund", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/645458", "woeid": 645458 }, { "country": "Germany", "countryCode": "DE", "name": "Dresden", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/645686", "woeid": 645686 }, { "country": "Germany", "countryCode": "DE", "name": "Dusseldorf", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/646099", "woeid": 646099 }, { "country": "Germany", "countryCode": "DE", "name": "Essen", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/648820", "woeid": 648820 }, { "country": "Germany", "countryCode": "DE", "name": "Frankfurt", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/650272", "woeid": 650272 }, { "country": "Germany", "countryCode": "DE", "name": "Hamburg", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/656958", "woeid": 656958 }, { "country": "Germany", "countryCode": "DE", "name": "Cologne", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/667931", "woeid": 667931 }, { "country": "Germany", "countryCode": "DE", "name": "Leipzig", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/671072", "woeid": 671072 }, { "country": "Germany", "countryCode": "DE", "name": "Munich", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/676757", "woeid": 676757 }, { "country": "Germany", "countryCode": "DE", "name": "Stuttgart", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/698064", "woeid": 698064 }, { "country": "Italy", "countryCode": "IT", "name": "Bologna", "parentid": 23424853, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/711080", "woeid": 711080 }, { "country": "Italy", "countryCode": "IT", "name": "Genoa", "parentid": 23424853, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/716085", "woeid": 716085 }, { "country": "Italy", "countryCode": "IT", "name": "Milan", "parentid": 23424853, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/718345", "woeid": 718345 }, { "country": "Italy", "countryCode": "IT", "name": "Naples", "parentid": 23424853, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/719258", "woeid": 719258 }, { "country": "Italy", "countryCode": "IT", "name": "Palermo", "parentid": 23424853, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/719846", "woeid": 719846 }, { "country": "Italy", "countryCode": "IT", "name": "Rome", "parentid": 23424853, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/721943", "woeid": 721943 }, { "country": "Italy", "countryCode": "IT", "name": "Turin", "parentid": 23424853, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/725003", "woeid": 725003 }, { "country": "Netherlands", "countryCode": "NL", "name": "Den Haag", "parentid": 23424909, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/726874", "woeid": 726874 }, { "country": "Netherlands", "countryCode": "NL", "name": "Amsterdam", "parentid": 23424909, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/727232", "woeid": 727232 }, { "country": "Netherlands", "countryCode": "NL", "name": "Rotterdam", "parentid": 23424909, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/733075", "woeid": 733075 }, { "country": "Netherlands", "countryCode": "NL", "name": "Utrecht", "parentid": 23424909, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/734047", "woeid": 734047 }, { "country": "Spain", "countryCode": "ES", "name": "Barcelona", "parentid": 23424950, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/753692", "woeid": 753692 }, { "country": "Spain", "countryCode": "ES", "name": "Bilbao", "parentid": 23424950, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/754542", "woeid": 754542 }, { "country": "Spain", "countryCode": "ES", "name": "Las Palmas", "parentid": 23424950, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/764814", "woeid": 764814 }, { "country": "Spain", "countryCode": "ES", "name": "Madrid", "parentid": 23424950, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/766273", "woeid": 766273 }, { "country": "Spain", "countryCode": "ES", "name": "Malaga", "parentid": 23424950, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/766356", "woeid": 766356 }, { "country": "Spain", "countryCode": "ES", "name": "Murcia", "parentid": 23424950, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/768026", "woeid": 768026 }, { "country": "Spain", "countryCode": "ES", "name": "Palma", "parentid": 23424950, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/769293", "woeid": 769293 }, { "country": "Spain", "countryCode": "ES", "name": "Seville", "parentid": 23424950, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/774508", "woeid": 774508 }, { "country": "Spain", "countryCode": "ES", "name": "Valencia", "parentid": 23424950, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/776688", "woeid": 776688 }, { "country": "Spain", "countryCode": "ES", "name": "Zaragoza", "parentid": 23424950, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/779063", "woeid": 779063 }, { "country": "Switzerland", "countryCode": "CH", "name": "Geneva", "parentid": 23424957, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/782538", "woeid": 782538 }, { "country": "Switzerland", "countryCode": "CH", "name": "Lausanne", "parentid": 23424957, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/783058", "woeid": 783058 }, { "country": "Switzerland", "countryCode": "CH", "name": "Zurich", "parentid": 23424957, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/784794", "woeid": 784794 }, { "country": "Belarus", "countryCode": "BY", "name": "Brest", "parentid": 23424765, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/824382", "woeid": 824382 }, { "country": "Belarus", "countryCode": "BY", "name": "Grodno", "parentid": 23424765, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/825848", "woeid": 825848 }, { "country": "Belarus", "countryCode": "BY", "name": "Gomel", "parentid": 23424765, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/825978", "woeid": 825978 }, { "country": "Belarus", "countryCode": "BY", "name": "Minsk", "parentid": 23424765, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/834463", "woeid": 834463 }, { "country": "Latvia", "countryCode": "LV", "name": "Riga", "parentid": 23424874, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/854823", "woeid": 854823 }, { "country": "Norway", "countryCode": "NO", "name": "Bergen", "parentid": 23424910, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/857105", "woeid": 857105 }, { "country": "Norway", "countryCode": "NO", "name": "Oslo", "parentid": 23424910, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/862592", "woeid": 862592 }, { "country": "Sweden", "countryCode": "SE", "name": "Gothenburg", "parentid": 23424954, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/890869", "woeid": 890869 }, { "country": "Sweden", "countryCode": "SE", "name": "Stockholm", "parentid": 23424954, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/906057", "woeid": 906057 }, { "country": "Ukraine", "countryCode": "UA", "name": "Dnipropetrovsk", "parentid": 23424976, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/918981", "woeid": 918981 }, { "country": "Ukraine", "countryCode": "UA", "name": "Donetsk", "parentid": 23424976, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/919163", "woeid": 919163 }, { "country": "Ukraine", "countryCode": "UA", "name": "Kharkiv", "parentid": 23424976, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/922137", "woeid": 922137 }, { "country": "Ukraine", "countryCode": "UA", "name": "Kyiv", "parentid": 23424976, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/924938", "woeid": 924938 }, { "country": "Ukraine", "countryCode": "UA", "name": "Lviv", "parentid": 23424976, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/924943", "woeid": 924943 }, { "country": "Ukraine", "countryCode": "UA", "name": "Odesa", "parentid": 23424976, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/929398", "woeid": 929398 }, { "country": "Ukraine", "countryCode": "UA", "name": "Zaporozhye", "parentid": 23424976, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/939628", "woeid": 939628 }, { "country": "Greece", "countryCode": "GR", "name": "Athens", "parentid": 23424833, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/946738", "woeid": 946738 }, { "country": "Greece", "countryCode": "GR", "name": "Thessaloniki", "parentid": 23424833, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/963291", "woeid": 963291 }, { "country": "Indonesia", "countryCode": "ID", "name": "Bekasi", "parentid": 23424846, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1030077", "woeid": 1030077 }, { "country": "Indonesia", "countryCode": "ID", "name": "Depok", "parentid": 23424846, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1032539", "woeid": 1032539 }, { "country": "Indonesia", "countryCode": "ID", "name": "Pekanbaru", "parentid": 23424846, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1040779", "woeid": 1040779 }, { "country": "Indonesia", "countryCode": "ID", "name": "Surabaya", "parentid": 23424846, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1044316", "woeid": 1044316 }, { "country": "Indonesia", "countryCode": "ID", "name": "Makassar", "parentid": 23424846, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1046138", "woeid": 1046138 }, { "country": "Indonesia", "countryCode": "ID", "name": "Bandung", "parentid": 23424846, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1047180", "woeid": 1047180 }, { "country": "Indonesia", "countryCode": "ID", "name": "Jakarta", "parentid": 23424846, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1047378", "woeid": 1047378 }, { "country": "Indonesia", "countryCode": "ID", "name": "Medan", "parentid": 23424846, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1047908", "woeid": 1047908 }, { "country": "Indonesia", "countryCode": "ID", "name": "Palembang", "parentid": 23424846, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1048059", "woeid": 1048059 }, { "country": "Indonesia", "countryCode": "ID", "name": "Semarang", "parentid": 23424846, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1048324", "woeid": 1048324 }, { "country": "Indonesia", "countryCode": "ID", "name": "Tangerang", "parentid": 23424846, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1048536", "woeid": 1048536 }, { "country": "Singapore", "countryCode": "SG", "name": "Singapore", "parentid": 23424948, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1062617", "woeid": 1062617 }, { "country": "Australia", "countryCode": "AU", "name": "Perth", "parentid": 23424748, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1098081", "woeid": 1098081 }, { "country": "Australia", "countryCode": "AU", "name": "Adelaide", "parentid": 23424748, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1099805", "woeid": 1099805 }, { "country": "Australia", "countryCode": "AU", "name": "Brisbane", "parentid": 23424748, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1100661", "woeid": 1100661 }, { "country": "Australia", "countryCode": "AU", "name": "Canberra", "parentid": 23424748, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1100968", "woeid": 1100968 }, { "country": "Australia", "countryCode": "AU", "name": "Darwin", "parentid": 23424748, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1101597", "woeid": 1101597 }, { "country": "Australia", "countryCode": "AU", "name": "Melbourne", "parentid": 23424748, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1103816", "woeid": 1103816 }, { "country": "Australia", "countryCode": "AU", "name": "Sydney", "parentid": 23424748, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1105779", "woeid": 1105779 }, { "country": "Japan", "countryCode": "JP", "name": "Kitakyushu", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1110809", "woeid": 1110809 }, { "country": "Japan", "countryCode": "JP", "name": "Saitama", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1116753", "woeid": 1116753 }, { "country": "Japan", "countryCode": "JP", "name": "Chiba", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1117034", "woeid": 1117034 }, { "country": "Japan", "countryCode": "JP", "name": "Fukuoka", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1117099", "woeid": 1117099 }, { "country": "Japan", "countryCode": "JP", "name": "Hamamatsu", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1117155", "woeid": 1117155 }, { "country": "Japan", "countryCode": "JP", "name": "Hiroshima", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1117227", "woeid": 1117227 }, { "country": "Japan", "countryCode": "JP", "name": "Kawasaki", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1117502", "woeid": 1117502 }, { "country": "Japan", "countryCode": "JP", "name": "Kobe", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1117545", "woeid": 1117545 }, { "country": "Japan", "countryCode": "JP", "name": "Kumamoto", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1117605", "woeid": 1117605 }, { "country": "Japan", "countryCode": "JP", "name": "Nagoya", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1117817", "woeid": 1117817 }, { "country": "Japan", "countryCode": "JP", "name": "Niigata", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1117881", "woeid": 1117881 }, { "country": "Japan", "countryCode": "JP", "name": "Sagamihara", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1118072", "woeid": 1118072 }, { "country": "Japan", "countryCode": "JP", "name": "Sapporo", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1118108", "woeid": 1118108 }, { "country": "Japan", "countryCode": "JP", "name": "Sendai", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1118129", "woeid": 1118129 }, { "country": "Japan", "countryCode": "JP", "name": "Takamatsu", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1118285", "woeid": 1118285 }, { "country": "Japan", "countryCode": "JP", "name": "Tokyo", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1118370", "woeid": 1118370 }, { "country": "Japan", "countryCode": "JP", "name": "Yokohama", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1118550", "woeid": 1118550 }, { "country": "Korea", "countryCode": "KR", "name": "Goyang", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1130853", "woeid": 1130853 }, { "country": "Korea", "countryCode": "KR", "name": "Yongin", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132094", "woeid": 1132094 }, { "country": "Korea", "countryCode": "KR", "name": "Ansan", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132444", "woeid": 1132444 }, { "country": "Korea", "countryCode": "KR", "name": "Bucheon", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132445", "woeid": 1132445 }, { "country": "Korea", "countryCode": "KR", "name": "Busan", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132447", "woeid": 1132447 }, { "country": "Korea", "countryCode": "KR", "name": "Changwon", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132449", "woeid": 1132449 }, { "country": "Korea", "countryCode": "KR", "name": "Daegu", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132466", "woeid": 1132466 }, { "country": "Korea", "countryCode": "KR", "name": "Gwangju", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132481", "woeid": 1132481 }, { "country": "Korea", "countryCode": "KR", "name": "Incheon", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132496", "woeid": 1132496 }, { "country": "Korea", "countryCode": "KR", "name": "Seongnam", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132559", "woeid": 1132559 }, { "country": "Korea", "countryCode": "KR", "name": "Suwon", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132567", "woeid": 1132567 }, { "country": "Korea", "countryCode": "KR", "name": "Ulsan", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132578", "woeid": 1132578 }, { "country": "Korea", "countryCode": "KR", "name": "Seoul", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132599", "woeid": 1132599 }, { "country": "Malaysia", "countryCode": "MY", "name": "Kajang", "parentid": 23424901, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1141268", "woeid": 1141268 }, { "country": "Malaysia", "countryCode": "MY", "name": "Ipoh", "parentid": 23424901, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1154679", "woeid": 1154679 }, { "country": "Malaysia", "countryCode": "MY", "name": "Johor Bahru", "parentid": 23424901, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1154698", "woeid": 1154698 }, { "country": "Malaysia", "countryCode": "MY", "name": "Klang", "parentid": 23424901, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1154726", "woeid": 1154726 }, { "country": "Malaysia", "countryCode": "MY", "name": "Kuala Lumpur", "parentid": 23424901, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1154781", "woeid": 1154781 }, { "country": "Philippines", "countryCode": "PH", "name": "Calocan", "parentid": 23424934, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1167715", "woeid": 1167715 }, { "country": "Philippines", "countryCode": "PH", "name": "Makati", "parentid": 23424934, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1180689", "woeid": 1180689 }, { "country": "Philippines", "countryCode": "PH", "name": "Pasig", "parentid": 23424934, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1187115", "woeid": 1187115 }, { "country": "Philippines", "countryCode": "PH", "name": "Taguig", "parentid": 23424934, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1195098", "woeid": 1195098 }, { "country": "Philippines", "countryCode": "PH", "name": "Antipolo", "parentid": 23424934, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1198785", "woeid": 1198785 }, { "country": "Philippines", "countryCode": "PH", "name": "Cagayan de Oro", "parentid": 23424934, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1199002", "woeid": 1199002 }, { "country": "Philippines", "countryCode": "PH", "name": "Cebu City", "parentid": 23424934, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1199079", "woeid": 1199079 }, { "country": "Philippines", "countryCode": "PH", "name": "Davao City", "parentid": 23424934, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1199136", "woeid": 1199136 }, { "country": "Philippines", "countryCode": "PH", "name": "Manila", "parentid": 23424934, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1199477", "woeid": 1199477 }, { "country": "Philippines", "countryCode": "PH", "name": "Quezon City", "parentid": 23424934, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1199682", "woeid": 1199682 }, { "country": "Philippines", "countryCode": "PH", "name": "Zamboanga City", "parentid": 23424934, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1199980", "woeid": 1199980 }, { "country": "Thailand", "countryCode": "TH", "name": "Bangkok", "parentid": 23424960, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1225448", "woeid": 1225448 }, { "country": "Vietnam", "countryCode": "VN", "name": "Hanoi", "parentid": 23424984, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1236594", "woeid": 1236594 }, { "country": "Vietnam", "countryCode": "VN", "name": "Hai Phong", "parentid": 23424984, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1236690", "woeid": 1236690 }, { "country": "Vietnam", "countryCode": "VN", "name": "Can Tho", "parentid": 23424984, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1252351", "woeid": 1252351 }, { "country": "Vietnam", "countryCode": "VN", "name": "Da Nang", "parentid": 23424984, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1252376", "woeid": 1252376 }, { "country": "Vietnam", "countryCode": "VN", "name": "Ho Chi Minh City", "parentid": 23424984, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1252431", "woeid": 1252431 }, { "country": "Algeria", "countryCode": "DZ", "name": "Algiers", "parentid": 23424740, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1253079", "woeid": 1253079 }, { "country": "Ghana", "countryCode": "GH", "name": "Accra", "parentid": 23424824, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1326075", "woeid": 1326075 }, { "country": "Ghana", "countryCode": "GH", "name": "Kumasi", "parentid": 23424824, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1330595", "woeid": 1330595 }, { "country": "Nigeria", "countryCode": "NG", "name": "Benin City", "parentid": 23424908, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1387660", "woeid": 1387660 }, { "country": "Nigeria", "countryCode": "NG", "name": "Ibadan", "parentid": 23424908, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1393672", "woeid": 1393672 }, { "country": "Nigeria", "countryCode": "NG", "name": "Kaduna", "parentid": 23424908, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1396439", "woeid": 1396439 }, { "country": "Nigeria", "countryCode": "NG", "name": "Kano", "parentid": 23424908, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1396803", "woeid": 1396803 }, { "country": "Nigeria", "countryCode": "NG", "name": "Lagos", "parentid": 23424908, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1398823", "woeid": 1398823 }, { "country": "Nigeria", "countryCode": "NG", "name": "Port Harcourt", "parentid": 23424908, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1404447", "woeid": 1404447 }, { "country": "Egypt", "countryCode": "EG", "name": "Giza", "parentid": 23424802, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1521643", "woeid": 1521643 }, { "country": "Egypt", "countryCode": "EG", "name": "Cairo", "parentid": 23424802, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1521894", "woeid": 1521894 }, { "country": "Egypt", "countryCode": "EG", "name": "Alexandria", "parentid": 23424802, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1522006", "woeid": 1522006 }, { "country": "Kenya", "countryCode": "KE", "name": "Mombasa", "parentid": 23424863, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1528335", "woeid": 1528335 }, { "country": "Kenya", "countryCode": "KE", "name": "Nairobi", "parentid": 23424863, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1528488", "woeid": 1528488 }, { "country": "South Africa", "countryCode": "ZA", "name": "Durban", "parentid": 23424942, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1580913", "woeid": 1580913 }, { "country": "South Africa", "countryCode": "ZA", "name": "Johannesburg", "parentid": 23424942, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1582504", "woeid": 1582504 }, { "country": "South Africa", "countryCode": "ZA", "name": "Port Elizabeth", "parentid": 23424942, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1586614", "woeid": 1586614 }, { "country": "South Africa", "countryCode": "ZA", "name": "Pretoria", "parentid": 23424942, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1586638", "woeid": 1586638 }, { "country": "South Africa", "countryCode": "ZA", "name": "Soweto", "parentid": 23424942, "placeType": { "code": "22", "name": "Unknown" }, "url": "http://where.yahooapis.com/v1/place/1587677", "woeid": 1587677 }, { "country": "South Africa", "countryCode": "ZA", "name": "Cape Town", "parentid": 23424942, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1591691", "woeid": 1591691 }, { "country": "Saudi Arabia", "countryCode": "SA", "name": "Medina", "parentid": 23424938, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1937801", "woeid": 1937801 }, { "country": "Saudi Arabia", "countryCode": "SA", "name": "Dammam", "parentid": 23424938, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1939574", "woeid": 1939574 }, { "country": "Saudi Arabia", "countryCode": "SA", "name": "Riyadh", "parentid": 23424938, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1939753", "woeid": 1939753 }, { "country": "Saudi Arabia", "countryCode": "SA", "name": "Jeddah", "parentid": 23424938, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1939873", "woeid": 1939873 }, { "country": "Saudi Arabia", "countryCode": "SA", "name": "Mecca", "parentid": 23424938, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1939897", "woeid": 1939897 }, { "country": "United Arab Emirates", "countryCode": "AE", "name": "Sharjah", "parentid": 23424738, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1940119", "woeid": 1940119 }, { "country": "United Arab Emirates", "countryCode": "AE", "name": "Abu Dhabi", "parentid": 23424738, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1940330", "woeid": 1940330 }, { "country": "United Arab Emirates", "countryCode": "AE", "name": "Dubai", "parentid": 23424738, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1940345", "woeid": 1940345 }, { "country": "Israel", "countryCode": "IL", "name": "Haifa", "parentid": 23424852, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1967449", "woeid": 1967449 }, { "country": "Israel", "countryCode": "IL", "name": "Tel Aviv", "parentid": 23424852, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1968212", "woeid": 1968212 }, { "country": "Israel", "countryCode": "IL", "name": "Jerusalem", "parentid": 23424852, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1968222", "woeid": 1968222 }, { "country": "Jordan", "countryCode": "JO", "name": "Amman", "parentid": 23424860, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1968902", "woeid": 1968902 }, { "country": "Russia", "countryCode": "RU", "name": "Chelyabinsk", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1997422", "woeid": 1997422 }, { "country": "Russia", "countryCode": "RU", "name": "Khabarovsk", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2018708", "woeid": 2018708 }, { "country": "Russia", "countryCode": "RU", "name": "Krasnodar", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2028717", "woeid": 2028717 }, { "country": "Russia", "countryCode": "RU", "name": "Krasnoyarsk", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2029043", "woeid": 2029043 }, { "country": "Russia", "countryCode": "RU", "name": "Samara", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2077746", "woeid": 2077746 }, { "country": "Russia", "countryCode": "RU", "name": "Voronezh", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2108210", "woeid": 2108210 }, { "country": "Russia", "countryCode": "RU", "name": "Yekaterinburg", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2112237", "woeid": 2112237 }, { "country": "Russia", "countryCode": "RU", "name": "Irkutsk", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2121040", "woeid": 2121040 }, { "country": "Russia", "countryCode": "RU", "name": "Kazan", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2121267", "woeid": 2121267 }, { "country": "Russia", "countryCode": "RU", "name": "Moscow", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2122265", "woeid": 2122265 }, { "country": "Russia", "countryCode": "RU", "name": "Nizhny Novgorod", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2122471", "woeid": 2122471 }, { "country": "Russia", "countryCode": "RU", "name": "Novosibirsk", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2122541", "woeid": 2122541 }, { "country": "Russia", "countryCode": "RU", "name": "Omsk", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2122641", "woeid": 2122641 }, { "country": "Russia", "countryCode": "RU", "name": "Perm", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2122814", "woeid": 2122814 }, { "country": "Russia", "countryCode": "RU", "name": "Rostov-on-Don", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2123177", "woeid": 2123177 }, { "country": "Russia", "countryCode": "RU", "name": "Saint Petersburg", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2123260", "woeid": 2123260 }, { "country": "Russia", "countryCode": "RU", "name": "Ufa", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2124045", "woeid": 2124045 }, { "country": "Russia", "countryCode": "RU", "name": "Vladivostok", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2124288", "woeid": 2124288 }, { "country": "Russia", "countryCode": "RU", "name": "Volgograd", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2124298", "woeid": 2124298 }, { "country": "Pakistan", "countryCode": "PK", "name": "Karachi", "parentid": 23424922, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2211096", "woeid": 2211096 }, { "country": "Pakistan", "countryCode": "PK", "name": "Lahore", "parentid": 23424922, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2211177", "woeid": 2211177 }, { "country": "Pakistan", "countryCode": "PK", "name": "Multan", "parentid": 23424922, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2211269", "woeid": 2211269 }, { "country": "Pakistan", "countryCode": "PK", "name": "Rawalpindi", "parentid": 23424922, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2211387", "woeid": 2211387 }, { "country": "Pakistan", "countryCode": "PK", "name": "Faisalabad", "parentid": 23424922, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2211574", "woeid": 2211574 }, { "country": "Oman", "countryCode": "OM", "name": "Muscat", "parentid": 23424898, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2268284", "woeid": 2268284 }, { "country": "India", "countryCode": "IN", "name": "Nagpur", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2282863", "woeid": 2282863 }, { "country": "India", "countryCode": "IN", "name": "Lucknow", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295377", "woeid": 2295377 }, { "country": "India", "countryCode": "IN", "name": "Kanpur", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295378", "woeid": 2295378 }, { "country": "India", "countryCode": "IN", "name": "Patna", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295381", "woeid": 2295381 }, { "country": "India", "countryCode": "IN", "name": "Ranchi", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295383", "woeid": 2295383 }, { "country": "India", "countryCode": "IN", "name": "Kolkata", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295386", "woeid": 2295386 }, { "country": "India", "countryCode": "IN", "name": "Srinagar", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295387", "woeid": 2295387 }, { "country": "India", "countryCode": "IN", "name": "Amritsar", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295388", "woeid": 2295388 }, { "country": "India", "countryCode": "IN", "name": "Jaipur", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295401", "woeid": 2295401 }, { "country": "India", "countryCode": "IN", "name": "Ahmedabad", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295402", "woeid": 2295402 }, { "country": "India", "countryCode": "IN", "name": "Rajkot", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295404", "woeid": 2295404 }, { "country": "India", "countryCode": "IN", "name": "Surat", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295405", "woeid": 2295405 }, { "country": "India", "countryCode": "IN", "name": "Bhopal", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295407", "woeid": 2295407 }, { "country": "India", "countryCode": "IN", "name": "Indore", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295408", "woeid": 2295408 }, { "country": "India", "countryCode": "IN", "name": "Thane", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295410", "woeid": 2295410 }, { "country": "India", "countryCode": "IN", "name": "Mumbai", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295411", "woeid": 2295411 }, { "country": "India", "countryCode": "IN", "name": "Pune", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295412", "woeid": 2295412 }, { "country": "India", "countryCode": "IN", "name": "Hyderabad", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295414", "woeid": 2295414 }, { "country": "India", "countryCode": "IN", "name": "Bangalore", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295420", "woeid": 2295420 }, { "country": "India", "countryCode": "IN", "name": "Chennai", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295424", "woeid": 2295424 }, { "country": "Turkey", "countryCode": "TR", "name": "Mersin", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2323778", "woeid": 2323778 }, { "country": "Turkey", "countryCode": "TR", "name": "Adana", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2343678", "woeid": 2343678 }, { "country": "Turkey", "countryCode": "TR", "name": "Ankara", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2343732", "woeid": 2343732 }, { "country": "Turkey", "countryCode": "TR", "name": "Antalya", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2343733", "woeid": 2343733 }, { "country": "Turkey", "countryCode": "TR", "name": "Bursa", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2343843", "woeid": 2343843 }, { "country": "Turkey", "countryCode": "TR", "name": "Diyarbakır", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2343932", "woeid": 2343932 }, { "country": "Turkey", "countryCode": "TR", "name": "Eskişehir", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2343980", "woeid": 2343980 }, { "country": "Turkey", "countryCode": "TR", "name": "Gaziantep", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2343999", "woeid": 2343999 }, { "country": "Turkey", "countryCode": "TR", "name": "Istanbul", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2344116", "woeid": 2344116 }, { "country": "Turkey", "countryCode": "TR", "name": "Izmir", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2344117", "woeid": 2344117 }, { "country": "Turkey", "countryCode": "TR", "name": "Kayseri", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2344174", "woeid": 2344174 }, { "country": "Turkey", "countryCode": "TR", "name": "Konya", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2344210", "woeid": 2344210 }, { "country": "Japan", "countryCode": "JP", "name": "Okinawa", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2345896", "woeid": 2345896 }, { "country": "Korea", "countryCode": "KR", "name": "Daejeon", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2345975", "woeid": 2345975 }, { "country": "New Zealand", "countryCode": "NZ", "name": "Auckland", "parentid": 23424916, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2348079", "woeid": 2348079 }, { "country": "United States", "countryCode": "US", "name": "Albuquerque", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2352824", "woeid": 2352824 }, { "country": "United States", "countryCode": "US", "name": "Atlanta", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2357024", "woeid": 2357024 }, { "country": "United States", "countryCode": "US", "name": "Austin", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2357536", "woeid": 2357536 }, { "country": "United States", "countryCode": "US", "name": "Baltimore", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2358820", "woeid": 2358820 }, { "country": "United States", "countryCode": "US", "name": "Baton Rouge", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2359991", "woeid": 2359991 }, { "country": "United States", "countryCode": "US", "name": "Birmingham", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2364559", "woeid": 2364559 }, { "country": "United States", "countryCode": "US", "name": "Boston", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2367105", "woeid": 2367105 }, { "country": "United States", "countryCode": "US", "name": "Charlotte", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2378426", "woeid": 2378426 }, { "country": "United States", "countryCode": "US", "name": "Chicago", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2379574", "woeid": 2379574 }, { "country": "United States", "countryCode": "US", "name": "Cincinnati", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2380358", "woeid": 2380358 }, { "country": "United States", "countryCode": "US", "name": "Cleveland", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2381475", "woeid": 2381475 }, { "country": "United States", "countryCode": "US", "name": "Colorado Springs", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2383489", "woeid": 2383489 }, { "country": "United States", "countryCode": "US", "name": "Columbus", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2383660", "woeid": 2383660 }, { "country": "United States", "countryCode": "US", "name": "Dallas-Ft. Worth", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2388929", "woeid": 2388929 }, { "country": "United States", "countryCode": "US", "name": "Denver", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2391279", "woeid": 2391279 }, { "country": "United States", "countryCode": "US", "name": "Detroit", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2391585", "woeid": 2391585 }, { "country": "United States", "countryCode": "US", "name": "El Paso", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2397816", "woeid": 2397816 }, { "country": "United States", "countryCode": "US", "name": "Fresno", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2407517", "woeid": 2407517 }, { "country": "United States", "countryCode": "US", "name": "Greensboro", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2414469", "woeid": 2414469 }, { "country": "United States", "countryCode": "US", "name": "Harrisburg", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2418046", "woeid": 2418046 }, { "country": "United States", "countryCode": "US", "name": "Honolulu", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2423945", "woeid": 2423945 }, { "country": "United States", "countryCode": "US", "name": "Houston", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2424766", "woeid": 2424766 }, { "country": "United States", "countryCode": "US", "name": "Indianapolis", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2427032", "woeid": 2427032 }, { "country": "United States", "countryCode": "US", "name": "Jackson", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2428184", "woeid": 2428184 }, { "country": "United States", "countryCode": "US", "name": "Jacksonville", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2428344", "woeid": 2428344 }, { "country": "United States", "countryCode": "US", "name": "Kansas City", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2430683", "woeid": 2430683 }, { "country": "United States", "countryCode": "US", "name": "Las Vegas", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2436704", "woeid": 2436704 }, { "country": "United States", "countryCode": "US", "name": "Long Beach", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2441472", "woeid": 2441472 }, { "country": "United States", "countryCode": "US", "name": "Los Angeles", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2442047", "woeid": 2442047 }, { "country": "United States", "countryCode": "US", "name": "Louisville", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2442327", "woeid": 2442327 }, { "country": "United States", "countryCode": "US", "name": "Memphis", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2449323", "woeid": 2449323 }, { "country": "United States", "countryCode": "US", "name": "Mesa", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2449808", "woeid": 2449808 }, { "country": "United States", "countryCode": "US", "name": "Miami", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2450022", "woeid": 2450022 }, { "country": "United States", "countryCode": "US", "name": "Milwaukee", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2451822", "woeid": 2451822 }, { "country": "United States", "countryCode": "US", "name": "Minneapolis", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2452078", "woeid": 2452078 }, { "country": "United States", "countryCode": "US", "name": "Nashville", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2457170", "woeid": 2457170 }, { "country": "United States", "countryCode": "US", "name": "New Haven", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2458410", "woeid": 2458410 }, { "country": "United States", "countryCode": "US", "name": "New Orleans", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2458833", "woeid": 2458833 }, { "country": "United States", "countryCode": "US", "name": "New York", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2459115", "woeid": 2459115 }, { "country": "United States", "countryCode": "US", "name": "Norfolk", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2460389", "woeid": 2460389 }, { "country": "United States", "countryCode": "US", "name": "Oklahoma City", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2464592", "woeid": 2464592 }, { "country": "United States", "countryCode": "US", "name": "Omaha", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2465512", "woeid": 2465512 }, { "country": "United States", "countryCode": "US", "name": "Orlando", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2466256", "woeid": 2466256 }, { "country": "United States", "countryCode": "US", "name": "Philadelphia", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2471217", "woeid": 2471217 }, { "country": "United States", "countryCode": "US", "name": "Phoenix", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2471390", "woeid": 2471390 }, { "country": "United States", "countryCode": "US", "name": "Pittsburgh", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2473224", "woeid": 2473224 }, { "country": "United States", "countryCode": "US", "name": "Portland", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2475687", "woeid": 2475687 }, { "country": "United States", "countryCode": "US", "name": "Providence", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2477058", "woeid": 2477058 }, { "country": "United States", "countryCode": "US", "name": "Raleigh", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2478307", "woeid": 2478307 }, { "country": "United States", "countryCode": "US", "name": "Richmond", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2480894", "woeid": 2480894 }, { "country": "United States", "countryCode": "US", "name": "Sacramento", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2486340", "woeid": 2486340 }, { "country": "United States", "countryCode": "US", "name": "St. Louis", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2486982", "woeid": 2486982 }, { "country": "United States", "countryCode": "US", "name": "Salt Lake City", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2487610", "woeid": 2487610 }, { "country": "United States", "countryCode": "US", "name": "San Antonio", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2487796", "woeid": 2487796 }, { "country": "United States", "countryCode": "US", "name": "San Diego", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2487889", "woeid": 2487889 }, { "country": "United States", "countryCode": "US", "name": "San Francisco", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2487956", "woeid": 2487956 }, { "country": "United States", "countryCode": "US", "name": "San Jose", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2488042", "woeid": 2488042 }, { "country": "United States", "countryCode": "US", "name": "Seattle", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2490383", "woeid": 2490383 }, { "country": "United States", "countryCode": "US", "name": "Tallahassee", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2503713", "woeid": 2503713 }, { "country": "United States", "countryCode": "US", "name": "Tampa", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2503863", "woeid": 2503863 }, { "country": "United States", "countryCode": "US", "name": "Tucson", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2508428", "woeid": 2508428 }, { "country": "United States", "countryCode": "US", "name": "Virginia Beach", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2512636", "woeid": 2512636 }, { "country": "United States", "countryCode": "US", "name": "Washington", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2514815", "woeid": 2514815 }, { "country": "Japan", "countryCode": "JP", "name": "Osaka", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/15015370", "woeid": 15015370 }, { "country": "Japan", "countryCode": "JP", "name": "Kyoto", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/15015372", "woeid": 15015372 }, { "country": "India", "countryCode": "IN", "name": "Delhi", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/20070458", "woeid": 20070458 }, { "country": "United Arab Emirates", "countryCode": "AE", "name": "United Arab Emirates", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424738", "woeid": 23424738 }, { "country": "Algeria", "countryCode": "DZ", "name": "Algeria", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424740", "woeid": 23424740 }, { "country": "Argentina", "countryCode": "AR", "name": "Argentina", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424747", "woeid": 23424747 }, { "country": "Australia", "countryCode": "AU", "name": "Australia", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424748", "woeid": 23424748 }, { "country": "Austria", "countryCode": "AT", "name": "Austria", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424750", "woeid": 23424750 }, { "country": "Bahrain", "countryCode": "BH", "name": "Bahrain", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424753", "woeid": 23424753 }, { "country": "Belgium", "countryCode": "BE", "name": "Belgium", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424757", "woeid": 23424757 }, { "country": "Belarus", "countryCode": "BY", "name": "Belarus", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424765", "woeid": 23424765 }, { "country": "Brazil", "countryCode": "BR", "name": "Brazil", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424768", "woeid": 23424768 }, { "country": "Canada", "countryCode": "CA", "name": "Canada", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424775", "woeid": 23424775 }, { "country": "Chile", "countryCode": "CL", "name": "Chile", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424782", "woeid": 23424782 }, { "country": "Colombia", "countryCode": "CO", "name": "Colombia", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424787", "woeid": 23424787 }, { "country": "Denmark", "countryCode": "DK", "name": "Denmark", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424796", "woeid": 23424796 }, { "country": "Dominican Republic", "countryCode": "DO", "name": "Dominican Republic", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424800", "woeid": 23424800 }, { "country": "Ecuador", "countryCode": "EC", "name": "Ecuador", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424801", "woeid": 23424801 }, { "country": "Egypt", "countryCode": "EG", "name": "Egypt", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424802", "woeid": 23424802 }, { "country": "Ireland", "countryCode": "IE", "name": "Ireland", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424803", "woeid": 23424803 }, { "country": "France", "countryCode": "FR", "name": "France", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424819", "woeid": 23424819 }, { "country": "Ghana", "countryCode": "GH", "name": "Ghana", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424824", "woeid": 23424824 }, { "country": "Germany", "countryCode": "DE", "name": "Germany", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424829", "woeid": 23424829 }, { "country": "Greece", "countryCode": "GR", "name": "Greece", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424833", "woeid": 23424833 }, { "country": "Guatemala", "countryCode": "GT", "name": "Guatemala", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424834", "woeid": 23424834 }, { "country": "Indonesia", "countryCode": "ID", "name": "Indonesia", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424846", "woeid": 23424846 }, { "country": "India", "countryCode": "IN", "name": "India", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424848", "woeid": 23424848 }, { "country": "Israel", "countryCode": "IL", "name": "Israel", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424852", "woeid": 23424852 }, { "country": "Italy", "countryCode": "IT", "name": "Italy", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424853", "woeid": 23424853 }, { "country": "Japan", "countryCode": "JP", "name": "Japan", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424856", "woeid": 23424856 }, { "country": "Jordan", "countryCode": "JO", "name": "Jordan", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424860", "woeid": 23424860 }, { "country": "Kenya", "countryCode": "KE", "name": "Kenya", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424863", "woeid": 23424863 }, { "country": "Korea", "countryCode": "KR", "name": "Korea", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424868", "woeid": 23424868 }, { "country": "Kuwait", "countryCode": "KW", "name": "Kuwait", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424870", "woeid": 23424870 }, { "country": "Lebanon", "countryCode": "LB", "name": "Lebanon", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424873", "woeid": 23424873 }, { "country": "Latvia", "countryCode": "LV", "name": "Latvia", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424874", "woeid": 23424874 }, { "country": "Oman", "countryCode": "OM", "name": "Oman", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424898", "woeid": 23424898 }, { "country": "Mexico", "countryCode": "MX", "name": "Mexico", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424900", "woeid": 23424900 }, { "country": "Malaysia", "countryCode": "MY", "name": "Malaysia", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424901", "woeid": 23424901 }, { "country": "Nigeria", "countryCode": "NG", "name": "Nigeria", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424908", "woeid": 23424908 }, { "country": "Netherlands", "countryCode": "NL", "name": "Netherlands", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424909", "woeid": 23424909 }, { "country": "Norway", "countryCode": "NO", "name": "Norway", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424910", "woeid": 23424910 }, { "country": "New Zealand", "countryCode": "NZ", "name": "New Zealand", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424916", "woeid": 23424916 }, { "country": "Peru", "countryCode": "PE", "name": "Peru", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424919", "woeid": 23424919 }, { "country": "Pakistan", "countryCode": "PK", "name": "Pakistan", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424922", "woeid": 23424922 }, { "country": "Poland", "countryCode": "PL", "name": "Poland", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424923", "woeid": 23424923 }, { "country": "Panama", "countryCode": "PA", "name": "Panama", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424924", "woeid": 23424924 }, { "country": "Portugal", "countryCode": "PT", "name": "Portugal", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424925", "woeid": 23424925 }, { "country": "Qatar", "countryCode": "QA", "name": "Qatar", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424930", "woeid": 23424930 }, { "country": "Philippines", "countryCode": "PH", "name": "Philippines", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424934", "woeid": 23424934 }, { "country": "Puerto Rico", "countryCode": "PR", "name": "Puerto Rico", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424935", "woeid": 23424935 }, { "country": "Russia", "countryCode": "RU", "name": "Russia", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424936", "woeid": 23424936 }, { "country": "Saudi Arabia", "countryCode": "SA", "name": "Saudi Arabia", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424938", "woeid": 23424938 }, { "country": "South Africa", "countryCode": "ZA", "name": "South Africa", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424942", "woeid": 23424942 }, { "country": "Singapore", "countryCode": "SG", "name": "Singapore", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424948", "woeid": 23424948 }, { "country": "Spain", "countryCode": "ES", "name": "Spain", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424950", "woeid": 23424950 }, { "country": "Sweden", "countryCode": "SE", "name": "Sweden", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424954", "woeid": 23424954 }, { "country": "Switzerland", "countryCode": "CH", "name": "Switzerland", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424957", "woeid": 23424957 }, { "country": "Thailand", "countryCode": "TH", "name": "Thailand", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424960", "woeid": 23424960 }, { "country": "Turkey", "countryCode": "TR", "name": "Turkey", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424969", "woeid": 23424969 }, { "country": "United Kingdom", "countryCode": "GB", "name": "United Kingdom", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424975", "woeid": 23424975 }, { "country": "Ukraine", "countryCode": "UA", "name": "Ukraine", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424976", "woeid": 23424976 }, { "country": "United States", "countryCode": "US", "name": "United States", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424977", "woeid": 23424977 }, { "country": "Venezuela", "countryCode": "VE", "name": "Venezuela", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424982", "woeid": 23424982 }, { "country": "Vietnam", "countryCode": "VN", "name": "Vietnam", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424984", "woeid": 23424984 }, { "country": "Malaysia", "countryCode": "MY", "name": "Petaling", "parentid": 23424901, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/56013632", "woeid": 56013632 }, { "country": "Malaysia", "countryCode": "MY", "name": "Hulu Langat", "parentid": 23424901, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/56013645", "woeid": 56013645 }, { "country": "Saudi Arabia", "countryCode": "SA", "name": "Ahsa", "parentid": 23424938, "placeType": { "code": "9", "name": "Unknown" }, "url": "http://where.yahooapis.com/v1/place/56120136", "woeid": 56120136 }, { "country": "Japan", "countryCode": "JP", "name": "Okayama", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/90036018", "woeid": 90036018 } ] ================================================ FILE: src/test/resources/fixtures/rest/trends/closest_locations.json ================================================ [ { "country": "", "name": "Worldwide", "parentid": 0, "placeType": { "code": "19", "name": "Supername" }, "url": "http://where.yahooapis.com/v1/place/1", "woeid": 1 }, { "country": "Canada", "countryCode": "CA", "name": "Winnipeg", "parentid": 23424775, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2972", "woeid": 2972 }, { "country": "Canada", "countryCode": "CA", "name": "Ottawa", "parentid": 23424775, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/3369", "woeid": 3369 }, { "country": "Canada", "countryCode": "CA", "name": "Quebec", "parentid": 23424775, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/3444", "woeid": 3444 }, { "country": "Canada", "countryCode": "CA", "name": "Montreal", "parentid": 23424775, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/3534", "woeid": 3534 }, { "country": "Canada", "countryCode": "CA", "name": "Toronto", "parentid": 23424775, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/4118", "woeid": 4118 }, { "country": "Canada", "countryCode": "CA", "name": "Edmonton", "parentid": 23424775, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/8676", "woeid": 8676 }, { "country": "Canada", "countryCode": "CA", "name": "Calgary", "parentid": 23424775, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/8775", "woeid": 8775 }, { "country": "Canada", "countryCode": "CA", "name": "Vancouver", "parentid": 23424775, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/9807", "woeid": 9807 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Birmingham", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/12723", "woeid": 12723 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Blackpool", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/12903", "woeid": 12903 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Bournemouth", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/13383", "woeid": 13383 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Brighton", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/13911", "woeid": 13911 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Bristol", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/13963", "woeid": 13963 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Cardiff", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/15127", "woeid": 15127 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Coventry", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/17044", "woeid": 17044 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Derby", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/18114", "woeid": 18114 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Edinburgh", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/19344", "woeid": 19344 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Glasgow", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/21125", "woeid": 21125 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Hull", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/25211", "woeid": 25211 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Leeds", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/26042", "woeid": 26042 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Leicester", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/26062", "woeid": 26062 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Liverpool", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/26734", "woeid": 26734 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Manchester", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/28218", "woeid": 28218 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Middlesbrough", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/28869", "woeid": 28869 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Newcastle", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/30079", "woeid": 30079 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Nottingham", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/30720", "woeid": 30720 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Plymouth", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/32185", "woeid": 32185 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Portsmouth", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/32452", "woeid": 32452 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Preston", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/32566", "woeid": 32566 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Sheffield", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/34503", "woeid": 34503 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Stoke-on-Trent", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/36240", "woeid": 36240 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Swansea", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/36758", "woeid": 36758 }, { "country": "United Kingdom", "countryCode": "GB", "name": "London", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/44418", "woeid": 44418 }, { "country": "United Kingdom", "countryCode": "GB", "name": "Belfast", "parentid": 23424975, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/44544", "woeid": 44544 }, { "country": "Dominican Republic", "countryCode": "DO", "name": "Santo Domingo", "parentid": 23424800, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/76456", "woeid": 76456 }, { "country": "Guatemala", "countryCode": "GT", "name": "Guatemala City", "parentid": 23424834, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/83123", "woeid": 83123 }, { "country": "Mexico", "countryCode": "MX", "name": "Acapulco", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/110978", "woeid": 110978 }, { "country": "Mexico", "countryCode": "MX", "name": "Aguascalientes", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/111579", "woeid": 111579 }, { "country": "Mexico", "countryCode": "MX", "name": "Chihuahua", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/115958", "woeid": 115958 }, { "country": "Mexico", "countryCode": "MX", "name": "Mexico City", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/116545", "woeid": 116545 }, { "country": "Mexico", "countryCode": "MX", "name": "Ciudad Juarez", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/116556", "woeid": 116556 }, { "country": "Mexico", "countryCode": "MX", "name": "Nezahualcóyotl", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/116564", "woeid": 116564 }, { "country": "Mexico", "countryCode": "MX", "name": "Culiacán", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/117994", "woeid": 117994 }, { "country": "Mexico", "countryCode": "MX", "name": "Ecatepec de Morelos", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/118466", "woeid": 118466 }, { "country": "Mexico", "countryCode": "MX", "name": "Guadalajara", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/124162", "woeid": 124162 }, { "country": "Mexico", "countryCode": "MX", "name": "Hermosillo", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/124785", "woeid": 124785 }, { "country": "Mexico", "countryCode": "MX", "name": "León", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/131068", "woeid": 131068 }, { "country": "Mexico", "countryCode": "MX", "name": "Mérida", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/133327", "woeid": 133327 }, { "country": "Mexico", "countryCode": "MX", "name": "Mexicali", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/133475", "woeid": 133475 }, { "country": "Mexico", "countryCode": "MX", "name": "Monterrey", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/134047", "woeid": 134047 }, { "country": "Mexico", "countryCode": "MX", "name": "Morelia", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/134091", "woeid": 134091 }, { "country": "Mexico", "countryCode": "MX", "name": "Naucalpan de Juárez", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/134395", "woeid": 134395 }, { "country": "Mexico", "countryCode": "MX", "name": "Puebla", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/137612", "woeid": 137612 }, { "country": "Mexico", "countryCode": "MX", "name": "Querétaro", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/138045", "woeid": 138045 }, { "country": "Mexico", "countryCode": "MX", "name": "Saltillo", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/141272", "woeid": 141272 }, { "country": "Mexico", "countryCode": "MX", "name": "San Luis Potosí", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/144265", "woeid": 144265 }, { "country": "Mexico", "countryCode": "MX", "name": "Tijuana", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/149361", "woeid": 149361 }, { "country": "Mexico", "countryCode": "MX", "name": "Toluca", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/149769", "woeid": 149769 }, { "country": "Mexico", "countryCode": "MX", "name": "Zapopan", "parentid": 23424900, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/151582", "woeid": 151582 }, { "country": "Argentina", "countryCode": "AR", "name": "Mendoza", "parentid": 23424747, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/332471", "woeid": 332471 }, { "country": "Chile", "countryCode": "CL", "name": "Santiago", "parentid": 23424782, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/349859", "woeid": 349859 }, { "country": "Chile", "countryCode": "CL", "name": "Concepcion", "parentid": 23424782, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/349860", "woeid": 349860 }, { "country": "Chile", "countryCode": "CL", "name": "Valparaiso", "parentid": 23424782, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/349861", "woeid": 349861 }, { "country": "Colombia", "countryCode": "CO", "name": "Bogotá", "parentid": 23424787, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/368148", "woeid": 368148 }, { "country": "Colombia", "countryCode": "CO", "name": "Cali", "parentid": 23424787, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/368149", "woeid": 368149 }, { "country": "Colombia", "countryCode": "CO", "name": "Medellín", "parentid": 23424787, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/368150", "woeid": 368150 }, { "country": "Colombia", "countryCode": "CO", "name": "Barranquilla", "parentid": 23424787, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/368151", "woeid": 368151 }, { "country": "Ecuador", "countryCode": "EC", "name": "Quito", "parentid": 23424801, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/375732", "woeid": 375732 }, { "country": "Ecuador", "countryCode": "EC", "name": "Guayaquil", "parentid": 23424801, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/375733", "woeid": 375733 }, { "country": "Venezuela", "countryCode": "VE", "name": "Caracas", "parentid": 23424982, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/395269", "woeid": 395269 }, { "country": "Venezuela", "countryCode": "VE", "name": "Maracaibo", "parentid": 23424982, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/395270", "woeid": 395270 }, { "country": "Venezuela", "countryCode": "VE", "name": "Maracay", "parentid": 23424982, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/395271", "woeid": 395271 }, { "country": "Venezuela", "countryCode": "VE", "name": "Valencia", "parentid": 23424982, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/395272", "woeid": 395272 }, { "country": "Venezuela", "countryCode": "VE", "name": "Barcelona", "parentid": 23424982, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/395273", "woeid": 395273 }, { "country": "Venezuela", "countryCode": "VE", "name": "Ciudad Guayana", "parentid": 23424982, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/395275", "woeid": 395275 }, { "country": "Venezuela", "countryCode": "VE", "name": "Turmero", "parentid": 23424982, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/395277", "woeid": 395277 }, { "country": "Peru", "countryCode": "PE", "name": "Lima", "parentid": 23424919, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/418440", "woeid": 418440 }, { "country": "Brazil", "countryCode": "BR", "name": "Brasília", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455819", "woeid": 455819 }, { "country": "Brazil", "countryCode": "BR", "name": "Belém", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455820", "woeid": 455820 }, { "country": "Brazil", "countryCode": "BR", "name": "Belo Horizonte", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455821", "woeid": 455821 }, { "country": "Brazil", "countryCode": "BR", "name": "Curitiba", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455822", "woeid": 455822 }, { "country": "Brazil", "countryCode": "BR", "name": "Porto Alegre", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455823", "woeid": 455823 }, { "country": "Brazil", "countryCode": "BR", "name": "Recife", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455824", "woeid": 455824 }, { "country": "Brazil", "countryCode": "BR", "name": "Rio de Janeiro", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455825", "woeid": 455825 }, { "country": "Brazil", "countryCode": "BR", "name": "Salvador", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455826", "woeid": 455826 }, { "country": "Brazil", "countryCode": "BR", "name": "São Paulo", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455827", "woeid": 455827 }, { "country": "Brazil", "countryCode": "BR", "name": "Campinas", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455828", "woeid": 455828 }, { "country": "Brazil", "countryCode": "BR", "name": "Fortaleza", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455830", "woeid": 455830 }, { "country": "Brazil", "countryCode": "BR", "name": "Goiânia", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455831", "woeid": 455831 }, { "country": "Brazil", "countryCode": "BR", "name": "Manaus", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455833", "woeid": 455833 }, { "country": "Brazil", "countryCode": "BR", "name": "São Luís", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455834", "woeid": 455834 }, { "country": "Brazil", "countryCode": "BR", "name": "Guarulhos", "parentid": 23424768, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/455867", "woeid": 455867 }, { "country": "Argentina", "countryCode": "AR", "name": "Córdoba", "parentid": 23424747, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/466861", "woeid": 466861 }, { "country": "Argentina", "countryCode": "AR", "name": "Rosario", "parentid": 23424747, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/466862", "woeid": 466862 }, { "country": "Venezuela", "countryCode": "VE", "name": "Barquisimeto", "parentid": 23424982, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/468382", "woeid": 468382 }, { "country": "Venezuela", "countryCode": "VE", "name": "Maturín", "parentid": 23424982, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/468384", "woeid": 468384 }, { "country": "Argentina", "countryCode": "AR", "name": "Buenos Aires", "parentid": 23424747, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/468739", "woeid": 468739 }, { "country": "Poland", "countryCode": "PL", "name": "Gdańsk", "parentid": 23424923, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/493417", "woeid": 493417 }, { "country": "Poland", "countryCode": "PL", "name": "Kraków", "parentid": 23424923, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/502075", "woeid": 502075 }, { "country": "Poland", "countryCode": "PL", "name": "Lodz", "parentid": 23424923, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/505120", "woeid": 505120 }, { "country": "Poland", "countryCode": "PL", "name": "Poznań", "parentid": 23424923, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/514048", "woeid": 514048 }, { "country": "Poland", "countryCode": "PL", "name": "Warsaw", "parentid": 23424923, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/523920", "woeid": 523920 }, { "country": "Poland", "countryCode": "PL", "name": "Wroclaw", "parentid": 23424923, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/526363", "woeid": 526363 }, { "country": "Austria", "countryCode": "AT", "name": "Vienna", "parentid": 23424750, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/551801", "woeid": 551801 }, { "country": "Ireland", "countryCode": "IE", "name": "Cork", "parentid": 23424803, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/560472", "woeid": 560472 }, { "country": "Ireland", "countryCode": "IE", "name": "Dublin", "parentid": 23424803, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/560743", "woeid": 560743 }, { "country": "Ireland", "countryCode": "IE", "name": "Galway", "parentid": 23424803, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/560912", "woeid": 560912 }, { "country": "France", "countryCode": "FR", "name": "Bordeaux", "parentid": 23424819, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/580778", "woeid": 580778 }, { "country": "France", "countryCode": "FR", "name": "Lille", "parentid": 23424819, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/608105", "woeid": 608105 }, { "country": "France", "countryCode": "FR", "name": "Lyon", "parentid": 23424819, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/609125", "woeid": 609125 }, { "country": "France", "countryCode": "FR", "name": "Marseille", "parentid": 23424819, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/610264", "woeid": 610264 }, { "country": "France", "countryCode": "FR", "name": "Montpellier", "parentid": 23424819, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/612977", "woeid": 612977 }, { "country": "France", "countryCode": "FR", "name": "Nantes", "parentid": 23424819, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/613858", "woeid": 613858 }, { "country": "France", "countryCode": "FR", "name": "Paris", "parentid": 23424819, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/615702", "woeid": 615702 }, { "country": "France", "countryCode": "FR", "name": "Rennes", "parentid": 23424819, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/619163", "woeid": 619163 }, { "country": "France", "countryCode": "FR", "name": "Strasbourg", "parentid": 23424819, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/627791", "woeid": 627791 }, { "country": "France", "countryCode": "FR", "name": "Toulouse", "parentid": 23424819, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/628886", "woeid": 628886 }, { "country": "Germany", "countryCode": "DE", "name": "Berlin", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/638242", "woeid": 638242 }, { "country": "Germany", "countryCode": "DE", "name": "Bremen", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/641142", "woeid": 641142 }, { "country": "Germany", "countryCode": "DE", "name": "Dortmund", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/645458", "woeid": 645458 }, { "country": "Germany", "countryCode": "DE", "name": "Dresden", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/645686", "woeid": 645686 }, { "country": "Germany", "countryCode": "DE", "name": "Dusseldorf", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/646099", "woeid": 646099 }, { "country": "Germany", "countryCode": "DE", "name": "Essen", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/648820", "woeid": 648820 }, { "country": "Germany", "countryCode": "DE", "name": "Frankfurt", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/650272", "woeid": 650272 }, { "country": "Germany", "countryCode": "DE", "name": "Hamburg", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/656958", "woeid": 656958 }, { "country": "Germany", "countryCode": "DE", "name": "Cologne", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/667931", "woeid": 667931 }, { "country": "Germany", "countryCode": "DE", "name": "Leipzig", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/671072", "woeid": 671072 }, { "country": "Germany", "countryCode": "DE", "name": "Munich", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/676757", "woeid": 676757 }, { "country": "Germany", "countryCode": "DE", "name": "Stuttgart", "parentid": 23424829, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/698064", "woeid": 698064 }, { "country": "Italy", "countryCode": "IT", "name": "Bologna", "parentid": 23424853, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/711080", "woeid": 711080 }, { "country": "Italy", "countryCode": "IT", "name": "Genoa", "parentid": 23424853, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/716085", "woeid": 716085 }, { "country": "Italy", "countryCode": "IT", "name": "Milan", "parentid": 23424853, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/718345", "woeid": 718345 }, { "country": "Italy", "countryCode": "IT", "name": "Naples", "parentid": 23424853, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/719258", "woeid": 719258 }, { "country": "Italy", "countryCode": "IT", "name": "Palermo", "parentid": 23424853, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/719846", "woeid": 719846 }, { "country": "Italy", "countryCode": "IT", "name": "Rome", "parentid": 23424853, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/721943", "woeid": 721943 }, { "country": "Italy", "countryCode": "IT", "name": "Turin", "parentid": 23424853, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/725003", "woeid": 725003 }, { "country": "Netherlands", "countryCode": "NL", "name": "Den Haag", "parentid": 23424909, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/726874", "woeid": 726874 }, { "country": "Netherlands", "countryCode": "NL", "name": "Amsterdam", "parentid": 23424909, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/727232", "woeid": 727232 }, { "country": "Netherlands", "countryCode": "NL", "name": "Rotterdam", "parentid": 23424909, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/733075", "woeid": 733075 }, { "country": "Netherlands", "countryCode": "NL", "name": "Utrecht", "parentid": 23424909, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/734047", "woeid": 734047 }, { "country": "Spain", "countryCode": "ES", "name": "Barcelona", "parentid": 23424950, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/753692", "woeid": 753692 }, { "country": "Spain", "countryCode": "ES", "name": "Bilbao", "parentid": 23424950, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/754542", "woeid": 754542 }, { "country": "Spain", "countryCode": "ES", "name": "Las Palmas", "parentid": 23424950, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/764814", "woeid": 764814 }, { "country": "Spain", "countryCode": "ES", "name": "Madrid", "parentid": 23424950, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/766273", "woeid": 766273 }, { "country": "Spain", "countryCode": "ES", "name": "Malaga", "parentid": 23424950, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/766356", "woeid": 766356 }, { "country": "Spain", "countryCode": "ES", "name": "Murcia", "parentid": 23424950, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/768026", "woeid": 768026 }, { "country": "Spain", "countryCode": "ES", "name": "Palma", "parentid": 23424950, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/769293", "woeid": 769293 }, { "country": "Spain", "countryCode": "ES", "name": "Seville", "parentid": 23424950, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/774508", "woeid": 774508 }, { "country": "Spain", "countryCode": "ES", "name": "Valencia", "parentid": 23424950, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/776688", "woeid": 776688 }, { "country": "Spain", "countryCode": "ES", "name": "Zaragoza", "parentid": 23424950, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/779063", "woeid": 779063 }, { "country": "Switzerland", "countryCode": "CH", "name": "Geneva", "parentid": 23424957, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/782538", "woeid": 782538 }, { "country": "Switzerland", "countryCode": "CH", "name": "Lausanne", "parentid": 23424957, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/783058", "woeid": 783058 }, { "country": "Switzerland", "countryCode": "CH", "name": "Zurich", "parentid": 23424957, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/784794", "woeid": 784794 }, { "country": "Belarus", "countryCode": "BY", "name": "Brest", "parentid": 23424765, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/824382", "woeid": 824382 }, { "country": "Belarus", "countryCode": "BY", "name": "Grodno", "parentid": 23424765, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/825848", "woeid": 825848 }, { "country": "Belarus", "countryCode": "BY", "name": "Gomel", "parentid": 23424765, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/825978", "woeid": 825978 }, { "country": "Belarus", "countryCode": "BY", "name": "Minsk", "parentid": 23424765, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/834463", "woeid": 834463 }, { "country": "Latvia", "countryCode": "LV", "name": "Riga", "parentid": 23424874, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/854823", "woeid": 854823 }, { "country": "Norway", "countryCode": "NO", "name": "Bergen", "parentid": 23424910, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/857105", "woeid": 857105 }, { "country": "Norway", "countryCode": "NO", "name": "Oslo", "parentid": 23424910, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/862592", "woeid": 862592 }, { "country": "Sweden", "countryCode": "SE", "name": "Gothenburg", "parentid": 23424954, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/890869", "woeid": 890869 }, { "country": "Sweden", "countryCode": "SE", "name": "Stockholm", "parentid": 23424954, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/906057", "woeid": 906057 }, { "country": "Ukraine", "countryCode": "UA", "name": "Dnipropetrovsk", "parentid": 23424976, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/918981", "woeid": 918981 }, { "country": "Ukraine", "countryCode": "UA", "name": "Donetsk", "parentid": 23424976, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/919163", "woeid": 919163 }, { "country": "Ukraine", "countryCode": "UA", "name": "Kharkiv", "parentid": 23424976, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/922137", "woeid": 922137 }, { "country": "Ukraine", "countryCode": "UA", "name": "Kyiv", "parentid": 23424976, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/924938", "woeid": 924938 }, { "country": "Ukraine", "countryCode": "UA", "name": "Lviv", "parentid": 23424976, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/924943", "woeid": 924943 }, { "country": "Ukraine", "countryCode": "UA", "name": "Odesa", "parentid": 23424976, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/929398", "woeid": 929398 }, { "country": "Ukraine", "countryCode": "UA", "name": "Zaporozhye", "parentid": 23424976, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/939628", "woeid": 939628 }, { "country": "Greece", "countryCode": "GR", "name": "Athens", "parentid": 23424833, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/946738", "woeid": 946738 }, { "country": "Greece", "countryCode": "GR", "name": "Thessaloniki", "parentid": 23424833, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/963291", "woeid": 963291 }, { "country": "Indonesia", "countryCode": "ID", "name": "Bekasi", "parentid": 23424846, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1030077", "woeid": 1030077 }, { "country": "Indonesia", "countryCode": "ID", "name": "Depok", "parentid": 23424846, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1032539", "woeid": 1032539 }, { "country": "Indonesia", "countryCode": "ID", "name": "Pekanbaru", "parentid": 23424846, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1040779", "woeid": 1040779 }, { "country": "Indonesia", "countryCode": "ID", "name": "Surabaya", "parentid": 23424846, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1044316", "woeid": 1044316 }, { "country": "Indonesia", "countryCode": "ID", "name": "Makassar", "parentid": 23424846, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1046138", "woeid": 1046138 }, { "country": "Indonesia", "countryCode": "ID", "name": "Bandung", "parentid": 23424846, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1047180", "woeid": 1047180 }, { "country": "Indonesia", "countryCode": "ID", "name": "Jakarta", "parentid": 23424846, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1047378", "woeid": 1047378 }, { "country": "Indonesia", "countryCode": "ID", "name": "Medan", "parentid": 23424846, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1047908", "woeid": 1047908 }, { "country": "Indonesia", "countryCode": "ID", "name": "Palembang", "parentid": 23424846, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1048059", "woeid": 1048059 }, { "country": "Indonesia", "countryCode": "ID", "name": "Semarang", "parentid": 23424846, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1048324", "woeid": 1048324 }, { "country": "Indonesia", "countryCode": "ID", "name": "Tangerang", "parentid": 23424846, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1048536", "woeid": 1048536 }, { "country": "Singapore", "countryCode": "SG", "name": "Singapore", "parentid": 23424948, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1062617", "woeid": 1062617 }, { "country": "Australia", "countryCode": "AU", "name": "Perth", "parentid": 23424748, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1098081", "woeid": 1098081 }, { "country": "Australia", "countryCode": "AU", "name": "Adelaide", "parentid": 23424748, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1099805", "woeid": 1099805 }, { "country": "Australia", "countryCode": "AU", "name": "Brisbane", "parentid": 23424748, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1100661", "woeid": 1100661 }, { "country": "Australia", "countryCode": "AU", "name": "Canberra", "parentid": 23424748, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1100968", "woeid": 1100968 }, { "country": "Australia", "countryCode": "AU", "name": "Darwin", "parentid": 23424748, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1101597", "woeid": 1101597 }, { "country": "Australia", "countryCode": "AU", "name": "Melbourne", "parentid": 23424748, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1103816", "woeid": 1103816 }, { "country": "Australia", "countryCode": "AU", "name": "Sydney", "parentid": 23424748, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1105779", "woeid": 1105779 }, { "country": "Japan", "countryCode": "JP", "name": "Kitakyushu", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1110809", "woeid": 1110809 }, { "country": "Japan", "countryCode": "JP", "name": "Saitama", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1116753", "woeid": 1116753 }, { "country": "Japan", "countryCode": "JP", "name": "Chiba", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1117034", "woeid": 1117034 }, { "country": "Japan", "countryCode": "JP", "name": "Fukuoka", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1117099", "woeid": 1117099 }, { "country": "Japan", "countryCode": "JP", "name": "Hamamatsu", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1117155", "woeid": 1117155 }, { "country": "Japan", "countryCode": "JP", "name": "Hiroshima", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1117227", "woeid": 1117227 }, { "country": "Japan", "countryCode": "JP", "name": "Kawasaki", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1117502", "woeid": 1117502 }, { "country": "Japan", "countryCode": "JP", "name": "Kobe", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1117545", "woeid": 1117545 }, { "country": "Japan", "countryCode": "JP", "name": "Kumamoto", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1117605", "woeid": 1117605 }, { "country": "Japan", "countryCode": "JP", "name": "Nagoya", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1117817", "woeid": 1117817 }, { "country": "Japan", "countryCode": "JP", "name": "Niigata", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1117881", "woeid": 1117881 }, { "country": "Japan", "countryCode": "JP", "name": "Sagamihara", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1118072", "woeid": 1118072 }, { "country": "Japan", "countryCode": "JP", "name": "Sapporo", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1118108", "woeid": 1118108 }, { "country": "Japan", "countryCode": "JP", "name": "Sendai", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1118129", "woeid": 1118129 }, { "country": "Japan", "countryCode": "JP", "name": "Takamatsu", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1118285", "woeid": 1118285 }, { "country": "Japan", "countryCode": "JP", "name": "Tokyo", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1118370", "woeid": 1118370 }, { "country": "Japan", "countryCode": "JP", "name": "Yokohama", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1118550", "woeid": 1118550 }, { "country": "Korea", "countryCode": "KR", "name": "Goyang", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1130853", "woeid": 1130853 }, { "country": "Korea", "countryCode": "KR", "name": "Yongin", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132094", "woeid": 1132094 }, { "country": "Korea", "countryCode": "KR", "name": "Ansan", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132444", "woeid": 1132444 }, { "country": "Korea", "countryCode": "KR", "name": "Bucheon", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132445", "woeid": 1132445 }, { "country": "Korea", "countryCode": "KR", "name": "Busan", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132447", "woeid": 1132447 }, { "country": "Korea", "countryCode": "KR", "name": "Changwon", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132449", "woeid": 1132449 }, { "country": "Korea", "countryCode": "KR", "name": "Daegu", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132466", "woeid": 1132466 }, { "country": "Korea", "countryCode": "KR", "name": "Gwangju", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132481", "woeid": 1132481 }, { "country": "Korea", "countryCode": "KR", "name": "Incheon", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132496", "woeid": 1132496 }, { "country": "Korea", "countryCode": "KR", "name": "Seongnam", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132559", "woeid": 1132559 }, { "country": "Korea", "countryCode": "KR", "name": "Suwon", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132567", "woeid": 1132567 }, { "country": "Korea", "countryCode": "KR", "name": "Ulsan", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132578", "woeid": 1132578 }, { "country": "Korea", "countryCode": "KR", "name": "Seoul", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1132599", "woeid": 1132599 }, { "country": "Malaysia", "countryCode": "MY", "name": "Kajang", "parentid": 23424901, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1141268", "woeid": 1141268 }, { "country": "Malaysia", "countryCode": "MY", "name": "Ipoh", "parentid": 23424901, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1154679", "woeid": 1154679 }, { "country": "Malaysia", "countryCode": "MY", "name": "Johor Bahru", "parentid": 23424901, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1154698", "woeid": 1154698 }, { "country": "Malaysia", "countryCode": "MY", "name": "Klang", "parentid": 23424901, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1154726", "woeid": 1154726 }, { "country": "Malaysia", "countryCode": "MY", "name": "Kuala Lumpur", "parentid": 23424901, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1154781", "woeid": 1154781 }, { "country": "Philippines", "countryCode": "PH", "name": "Calocan", "parentid": 23424934, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1167715", "woeid": 1167715 }, { "country": "Philippines", "countryCode": "PH", "name": "Makati", "parentid": 23424934, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1180689", "woeid": 1180689 }, { "country": "Philippines", "countryCode": "PH", "name": "Pasig", "parentid": 23424934, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1187115", "woeid": 1187115 }, { "country": "Philippines", "countryCode": "PH", "name": "Taguig", "parentid": 23424934, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1195098", "woeid": 1195098 }, { "country": "Philippines", "countryCode": "PH", "name": "Antipolo", "parentid": 23424934, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1198785", "woeid": 1198785 }, { "country": "Philippines", "countryCode": "PH", "name": "Cagayan de Oro", "parentid": 23424934, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1199002", "woeid": 1199002 }, { "country": "Philippines", "countryCode": "PH", "name": "Cebu City", "parentid": 23424934, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1199079", "woeid": 1199079 }, { "country": "Philippines", "countryCode": "PH", "name": "Davao City", "parentid": 23424934, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1199136", "woeid": 1199136 }, { "country": "Philippines", "countryCode": "PH", "name": "Manila", "parentid": 23424934, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1199477", "woeid": 1199477 }, { "country": "Philippines", "countryCode": "PH", "name": "Quezon City", "parentid": 23424934, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1199682", "woeid": 1199682 }, { "country": "Philippines", "countryCode": "PH", "name": "Zamboanga City", "parentid": 23424934, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1199980", "woeid": 1199980 }, { "country": "Thailand", "countryCode": "TH", "name": "Bangkok", "parentid": 23424960, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1225448", "woeid": 1225448 }, { "country": "Vietnam", "countryCode": "VN", "name": "Hanoi", "parentid": 23424984, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1236594", "woeid": 1236594 }, { "country": "Vietnam", "countryCode": "VN", "name": "Hai Phong", "parentid": 23424984, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1236690", "woeid": 1236690 }, { "country": "Vietnam", "countryCode": "VN", "name": "Can Tho", "parentid": 23424984, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1252351", "woeid": 1252351 }, { "country": "Vietnam", "countryCode": "VN", "name": "Da Nang", "parentid": 23424984, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1252376", "woeid": 1252376 }, { "country": "Vietnam", "countryCode": "VN", "name": "Ho Chi Minh City", "parentid": 23424984, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1252431", "woeid": 1252431 }, { "country": "Algeria", "countryCode": "DZ", "name": "Algiers", "parentid": 23424740, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1253079", "woeid": 1253079 }, { "country": "Ghana", "countryCode": "GH", "name": "Accra", "parentid": 23424824, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1326075", "woeid": 1326075 }, { "country": "Ghana", "countryCode": "GH", "name": "Kumasi", "parentid": 23424824, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1330595", "woeid": 1330595 }, { "country": "Nigeria", "countryCode": "NG", "name": "Benin City", "parentid": 23424908, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1387660", "woeid": 1387660 }, { "country": "Nigeria", "countryCode": "NG", "name": "Ibadan", "parentid": 23424908, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1393672", "woeid": 1393672 }, { "country": "Nigeria", "countryCode": "NG", "name": "Kaduna", "parentid": 23424908, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1396439", "woeid": 1396439 }, { "country": "Nigeria", "countryCode": "NG", "name": "Kano", "parentid": 23424908, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1396803", "woeid": 1396803 }, { "country": "Nigeria", "countryCode": "NG", "name": "Lagos", "parentid": 23424908, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1398823", "woeid": 1398823 }, { "country": "Nigeria", "countryCode": "NG", "name": "Port Harcourt", "parentid": 23424908, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1404447", "woeid": 1404447 }, { "country": "Egypt", "countryCode": "EG", "name": "Giza", "parentid": 23424802, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1521643", "woeid": 1521643 }, { "country": "Egypt", "countryCode": "EG", "name": "Cairo", "parentid": 23424802, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1521894", "woeid": 1521894 }, { "country": "Egypt", "countryCode": "EG", "name": "Alexandria", "parentid": 23424802, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1522006", "woeid": 1522006 }, { "country": "Kenya", "countryCode": "KE", "name": "Mombasa", "parentid": 23424863, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1528335", "woeid": 1528335 }, { "country": "Kenya", "countryCode": "KE", "name": "Nairobi", "parentid": 23424863, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1528488", "woeid": 1528488 }, { "country": "South Africa", "countryCode": "ZA", "name": "Durban", "parentid": 23424942, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1580913", "woeid": 1580913 }, { "country": "South Africa", "countryCode": "ZA", "name": "Johannesburg", "parentid": 23424942, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1582504", "woeid": 1582504 }, { "country": "South Africa", "countryCode": "ZA", "name": "Port Elizabeth", "parentid": 23424942, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1586614", "woeid": 1586614 }, { "country": "South Africa", "countryCode": "ZA", "name": "Pretoria", "parentid": 23424942, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1586638", "woeid": 1586638 }, { "country": "South Africa", "countryCode": "ZA", "name": "Soweto", "parentid": 23424942, "placeType": { "code": "22", "name": "Unknown" }, "url": "http://where.yahooapis.com/v1/place/1587677", "woeid": 1587677 }, { "country": "South Africa", "countryCode": "ZA", "name": "Cape Town", "parentid": 23424942, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1591691", "woeid": 1591691 }, { "country": "Saudi Arabia", "countryCode": "SA", "name": "Medina", "parentid": 23424938, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1937801", "woeid": 1937801 }, { "country": "Saudi Arabia", "countryCode": "SA", "name": "Dammam", "parentid": 23424938, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1939574", "woeid": 1939574 }, { "country": "Saudi Arabia", "countryCode": "SA", "name": "Riyadh", "parentid": 23424938, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1939753", "woeid": 1939753 }, { "country": "Saudi Arabia", "countryCode": "SA", "name": "Jeddah", "parentid": 23424938, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1939873", "woeid": 1939873 }, { "country": "Saudi Arabia", "countryCode": "SA", "name": "Mecca", "parentid": 23424938, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1939897", "woeid": 1939897 }, { "country": "United Arab Emirates", "countryCode": "AE", "name": "Sharjah", "parentid": 23424738, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1940119", "woeid": 1940119 }, { "country": "United Arab Emirates", "countryCode": "AE", "name": "Abu Dhabi", "parentid": 23424738, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1940330", "woeid": 1940330 }, { "country": "United Arab Emirates", "countryCode": "AE", "name": "Dubai", "parentid": 23424738, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1940345", "woeid": 1940345 }, { "country": "Israel", "countryCode": "IL", "name": "Haifa", "parentid": 23424852, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1967449", "woeid": 1967449 }, { "country": "Israel", "countryCode": "IL", "name": "Tel Aviv", "parentid": 23424852, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1968212", "woeid": 1968212 }, { "country": "Israel", "countryCode": "IL", "name": "Jerusalem", "parentid": 23424852, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1968222", "woeid": 1968222 }, { "country": "Jordan", "countryCode": "JO", "name": "Amman", "parentid": 23424860, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1968902", "woeid": 1968902 }, { "country": "Russia", "countryCode": "RU", "name": "Chelyabinsk", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/1997422", "woeid": 1997422 }, { "country": "Russia", "countryCode": "RU", "name": "Khabarovsk", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2018708", "woeid": 2018708 }, { "country": "Russia", "countryCode": "RU", "name": "Krasnodar", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2028717", "woeid": 2028717 }, { "country": "Russia", "countryCode": "RU", "name": "Krasnoyarsk", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2029043", "woeid": 2029043 }, { "country": "Russia", "countryCode": "RU", "name": "Samara", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2077746", "woeid": 2077746 }, { "country": "Russia", "countryCode": "RU", "name": "Voronezh", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2108210", "woeid": 2108210 }, { "country": "Russia", "countryCode": "RU", "name": "Yekaterinburg", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2112237", "woeid": 2112237 }, { "country": "Russia", "countryCode": "RU", "name": "Irkutsk", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2121040", "woeid": 2121040 }, { "country": "Russia", "countryCode": "RU", "name": "Kazan", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2121267", "woeid": 2121267 }, { "country": "Russia", "countryCode": "RU", "name": "Moscow", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2122265", "woeid": 2122265 }, { "country": "Russia", "countryCode": "RU", "name": "Nizhny Novgorod", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2122471", "woeid": 2122471 }, { "country": "Russia", "countryCode": "RU", "name": "Novosibirsk", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2122541", "woeid": 2122541 }, { "country": "Russia", "countryCode": "RU", "name": "Omsk", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2122641", "woeid": 2122641 }, { "country": "Russia", "countryCode": "RU", "name": "Perm", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2122814", "woeid": 2122814 }, { "country": "Russia", "countryCode": "RU", "name": "Rostov-on-Don", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2123177", "woeid": 2123177 }, { "country": "Russia", "countryCode": "RU", "name": "Saint Petersburg", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2123260", "woeid": 2123260 }, { "country": "Russia", "countryCode": "RU", "name": "Ufa", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2124045", "woeid": 2124045 }, { "country": "Russia", "countryCode": "RU", "name": "Vladivostok", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2124288", "woeid": 2124288 }, { "country": "Russia", "countryCode": "RU", "name": "Volgograd", "parentid": 23424936, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2124298", "woeid": 2124298 }, { "country": "Pakistan", "countryCode": "PK", "name": "Karachi", "parentid": 23424922, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2211096", "woeid": 2211096 }, { "country": "Pakistan", "countryCode": "PK", "name": "Lahore", "parentid": 23424922, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2211177", "woeid": 2211177 }, { "country": "Pakistan", "countryCode": "PK", "name": "Multan", "parentid": 23424922, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2211269", "woeid": 2211269 }, { "country": "Pakistan", "countryCode": "PK", "name": "Rawalpindi", "parentid": 23424922, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2211387", "woeid": 2211387 }, { "country": "Pakistan", "countryCode": "PK", "name": "Faisalabad", "parentid": 23424922, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2211574", "woeid": 2211574 }, { "country": "Oman", "countryCode": "OM", "name": "Muscat", "parentid": 23424898, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2268284", "woeid": 2268284 }, { "country": "India", "countryCode": "IN", "name": "Nagpur", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2282863", "woeid": 2282863 }, { "country": "India", "countryCode": "IN", "name": "Lucknow", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295377", "woeid": 2295377 }, { "country": "India", "countryCode": "IN", "name": "Kanpur", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295378", "woeid": 2295378 }, { "country": "India", "countryCode": "IN", "name": "Patna", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295381", "woeid": 2295381 }, { "country": "India", "countryCode": "IN", "name": "Ranchi", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295383", "woeid": 2295383 }, { "country": "India", "countryCode": "IN", "name": "Kolkata", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295386", "woeid": 2295386 }, { "country": "India", "countryCode": "IN", "name": "Srinagar", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295387", "woeid": 2295387 }, { "country": "India", "countryCode": "IN", "name": "Amritsar", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295388", "woeid": 2295388 }, { "country": "India", "countryCode": "IN", "name": "Jaipur", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295401", "woeid": 2295401 }, { "country": "India", "countryCode": "IN", "name": "Ahmedabad", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295402", "woeid": 2295402 }, { "country": "India", "countryCode": "IN", "name": "Rajkot", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295404", "woeid": 2295404 }, { "country": "India", "countryCode": "IN", "name": "Surat", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295405", "woeid": 2295405 }, { "country": "India", "countryCode": "IN", "name": "Bhopal", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295407", "woeid": 2295407 }, { "country": "India", "countryCode": "IN", "name": "Indore", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295408", "woeid": 2295408 }, { "country": "India", "countryCode": "IN", "name": "Thane", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295410", "woeid": 2295410 }, { "country": "India", "countryCode": "IN", "name": "Mumbai", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295411", "woeid": 2295411 }, { "country": "India", "countryCode": "IN", "name": "Pune", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295412", "woeid": 2295412 }, { "country": "India", "countryCode": "IN", "name": "Hyderabad", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295414", "woeid": 2295414 }, { "country": "India", "countryCode": "IN", "name": "Bangalore", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295420", "woeid": 2295420 }, { "country": "India", "countryCode": "IN", "name": "Chennai", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2295424", "woeid": 2295424 }, { "country": "Turkey", "countryCode": "TR", "name": "Mersin", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2323778", "woeid": 2323778 }, { "country": "Turkey", "countryCode": "TR", "name": "Adana", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2343678", "woeid": 2343678 }, { "country": "Turkey", "countryCode": "TR", "name": "Ankara", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2343732", "woeid": 2343732 }, { "country": "Turkey", "countryCode": "TR", "name": "Antalya", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2343733", "woeid": 2343733 }, { "country": "Turkey", "countryCode": "TR", "name": "Bursa", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2343843", "woeid": 2343843 }, { "country": "Turkey", "countryCode": "TR", "name": "Diyarbakır", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2343932", "woeid": 2343932 }, { "country": "Turkey", "countryCode": "TR", "name": "Eskişehir", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2343980", "woeid": 2343980 }, { "country": "Turkey", "countryCode": "TR", "name": "Gaziantep", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2343999", "woeid": 2343999 }, { "country": "Turkey", "countryCode": "TR", "name": "Istanbul", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2344116", "woeid": 2344116 }, { "country": "Turkey", "countryCode": "TR", "name": "Izmir", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2344117", "woeid": 2344117 }, { "country": "Turkey", "countryCode": "TR", "name": "Kayseri", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2344174", "woeid": 2344174 }, { "country": "Turkey", "countryCode": "TR", "name": "Konya", "parentid": 23424969, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2344210", "woeid": 2344210 }, { "country": "Japan", "countryCode": "JP", "name": "Okinawa", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2345896", "woeid": 2345896 }, { "country": "Korea", "countryCode": "KR", "name": "Daejeon", "parentid": 23424868, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2345975", "woeid": 2345975 }, { "country": "New Zealand", "countryCode": "NZ", "name": "Auckland", "parentid": 23424916, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2348079", "woeid": 2348079 }, { "country": "United States", "countryCode": "US", "name": "Albuquerque", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2352824", "woeid": 2352824 }, { "country": "United States", "countryCode": "US", "name": "Atlanta", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2357024", "woeid": 2357024 }, { "country": "United States", "countryCode": "US", "name": "Austin", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2357536", "woeid": 2357536 }, { "country": "United States", "countryCode": "US", "name": "Baltimore", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2358820", "woeid": 2358820 }, { "country": "United States", "countryCode": "US", "name": "Baton Rouge", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2359991", "woeid": 2359991 }, { "country": "United States", "countryCode": "US", "name": "Birmingham", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2364559", "woeid": 2364559 }, { "country": "United States", "countryCode": "US", "name": "Boston", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2367105", "woeid": 2367105 }, { "country": "United States", "countryCode": "US", "name": "Charlotte", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2378426", "woeid": 2378426 }, { "country": "United States", "countryCode": "US", "name": "Chicago", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2379574", "woeid": 2379574 }, { "country": "United States", "countryCode": "US", "name": "Cincinnati", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2380358", "woeid": 2380358 }, { "country": "United States", "countryCode": "US", "name": "Cleveland", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2381475", "woeid": 2381475 }, { "country": "United States", "countryCode": "US", "name": "Colorado Springs", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2383489", "woeid": 2383489 }, { "country": "United States", "countryCode": "US", "name": "Columbus", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2383660", "woeid": 2383660 }, { "country": "United States", "countryCode": "US", "name": "Dallas-Ft. Worth", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2388929", "woeid": 2388929 }, { "country": "United States", "countryCode": "US", "name": "Denver", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2391279", "woeid": 2391279 }, { "country": "United States", "countryCode": "US", "name": "Detroit", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2391585", "woeid": 2391585 }, { "country": "United States", "countryCode": "US", "name": "El Paso", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2397816", "woeid": 2397816 }, { "country": "United States", "countryCode": "US", "name": "Fresno", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2407517", "woeid": 2407517 }, { "country": "United States", "countryCode": "US", "name": "Greensboro", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2414469", "woeid": 2414469 }, { "country": "United States", "countryCode": "US", "name": "Harrisburg", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2418046", "woeid": 2418046 }, { "country": "United States", "countryCode": "US", "name": "Honolulu", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2423945", "woeid": 2423945 }, { "country": "United States", "countryCode": "US", "name": "Houston", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2424766", "woeid": 2424766 }, { "country": "United States", "countryCode": "US", "name": "Indianapolis", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2427032", "woeid": 2427032 }, { "country": "United States", "countryCode": "US", "name": "Jackson", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2428184", "woeid": 2428184 }, { "country": "United States", "countryCode": "US", "name": "Jacksonville", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2428344", "woeid": 2428344 }, { "country": "United States", "countryCode": "US", "name": "Kansas City", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2430683", "woeid": 2430683 }, { "country": "United States", "countryCode": "US", "name": "Las Vegas", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2436704", "woeid": 2436704 }, { "country": "United States", "countryCode": "US", "name": "Long Beach", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2441472", "woeid": 2441472 }, { "country": "United States", "countryCode": "US", "name": "Los Angeles", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2442047", "woeid": 2442047 }, { "country": "United States", "countryCode": "US", "name": "Louisville", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2442327", "woeid": 2442327 }, { "country": "United States", "countryCode": "US", "name": "Memphis", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2449323", "woeid": 2449323 }, { "country": "United States", "countryCode": "US", "name": "Mesa", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2449808", "woeid": 2449808 }, { "country": "United States", "countryCode": "US", "name": "Miami", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2450022", "woeid": 2450022 }, { "country": "United States", "countryCode": "US", "name": "Milwaukee", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2451822", "woeid": 2451822 }, { "country": "United States", "countryCode": "US", "name": "Minneapolis", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2452078", "woeid": 2452078 }, { "country": "United States", "countryCode": "US", "name": "Nashville", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2457170", "woeid": 2457170 }, { "country": "United States", "countryCode": "US", "name": "New Haven", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2458410", "woeid": 2458410 }, { "country": "United States", "countryCode": "US", "name": "New Orleans", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2458833", "woeid": 2458833 }, { "country": "United States", "countryCode": "US", "name": "New York", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2459115", "woeid": 2459115 }, { "country": "United States", "countryCode": "US", "name": "Norfolk", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2460389", "woeid": 2460389 }, { "country": "United States", "countryCode": "US", "name": "Oklahoma City", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2464592", "woeid": 2464592 }, { "country": "United States", "countryCode": "US", "name": "Omaha", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2465512", "woeid": 2465512 }, { "country": "United States", "countryCode": "US", "name": "Orlando", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2466256", "woeid": 2466256 }, { "country": "United States", "countryCode": "US", "name": "Philadelphia", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2471217", "woeid": 2471217 }, { "country": "United States", "countryCode": "US", "name": "Phoenix", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2471390", "woeid": 2471390 }, { "country": "United States", "countryCode": "US", "name": "Pittsburgh", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2473224", "woeid": 2473224 }, { "country": "United States", "countryCode": "US", "name": "Portland", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2475687", "woeid": 2475687 }, { "country": "United States", "countryCode": "US", "name": "Providence", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2477058", "woeid": 2477058 }, { "country": "United States", "countryCode": "US", "name": "Raleigh", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2478307", "woeid": 2478307 }, { "country": "United States", "countryCode": "US", "name": "Richmond", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2480894", "woeid": 2480894 }, { "country": "United States", "countryCode": "US", "name": "Sacramento", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2486340", "woeid": 2486340 }, { "country": "United States", "countryCode": "US", "name": "St. Louis", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2486982", "woeid": 2486982 }, { "country": "United States", "countryCode": "US", "name": "Salt Lake City", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2487610", "woeid": 2487610 }, { "country": "United States", "countryCode": "US", "name": "San Antonio", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2487796", "woeid": 2487796 }, { "country": "United States", "countryCode": "US", "name": "San Diego", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2487889", "woeid": 2487889 }, { "country": "United States", "countryCode": "US", "name": "San Francisco", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2487956", "woeid": 2487956 }, { "country": "United States", "countryCode": "US", "name": "San Jose", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2488042", "woeid": 2488042 }, { "country": "United States", "countryCode": "US", "name": "Seattle", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2490383", "woeid": 2490383 }, { "country": "United States", "countryCode": "US", "name": "Tallahassee", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2503713", "woeid": 2503713 }, { "country": "United States", "countryCode": "US", "name": "Tampa", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2503863", "woeid": 2503863 }, { "country": "United States", "countryCode": "US", "name": "Tucson", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2508428", "woeid": 2508428 }, { "country": "United States", "countryCode": "US", "name": "Virginia Beach", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2512636", "woeid": 2512636 }, { "country": "United States", "countryCode": "US", "name": "Washington", "parentid": 23424977, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/2514815", "woeid": 2514815 }, { "country": "Japan", "countryCode": "JP", "name": "Osaka", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/15015370", "woeid": 15015370 }, { "country": "Japan", "countryCode": "JP", "name": "Kyoto", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/15015372", "woeid": 15015372 }, { "country": "India", "countryCode": "IN", "name": "Delhi", "parentid": 23424848, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/20070458", "woeid": 20070458 }, { "country": "United Arab Emirates", "countryCode": "AE", "name": "United Arab Emirates", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424738", "woeid": 23424738 }, { "country": "Algeria", "countryCode": "DZ", "name": "Algeria", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424740", "woeid": 23424740 }, { "country": "Argentina", "countryCode": "AR", "name": "Argentina", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424747", "woeid": 23424747 }, { "country": "Australia", "countryCode": "AU", "name": "Australia", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424748", "woeid": 23424748 }, { "country": "Austria", "countryCode": "AT", "name": "Austria", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424750", "woeid": 23424750 }, { "country": "Bahrain", "countryCode": "BH", "name": "Bahrain", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424753", "woeid": 23424753 }, { "country": "Belgium", "countryCode": "BE", "name": "Belgium", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424757", "woeid": 23424757 }, { "country": "Belarus", "countryCode": "BY", "name": "Belarus", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424765", "woeid": 23424765 }, { "country": "Brazil", "countryCode": "BR", "name": "Brazil", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424768", "woeid": 23424768 }, { "country": "Canada", "countryCode": "CA", "name": "Canada", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424775", "woeid": 23424775 }, { "country": "Chile", "countryCode": "CL", "name": "Chile", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424782", "woeid": 23424782 }, { "country": "Colombia", "countryCode": "CO", "name": "Colombia", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424787", "woeid": 23424787 }, { "country": "Denmark", "countryCode": "DK", "name": "Denmark", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424796", "woeid": 23424796 }, { "country": "Dominican Republic", "countryCode": "DO", "name": "Dominican Republic", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424800", "woeid": 23424800 }, { "country": "Ecuador", "countryCode": "EC", "name": "Ecuador", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424801", "woeid": 23424801 }, { "country": "Egypt", "countryCode": "EG", "name": "Egypt", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424802", "woeid": 23424802 }, { "country": "Ireland", "countryCode": "IE", "name": "Ireland", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424803", "woeid": 23424803 }, { "country": "France", "countryCode": "FR", "name": "France", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424819", "woeid": 23424819 }, { "country": "Ghana", "countryCode": "GH", "name": "Ghana", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424824", "woeid": 23424824 }, { "country": "Germany", "countryCode": "DE", "name": "Germany", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424829", "woeid": 23424829 }, { "country": "Greece", "countryCode": "GR", "name": "Greece", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424833", "woeid": 23424833 }, { "country": "Guatemala", "countryCode": "GT", "name": "Guatemala", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424834", "woeid": 23424834 }, { "country": "Indonesia", "countryCode": "ID", "name": "Indonesia", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424846", "woeid": 23424846 }, { "country": "India", "countryCode": "IN", "name": "India", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424848", "woeid": 23424848 }, { "country": "Israel", "countryCode": "IL", "name": "Israel", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424852", "woeid": 23424852 }, { "country": "Italy", "countryCode": "IT", "name": "Italy", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424853", "woeid": 23424853 }, { "country": "Japan", "countryCode": "JP", "name": "Japan", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424856", "woeid": 23424856 }, { "country": "Jordan", "countryCode": "JO", "name": "Jordan", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424860", "woeid": 23424860 }, { "country": "Kenya", "countryCode": "KE", "name": "Kenya", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424863", "woeid": 23424863 }, { "country": "Korea", "countryCode": "KR", "name": "Korea", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424868", "woeid": 23424868 }, { "country": "Kuwait", "countryCode": "KW", "name": "Kuwait", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424870", "woeid": 23424870 }, { "country": "Lebanon", "countryCode": "LB", "name": "Lebanon", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424873", "woeid": 23424873 }, { "country": "Latvia", "countryCode": "LV", "name": "Latvia", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424874", "woeid": 23424874 }, { "country": "Oman", "countryCode": "OM", "name": "Oman", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424898", "woeid": 23424898 }, { "country": "Mexico", "countryCode": "MX", "name": "Mexico", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424900", "woeid": 23424900 }, { "country": "Malaysia", "countryCode": "MY", "name": "Malaysia", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424901", "woeid": 23424901 }, { "country": "Nigeria", "countryCode": "NG", "name": "Nigeria", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424908", "woeid": 23424908 }, { "country": "Netherlands", "countryCode": "NL", "name": "Netherlands", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424909", "woeid": 23424909 }, { "country": "Norway", "countryCode": "NO", "name": "Norway", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424910", "woeid": 23424910 }, { "country": "New Zealand", "countryCode": "NZ", "name": "New Zealand", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424916", "woeid": 23424916 }, { "country": "Peru", "countryCode": "PE", "name": "Peru", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424919", "woeid": 23424919 }, { "country": "Pakistan", "countryCode": "PK", "name": "Pakistan", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424922", "woeid": 23424922 }, { "country": "Poland", "countryCode": "PL", "name": "Poland", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424923", "woeid": 23424923 }, { "country": "Panama", "countryCode": "PA", "name": "Panama", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424924", "woeid": 23424924 }, { "country": "Portugal", "countryCode": "PT", "name": "Portugal", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424925", "woeid": 23424925 }, { "country": "Qatar", "countryCode": "QA", "name": "Qatar", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424930", "woeid": 23424930 }, { "country": "Philippines", "countryCode": "PH", "name": "Philippines", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424934", "woeid": 23424934 }, { "country": "Puerto Rico", "countryCode": "PR", "name": "Puerto Rico", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424935", "woeid": 23424935 }, { "country": "Russia", "countryCode": "RU", "name": "Russia", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424936", "woeid": 23424936 }, { "country": "Saudi Arabia", "countryCode": "SA", "name": "Saudi Arabia", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424938", "woeid": 23424938 }, { "country": "South Africa", "countryCode": "ZA", "name": "South Africa", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424942", "woeid": 23424942 }, { "country": "Singapore", "countryCode": "SG", "name": "Singapore", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424948", "woeid": 23424948 }, { "country": "Spain", "countryCode": "ES", "name": "Spain", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424950", "woeid": 23424950 }, { "country": "Sweden", "countryCode": "SE", "name": "Sweden", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424954", "woeid": 23424954 }, { "country": "Switzerland", "countryCode": "CH", "name": "Switzerland", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424957", "woeid": 23424957 }, { "country": "Thailand", "countryCode": "TH", "name": "Thailand", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424960", "woeid": 23424960 }, { "country": "Turkey", "countryCode": "TR", "name": "Turkey", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424969", "woeid": 23424969 }, { "country": "United Kingdom", "countryCode": "GB", "name": "United Kingdom", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424975", "woeid": 23424975 }, { "country": "Ukraine", "countryCode": "UA", "name": "Ukraine", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424976", "woeid": 23424976 }, { "country": "United States", "countryCode": "US", "name": "United States", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424977", "woeid": 23424977 }, { "country": "Venezuela", "countryCode": "VE", "name": "Venezuela", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424982", "woeid": 23424982 }, { "country": "Vietnam", "countryCode": "VN", "name": "Vietnam", "parentid": 1, "placeType": { "code": "12", "name": "Country" }, "url": "http://where.yahooapis.com/v1/place/23424984", "woeid": 23424984 }, { "country": "Malaysia", "countryCode": "MY", "name": "Petaling", "parentid": 23424901, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/56013632", "woeid": 56013632 }, { "country": "Malaysia", "countryCode": "MY", "name": "Hulu Langat", "parentid": 23424901, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/56013645", "woeid": 56013645 }, { "country": "Saudi Arabia", "countryCode": "SA", "name": "Ahsa", "parentid": 23424938, "placeType": { "code": "9", "name": "Unknown" }, "url": "http://where.yahooapis.com/v1/place/56120136", "woeid": 56120136 }, { "country": "Japan", "countryCode": "JP", "name": "Okayama", "parentid": 23424856, "placeType": { "code": "7", "name": "Town" }, "url": "http://where.yahooapis.com/v1/place/90036018", "woeid": 90036018 } ] ================================================ FILE: src/test/resources/fixtures/rest/trends/trends.json ================================================ [ { "as_of": "2015-10-18T14:26:53Z", "created_at": "2015-10-18T14:25:04Z", "locations": [ { "name": "Worldwide", "woeid": 1 } ], "trends": [ { "name": "#vamospumas", "query": "%23vamospumas", "url": "http://twitter.com/search?q=%23vamospumas", "tweet_volume":26634 }, { "name": "#EMABiggesrFans1D", "query": "%23EMABiggesrFans1D", "url": "http://twitter.com/search?q=%23EMABiggesrFans1D", "tweet_volume":26633 }, { "name": "#PersibDay", "query": "%23PersibDay", "url": "http://twitter.com/search?q=%23PersibDay", "tweet_volume":null }, { "name": "#みなさん小中高のクラブは何でしたか", "query": "%23%E3%81%BF%E3%81%AA%E3%81%95%E3%82%93%E5%B0%8F%E4%B8%AD%E9%AB%98%E3%81%AE%E3%82%AF%E3%83%A9%E3%83%96%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%97%E3%81%9F%E3%81%8B", "url": "http://twitter.com/search?q=%23%E3%81%BF%E3%81%AA%E3%81%95%E3%82%93%E5%B0%8F%E4%B8%AD%E9%AB%98%E3%81%AE%E3%82%AF%E3%83%A9%E3%83%96%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%97%E3%81%9F%E3%81%8B", "tweet_volume":null }, { "name": "PurposeJustinBieber", "query": "PurposeJustinBieber", "url": "http://twitter.com/search?q=PurposeJustinBieber", "tweet_volume":null }, { "name": "Irlanda", "query": "Irlanda", "url": "http://twitter.com/search?q=Irlanda", "tweet_volume":null }, { "name": "#ساحكي_للاحفاد_باني_عاصرت", "query": "%23%D8%B3%D8%A7%D8%AD%D9%83%D9%8A_%D9%84%D9%84%D8%A7%D8%AD%D9%81%D8%A7%D8%AF_%D8%A8%D8%A7%D9%86%D9%8A_%D8%B9%D8%A7%D8%B5%D8%B1%D8%AA", "url": "http://twitter.com/search?q=%23%D8%B3%D8%A7%D8%AD%D9%83%D9%8A_%D9%84%D9%84%D8%A7%D8%AD%D9%81%D8%A7%D8%AF_%D8%A8%D8%A7%D9%86%D9%8A_%D8%B9%D8%A7%D8%B5%D8%B1%D8%AA", "tweet_volume":26632 }, { "name": "Griezmann", "query": "Griezmann", "url": "http://twitter.com/search?q=Griezmann", "tweet_volume":null }, { "name": "abraham mateo - old school", "query": "%22abraham+mateo+-+old+school%22", "url": "http://twitter.com/search?q=%22abraham+mateo+-+old+school%22", "tweet_volume":null }, { "name": "nico sanchez", "query": "%22nico+sanchez%22", "url": "http://twitter.com/search?q=%22nico+sanchez%22", "tweet_volume":26631 } ] } ] ================================================ FILE: src/test/resources/fixtures/rest/users/profile_banner.json ================================================ { "sizes": { "ipad_retina": { "h": 626, "w": 1252, "url": "https://pbs.twimg.com/profile_banners/6253282/1347394302/ipad_retina" }, "web": { "h": 260, "w": 520, "url": "https://pbs.twimg.com/profile_banners/6253282/1347394302/web" }, "ipad": { "h": 313, "w": 626, "url": "https://pbs.twimg.com/profile_banners/6253282/1347394302/ipad" }, "300x100": { "h": 100, "w": 300, "url": "https://pbs.twimg.com/profile_banners/6253282/1347394302/300x100" }, "web_retina": { "h": 520, "w": 1040, "url": "https://pbs.twimg.com/profile_banners/6253282/1347394302/web_retina" }, "600x200": { "h": 200, "w": 600, "url": "https://pbs.twimg.com/profile_banners/6253282/1347394302/600x200" }, "1500x500": { "h": 500, "w": 1500, "url": "https://pbs.twimg.com/profile_banners/6253282/1347394302/1500x500" }, "mobile": { "h": 160, "w": 320, "url": "https://pbs.twimg.com/profile_banners/6253282/1347394302/mobile" }, "mobile_retina": { "h": 320, "w": 640, "url": "https://pbs.twimg.com/profile_banners/6253282/1347394302/mobile_retina" } } } ================================================ FILE: src/test/resources/fixtures/rest/users/user.json ================================================ { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "profile_location": null, "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "translator_type": "regular" } ================================================ FILE: src/test/resources/fixtures/rest/users/users.json ================================================ [ { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Thu Jan 15 11:28:04 +0000 2009", "default_profile": false, "default_profile_image": false, "description": "Data Scientist - Information Retrieval, NLP, Text Analytics, Machine Learning, everything Python. PhD from @QMUL", "entities": { "hashtags": [], "media": [], "url": { "urls": [ { "indices": [ 0, 22 ], "url": "http://t.co/34uCLCPVkH", "display_url": "marcobonzanini.com", "expanded_url": "http://marcobonzanini.com" } ] }, "urls": [], "user_mentions": [], "description": { "urls": [] } }, "favourites_count": 3, "follow_request_sent": false, "following": false, "followers_count": 243, "friends_count": 206, "geo_enabled": false, "has_extended_profile": false, "id": 19018614, "id_str": "19018614", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 33, "location": "London, United Kingdom", "muting": false, "name": "Marco Bonzanini", "notifications": false, "profile_background_color": "709397", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme6/bg.gif", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme6/bg.gif", "profile_background_tile": false, "profile_image_url": "http://pbs.twimg.com/profile_images/1436932130/marco-ir_normal.jpg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/1436932130/marco-ir_normal.jpg", "profile_link_color": "FF3300", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "marcobonzanini", "show_all_inline_media": false, "status": { "contributors": [], "created_at": "Tue Oct 06 21:17:44 +0100 2015", "entities": { "hashtags": [], "media": [], "urls": [], "user_mentions": [ { "id": 97880420, "id_str": "97880420", "indices": [ 0, 15 ], "name": "Miguel Martinez", "screen_name": "miguelmalvarez" } ] }, "favorite_count": 1, "favorited": false, "id": 651491549889626112, "id_str": "651491549889626112", "in_reply_to_screen_name": "miguelmalvarez", "in_reply_to_status_id": 651445856802074625, "in_reply_to_status_id_str": "651445856802074625", "in_reply_to_user_id": 97880420, "in_reply_to_user_id_str": "97880420", "is_quote_status": false, "lang": "en", "possibly_sensitive": false, "scopes": { }, "retweet_count": 0, "retweeted": false, "source": "Twitter for iPhone", "text": "@miguelmalvarez nice one as usual", "truncated": false, "withheld_copyright": false, "withheld_in_countries": [] }, "statuses_count": 171, "time_zone": "London", "url": "http://t.co/34uCLCPVkH", "utc_offset": 3600, "verified": false }, { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Sun Nov 30 22:56:21 +0000 2008", "default_profile": true, "default_profile_image": false, "description": "lead designer of Scala", "entities": { "hashtags": [], "media": [], "url": { "urls": [ { "indices": [ 0, 22 ], "url": "http://t.co/eLC2ehOVXJ", "display_url": "lamp.epfl.ch/~odersky", "expanded_url": "http://lamp.epfl.ch/~odersky" } ] }, "urls": [], "user_mentions": [], "description": { "urls": [] } }, "favourites_count": 13, "follow_request_sent": false, "following": true, "followers_count": 34414, "friends_count": 148, "geo_enabled": false, "has_extended_profile": false, "id": 17765013, "id_str": "17765013", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 1418, "location": "Switzerland", "muting": false, "name": "Martin Odersky", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_image_url": "http://pbs.twimg.com/profile_images/673909115/Martin_normal.JPG", "profile_image_url_https": "https://pbs.twimg.com/profile_images/673909115/Martin_normal.JPG", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "odersky", "show_all_inline_media": false, "status": { "contributors": [], "created_at": "Fri Oct 09 19:36:26 +0100 2015", "entities": { "hashtags": [ { "text": "haskellx", "indices": [ 72, 81 ] } ], "media": [], "urls": [ { "indices": [ 82, 105 ], "url": "https://t.co/smC9KvzZqd", "display_url": "speakerdeck.com/larsrh/what-ha\u2026", "expanded_url": "https://speakerdeck.com/larsrh/what-haskell-can-learn-from-scala" } ], "user_mentions": [ { "id": 548301113, "id_str": "548301113", "indices": [ 3, 11 ], "name": "Lars Hupel", "screen_name": "larsr_h" }, { "id": 29444566, "id_str": "29444566", "indices": [ 131, 140 ], "name": "Miles Sabin", "screen_name": "milessabin" } ] }, "favorite_count": 0, "favorited": false, "id": 652553222977138689, "id_str": "652553222977138689", "is_quote_status": false, "lang": "en", "possibly_sensitive": false, "scopes": { }, "retweet_count": 35, "retweeted": false, "retweeted_status": { "contributors": [], "created_at": "Fri Oct 09 14:30:11 +0100 2015", "entities": { "hashtags": [ { "text": "haskellx", "indices": [ 59, 68 ] } ], "media": [], "urls": [ { "indices": [ 69, 92 ], "url": "https://t.co/smC9KvzZqd", "display_url": "speakerdeck.com/larsrh/what-ha\u2026", "expanded_url": "https://speakerdeck.com/larsrh/what-haskell-can-learn-from-scala" } ], "user_mentions": [ { "id": 29444566, "id_str": "29444566", "indices": [ 118, 129 ], "name": "Miles Sabin", "screen_name": "milessabin" } ] }, "favorite_count": 92, "favorited": false, "id": 652476152070586369, "id_str": "652476152070586369", "is_quote_status": false, "lang": "en", "possibly_sensitive": false, "scopes": { }, "retweet_count": 35, "retweeted": false, "source": "TweetDeck", "text": "Slides from my talk \"What Haskell can learn from Scala\" at #haskellx https://t.co/smC9KvzZqd \u2013 mistakes are mine, not @milessabin's :-)", "truncated": false, "withheld_copyright": false, "withheld_in_countries": [] }, "source": "Twitter Web Client", "text": "RT @larsr_h: Slides from my talk \"What Haskell can learn from Scala\" at #haskellx https://t.co/smC9KvzZqd \u2013 mistakes are mine, not @milessa\u2026", "truncated": false, "withheld_copyright": false, "withheld_in_countries": [] }, "statuses_count": 730, "time_zone": "Bern", "url": "http://t.co/eLC2ehOVXJ", "utc_offset": 7200, "verified": false } ] ================================================ FILE: src/test/resources/fixtures/streaming/common/disconnect_messages.json ================================================ [ { "disconnect":{ "code": 4, "stream_name":"my-stream-name", "reason":"something-went-wrong" } }, { "disconnect":{ "code": 2, "stream_name":"", "reason":"" } } ] ================================================ FILE: src/test/resources/fixtures/streaming/common/limit_notices.json ================================================ [ { "limit": { "track": 1234 } }, { "limit": { "track": 5678 } } ] ================================================ FILE: src/test/resources/fixtures/streaming/common/location_deletion_notices.json ================================================ [ { "scrub_geo":{ "user_id":14090452, "user_id_str":"14090452", "up_to_status_id":23260136625, "up_to_status_id_str":"23260136625" } }, { "scrub_geo":{ "user_id":14090453, "user_id_str":"14090453", "up_to_status_id":23260136626, "up_to_status_id_str":"23260136626" } } ] ================================================ FILE: src/test/resources/fixtures/streaming/common/status_deletion_notices.json ================================================ [ { "delete": { "status": { "id": 303747490128207873, "id_str": "303747490128207873", "user_id": 74558989, "user_id_str": "74558989" } } }, { "delete": { "status": { "id": 303747490128207874, "id_str": "303747490128207874", "user_id": 74558990, "user_id_str": "74558990" } } } ] ================================================ FILE: src/test/resources/fixtures/streaming/common/status_withheld_notices.json ================================================ [ { "status_withheld":{ "id":1234567890, "user_id":123456, "withheld_in_countries":["DE", "AR"] } }, { "status_withheld":{ "id":1234567891, "user_id":123457, "withheld_in_countries":["IT"] } } ] ================================================ FILE: src/test/resources/fixtures/streaming/common/tweets.json ================================================ [ { "contributors": [], "coordinates": [], "created_at": "Sun Oct 25 10:13:30 +0000 2015", "entities": { "hashtags": [ { "text": "Scala", "indices": [ 19, 25 ] }, { "text": "Java", "indices": [ 99, 104 ] } ], "media": [], "urls": [ { "url": "https://t.co/SqcXLNyx3H", "expanded_url": "http://buff.ly/1G1SVXJ", "display_url": "buff.ly/1G1SVXJ", "indices": [ 73, 96 ] } ], "user_mentions": [ { "id": 2600538973, "id_str": "2600538973", "indices": [ 3, 16 ], "name": "Scala Academy", "screen_name": "ScalaAcademy" } ] }, "favorite_count": 0, "favorited": false, "id": 658224858933927940, "id_str": "658224858933927940", "is_quote_status": false, "lang": "en", "possibly_sensitive": false, "scopes": {}, "retweet_count": 1, "retweeted": false, "retweeted_status": { "contributors": [], "coordinates": [], "created_at": "Sun Oct 25 07:47:01 +0000 2015", "entities": { "hashtags": [ { "text": "Scala", "indices": [ 1, 7 ] }, { "text": "Java", "indices": [ 81, 86 ] } ], "media": [], "urls": [ { "url": "https://t.co/SqcXLNyx3H", "expanded_url": "http://buff.ly/1G1SVXJ", "display_url": "buff.ly/1G1SVXJ", "indices": [ 55, 78 ] } ], "user_mentions": [] }, "favorite_count": 0, "favorited": false, "id": 658187995024109569, "id_str": "658187995024109569", "is_quote_status": false, "lang": "en", "possibly_sensitive": false, "scopes": {}, "retweet_count": 1, "retweeted": false, "source": "Buffer", "text": "“#Scala: Arrays are not (that much of) a special case” https://t.co/SqcXLNyx3H | #Java", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Wed Jul 02 22:51:01 +0100 2014", "default_profile": true, "default_profile_image": false, "description": "Live Interactive Scala Training Online!\ninfo@scalaacademy.com", "entities": { "hashtags": [], "media": [], "url": { "urls": [ { "url": "http://t.co/EopXLzpmhB", "expanded_url": "http://www.scala-academy.com/", "display_url": "scala-academy.com", "indices": [ 0, 22 ] } ] }, "urls": [], "user_mentions": [], "description": { "urls": [] } }, "favourites_count": 103, "follow_request_sent": false, "following": false, "followers_count": 143, "friends_count": 190, "geo_enabled": false, "has_extended_profile": false, "id": 2600538973, "id_str": "2600538973", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 22, "location": "", "muting": false, "name": "Scala Academy", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/2600538973/1443610793", "profile_image_url": "http://pbs.twimg.com/profile_images/489702099534352384/JYeeaPg4_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/489702099534352384/JYeeaPg4_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "ScalaAcademy", "show_all_inline_media": false, "statuses_count": 429, "url": "http://t.co/EopXLzpmhB", "verified": false }, "withheld_copyright": false, "withheld_in_countries": [], "metadata": { "iso_language_code": "en", "result_type": "recent" } }, "source": "final one kk", "text": "RT @ScalaAcademy: “#Scala: Arrays are not (that much of) a special case” https://t.co/SqcXLNyx3H | #Java", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Thu Dec 25 02:07:45 +0000 2014", "default_profile": false, "default_profile_image": false, "description": "Hey, I retweet #Java related tweets. Follow us and maybe you'll learn something new! Questions/concerns? Contact @jdf221 or @Jordanb844", "entities": { "hashtags": [], "media": [], "urls": [], "user_mentions": [], "description": { "urls": [] } }, "favourites_count": 62453, "follow_request_sent": false, "following": false, "followers_count": 2883, "friends_count": 19, "geo_enabled": false, "has_extended_profile": false, "id": 2942356560, "id_str": "2942356560", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 2757, "location": "", "muting": false, "name": "Java", "notifications": false, "profile_background_color": "022330", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme15/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme15/bg.png", "profile_background_tile": false, "profile_image_url": "http://pbs.twimg.com/profile_images/547942714675712000/Kr9dDPXJ_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/547942714675712000/Kr9dDPXJ_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "A8C7F7", "profile_sidebar_fill_color": "C0DFEC", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "retweetjava", "show_all_inline_media": false, "statuses_count": 167794, "verified": false }, "withheld_copyright": false, "withheld_in_countries": [], "metadata": { "iso_language_code": "en", "result_type": "recent" } }, { "contributors": [], "coordinates": [], "created_at": "Sun Oct 25 10:12:20 +0000 2015", "entities": { "hashtags": [ { "text": "LambdaWorld", "indices": [ 22, 34 ] }, { "text": "fp", "indices": [ 48, 51 ] }, { "text": "java", "indices": [ 53, 58 ] }, { "text": "scala", "indices": [ 60, 66 ] }, { "text": "manningbooks", "indices": [ 132, 140 ] } ], "media": [], "urls": [ { "url": "https://t.co/OdkWpwUDeg", "expanded_url": "http://manning.com", "display_url": "manning.com", "indices": [ 108, 131 ] } ], "user_mentions": [ { "id": 24914741, "id_str": "24914741", "indices": [ 3, 16 ], "name": "Manning Publications", "screen_name": "ManningBooks" } ] }, "favorite_count": 0, "favorited": false, "id": 658224567039717376, "id_str": "658224567039717376", "is_quote_status": false, "lang": "en", "possibly_sensitive": false, "scopes": {}, "retweet_count": 1, "retweeted": false, "retweeted_status": { "contributors": [], "coordinates": [], "created_at": "Sun Oct 25 10:00:10 +0000 2015", "entities": { "hashtags": [ { "text": "LambdaWorld", "indices": [ 4, 16 ] }, { "text": "fp", "indices": [ 30, 33 ] }, { "text": "java", "indices": [ 35, 40 ] }, { "text": "scala", "indices": [ 42, 48 ] }, { "text": "manningbooks", "indices": [ 114, 127 ] } ], "media": [], "urls": [ { "url": "https://t.co/OdkWpwUDeg", "expanded_url": "http://manning.com", "display_url": "manning.com", "indices": [ 90, 113 ] } ], "user_mentions": [] }, "favorite_count": 1, "favorited": false, "id": 658221505948442625, "id_str": "658221505948442625", "is_quote_status": false, "lang": "en", "possibly_sensitive": false, "scopes": {}, "retweet_count": 1, "retweeted": false, "source": "TweetDeck", "text": "Hey #LambdaWorld! Save 39% on #fp, #java, #scala, and other books with code ctwlambdaw at https://t.co/OdkWpwUDeg #manningbooks", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Tue Mar 17 17:13:25 +0000 2009", "default_profile": false, "default_profile_image": false, "description": "Follow Manning Publications on Twitter and get exclusive discounts, product announcements, author news, and great content.", "entities": { "hashtags": [], "media": [], "url": { "urls": [ { "url": "http://t.co/hoWlwoEP88", "expanded_url": "http://www.manning.com", "display_url": "manning.com", "indices": [ 0, 22 ] } ] }, "urls": [], "user_mentions": [], "description": { "urls": [] } }, "favourites_count": 1596, "follow_request_sent": false, "following": true, "followers_count": 13036, "friends_count": 882, "geo_enabled": true, "has_extended_profile": false, "id": 24914741, "id_str": "24914741", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 1114, "location": "Shelter Island, United States", "muting": false, "name": "Manning Publications", "notifications": false, "profile_background_color": "ACDED6", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme18/bg.gif", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme18/bg.gif", "profile_background_tile": false, "profile_image_url": "http://pbs.twimg.com/profile_images/386363365/uglyguy_normal.jpg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/386363365/uglyguy_normal.jpg", "profile_link_color": "038543", "profile_sidebar_border_color": "EEEEEE", "profile_sidebar_fill_color": "F6F6F6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "ManningBooks", "show_all_inline_media": false, "statuses_count": 20053, "time_zone": "Eastern Time (US & Canada)", "url": "http://t.co/hoWlwoEP88", "utc_offset": -14400, "verified": false }, "withheld_copyright": false, "withheld_in_countries": [], "metadata": { "iso_language_code": "en", "result_type": "recent" } }, "source": "Twitter for iPhone", "text": "RT @ManningBooks: Hey #LambdaWorld! Save 39% on #fp, #java, #scala, and other books with code ctwlambdaw at https://t.co/OdkWpwUDeg #mannin…", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon May 26 12:34:34 +0100 2008", "default_profile": false, "default_profile_image": false, "description": "Software Developer for 35 years currently involved in Java/Java EE, Apache Camel, Service Mix, ActiveMQ, Blueprint", "entities": { "hashtags": [], "media": [], "urls": [], "user_mentions": [], "description": { "urls": [] } }, "favourites_count": 26276, "follow_request_sent": false, "following": false, "followers_count": 844, "friends_count": 2003, "geo_enabled": false, "has_extended_profile": false, "id": 14908048, "id_str": "14908048", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 208, "location": "...over an Irish rainbow", "muting": false, "name": "Sr.Software Engineer", "notifications": false, "profile_background_color": "ACDED6", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme18/bg.gif", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme18/bg.gif", "profile_background_tile": false, "profile_image_url": "http://pbs.twimg.com/profile_images/3229442079/800b5f79bd5ad9c586ce5c2de8dadbed_normal.jpeg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/3229442079/800b5f79bd5ad9c586ce5c2de8dadbed_normal.jpeg", "profile_link_color": "038544", "profile_sidebar_border_color": "EEEEEE", "profile_sidebar_fill_color": "F6F6F6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "dmkavanagh", "show_all_inline_media": false, "statuses_count": 22244, "time_zone": "Eastern Time (US & Canada)", "utc_offset": -14400, "verified": false }, "withheld_copyright": false, "withheld_in_countries": [], "metadata": { "iso_language_code": "en", "result_type": "recent" } }, { "contributors": [], "coordinates": [], "created_at": "Sun Oct 25 10:11:06 +0000 2015", "entities": { "hashtags": [ { "text": "sthlm", "indices": [ 66, 72 ] }, { "text": "grotesco", "indices": [ 73, 82 ] }, { "text": "scala", "indices": [ 83, 89 ] } ], "media": [], "urls": [], "user_mentions": [ { "id": 360092133, "id_str": "360092133", "indices": [ 3, 14 ], "name": "Joakim Karlsson", "screen_name": "inoxcrom66" } ] }, "favorite_count": 0, "favorited": false, "id": 658224254136266752, "id_str": "658224254136266752", "is_quote_status": false, "lang": "sv", "possibly_sensitive": false, "scopes": {}, "retweet_count": 1, "retweeted": false, "retweeted_status": { "contributors": [], "coordinates": [], "created_at": "Sat Sep 26 21:21:30 +0100 2015", "entities": { "hashtags": [ { "text": "sthlm", "indices": [ 50, 56 ] }, { "text": "grotesco", "indices": [ 57, 66 ] }, { "text": "scala", "indices": [ 67, 73 ] } ], "media": [], "urls": [], "user_mentions": [] }, "favorite_count": 2, "favorited": false, "id": 647868621352513537, "id_str": "647868621352513537", "is_quote_status": false, "lang": "sv", "possibly_sensitive": false, "scopes": {}, "retweet_count": 1, "retweeted": false, "source": "Twitter for iPhone", "text": "Grotesco på scala är lätt det roligaste jag sett! #sthlm #grotesco #scala", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Aug 22 18:34:27 +0100 2011", "default_profile": true, "default_profile_image": false, "description": "Arbetar som coach inom skolans värld där jag främst utför kartläggningar, rådgiver samt modellhandleder där högre måluppfyllelse samt inkludering är målen!", "entities": { "hashtags": [], "media": [], "urls": [], "user_mentions": [], "description": { "urls": [] } }, "favourites_count": 1188, "follow_request_sent": false, "following": false, "followers_count": 474, "friends_count": 1018, "geo_enabled": true, "has_extended_profile": false, "id": 360092133, "id_str": "360092133", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 7, "location": "Sweden", "muting": false, "name": "Joakim Karlsson", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_image_url": "http://pbs.twimg.com/profile_images/3028538656/0744f020227938a4513fb65931279954_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/3028538656/0744f020227938a4513fb65931279954_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "inoxcrom66", "show_all_inline_media": false, "statuses_count": 5360, "verified": false }, "withheld_copyright": false, "withheld_in_countries": [], "metadata": { "iso_language_code": "sv", "result_type": "recent" } }, "source": "Twitter Web Client", "text": "RT @inoxcrom66: Grotesco på scala är lätt det roligaste jag sett! #sthlm #grotesco #scala", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Wed Sep 24 10:52:42 +0100 2014", "default_profile": true, "default_profile_image": false, "description": "Specialpedagogik,Diktberoende, Lärarförbundet, Forskning ,utveckling, Nyfiken ,Helhetssyn ,Musik gäller i alla lägen..Orden är mina egna.Gått med 2014", "entities": { "hashtags": [], "media": [], "urls": [], "user_mentions": [], "description": { "urls": [] } }, "favourites_count": 193, "follow_request_sent": false, "following": false, "followers_count": 746, "friends_count": 2019, "geo_enabled": false, "has_extended_profile": false, "id": 2829569412, "id_str": "2829569412", "is_translation_enabled": false, "is_translator": false, "lang": "sv", "listed_count": 15, "location": "Stockholm ", "muting": false, "name": "Lena Ahlstedt", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_image_url": "http://pbs.twimg.com/profile_images/516293991663284224/PfpToqSG_normal.jpeg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/516293991663284224/PfpToqSG_normal.jpeg", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "AhlstedtLena", "show_all_inline_media": false, "statuses_count": 2284, "verified": false }, "withheld_copyright": false, "withheld_in_countries": [], "metadata": { "iso_language_code": "sv", "result_type": "recent" } }, { "contributors": [], "coordinates": [], "created_at": "Sun Oct 25 10:10:07 +0000 2015", "entities": { "hashtags": [ { "text": "pezzo", "indices": [ 18, 24 ] }, { "text": "scala", "indices": [ 28, 34 ] } ], "media": [], "urls": [], "user_mentions": [ { "id": 847497841, "id_str": "847497841", "indices": [ 0, 8 ], "name": "#ercica", "screen_name": "PiLu975" } ] }, "favorite_count": 1, "favorited": false, "id": 658224007532146689, "id_str": "658224007532146689", "in_reply_to_screen_name": "PiLu975", "in_reply_to_status_id": 658223568560484352, "in_reply_to_status_id_str": "658223568560484352", "in_reply_to_user_id": 847497841, "in_reply_to_user_id_str": "847497841", "is_quote_status": false, "lang": "und", "possibly_sensitive": false, "scopes": {}, "retweet_count": 0, "retweeted": false, "source": "Twitter for Android", "text": "@PiLu975 massí,un #pezzo,na #scala,fai tu..", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Wed Aug 13 23:11:29 +0100 2014", "default_profile": false, "default_profile_image": false, "description": "BIONICO", "entities": { "hashtags": [], "media": [], "urls": [], "user_mentions": [], "description": { "urls": [] } }, "favourites_count": 40902, "follow_request_sent": false, "following": false, "followers_count": 999, "friends_count": 536, "geo_enabled": false, "has_extended_profile": false, "id": 2742164776, "id_str": "2742164776", "is_translation_enabled": false, "is_translator": false, "lang": "it", "listed_count": 15, "location": "STOCAZZO ", "muting": false, "name": "➡IO,ROBIROBOT➡", "notifications": false, "profile_background_color": "000000", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/2742164776/1420286493", "profile_image_url": "http://pbs.twimg.com/profile_images/581585418942038016/pWGN3SUe_normal.jpg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/581585418942038016/pWGN3SUe_normal.jpg", "profile_link_color": "DD2E44", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "000000", "profile_text_color": "000000", "profile_use_background_image": false, "protected": false, "screen_name": "robirobot74", "show_all_inline_media": false, "statuses_count": 34209, "time_zone": "Ljubljana", "utc_offset": 3600, "verified": false }, "withheld_copyright": false, "withheld_in_countries": [], "metadata": { "iso_language_code": "und", "result_type": "recent" } }, { "contributors": [], "coordinates": [], "created_at": "Sun Oct 25 10:04:18 +0000 2015", "entities": { "hashtags": [ { "text": "Slick", "indices": [ 16, 22 ] }, { "text": "ensime", "indices": [ 66, 73 ] }, { "text": "scala", "indices": [ 118, 124 ] } ], "media": [], "urls": [ { "url": "https://t.co/ixPHEeFYpL", "expanded_url": "https://github.com/ensime/ensime-server/pull/1119", "display_url": "github.com/ensime/ensime-…", "indices": [ 82, 105 ] } ], "user_mentions": [ { "id": 315265842, "id_str": "315265842", "indices": [ 3, 9 ], "name": "Christopher Vogt", "screen_name": "cvogt" }, { "id": 6526632, "id_str": "6526632", "indices": [ 109, 116 ], "name": "Sam Halliday", "screen_name": "fommil" } ] }, "favorite_count": 0, "favorited": false, "id": 658222545196437504, "id_str": "658222545196437504", "is_quote_status": false, "lang": "en", "possibly_sensitive": false, "scopes": {}, "retweet_count": 7, "retweeted": false, "retweeted_status": { "contributors": [], "coordinates": [], "created_at": "Sun Oct 25 01:55:18 +0000 2015", "entities": { "hashtags": [ { "text": "Slick", "indices": [ 5, 11 ] }, { "text": "ensime", "indices": [ 55, 62 ] }, { "text": "scala", "indices": [ 107, 113 ] } ], "media": [], "urls": [ { "url": "https://t.co/ixPHEeFYpL", "expanded_url": "https://github.com/ensime/ensime-server/pull/1119", "display_url": "github.com/ensime/ensime-…", "indices": [ 71, 94 ] } ], "user_mentions": [ { "id": 6526632, "id_str": "6526632", "indices": [ 98, 105 ], "name": "Sam Halliday", "screen_name": "fommil" } ] }, "favorite_count": 10, "favorited": false, "id": 658099484866564097, "id_str": "658099484866564097", "is_quote_status": false, "lang": "en", "possibly_sensitive": false, "scopes": {}, "retweet_count": 7, "retweeted": false, "source": "TweetDeck", "text": "Need #Slick 2 -> 3 migration example? Just upgraded #ensime-server. https://t.co/ixPHEeFYpL cc @fommil #scala", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Sat Jun 11 16:42:41 +0100 2011", "default_profile": false, "default_profile_image": false, "description": "Software Engineer at @xdotai / Scala Slick developer", "entities": { "hashtags": [], "media": [], "url": { "urls": [ { "url": "https://t.co/iOgSCN2TH8", "expanded_url": "https://github.com/cvogt/compossible", "display_url": "github.com/cvogt/compossi…", "indices": [ 0, 23 ] } ] }, "urls": [], "user_mentions": [], "description": { "urls": [] } }, "favourites_count": 105, "follow_request_sent": false, "following": false, "followers_count": 748, "friends_count": 40, "geo_enabled": false, "has_extended_profile": false, "id": 315265842, "id_str": "315265842", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 27, "location": "NYC", "muting": false, "name": "Christopher Vogt", "notifications": false, "profile_background_color": "000000", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme14/bg.gif", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme14/bg.gif", "profile_background_tile": false, "profile_image_url": "http://pbs.twimg.com/profile_images/542684298621358080/sTwaAI0k_normal.jpeg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/542684298621358080/sTwaAI0k_normal.jpeg", "profile_link_color": "3B94D9", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "000000", "profile_text_color": "000000", "profile_use_background_image": false, "protected": false, "screen_name": "cvogt", "show_all_inline_media": false, "statuses_count": 681, "time_zone": "Berlin", "url": "https://t.co/iOgSCN2TH8", "utc_offset": 3600, "verified": false }, "withheld_copyright": false, "withheld_in_countries": [], "metadata": { "iso_language_code": "en", "result_type": "recent" } }, "source": "Twitter for Android", "text": "RT @cvogt: Need #Slick 2 -> 3 migration example? Just upgraded #ensime-server. https://t.co/ixPHEeFYpL cc @fommil #scala", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Sat Jun 02 18:54:55 +0100 2007", "default_profile": true, "default_profile_image": false, "description": "Scala, Java, Big Data, R&D, Mathematics, Leadership", "entities": { "hashtags": [], "media": [], "url": { "urls": [ { "url": "http://t.co/cuoDY9MRMI", "expanded_url": "http://github.com/fommil", "display_url": "github.com/fommil", "indices": [ 0, 22 ] } ] }, "urls": [], "user_mentions": [], "description": { "urls": [] } }, "favourites_count": 2199, "follow_request_sent": false, "following": false, "followers_count": 504, "friends_count": 186, "geo_enabled": true, "has_extended_profile": false, "id": 6526632, "id_str": "6526632", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 44, "location": "London", "muting": false, "name": "Sam Halliday", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/6526632/1363946877", "profile_image_url": "http://pbs.twimg.com/profile_images/494912315976736768/x9VVsrs2_normal.jpeg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/494912315976736768/x9VVsrs2_normal.jpeg", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "fommil", "show_all_inline_media": false, "statuses_count": 1840, "time_zone": "Europe/London", "url": "http://t.co/cuoDY9MRMI", "utc_offset": 0, "verified": false }, "withheld_copyright": false, "withheld_in_countries": [], "metadata": { "iso_language_code": "en", "result_type": "recent" } } ] ================================================ FILE: src/test/resources/fixtures/streaming/common/user_withheld_notices.json ================================================ [ { "user_withheld":{ "id":123456, "withheld_in_countries":["DE","AR"] } }, { "user_withheld":{ "id":123457, "withheld_in_countries":["IT"] } } ] ================================================ FILE: src/test/resources/fixtures/streaming/common/warning_messages.json ================================================ [ { "warning":{ "code":"FALLING_BEHIND", "message":"Your connection is falling behind and messages are being queued for delivery to you. Your queue is now over 60% full. You will be disconnected when the queue is full.", "percent_full": 60 } } ] ================================================ FILE: src/test/resources/fixtures/streaming/site/control_messages.json ================================================ [ { "control": { "control_uri": "/1.1/site/c/01_225167_334389048B872A533002B34D73F8C29FD09EFC50" } } ] ================================================ FILE: src/test/resources/fixtures/streaming/site/user_envelop_direct_message.json ================================================ [ { "for_user": 1000, "message": { "id": 542081720715980800, "id_str": "542081720715980800", "text": "fflatorre uses TrueTwit validation. To validate click here: http:\/\/t.co\/aldtQxlbCb", "sender": { "id": 535354329, "id_str": "535354329", "name": "Francesco la Torre", "screen_name": "AllegroJazzz", "location": "", "description": "", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 20, "friends_count": 157, "listed_count": 6, "created_at": "Sat Mar 24 11:46:38 +0000 2012", "favourites_count": 28, "utc_offset": 3600, "time_zone": "London", "geo_enabled": false, "verified": false, "statuses_count": 22, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "709397", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1944949620\/facebook-che-jpg_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1944949620\/facebook-che-jpg_normal.jpg", "profile_link_color": "4C71BD", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "sender_id": 535354329, "sender_id_str": "535354329", "sender_screen_name": "AllegroJazzz", "recipient": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 133, "friends_count": 95, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 189, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "recipient_id": 2911461333, "recipient_id_str": "2911461333", "recipient_screen_name": "DanielaSfregola", "created_at": "Mon Dec 08 22:22:08 +0000 2014", "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/aldtQxlbCb", "expanded_url": "http:\/\/truetwit.com\/vy328523129", "display_url": "truetwit.com\/vy328523129", "indices": [ 60, 82 ] } ] } } } ] ================================================ FILE: src/test/resources/fixtures/streaming/site/user_envelop_direct_message_stringified.json ================================================ [ { "for_user": "1000", "message": { "id": 542081720715980800, "id_str": "542081720715980800", "text": "fflatorre uses TrueTwit validation. To validate click here: http:\/\/t.co\/aldtQxlbCb", "sender": { "id": 535354329, "id_str": "535354329", "name": "Francesco la Torre", "screen_name": "AllegroJazzz", "location": "", "description": "", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 20, "friends_count": 157, "listed_count": 6, "created_at": "Sat Mar 24 11:46:38 +0000 2012", "favourites_count": 28, "utc_offset": 3600, "time_zone": "London", "geo_enabled": false, "verified": false, "statuses_count": 22, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "709397", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1944949620\/facebook-che-jpg_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1944949620\/facebook-che-jpg_normal.jpg", "profile_link_color": "4C71BD", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "sender_id": 535354329, "sender_id_str": "535354329", "sender_screen_name": "AllegroJazzz", "recipient": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 133, "friends_count": 95, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 189, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "recipient_id": 2911461333, "recipient_id_str": "2911461333", "recipient_screen_name": "DanielaSfregola", "created_at": "Mon Dec 08 22:22:08 +0000 2014", "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/aldtQxlbCb", "expanded_url": "http:\/\/truetwit.com\/vy328523129", "display_url": "truetwit.com\/vy328523129", "indices": [ 60, 82 ] } ] } } } ] ================================================ FILE: src/test/resources/fixtures/streaming/site/user_envelop_simple_event.json ================================================ [ { "for_user": 42, "message": { "created_at": "Sun Oct 25 10:13:30 +0000 2015", "event": "user_update", "source": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "target": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } } } ] ================================================ FILE: src/test/resources/fixtures/streaming/site/user_envelop_simple_event_stringified.json ================================================ [ { "for_user": "42", "message": { "created_at": "Sun Oct 25 10:13:30 +0000 2015", "event": "user_update", "source": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "target": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } } } ] ================================================ FILE: src/test/resources/fixtures/streaming/site/user_envelop_tweet.json ================================================ [ { "for_user": 1888, "message": { "contributors": [], "coordinates": [], "created_at": "Sun Oct 25 10:13:30 +0000 2015", "entities": { "hashtags": [ { "text": "Scala", "indices": [ 19, 25 ] }, { "text": "Java", "indices": [ 99, 104 ] } ], "media": [], "urls": [ { "url": "https://t.co/SqcXLNyx3H", "expanded_url": "http://buff.ly/1G1SVXJ", "display_url": "buff.ly/1G1SVXJ", "indices": [ 73, 96 ] } ], "user_mentions": [ { "id": 2600538973, "id_str": "2600538973", "indices": [ 3, 16 ], "name": "Scala Academy", "screen_name": "ScalaAcademy" } ] }, "favorite_count": 0, "favorited": false, "id": 658224858933927940, "id_str": "658224858933927940", "is_quote_status": false, "lang": "en", "possibly_sensitive": false, "scopes": {}, "retweet_count": 1, "retweeted": false, "retweeted_status": { "contributors": [], "coordinates": [], "created_at": "Sun Oct 25 07:47:01 +0000 2015", "entities": { "hashtags": [ { "text": "Scala", "indices": [ 1, 7 ] }, { "text": "Java", "indices": [ 81, 86 ] } ], "media": [], "urls": [ { "url": "https://t.co/SqcXLNyx3H", "expanded_url": "http://buff.ly/1G1SVXJ", "display_url": "buff.ly/1G1SVXJ", "indices": [ 55, 78 ] } ], "user_mentions": [] }, "favorite_count": 0, "favorited": false, "id": 658187995024109569, "id_str": "658187995024109569", "is_quote_status": false, "lang": "en", "possibly_sensitive": false, "scopes": {}, "retweet_count": 1, "retweeted": false, "source": "Buffer", "text": "\u201c#Scala: Arrays are not (that much of) a special case\u201d https://t.co/SqcXLNyx3H | #Java", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Wed Jul 02 22:51:01 +0100 2014", "default_profile": true, "default_profile_image": false, "description": "Live Interactive Scala Training Online!\ninfo@scalaacademy.com", "entities": { "hashtags": [], "media": [], "url": { "urls": [ { "url": "http://t.co/EopXLzpmhB", "expanded_url": "http://www.scala-academy.com/", "display_url": "scala-academy.com", "indices": [ 0, 22 ] } ] }, "urls": [], "user_mentions": [], "description": { "urls": [] } }, "favourites_count": 103, "follow_request_sent": false, "following": false, "followers_count": 143, "friends_count": 190, "geo_enabled": false, "has_extended_profile": false, "id": 2600538973, "id_str": "2600538973", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 22, "location": "", "muting": false, "name": "Scala Academy", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/2600538973/1443610793", "profile_image_url": "http://pbs.twimg.com/profile_images/489702099534352384/JYeeaPg4_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/489702099534352384/JYeeaPg4_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "ScalaAcademy", "show_all_inline_media": false, "statuses_count": 429, "url": "http://t.co/EopXLzpmhB", "verified": false }, "withheld_copyright": false, "withheld_in_countries": [], "metadata": { "iso_language_code": "en", "result_type": "recent" } }, "source": "final one kk", "text": "RT @ScalaAcademy: \u201c#Scala: Arrays are not (that much of) a special case\u201d https://t.co/SqcXLNyx3H | #Java", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Thu Dec 25 02:07:45 +0000 2014", "default_profile": false, "default_profile_image": false, "description": "Hey, I retweet #Java related tweets. Follow us and maybe you'll learn something new! Questions/concerns? Contact @jdf221 or @Jordanb844", "entities": { "hashtags": [], "media": [], "urls": [], "user_mentions": [], "description": { "urls": [] } }, "favourites_count": 62453, "follow_request_sent": false, "following": false, "followers_count": 2883, "friends_count": 19, "geo_enabled": false, "has_extended_profile": false, "id": 2942356560, "id_str": "2942356560", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 2757, "location": "", "muting": false, "name": "Java", "notifications": false, "profile_background_color": "022330", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme15/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme15/bg.png", "profile_background_tile": false, "profile_image_url": "http://pbs.twimg.com/profile_images/547942714675712000/Kr9dDPXJ_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/547942714675712000/Kr9dDPXJ_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "A8C7F7", "profile_sidebar_fill_color": "C0DFEC", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "retweetjava", "show_all_inline_media": false, "statuses_count": 167794, "verified": false }, "withheld_copyright": false, "withheld_in_countries": [], "metadata": { "iso_language_code": "en", "result_type": "recent" } } } ] ================================================ FILE: src/test/resources/fixtures/streaming/site/user_envelop_tweet_event.json ================================================ [ { "for_user": 42, "message": { "created_at": "Sun Oct 25 10:13:30 +0000 2015", "event": "favorite", "target": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "source": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "target_object": { "created_at": "Mon Sep 26 20:25:28 +0000 2016", "id": 780503578079297536, "id_str": "780503578079297536", "text": "RT @MatthewBogart: Um\u2026 at least I know I\u2019ll never hear songs like that one I liked again. https:\/\/t.co\/KvnRtXL9QX", "truncated": false, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "MatthewBogart", "name": "Matthew Bogart", "id": 13458372, "id_str": "13458372", "indices": [ 3, 17 ] } ], "urls": [], "media": [ { "id": 780422806433517568, "id_str": "780422806433517568", "indices": [ 90, 113 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "url": "https:\/\/t.co\/KvnRtXL9QX", "display_url": "pic.twitter.com\/KvnRtXL9QX", "expanded_url": "https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 900, "h": 1200, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1152, "h": 1536, "resize": "fit" }, "small": { "w": 510, "h": 680, "resize": "fit" } }, "source_status_id": 780422808518086656, "source_status_id_str": "780422808518086656", "source_user_id": 13458372, "source_user_id_str": "13458372" } ] }, "extended_entities": { "media": [ { "id": 780422806433517568, "id_str": "780422806433517568", "indices": [ 90, 113 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "url": "https:\/\/t.co\/KvnRtXL9QX", "display_url": "pic.twitter.com\/KvnRtXL9QX", "expanded_url": "https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 900, "h": 1200, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1152, "h": 1536, "resize": "fit" }, "small": { "w": 510, "h": 680, "resize": "fit" } }, "source_status_id": 780422808518086656, "source_status_id_str": "780422808518086656", "source_user_id": 13458372, "source_user_id_str": "13458372", "video_info": null } ] }, "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e", "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 786491, "id_str": "786491", "name": "andy piper \/ pipes", "screen_name": "andypiper", "location": "Kingston upon Thames, London", "url": "https:\/\/www.justgiving.com\/fundraising\/Debbie-Piper18", "description": "I'm on the @TwitterDev team, supporting and listening to developers working on the Twitter platform. Code, community, and respect. #HeForShe \u2328\ufe0f \ud83c\udf08 \ud83d\ude47", "protected": false, "followers_count": 13799, "friends_count": 3791, "listed_count": 822, "created_at": "Wed Feb 21 15:14:48 +0000 2007", "favourites_count": 71158, "utc_offset": 3600, "time_zone": "London", "geo_enabled": true, "verified": false, "statuses_count": 92485, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "ACDEEE", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/758942034195390464\/JKfZFVIM_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/758942034195390464\/JKfZFVIM_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/786491\/1468424285", "profile_link_color": "6EA8E6", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "F6F6F6", "profile_text_color": "333333", "profile_use_background_image": true, "default_profile": false, "default_profile_image": false, "following": null, "follow_request_sent": null, "notifications": null }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Mon Sep 26 15:04:31 +0000 2016", "id": 780422808518086656, "id_str": "780422808518086656", "text": "Um\u2026 at least I know I\u2019ll never hear songs like that one I liked again. https:\/\/t.co\/KvnRtXL9QX", "truncated": false, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [], "media": [ { "id": 780422806433517568, "id_str": "780422806433517568", "indices": [ 71, 94 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "url": "https:\/\/t.co\/KvnRtXL9QX", "display_url": "pic.twitter.com\/KvnRtXL9QX", "expanded_url": "https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 900, "h": 1200, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1152, "h": 1536, "resize": "fit" }, "small": { "w": 510, "h": 680, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 780422806433517568, "id_str": "780422806433517568", "indices": [ 71, 94 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "url": "https:\/\/t.co\/KvnRtXL9QX", "display_url": "pic.twitter.com\/KvnRtXL9QX", "expanded_url": "https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 900, "h": 1200, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1152, "h": 1536, "resize": "fit" }, "small": { "w": 510, "h": 680, "resize": "fit" } }, "video_info": null } ] }, "source": "\u003ca href=\"http:\/\/www.apple.com\/\" rel=\"nofollow\"\u003eOS X\u003c\/a\u003e", "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 13458372, "id_str": "13458372", "name": "Matthew Bogart", "screen_name": "MatthewBogart", "location": "Portland Oregon", "url": "http:\/\/matthewbogart.net", "description": "Cartoonist guy. I drew THE CHAIRS' HIATUS and OH' IT'S THE END OF THE WORLD", "protected": false, "followers_count": 689, "friends_count": 351, "listed_count": 44, "created_at": "Thu Feb 14 03:47:34 +0000 2008", "favourites_count": 10226, "utc_offset": -28800, "time_zone": "Alaska", "geo_enabled": true, "verified": false, "statuses_count": 13250, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "000000", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/166478868\/logoball_wallpaper.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/166478868\/logoball_wallpaper.png", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/573278419980431361\/JFqhQ3FU_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/573278419980431361\/JFqhQ3FU_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/13458372\/1442687405", "profile_link_color": "FF5454", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "DAECF4", "profile_text_color": "663B12", "profile_use_background_image": false, "default_profile": false, "default_profile_image": false, "following": null, "follow_request_sent": null, "notifications": null }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" } } } ] ================================================ FILE: src/test/resources/fixtures/streaming/site/user_envelop_tweet_event_stringified.json ================================================ [ { "for_user": "42", "message": { "created_at": "Sun Oct 25 10:13:30 +0000 2015", "event": "favorite", "target": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "source": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "target_object": { "created_at": "Mon Sep 26 20:25:28 +0000 2016", "id": 780503578079297536, "id_str": "780503578079297536", "text": "RT @MatthewBogart: Um\u2026 at least I know I\u2019ll never hear songs like that one I liked again. https:\/\/t.co\/KvnRtXL9QX", "truncated": false, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "MatthewBogart", "name": "Matthew Bogart", "id": 13458372, "id_str": "13458372", "indices": [ 3, 17 ] } ], "urls": [], "media": [ { "id": 780422806433517568, "id_str": "780422806433517568", "indices": [ 90, 113 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "url": "https:\/\/t.co\/KvnRtXL9QX", "display_url": "pic.twitter.com\/KvnRtXL9QX", "expanded_url": "https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 900, "h": 1200, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1152, "h": 1536, "resize": "fit" }, "small": { "w": 510, "h": 680, "resize": "fit" } }, "source_status_id": 780422808518086656, "source_status_id_str": "780422808518086656", "source_user_id": 13458372, "source_user_id_str": "13458372" } ] }, "extended_entities": { "media": [ { "id": 780422806433517568, "id_str": "780422806433517568", "indices": [ 90, 113 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "url": "https:\/\/t.co\/KvnRtXL9QX", "display_url": "pic.twitter.com\/KvnRtXL9QX", "expanded_url": "https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 900, "h": 1200, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1152, "h": 1536, "resize": "fit" }, "small": { "w": 510, "h": 680, "resize": "fit" } }, "source_status_id": 780422808518086656, "source_status_id_str": "780422808518086656", "source_user_id": 13458372, "source_user_id_str": "13458372", "video_info": null } ] }, "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e", "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 786491, "id_str": "786491", "name": "andy piper \/ pipes", "screen_name": "andypiper", "location": "Kingston upon Thames, London", "url": "https:\/\/www.justgiving.com\/fundraising\/Debbie-Piper18", "description": "I'm on the @TwitterDev team, supporting and listening to developers working on the Twitter platform. Code, community, and respect. #HeForShe \u2328\ufe0f \ud83c\udf08 \ud83d\ude47", "protected": false, "followers_count": 13799, "friends_count": 3791, "listed_count": 822, "created_at": "Wed Feb 21 15:14:48 +0000 2007", "favourites_count": 71158, "utc_offset": 3600, "time_zone": "London", "geo_enabled": true, "verified": false, "statuses_count": 92485, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "ACDEEE", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/758942034195390464\/JKfZFVIM_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/758942034195390464\/JKfZFVIM_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/786491\/1468424285", "profile_link_color": "6EA8E6", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "F6F6F6", "profile_text_color": "333333", "profile_use_background_image": true, "default_profile": false, "default_profile_image": false, "following": null, "follow_request_sent": null, "notifications": null }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Mon Sep 26 15:04:31 +0000 2016", "id": 780422808518086656, "id_str": "780422808518086656", "text": "Um\u2026 at least I know I\u2019ll never hear songs like that one I liked again. https:\/\/t.co\/KvnRtXL9QX", "truncated": false, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [], "media": [ { "id": 780422806433517568, "id_str": "780422806433517568", "indices": [ 71, 94 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "url": "https:\/\/t.co\/KvnRtXL9QX", "display_url": "pic.twitter.com\/KvnRtXL9QX", "expanded_url": "https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 900, "h": 1200, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1152, "h": 1536, "resize": "fit" }, "small": { "w": 510, "h": 680, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 780422806433517568, "id_str": "780422806433517568", "indices": [ 71, 94 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "url": "https:\/\/t.co\/KvnRtXL9QX", "display_url": "pic.twitter.com\/KvnRtXL9QX", "expanded_url": "https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 900, "h": 1200, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1152, "h": 1536, "resize": "fit" }, "small": { "w": 510, "h": 680, "resize": "fit" } }, "video_info": null } ] }, "source": "\u003ca href=\"http:\/\/www.apple.com\/\" rel=\"nofollow\"\u003eOS X\u003c\/a\u003e", "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 13458372, "id_str": "13458372", "name": "Matthew Bogart", "screen_name": "MatthewBogart", "location": "Portland Oregon", "url": "http:\/\/matthewbogart.net", "description": "Cartoonist guy. I drew THE CHAIRS' HIATUS and OH' IT'S THE END OF THE WORLD", "protected": false, "followers_count": 689, "friends_count": 351, "listed_count": 44, "created_at": "Thu Feb 14 03:47:34 +0000 2008", "favourites_count": 10226, "utc_offset": -28800, "time_zone": "Alaska", "geo_enabled": true, "verified": false, "statuses_count": 13250, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "000000", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/166478868\/logoball_wallpaper.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/166478868\/logoball_wallpaper.png", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/573278419980431361\/JFqhQ3FU_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/573278419980431361\/JFqhQ3FU_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/13458372\/1442687405", "profile_link_color": "FF5454", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "DAECF4", "profile_text_color": "663B12", "profile_use_background_image": false, "default_profile": false, "default_profile_image": false, "following": null, "follow_request_sent": null, "notifications": null }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" } } } ] ================================================ FILE: src/test/resources/fixtures/streaming/site/user_envelop_tweet_stringified.json ================================================ [ { "for_user": "42", "message": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" } } ] ================================================ FILE: src/test/resources/fixtures/streaming/site/user_envelop_twitter_list_event.json ================================================ [ { "for_user": 1000, "message": { "created_at": "Sun Oct 25 10:13:30 +0000 2015", "event": "list_created", "target": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "source": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "target_object": { "created_at": "Wed Oct 14 07:29:51 +0100 2015", "description": "a nice description", "following": false, "full_name": "@DanielaSfregola/my-list", "id": 222669735, "id_str": "222669735", "name": "my-list", "subscriber_count": 0, "uri": "/DanielaSfregola/lists/my-list", "member_count": 0, "mode": "private", "slug": "my-list", "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "entities": { "hashtags": [], "media": [], "url": { "urls": [ { "indices": [ 0, 23 ], "url": "https://t.co/0FKNGVnRwX", "display_url": "danielasfregola.com", "expanded_url": "https://www.danielasfregola.com/" } ] }, "urls": [], "user_mentions": [], "description": { "urls": [] } }, "favourites_count": 69, "follow_request_sent": false, "following": false, "followers_count": 133, "friends_count": 98, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "statuses_count": 192, "url": "https://t.co/0FKNGVnRwX", "verified": false } } } } ] ================================================ FILE: src/test/resources/fixtures/streaming/site/user_envelop_twitter_list_event_stringified.json ================================================ [ { "for_user": "1000", "message": { "created_at": "Sun Oct 25 10:13:30 +0000 2015", "event": "list_created", "target": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "source": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "target_object": { "created_at": "Wed Oct 14 07:29:51 +0100 2015", "description": "a nice description", "following": false, "full_name": "@DanielaSfregola/my-list", "id": 222669735, "id_str": "222669735", "name": "my-list", "subscriber_count": 0, "uri": "/DanielaSfregola/lists/my-list", "member_count": 0, "mode": "private", "slug": "my-list", "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "entities": { "hashtags": [], "media": [], "url": { "urls": [ { "indices": [ 0, 23 ], "url": "https://t.co/0FKNGVnRwX", "display_url": "danielasfregola.com", "expanded_url": "https://www.danielasfregola.com/" } ] }, "urls": [], "user_mentions": [], "description": { "urls": [] } }, "favourites_count": 69, "follow_request_sent": false, "following": false, "followers_count": 133, "friends_count": 98, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "statuses_count": 192, "url": "https://t.co/0FKNGVnRwX", "verified": false } } } } ] ================================================ FILE: src/test/resources/fixtures/streaming/site/user_envelop_warning_message.json ================================================ [ { "for_user": 42, "message": { "warning": { "code": "FALLING_BEHIND", "message": "Your connection is falling behind and messages are being queued for delivery to you. Your queue is now over 60% full. You will be disconnected when the queue is full.", "percent_full": 60 } } } ] ================================================ FILE: src/test/resources/fixtures/streaming/site/user_envelop_warning_message_stringified.json ================================================ [ { "for_user": "42", "message": { "warning": { "code": "FALLING_BEHIND", "message": "Your connection is falling behind and messages are being queued for delivery to you. Your queue is now over 60% full. You will be disconnected when the queue is full.", "percent_full": 60 } } } ] ================================================ FILE: src/test/resources/fixtures/streaming/site/user_envelops_friends_list.json ================================================ [ { "for_user": 1888, "message": { "friends": [0, 1, 2, 3, 4] } } ] ================================================ FILE: src/test/resources/fixtures/streaming/site/user_envelops_friends_list_stringified.json ================================================ [ { "for_user": "1888", "message": { "friends": [0, 1, 2, 3, 4] } } ] ================================================ FILE: src/test/resources/fixtures/streaming/user/direct_messages.json ================================================ [ { "id": 542081720715980800, "id_str": "542081720715980800", "text": "fflatorre uses TrueTwit validation. To validate click here: http:\/\/t.co\/aldtQxlbCb", "sender": { "id": 535354329, "id_str": "535354329", "name": "Francesco la Torre", "screen_name": "AllegroJazzz", "location": "", "description": "", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 20, "friends_count": 157, "listed_count": 6, "created_at": "Sat Mar 24 11:46:38 +0000 2012", "favourites_count": 28, "utc_offset": 3600, "time_zone": "London", "geo_enabled": false, "verified": false, "statuses_count": 22, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "709397", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1944949620\/facebook-che-jpg_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1944949620\/facebook-che-jpg_normal.jpg", "profile_link_color": "4C71BD", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "sender_id": 535354329, "sender_id_str": "535354329", "sender_screen_name": "AllegroJazzz", "recipient": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 133, "friends_count": 95, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 189, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "recipient_id": 2911461333, "recipient_id_str": "2911461333", "recipient_screen_name": "DanielaSfregola", "created_at": "Mon Dec 08 22:22:08 +0000 2014", "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/aldtQxlbCb", "expanded_url": "http:\/\/truetwit.com\/vy328523129", "display_url": "truetwit.com\/vy328523129", "indices": [ 60, 82 ] } ] } } ] ================================================ FILE: src/test/resources/fixtures/streaming/user/events.json ================================================ [ { "event": "favorited_retweet", "created_at": "Mon Sep 26 20:33:07 +0000 2016", "source": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "url": "https:\/\/www.danielasfregola.com", "description": "Blogger, Tech Leader at PayTouch", "protected": false, "followers_count": 301, "friends_count": 194, "listed_count": 23, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 102, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 425, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "default_profile": true, "default_profile_image": false, "following": null, "follow_request_sent": null, "notifications": null }, "target": { "id": 786491, "id_str": "786491", "name": "andy piper \/ pipes", "screen_name": "andypiper", "location": "Kingston upon Thames, London", "url": "https:\/\/www.justgiving.com\/fundraising\/Debbie-Piper18", "description": "I'm on the @TwitterDev team, supporting and listening to developers working on the Twitter platform. Code, community, and respect. #HeForShe \u2328\ufe0f \ud83c\udf08 \ud83d\ude47", "protected": false, "followers_count": 13799, "friends_count": 3791, "listed_count": 822, "created_at": "Wed Feb 21 15:14:48 +0000 2007", "favourites_count": 71158, "utc_offset": 3600, "time_zone": "London", "geo_enabled": true, "verified": false, "statuses_count": 92485, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "ACDEEE", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/758942034195390464\/JKfZFVIM_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/758942034195390464\/JKfZFVIM_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/786491\/1468424285", "profile_link_color": "6EA8E6", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "F6F6F6", "profile_text_color": "333333", "profile_use_background_image": true, "default_profile": false, "default_profile_image": false, "following": null, "follow_request_sent": null, "notifications": null }, "target_object": { "created_at": "Mon Sep 26 20:25:28 +0000 2016", "id": 780503578079297536, "id_str": "780503578079297536", "text": "RT @MatthewBogart: Um\u2026 at least I know I\u2019ll never hear songs like that one I liked again. https:\/\/t.co\/KvnRtXL9QX", "truncated": false, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "MatthewBogart", "name": "Matthew Bogart", "id": 13458372, "id_str": "13458372", "indices": [ 3, 17 ] } ], "urls": [], "media": [ { "id": 780422806433517568, "id_str": "780422806433517568", "indices": [ 90, 113 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "url": "https:\/\/t.co\/KvnRtXL9QX", "display_url": "pic.twitter.com\/KvnRtXL9QX", "expanded_url": "https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 900, "h": 1200, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1152, "h": 1536, "resize": "fit" }, "small": { "w": 510, "h": 680, "resize": "fit" } }, "source_status_id": 780422808518086656, "source_status_id_str": "780422808518086656", "source_user_id": 13458372, "source_user_id_str": "13458372" } ] }, "extended_entities": { "media": [ { "id": 780422806433517568, "id_str": "780422806433517568", "indices": [ 90, 113 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "url": "https:\/\/t.co\/KvnRtXL9QX", "display_url": "pic.twitter.com\/KvnRtXL9QX", "expanded_url": "https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 900, "h": 1200, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1152, "h": 1536, "resize": "fit" }, "small": { "w": 510, "h": 680, "resize": "fit" } }, "source_status_id": 780422808518086656, "source_status_id_str": "780422808518086656", "source_user_id": 13458372, "source_user_id_str": "13458372", "video_info": null } ] }, "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e", "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 786491, "id_str": "786491", "name": "andy piper \/ pipes", "screen_name": "andypiper", "location": "Kingston upon Thames, London", "url": "https:\/\/www.justgiving.com\/fundraising\/Debbie-Piper18", "description": "I'm on the @TwitterDev team, supporting and listening to developers working on the Twitter platform. Code, community, and respect. #HeForShe \u2328\ufe0f \ud83c\udf08 \ud83d\ude47", "protected": false, "followers_count": 13799, "friends_count": 3791, "listed_count": 822, "created_at": "Wed Feb 21 15:14:48 +0000 2007", "favourites_count": 71158, "utc_offset": 3600, "time_zone": "London", "geo_enabled": true, "verified": false, "statuses_count": 92485, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "ACDEEE", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/758942034195390464\/JKfZFVIM_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/758942034195390464\/JKfZFVIM_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/786491\/1468424285", "profile_link_color": "6EA8E6", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "F6F6F6", "profile_text_color": "333333", "profile_use_background_image": true, "default_profile": false, "default_profile_image": false, "following": null, "follow_request_sent": null, "notifications": null }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Mon Sep 26 15:04:31 +0000 2016", "id": 780422808518086656, "id_str": "780422808518086656", "text": "Um\u2026 at least I know I\u2019ll never hear songs like that one I liked again. https:\/\/t.co\/KvnRtXL9QX", "truncated": false, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [], "media": [ { "id": 780422806433517568, "id_str": "780422806433517568", "indices": [ 71, 94 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "url": "https:\/\/t.co\/KvnRtXL9QX", "display_url": "pic.twitter.com\/KvnRtXL9QX", "expanded_url": "https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 900, "h": 1200, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1152, "h": 1536, "resize": "fit" }, "small": { "w": 510, "h": 680, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 780422806433517568, "id_str": "780422806433517568", "indices": [ 71, 94 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "url": "https:\/\/t.co\/KvnRtXL9QX", "display_url": "pic.twitter.com\/KvnRtXL9QX", "expanded_url": "https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 900, "h": 1200, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1152, "h": 1536, "resize": "fit" }, "small": { "w": 510, "h": 680, "resize": "fit" } }, "video_info": null } ] }, "source": "\u003ca href=\"http:\/\/www.apple.com\/\" rel=\"nofollow\"\u003eOS X\u003c\/a\u003e", "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 13458372, "id_str": "13458372", "name": "Matthew Bogart", "screen_name": "MatthewBogart", "location": "Portland Oregon", "url": "http:\/\/matthewbogart.net", "description": "Cartoonist guy. I drew THE CHAIRS' HIATUS and OH' IT'S THE END OF THE WORLD", "protected": false, "followers_count": 689, "friends_count": 351, "listed_count": 44, "created_at": "Thu Feb 14 03:47:34 +0000 2008", "favourites_count": 10226, "utc_offset": -28800, "time_zone": "Alaska", "geo_enabled": true, "verified": false, "statuses_count": 13250, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "000000", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/166478868\/logoball_wallpaper.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/166478868\/logoball_wallpaper.png", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/573278419980431361\/JFqhQ3FU_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/573278419980431361\/JFqhQ3FU_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/13458372\/1442687405", "profile_link_color": "FF5454", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "DAECF4", "profile_text_color": "663B12", "profile_use_background_image": false, "default_profile": false, "default_profile_image": false, "following": null, "follow_request_sent": null, "notifications": null }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" } }, { "event": "unfavorite", "created_at": "Mon Sep 26 20:40:35 +0000 2016", "source": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "url": "https:\/\/www.danielasfregola.com", "description": "Blogger, Tech Leader at PayTouch", "protected": false, "followers_count": 301, "friends_count": 194, "listed_count": 23, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 101, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 425, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "default_profile": true, "default_profile_image": false, "following": null, "follow_request_sent": null, "notifications": null }, "target": { "id": 13458372, "id_str": "13458372", "name": "Matthew Bogart", "screen_name": "MatthewBogart", "location": "Portland Oregon", "url": "http:\/\/matthewbogart.net", "description": "Cartoonist guy. I drew THE CHAIRS' HIATUS and OH' IT'S THE END OF THE WORLD", "protected": false, "followers_count": 689, "friends_count": 351, "listed_count": 44, "created_at": "Thu Feb 14 03:47:34 +0000 2008", "favourites_count": 10226, "utc_offset": -28800, "time_zone": "Alaska", "geo_enabled": true, "verified": false, "statuses_count": 13250, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "000000", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/166478868\/logoball_wallpaper.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/166478868\/logoball_wallpaper.png", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/573278419980431361\/JFqhQ3FU_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/573278419980431361\/JFqhQ3FU_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/13458372\/1442687405", "profile_link_color": "FF5454", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "DAECF4", "profile_text_color": "663B12", "profile_use_background_image": false, "default_profile": false, "default_profile_image": false, "following": null, "follow_request_sent": null, "notifications": null }, "target_object": { "created_at": "Mon Sep 26 15:04:31 +0000 2016", "id": 780422808518086656, "id_str": "780422808518086656", "text": "Um\u2026 at least I know I\u2019ll never hear songs like that one I liked again. https:\/\/t.co\/KvnRtXL9QX", "truncated": false, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [], "media": [ { "id": 780422806433517568, "id_str": "780422806433517568", "indices": [ 71, 94 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "url": "https:\/\/t.co\/KvnRtXL9QX", "display_url": "pic.twitter.com\/KvnRtXL9QX", "expanded_url": "https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 900, "h": 1200, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1152, "h": 1536, "resize": "fit" }, "small": { "w": 510, "h": 680, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 780422806433517568, "id_str": "780422806433517568", "indices": [ 71, 94 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "url": "https:\/\/t.co\/KvnRtXL9QX", "display_url": "pic.twitter.com\/KvnRtXL9QX", "expanded_url": "https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 900, "h": 1200, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1152, "h": 1536, "resize": "fit" }, "small": { "w": 510, "h": 680, "resize": "fit" } }, "video_info": null } ] }, "source": "\u003ca href=\"http:\/\/www.apple.com\/\" rel=\"nofollow\"\u003eOS X\u003c\/a\u003e", "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 13458372, "id_str": "13458372", "name": "Matthew Bogart", "screen_name": "MatthewBogart", "location": "Portland Oregon", "url": "http:\/\/matthewbogart.net", "description": "Cartoonist guy. I drew THE CHAIRS' HIATUS and OH' IT'S THE END OF THE WORLD", "protected": false, "followers_count": 689, "friends_count": 351, "listed_count": 44, "created_at": "Thu Feb 14 03:47:34 +0000 2008", "favourites_count": 10226, "utc_offset": -28800, "time_zone": "Alaska", "geo_enabled": true, "verified": false, "statuses_count": 13250, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "000000", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/166478868\/logoball_wallpaper.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/166478868\/logoball_wallpaper.png", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/573278419980431361\/JFqhQ3FU_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/573278419980431361\/JFqhQ3FU_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/13458372\/1442687405", "profile_link_color": "FF5454", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "DAECF4", "profile_text_color": "663B12", "profile_use_background_image": false, "default_profile": false, "default_profile_image": false, "following": null, "follow_request_sent": null, "notifications": null }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 171, "favorite_count": 335, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" } } ] ================================================ FILE: src/test/resources/fixtures/streaming/user/friends_lists.json ================================================ [ { "friends": [0,1,2,3,4] } ] ================================================ FILE: src/test/resources/fixtures/streaming/user/friends_lists_stringified.json ================================================ [ { "friends": ["0","1","2","3","4"] } ] ================================================ FILE: src/test/resources/twitter/authentication/access_token.txt ================================================ oauth_token=6253282-eWudHldSbIaelX7swmsiHImEL4KinwaGloHANdrY&oauth_token_secret=2EEfA6BG3ly3sR3RjE0IBSnlQu4ZrUzPiYKmrkVU&user_id=6253282&screen_name=twitterapi ================================================ FILE: src/test/resources/twitter/authentication/request_token.txt ================================================ oauth_token=Z6eEdO8MOmk394WozF5oKyuAv855l4Mlqo7hhlSLik&oauth_token_secret=Kd75W4OQfb2oJTV0vzGzeXftVAwgMnEK9MumzYcM&oauth_callback_confirmed=true ================================================ FILE: src/test/resources/twitter/rest/account/settings.json ================================================ { "protected": false, "screen_name": "DanielaSfregola", "always_use_https": true, "use_cookie_personalization": true, "sleep_time": { "enabled": false, "end_time": null, "start_time": null }, "geo_enabled": true, "language": "en", "discoverable_by_email": true, "discoverable_by_mobile_phone": false, "display_sensitive_media": false, "allow_contributor_request": "all", "allow_dms_from": "following", "allow_dm_groups_from": "following" } ================================================ FILE: src/test/resources/twitter/rest/account/user.json ================================================ { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } ================================================ FILE: src/test/resources/twitter/rest/accountactivity/webhook.json ================================================ { "id": "1234567890123456789", "url": "https://danielasfregola/webhook", "valid": true, "created_timestamp": "2020-06-22 15:19:10 +0000" } ================================================ FILE: src/test/resources/twitter/rest/application/rate_limits.json ================================================ { "rate_limit_context": { "access_token": "2911461333-Mp3Ci04w91xYPcmxWUBGwPtD6stuYpn0smxlXBw" }, "resources": { "lists": { "\/lists\/list": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/lists\/memberships": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/lists\/subscribers\/show": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/lists\/members": { "limit": 180, "remaining": 180, "reset": 1445181993 }, "\/lists\/subscriptions": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/lists\/show": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/lists\/ownerships": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/lists\/subscribers": { "limit": 180, "remaining": 180, "reset": 1445181993 }, "\/lists\/members\/show": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/lists\/statuses": { "limit": 180, "remaining": 180, "reset": 1445181993 } }, "application": { "\/application\/rate_limit_status": { "limit": 180, "remaining": 179, "reset": 1445181993 } }, "mutes": { "\/mutes\/users\/list": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/mutes\/users\/ids": { "limit": 15, "remaining": 15, "reset": 1445181993 } }, "friendships": { "\/friendships\/outgoing": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/friendships\/no_retweets\/ids": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/friendships\/lookup": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/friendships\/incoming": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/friendships\/show": { "limit": 180, "remaining": 180, "reset": 1445181993 } }, "blocks": { "\/blocks\/list": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/blocks\/ids": { "limit": 15, "remaining": 15, "reset": 1445181993 } }, "geo": { "\/geo\/similar_places": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/geo\/id\/:place_id": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/geo\/reverse_geocode": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/geo\/search": { "limit": 15, "remaining": 15, "reset": 1445181993 } }, "users": { "\/users\/report_spam": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/users\/show\/:id": { "limit": 180, "remaining": 180, "reset": 1445181993 }, "\/users\/search": { "limit": 180, "remaining": 180, "reset": 1445181993 }, "\/users\/suggestions\/:slug": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/users\/derived_info": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/users\/profile_banner": { "limit": 180, "remaining": 180, "reset": 1445181993 }, "\/users\/suggestions\/:slug\/members": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/users\/lookup": { "limit": 180, "remaining": 180, "reset": 1445181993 }, "\/users\/suggestions": { "limit": 15, "remaining": 15, "reset": 1445181993 } }, "followers": { "\/followers\/ids": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/followers\/list": { "limit": 15, "remaining": 15, "reset": 1445181993 } }, "collections": { "\/collections\/list": { "limit": 1000, "remaining": 1000, "reset": 1445181993 }, "\/collections\/entries": { "limit": 1000, "remaining": 1000, "reset": 1445181993 }, "\/collections\/show": { "limit": 1000, "remaining": 1000, "reset": 1445181993 } }, "statuses": { "\/statuses\/retweeters\/ids": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/statuses\/retweets_of_me": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/statuses\/home_timeline": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/statuses\/show\/:id": { "limit": 180, "remaining": 180, "reset": 1445181993 }, "\/statuses\/user_timeline": { "limit": 180, "remaining": 180, "reset": 1445181993 }, "\/statuses\/friends": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/statuses\/retweets\/:id": { "limit": 60, "remaining": 60, "reset": 1445181993 }, "\/statuses\/mentions_timeline": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/statuses\/oembed": { "limit": 180, "remaining": 180, "reset": 1445181993 }, "\/statuses\/lookup": { "limit": 180, "remaining": 180, "reset": 1445181993 } }, "contacts": { "\/contacts\/uploaded_by": { "limit": 300, "remaining": 300, "reset": 1445181993 }, "\/contacts\/users": { "limit": 300, "remaining": 300, "reset": 1445181993 }, "\/contacts\/addressbook": { "limit": 300, "remaining": 300, "reset": 1445181993 }, "\/contacts\/users_and_uploaded_by": { "limit": 300, "remaining": 300, "reset": 1445181993 }, "\/contacts\/delete\/status": { "limit": 300, "remaining": 300, "reset": 1445181993 } }, "moments": { "\/moments\/permissions": { "limit": 300, "remaining": 300, "reset": 1445181993 } }, "help": { "\/help\/tos": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/help\/configuration": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/help\/settings": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/help\/privacy": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/help\/languages": { "limit": 15, "remaining": 15, "reset": 1445181993 } }, "friends": { "\/friends\/following\/ids": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/friends\/following\/list": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/friends\/list": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/friends\/ids": { "limit": 15, "remaining": 15, "reset": 1445181993 } }, "direct_messages": { "\/direct_messages\/sent": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/direct_messages": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/direct_messages\/sent_and_received": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/direct_messages\/show": { "limit": 15, "remaining": 15, "reset": 1445181993 } }, "account": { "\/account\/login_verification_enrollment": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/account\/update_profile": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/account\/verify_credentials": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/account\/settings": { "limit": 15, "remaining": 15, "reset": 1445181993 } }, "favorites": { "\/favorites\/list": { "limit": 15, "remaining": 15, "reset": 1445181993 } }, "device": { "\/device\/token": { "limit": 15, "remaining": 15, "reset": 1445181993 } }, "saved_searches": { "\/saved_searches\/destroy\/:id": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/saved_searches\/show\/:id": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/saved_searches\/list": { "limit": 15, "remaining": 15, "reset": 1445181993 } }, "search": { "\/search\/tweets": { "limit": 180, "remaining": 180, "reset": 1445181993 } }, "trends": { "\/trends\/closest": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/trends\/available": { "limit": 15, "remaining": 15, "reset": 1445181993 }, "\/trends\/place": { "limit": 15, "remaining": 15, "reset": 1445181993 } } } } ================================================ FILE: src/test/resources/twitter/rest/blocks/blocked_users.json ================================================ { "users": [ { "id": 115417677, "id_str": "115417677", "name": "vianel", "screen_name": "vianeltxt", "location": "", "description": "", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 312, "friends_count": 287, "listed_count": 2, "created_at": "Thu Feb 18 16:00:11 +0000 2010", "favourites_count": 27, "utc_offset": -16200, "time_zone": "Caracas", "geo_enabled": true, "verified": false, "statuses_count": 15400, "lang": "es", "status": { "created_at": "Thu Oct 08 02:35:08 +0000 2015", "id": 651948913981816832, "id_str": "651948913981816832", "text": "Just a bad day", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "022330", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/476864639511580672\/pjCo_hqX_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/476864639511580672\/pjCo_hqX_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/115417677\/1402527744", "profile_link_color": "0084B4", "profile_sidebar_border_color": "A8C7F7", "profile_sidebar_fill_color": "C0DFEC", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 46762206, "id_str": "46762206", "name": "Eman Shaaban", "screen_name": "eman_sha3ban", "location": "Egypt", "description": "", "url": null, "entities": { "description": { "urls": [] } }, "protected": true, "followers_count": 103, "friends_count": 158, "listed_count": 2, "created_at": "Fri Jun 12 22:15:51 +0000 2009", "favourites_count": 90, "utc_offset": 7200, "time_zone": "Cairo", "geo_enabled": false, "verified": false, "statuses_count": 126, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "BADFCD", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/460273362\/xc93e90571a9a3fb42d63c0c96cd7400.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/460273362\/xc93e90571a9a3fb42d63c0c96cd7400.png", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/620634983\/_1__normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/620634983\/_1__normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/46762206\/1397952631", "profile_link_color": "0084B4", "profile_sidebar_border_color": "464E52", "profile_sidebar_fill_color": "171B1C", "profile_text_color": "ED710C", "profile_use_background_image": true, "has_extended_profile": true, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 10422372, "id_str": "10422372", "name": "Hibai Unzueta", "screen_name": "hanbzu", "location": "Bilbao", "description": "Restless learner, curiosity driven being who likes to build things on top of things. Maps, schedules, urbanism, user experience, visualisation, open data...", "url": "http:\/\/t.co\/ftcV3ISCdx", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/ftcV3ISCdx", "expanded_url": "http:\/\/www.hibaiunzueta.com", "display_url": "hibaiunzueta.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 316, "friends_count": 881, "listed_count": 27, "created_at": "Tue Nov 20 20:06:19 +0000 2007", "favourites_count": 1493, "utc_offset": 7200, "time_zone": "Bern", "geo_enabled": false, "verified": false, "statuses_count": 3567, "lang": "eu", "status": { "created_at": "Thu Oct 08 14:14:36 +0000 2015", "id": 652124939898781697, "id_str": "652124939898781697", "text": "@sabik @MaxCRoser @ryankcroft Great. Let's make them get better faster.", "source": "\u003ca href=\"https:\/\/about.twitter.com\/products\/tweetdeck\" rel=\"nofollow\"\u003eTweetDeck\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": 652082286456803328, "in_reply_to_status_id_str": "652082286456803328", "in_reply_to_user_id": 18239001, "in_reply_to_user_id_str": "18239001", "in_reply_to_screen_name": "sabik", "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "sabik", "name": "sabik", "id": 18239001, "id_str": "18239001", "indices": [ 0, 6 ] }, { "screen_name": "MaxCRoser", "name": "Max Roser", "id": 610659001, "id_str": "610659001", "indices": [ 7, 17 ] }, { "screen_name": "ryankcroft", "name": "Ryan Croft", "id": 23508925, "id_str": "23508925", "indices": [ 18, 29 ] } ], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": true, "profile_background_color": "303B3A", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/378800000014647504\/afc6c9c095a1ecb82c64641182bd9e5d.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/378800000014647504\/afc6c9c095a1ecb82c64641182bd9e5d.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/477501971897671681\/iMcbVCyF_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/477501971897671681\/iMcbVCyF_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/10422372\/1402680057", "profile_link_color": "FFCC4D", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "FFFFFF", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 14351119, "id_str": "14351119", "name": "patrickmcgloin", "screen_name": "patrickmcgloin", "location": "Amsterdam", "description": "", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 40, "friends_count": 380, "listed_count": 1, "created_at": "Thu Apr 10 13:43:50 +0000 2008", "favourites_count": 11, "utc_offset": -7200, "time_zone": "Greenland", "geo_enabled": false, "verified": false, "statuses_count": 78, "lang": "en", "status": { "created_at": "Fri Sep 18 11:32:10 +0000 2015", "id": 644836303998160896, "id_str": "644836303998160896", "text": "RT @Hamperlady: Spotted in Boston today at the Irish famine monument. Sounds familiar? #refugeeswelcome http:\/\/t.co\/UNs0HkfWDM", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Sat Sep 12 23:44:06 +0000 2015", "id": 642846175687741440, "id_str": "642846175687741440", "text": "Spotted in Boston today at the Irish famine monument. Sounds familiar? #refugeeswelcome http:\/\/t.co\/UNs0HkfWDM", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 124, "favorite_count": 60, "entities": { "hashtags": [ { "text": "refugeeswelcome", "indices": [ 71, 87 ] } ], "symbols": [], "user_mentions": [], "urls": [], "media": [ { "id": 642846141629927424, "id_str": "642846141629927424", "indices": [ 88, 110 ], "media_url": "http:\/\/pbs.twimg.com\/media\/COvZKO0VEAAtmhf.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/COvZKO0VEAAtmhf.jpg", "url": "http:\/\/t.co\/UNs0HkfWDM", "display_url": "pic.twitter.com\/UNs0HkfWDM", "expanded_url": "http:\/\/twitter.com\/Hamperlady\/status\/642846175687741440\/photo\/1", "type": "photo", "sizes": { "small": { "w": 340, "h": 340, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "medium": { "w": 600, "h": 600, "resize": "fit" }, "large": { "w": 1024, "h": 1024, "resize": "fit" } } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "retweet_count": 124, "favorite_count": 0, "entities": { "hashtags": [ { "text": "refugeeswelcome", "indices": [ 87, 103 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "Hamperlady", "name": "Amanda", "id": 19398524, "id_str": "19398524", "indices": [ 3, 14 ] } ], "urls": [], "media": [ { "id": 642846141629927424, "id_str": "642846141629927424", "indices": [ 104, 126 ], "media_url": "http:\/\/pbs.twimg.com\/media\/COvZKO0VEAAtmhf.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/COvZKO0VEAAtmhf.jpg", "url": "http:\/\/t.co\/UNs0HkfWDM", "display_url": "pic.twitter.com\/UNs0HkfWDM", "expanded_url": "http:\/\/twitter.com\/Hamperlady\/status\/642846175687741440\/photo\/1", "type": "photo", "sizes": { "small": { "w": 340, "h": 340, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "medium": { "w": 600, "h": 600, "resize": "fit" }, "large": { "w": 1024, "h": 1024, "resize": "fit" } }, "source_status_id": 642846175687741440, "source_status_id_str": "642846175687741440", "source_user_id": 19398524, "source_user_id_str": "19398524" } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/510836130158489601\/ff7Pk4vw_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/510836130158489601\/ff7Pk4vw_normal.jpeg", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 57122539, "id_str": "57122539", "name": "Andrea Tomasello", "screen_name": "TomZ85", "location": "Bologna, Italy", "description": "", "url": "http:\/\/t.co\/HUvDLSOdhW", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/HUvDLSOdhW", "expanded_url": "http:\/\/about.me\/tomz85", "display_url": "about.me\/tomz85", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 92, "friends_count": 466, "listed_count": 3, "created_at": "Wed Jul 15 20:10:49 +0000 2009", "favourites_count": 25, "utc_offset": 7200, "time_zone": "Rome", "geo_enabled": true, "verified": false, "statuses_count": 188, "lang": "it", "status": { "created_at": "Fri Sep 25 13:03:04 +0000 2015", "id": 647395896540442625, "id_str": "647395896540442625", "text": "RT @supergiampaolo: Slides of my talk on Scala at Treviso Scala Group: \"Scala 101, first steps with Scala\": http:\/\/t.co\/PxgydyRARy #scala", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Thu Sep 24 22:47:33 +0000 2015", "id": 647180599153819652, "id_str": "647180599153819652", "text": "Slides of my talk on Scala at Treviso Scala Group: \"Scala 101, first steps with Scala\": http:\/\/t.co\/PxgydyRARy #scala", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": { "id": "cf5d106c94750000", "url": "https:\/\/api.twitter.com\/1.1\/geo\/id\/cf5d106c94750000.json", "place_type": "city", "name": "Trieste", "full_name": "Trieste, Friuli-Venezia Giulia", "country_code": "IT", "country": "Italia", "contained_within": [], "bounding_box": { "type": "Polygon", "coordinates": [ [ [ 13.6683593, 45.6067875 ], [ 13.8985003, 45.6067875 ], [ 13.8985003, 45.7467022 ], [ 13.6683593, 45.7467022 ] ] ] }, "attributes": {} }, "contributors": null, "retweet_count": 14, "favorite_count": 16, "entities": { "hashtags": [ { "text": "scala", "indices": [ 111, 117 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/PxgydyRARy", "expanded_url": "http:\/\/www.slideshare.net\/GiampaoloTrapasso\/scala101-first-steps-with-scala", "display_url": "slideshare.net\/GiampaoloTrapa\u2026", "indices": [ 88, 110 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "retweet_count": 14, "favorite_count": 0, "entities": { "hashtags": [ { "text": "scala", "indices": [ 131, 137 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "supergiampaolo", "name": "Giampaolo Trapasso", "id": 22006274, "id_str": "22006274", "indices": [ 3, 18 ] } ], "urls": [ { "url": "http:\/\/t.co\/PxgydyRARy", "expanded_url": "http:\/\/www.slideshare.net\/GiampaoloTrapasso\/scala101-first-steps-with-scala", "display_url": "slideshare.net\/GiampaoloTrapa\u2026", "indices": [ 108, 130 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "022330", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/638699520281444352\/wqy7U3QN_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/638699520281444352\/wqy7U3QN_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/57122539\/1441112921", "profile_link_color": "0084B4", "profile_sidebar_border_color": "A8C7F7", "profile_sidebar_fill_color": "C0DFEC", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 55730801, "id_str": "55730801", "name": "Nathaniel Hansen", "screen_name": "Nat_Hansen", "location": "Global", "description": "Primary actions: Research & Content Development. 2015: The machine becomes conscious, humans segment by heart interests, IoT takes off on a mass scale.", "url": "http:\/\/t.co\/1TBURBFHqg", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/1TBURBFHqg", "expanded_url": "http:\/\/www.thesocializers.com", "display_url": "thesocializers.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 2422, "friends_count": 2647, "listed_count": 158, "created_at": "Sat Jul 11 02:11:55 +0000 2009", "favourites_count": 1916, "utc_offset": 3600, "time_zone": "London", "geo_enabled": false, "verified": false, "statuses_count": 10376, "lang": "en", "status": { "created_at": "Thu Oct 08 14:27:25 +0000 2015", "id": 652128166966898688, "id_str": "652128166966898688", "text": "We wanted to help cut through the mess & lack of structure for businesses. Enter, intent-based data sets & use-case dashboards. ~ @joodoo9", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 1, "favorite_count": 1, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "joodoo9", "name": "Giles Palmer", "id": 6202252, "id_str": "6202252", "indices": [ 138, 146 ] } ], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "030101", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/68826143\/socializersbackground.jpg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/68826143\/socializersbackground.jpg", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/3565637784\/d3ccedf8ef387ec79bb7a0e0b6af9f1f_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/3565637784\/d3ccedf8ef387ec79bb7a0e0b6af9f1f_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/55730801\/1399985316", "profile_link_color": "2B7E9C", "profile_sidebar_border_color": "0D0808", "profile_sidebar_fill_color": "A9B2C2", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 51259426, "id_str": "51259426", "name": "Michel Azevedo", "screen_name": "sou3", "location": "Sao Paulo, SP, Brasil ", "description": "Consultant\/Developer", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 104, "friends_count": 135, "listed_count": 6, "created_at": "Fri Jun 26 22:42:24 +0000 2009", "favourites_count": 3, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 523, "lang": "en", "status": { "created_at": "Fri Jun 12 18:21:42 +0000 2015", "id": 609425357238874112, "id_str": "609425357238874112", "text": "Um cora\u00e7\u00e3o que morre por dar amor e que n\u00e3o conhece o fim, Um cora\u00e7\u00e3o que bate por voc\u00ea, minha rebeka. \u266b http:\/\/t.co\/GlJI9xP6Bj", "source": "\u003ca href=\"http:\/\/spotify.com\" rel=\"nofollow\"\u003eSpotify\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/GlJI9xP6Bj", "expanded_url": "http:\/\/spoti.fi\/Nfwqh7", "display_url": "spoti.fi\/Nfwqh7", "indices": [ 105, 127 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "pt" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/584104169029656577\/noZNU6Lc_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/584104169029656577\/noZNU6Lc_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/51259426\/1398200111", "profile_link_color": "105670", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 2870412833, "id_str": "2870412833", "name": "norma", "screen_name": "godnorma173", "location": "", "description": "El agua hace flotar ew barco, pero tambien puedevhundirlo.", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 102, "friends_count": 1328, "listed_count": 0, "created_at": "Mon Nov 10 11:10:31 +0000 2014", "favourites_count": 0, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 885, "lang": "es", "status": { "created_at": "Fri Oct 09 03:20:32 +0000 2015", "id": 652322725923540992, "id_str": "652322725923540992", "text": "El mensaje que recibes cada manana no solo significa buenos dias, tambien cuantoqpienso en ti yuando me levanto.", "source": "\u003ca href=\"http:\/\/www.9wodrzlbhqfgx5yp8mtj2ku3nvc16si074a.com\" rel=\"nofollow\"\u003edsjlcovx9q87ank2hbwiz134pygr50u6\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [] }, "favorited": false, "retweeted": false, "lang": "es" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/579590212394835968\/xLSP0WN9_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/579590212394835968\/xLSP0WN9_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/2870412833\/1427020053", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 570504804, "id_str": "570504804", "name": "BalaB", "screen_name": "BbalajiSg", "location": "Singapore", "description": "", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 11, "friends_count": 113, "listed_count": 0, "created_at": "Fri May 04 01:09:15 +0000 2012", "favourites_count": 31, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 1, "lang": "en", "status": { "created_at": "Tue Apr 14 14:45:28 +0000 2015", "id": 587990058164060160, "id_str": "587990058164060160", "text": "@benuretsky @digitalocean \n\nAll Dell's got Deleted", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": 587978947293483009, "in_reply_to_status_id_str": "587978947293483009", "in_reply_to_user_id": 266786132, "in_reply_to_user_id_str": "266786132", "in_reply_to_screen_name": "benuretsky", "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "benuretsky", "name": "Ben Uretsky", "id": 266786132, "id_str": "266786132", "indices": [ 0, 11 ] }, { "screen_name": "digitalocean", "name": "DigitalOcean", "id": 457033547, "id_str": "457033547", "indices": [ 12, 25 ] } ], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/abs.twimg.com\/sticky\/default_profile_images\/default_profile_2_normal.png", "profile_image_url_https": "https:\/\/abs.twimg.com\/sticky\/default_profile_images\/default_profile_2_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": true, "following": false, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 59114784, "id_str": "59114784", "name": "Marcos Kikuti", "screen_name": "kikutim", "location": "-23.581337,-46.634343", "description": "", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 16, "friends_count": 14, "listed_count": 0, "created_at": "Wed Jul 22 12:42:28 +0000 2009", "favourites_count": 3, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 4, "lang": "en", "status": { "created_at": "Sat Sep 14 22:44:47 +0000 2013", "id": 379012882819592192, "id_str": "379012882819592192", "text": "http:\/\/t.co\/MS47cDC7Dq", "source": "\u003ca href=\"http:\/\/www.apple.com\" rel=\"nofollow\"\u003eCamera on iOS\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [], "media": [ { "id": 379012882718928896, "id_str": "379012882718928896", "indices": [ 0, 22 ], "media_url": "http:\/\/pbs.twimg.com\/media\/BUKGNW_CMAA8l2t.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/BUKGNW_CMAA8l2t.jpg", "url": "http:\/\/t.co\/MS47cDC7Dq", "display_url": "pic.twitter.com\/MS47cDC7Dq", "expanded_url": "http:\/\/twitter.com\/kikutim\/status\/379012882819592192\/photo\/1", "type": "photo", "sizes": { "large": { "w": 716, "h": 960, "resize": "fit" }, "small": { "w": 340, "h": 455, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "medium": { "w": 600, "h": 804, "resize": "fit" } } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "und" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C6E2EE", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme2\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme2\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/abs.twimg.com\/sticky\/default_profile_images\/default_profile_1_normal.png", "profile_image_url_https": "https:\/\/abs.twimg.com\/sticky\/default_profile_images\/default_profile_1_normal.png", "profile_link_color": "1F98C7", "profile_sidebar_border_color": "C6E2EE", "profile_sidebar_fill_color": "DAECF4", "profile_text_color": "663B12", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": true, "following": false, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false } ], "next_cursor": 1509804826596207566, "next_cursor_str": "1509804826596207566", "previous_cursor": 0, "previous_cursor_str": "0" } ================================================ FILE: src/test/resources/twitter/rest/blocks/ids.json ================================================ { "ids": [ 115417677, 115417678 ], "next_cursor": 0, "next_cursor_str": "0", "previous_cursor": 0, "previous_cursor_str": "0" } ================================================ FILE: src/test/resources/twitter/rest/blocks/stringified_ids.json ================================================ { "ids": [ "115417677", "115417678" ], "next_cursor": 0, "next_cursor_str": "0", "previous_cursor": 0, "previous_cursor_str": "0" } ================================================ FILE: src/test/resources/twitter/rest/blocks/user.json ================================================ { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } ================================================ FILE: src/test/resources/twitter/rest/directmessages/destroy.json ================================================ { "id": 649298254383980547, "id_str": "649298254383980547", "text": "FUNZIONAAAAAAAAAA :D", "sender": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 133, "friends_count": 95, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 189, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "sender_id": 2911461333, "sender_id_str": "2911461333", "sender_screen_name": "DanielaSfregola", "recipient": { "id": 19018614, "id_str": "19018614", "name": "Marco Bonzanini", "screen_name": "marcobonzanini", "location": "London, United Kingdom", "description": "Data Scientist - Information Retrieval, NLP, Text Analytics, Machine Learning, everything Python. PhD from @QMUL", "url": "http:\/\/t.co\/34uCLCPVkH", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/34uCLCPVkH", "expanded_url": "http:\/\/marcobonzanini.com", "display_url": "marcobonzanini.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 239, "friends_count": 206, "listed_count": 34, "created_at": "Thu Jan 15 11:28:04 +0000 2009", "favourites_count": 3, "utc_offset": 3600, "time_zone": "London", "geo_enabled": false, "verified": false, "statuses_count": 168, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "709397", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_link_color": "FF3300", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "recipient_id": 19018614, "recipient_id_str": "19018614", "recipient_screen_name": "marcobonzanini", "created_at": "Wed Sep 30 19:02:21 +0000 2015", "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [] } } ================================================ FILE: src/test/resources/twitter/rest/directmessages/event.json ================================================ { "event": { "type": "message_create", "id": "1044927409530647812", "created_timestamp": "1537965082782", "message_create": { "target": { "recipient_id": "773439338287913984" }, "sender_id": "24130273702", "message_data": { "text": "New test message", "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [] } } } } } ================================================ FILE: src/test/resources/twitter/rest/directmessages/list.json ================================================ { "events" : [ { "type" : "message_create", "id" : "1044927409530647812", "created_timestamp" : "1537935082782", "message_create" : { "target" : { "recipient_id" : "773439338287913984" }, "sender_id" : "24130273702", "message_data" : { "text" : "New test message", "entities" : { "hashtags" : [ ], "symbols" : [ ], "user_mentions" : [ ], "urls" : [ ] } } } } ], "apps" : { "14855158" : { "id" : "14855158", "name" : "TestApplication", "url" : "http://TestApplicationUrl.ru/" } }, "next_cursor" : "MTA0NDkyNzQwOTAzMDY0NzgxMg" } ================================================ FILE: src/test/resources/twitter/rest/directmessages/new.json ================================================ { "id": 649298254383980547, "id_str": "649298254383980547", "text": "FUNZIONAAAAAAAAAA :D", "sender": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 133, "friends_count": 95, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 189, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "sender_id": 2911461333, "sender_id_str": "2911461333", "sender_screen_name": "DanielaSfregola", "recipient": { "id": 19018614, "id_str": "19018614", "name": "Marco Bonzanini", "screen_name": "marcobonzanini", "location": "London, United Kingdom", "description": "Data Scientist - Information Retrieval, NLP, Text Analytics, Machine Learning, everything Python. PhD from @QMUL", "url": "http:\/\/t.co\/34uCLCPVkH", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/34uCLCPVkH", "expanded_url": "http:\/\/marcobonzanini.com", "display_url": "marcobonzanini.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 239, "friends_count": 206, "listed_count": 34, "created_at": "Thu Jan 15 11:28:04 +0000 2009", "favourites_count": 3, "utc_offset": 3600, "time_zone": "London", "geo_enabled": false, "verified": false, "statuses_count": 168, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "709397", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_link_color": "FF3300", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "recipient_id": 19018614, "recipient_id_str": "19018614", "recipient_screen_name": "marcobonzanini", "created_at": "Wed Sep 30 19:02:21 +0000 2015", "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [] } } ================================================ FILE: src/test/resources/twitter/rest/directmessages/received.json ================================================ [ { "id": 542081720715980800, "id_str": "542081720715980800", "text": "fflatorre uses TrueTwit validation. To validate click here: http:\/\/t.co\/aldtQxlbCb", "sender": { "id": 535354329, "id_str": "535354329", "name": "Francesco la Torre", "screen_name": "AllegroJazzz", "location": "", "description": "", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 20, "friends_count": 157, "listed_count": 6, "created_at": "Sat Mar 24 11:46:38 +0000 2012", "favourites_count": 28, "utc_offset": 3600, "time_zone": "London", "geo_enabled": false, "verified": false, "statuses_count": 22, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "709397", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1944949620\/facebook-che-jpg_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1944949620\/facebook-che-jpg_normal.jpg", "profile_link_color": "4C71BD", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "sender_id": 535354329, "sender_id_str": "535354329", "sender_screen_name": "AllegroJazzz", "recipient": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 133, "friends_count": 95, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 189, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "recipient_id": 2911461333, "recipient_id_str": "2911461333", "recipient_screen_name": "DanielaSfregola", "created_at": "Mon Dec 08 22:22:08 +0000 2014", "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/aldtQxlbCb", "expanded_url": "http:\/\/truetwit.com\/vy328523129", "display_url": "truetwit.com\/vy328523129", "indices": [ 60, 82 ] } ] } } ] ================================================ FILE: src/test/resources/twitter/rest/directmessages/sent.json ================================================ [ { "id": 649298254383980547, "id_str": "649298254383980547", "text": "FUNZIONAAAAAAAAAA :D", "sender": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 133, "friends_count": 95, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 189, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "sender_id": 2911461333, "sender_id_str": "2911461333", "sender_screen_name": "DanielaSfregola", "recipient": { "id": 19018614, "id_str": "19018614", "name": "Marco Bonzanini", "screen_name": "marcobonzanini", "location": "London, United Kingdom", "description": "Data Scientist - Information Retrieval, NLP, Text Analytics, Machine Learning, everything Python. PhD from @QMUL", "url": "http:\/\/t.co\/34uCLCPVkH", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/34uCLCPVkH", "expanded_url": "http:\/\/marcobonzanini.com", "display_url": "marcobonzanini.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 240, "friends_count": 206, "listed_count": 34, "created_at": "Thu Jan 15 11:28:04 +0000 2009", "favourites_count": 3, "utc_offset": 3600, "time_zone": "London", "geo_enabled": false, "verified": false, "statuses_count": 168, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "709397", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_link_color": "FF3300", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "recipient_id": 19018614, "recipient_id_str": "19018614", "recipient_screen_name": "marcobonzanini", "created_at": "Wed Sep 30 19:02:21 +0000 2015", "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [] } }, { "id": 649298022715756547, "id_str": "649298022715756547", "text": "Can you read me?", "sender": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 133, "friends_count": 95, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 189, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "sender_id": 2911461333, "sender_id_str": "2911461333", "sender_screen_name": "DanielaSfregola", "recipient": { "id": 19018614, "id_str": "19018614", "name": "Marco Bonzanini", "screen_name": "marcobonzanini", "location": "London, United Kingdom", "description": "Data Scientist - Information Retrieval, NLP, Text Analytics, Machine Learning, everything Python. PhD from @QMUL", "url": "http:\/\/t.co\/34uCLCPVkH", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/34uCLCPVkH", "expanded_url": "http:\/\/marcobonzanini.com", "display_url": "marcobonzanini.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 240, "friends_count": 206, "listed_count": 34, "created_at": "Thu Jan 15 11:28:04 +0000 2009", "favourites_count": 3, "utc_offset": 3600, "time_zone": "London", "geo_enabled": false, "verified": false, "statuses_count": 168, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "709397", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_link_color": "FF3300", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "recipient_id": 19018614, "recipient_id_str": "19018614", "recipient_screen_name": "marcobonzanini", "created_at": "Wed Sep 30 19:01:26 +0000 2015", "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [] } } ] ================================================ FILE: src/test/resources/twitter/rest/directmessages/show.json ================================================ { "id": 649298254383980547, "id_str": "649298254383980547", "text": "FUNZIONAAAAAAAAAA :D", "sender": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 133, "friends_count": 95, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 189, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "sender_id": 2911461333, "sender_id_str": "2911461333", "sender_screen_name": "DanielaSfregola", "recipient": { "id": 19018614, "id_str": "19018614", "name": "Marco Bonzanini", "screen_name": "marcobonzanini", "location": "London, United Kingdom", "description": "Data Scientist - Information Retrieval, NLP, Text Analytics, Machine Learning, everything Python. PhD from @QMUL", "url": "http:\/\/t.co\/34uCLCPVkH", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/34uCLCPVkH", "expanded_url": "http:\/\/marcobonzanini.com", "display_url": "marcobonzanini.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 239, "friends_count": 206, "listed_count": 34, "created_at": "Thu Jan 15 11:28:04 +0000 2009", "favourites_count": 3, "utc_offset": 3600, "time_zone": "London", "geo_enabled": false, "verified": false, "statuses_count": 168, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "709397", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_link_color": "FF3300", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "recipient_id": 19018614, "recipient_id_str": "19018614", "recipient_screen_name": "marcobonzanini", "created_at": "Wed Sep 30 19:02:21 +0000 2015", "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [] } } ================================================ FILE: src/test/resources/twitter/rest/favorites/favorite.json ================================================ { "contributors": null, "coordinates": null, "created_at": "Wed Sep 05 00:07:01 +0000 2012", "entities": { "hashtags": [], "urls": [], "user_mentions": [] }, "favorited": false, "geo": null, "id": 243138128959913986, "id_str": "243138128959913986", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "place": null, "retweet_count": 0, "retweeted": false, "source": "Twitter for Mac", "text": "That feel when you accidentally type Bash commands into Campfire, and you also make a typo in them.", "truncated": false, "user": { "contributors_enabled": false, "created_at": "Wed Apr 23 20:32:35 +0000 2008", "default_profile": false, "default_profile_image": false, "description": "Developer at GitHub in San Francisco, CA.\r\n\r\nChicken nuggets is like my family.", "entities": { "description": { "urls": [] }, "url": { "urls": [ { "display_url": null, "expanded_url": null, "indices": [ 0, 21 ], "url": "http://jakeboxer.com/" } ] } }, "favourites_count": 187, "follow_request_sent": false, "followers_count": 714, "following": false, "friends_count": 327, "geo_enabled": true, "id": 14500363, "id_str": "14500363", "is_translator": false, "lang": "en", "listed_count": 39, "location": "San Francisco, CA", "name": "Jake Boxer", "notifications": false, "profile_background_color": "352726", "profile_background_image_url": "http://a0.twimg.com/images/themes/theme5/bg.gif", "profile_background_image_url_https": "https://si0.twimg.com/images/themes/theme5/bg.gif", "profile_background_tile": false, "profile_image_url": "http://a0.twimg.com/profile_images/1621757700/twitter_normal.png", "profile_image_url_https": "https://si0.twimg.com/profile_images/1621757700/twitter_normal.png", "profile_link_color": "D02B55", "profile_sidebar_border_color": "829D5E", "profile_sidebar_fill_color": "99CC33", "profile_text_color": "3E4415", "profile_use_background_image": true, "protected": false, "screen_name": "jake_boxer", "show_all_inline_media": false, "statuses_count": 5398, "time_zone": "Eastern Time (US & Canada)", "url": "http://jakeboxer.com/", "utc_offset": -18000, "verified": false } } ================================================ FILE: src/test/resources/twitter/rest/favorites/favorites.json ================================================ [ { "created_at": "Fri Oct 09 07:33:53 +0000 2015", "id": 652386483509297152, "id_str": "652386483509297152", "text": "The Eyjafjallaj\u00f6kull Lecture 2015: Things & Cothings \u2014 Paul Phillips\nhttps:\/\/t.co\/8w6i72ZLFz", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 3425836427, "id_str": "3425836427", "name": "Scala World", "screen_name": "scalaworldconf", "location": "Penrith, England", "description": "The most exciting Scala event of the year!", "url": "https:\/\/t.co\/7WqZMYNtQT", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/7WqZMYNtQT", "expanded_url": "https:\/\/scala.world\/", "display_url": "scala.world", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 469, "friends_count": 138, "listed_count": 18, "created_at": "Sun Aug 16 13:05:09 +0000 2015", "favourites_count": 355, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 205, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/632902788217970688\/rf0GE2M1_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/632902788217970688\/rf0GE2M1_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 24, "favorite_count": 57, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/8w6i72ZLFz", "expanded_url": "https:\/\/www.youtube.com\/watch?v=gqSBM_kLJaI", "display_url": "youtube.com\/watch?v=gqSBM_\u2026", "indices": [ 73, 96 ] } ] }, "favorited": true, "retweeted": false, "possibly_sensitive": false, "lang": "is" }, { "created_at": "Wed Jul 22 23:32:10 +0000 2015", "id": 623999003886284801, "id_str": "623999003886284801", "text": "Reactive for DevOps: Part 1 - Using Amazon EC2, Ansible, Akka and ConductR to manage & deploy to the [hybrid] cloud: http:\/\/t.co\/1VugJGLoMD", "source": "\u003ca href=\"http:\/\/bufferapp.com\" rel=\"nofollow\"\u003eBuffer\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 16602164, "id_str": "16602164", "name": "Typesafe", "screen_name": "typesafe", "location": "", "description": "Typesafe Reactive Platform is a production-grade JVM runtime & toolset for building Reactive Systems. Be successful: http:\/\/t.co\/o1Bt6dQtgH", "url": "http:\/\/t.co\/bzGTwCmOGg", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/bzGTwCmOGg", "expanded_url": "http:\/\/typesafe.com", "display_url": "typesafe.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [ { "url": "http:\/\/t.co\/o1Bt6dQtgH", "expanded_url": "http:\/\/www.typesafe.com\/company\/contact", "display_url": "typesafe.com\/company\/contact", "indices": [ 117, 139 ] } ] } }, "protected": false, "followers_count": 23175, "friends_count": 180, "listed_count": 843, "created_at": "Sun Oct 05 14:50:41 +0000 2008", "favourites_count": 878, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": false, "verified": false, "statuses_count": 3657, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "53CCEC", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/526790424048828416\/b9QDtyl7_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/526790424048828416\/b9QDtyl7_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/16602164\/1422404674", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 9, "favorite_count": 18, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/1VugJGLoMD", "expanded_url": "http:\/\/bit.ly\/1KktC4v", "display_url": "bit.ly\/1KktC4v", "indices": [ 121, 143 ] } ] }, "favorited": true, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Tue Jul 14 09:22:51 +0000 2015", "id": 620886161964208129, "id_str": "620886161964208129", "text": "@DanielaSfregola hy scala women :D nice to meet u :D", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": 2911461333, "in_reply_to_user_id_str": "2911461333", "in_reply_to_screen_name": "DanielaSfregola", "user": { "id": 177237415, "id_str": "177237415", "name": "Adil D Ramdan", "screen_name": "SoeHokBiel", "location": "Bandung", "description": "Drop the mic and go release some software !!!", "url": "http:\/\/t.co\/yN4qTk8K61", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/yN4qTk8K61", "expanded_url": "http:\/\/adilkurniaramdan.github.io", "display_url": "adilkurniaramdan.github.io", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 92, "friends_count": 88, "listed_count": 1, "created_at": "Wed Aug 11 16:26:31 +0000 2010", "favourites_count": 3, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 397, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "022330", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1298491494\/174474_1670288542_7944926_n_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1298491494\/174474_1670288542_7944926_n_normal.jpg", "profile_link_color": "0084B4", "profile_sidebar_border_color": "A8C7F7", "profile_sidebar_fill_color": "C0DFEC", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 1, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "DanielaSfregola", "name": "Daniela Sfregola", "id": 2911461333, "id_str": "2911461333", "indices": [ 0, 16 ] } ], "urls": [] }, "favorited": true, "retweeted": false, "lang": "en" }, { "created_at": "Thu Jul 02 15:17:26 +0000 2015", "id": 616626742300659712, "id_str": "616626742300659712", "text": "\"What Every Architect Needs To Know About Going #Reactive\" - video\/slides published: http:\/\/t.co\/CKwnZh3Tu3 | http:\/\/t.co\/VKpDq5fBAT", "source": "\u003ca href=\"http:\/\/bufferapp.com\" rel=\"nofollow\"\u003eBuffer\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 16602164, "id_str": "16602164", "name": "Typesafe", "screen_name": "typesafe", "location": "", "description": "Typesafe Reactive Platform is a production-grade JVM runtime & toolset for building Reactive Systems. Be successful: http:\/\/t.co\/o1Bt6dQtgH", "url": "http:\/\/t.co\/bzGTwCmOGg", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/bzGTwCmOGg", "expanded_url": "http:\/\/typesafe.com", "display_url": "typesafe.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [ { "url": "http:\/\/t.co\/o1Bt6dQtgH", "expanded_url": "http:\/\/www.typesafe.com\/company\/contact", "display_url": "typesafe.com\/company\/contact", "indices": [ 117, 139 ] } ] } }, "protected": false, "followers_count": 23175, "friends_count": 180, "listed_count": 843, "created_at": "Sun Oct 05 14:50:41 +0000 2008", "favourites_count": 878, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": false, "verified": false, "statuses_count": 3657, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "53CCEC", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/526790424048828416\/b9QDtyl7_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/526790424048828416\/b9QDtyl7_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/16602164\/1422404674", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 20, "favorite_count": 37, "entities": { "hashtags": [ { "text": "Reactive", "indices": [ 48, 57 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/CKwnZh3Tu3", "expanded_url": "http:\/\/bit.ly\/1FUrsjZ", "display_url": "bit.ly\/1FUrsjZ", "indices": [ 85, 107 ] } ], "media": [ { "id": 616626742225186816, "id_str": "616626742225186816", "indices": [ 110, 132 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CI6ywUlWsAAl7aS.png", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CI6ywUlWsAAl7aS.png", "url": "http:\/\/t.co\/VKpDq5fBAT", "display_url": "pic.twitter.com\/VKpDq5fBAT", "expanded_url": "http:\/\/twitter.com\/typesafe\/status\/616626742300659712\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 255, "resize": "fit" }, "large": { "w": 584, "h": 438, "resize": "fit" }, "medium": { "w": 584, "h": 438, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 616626742225186816, "id_str": "616626742225186816", "indices": [ 110, 132 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CI6ywUlWsAAl7aS.png", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CI6ywUlWsAAl7aS.png", "url": "http:\/\/t.co\/VKpDq5fBAT", "display_url": "pic.twitter.com\/VKpDq5fBAT", "expanded_url": "http:\/\/twitter.com\/typesafe\/status\/616626742300659712\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 255, "resize": "fit" }, "large": { "w": 584, "h": 438, "resize": "fit" }, "medium": { "w": 584, "h": 438, "resize": "fit" } } } ] }, "favorited": true, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Tue Jun 09 11:54:53 +0000 2015", "id": 608240847512051713, "id_str": "608240847512051713", "text": "@helenaedelson Yes. @rit needs no caption.", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": 608239694451757056, "in_reply_to_status_id_str": "608239694451757056", "in_reply_to_user_id": 98145567, "in_reply_to_user_id_str": "98145567", "in_reply_to_screen_name": "helenaedelson", "user": { "id": 353768648, "id_str": "353768648", "name": "Francois Garillot", "screen_name": "huitseeker", "location": "Lausanne, Switzerland", "description": "Dabbling with Scala, Spark, ML in close proximity to good coffee. Runs @SparkAtSO", "url": "http:\/\/t.co\/qT9Yd0I1ah", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/qT9Yd0I1ah", "expanded_url": "http:\/\/about.me\/huitseeker", "display_url": "about.me\/huitseeker", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 652, "friends_count": 846, "listed_count": 59, "created_at": "Fri Aug 12 16:16:12 +0000 2011", "favourites_count": 1381, "utc_offset": 7200, "time_zone": "Paris", "geo_enabled": true, "verified": false, "statuses_count": 3093, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/3733903076\/7af9f18649a895d6254ea7d1d17fe402_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/3733903076\/7af9f18649a895d6254ea7d1d17fe402_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/353768648\/1398241940", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 1, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "helenaedelson", "name": "Helena Edelson", "id": 98145567, "id_str": "98145567", "indices": [ 0, 14 ] }, { "screen_name": "rit", "name": "Braindead McabrAdams", "id": 5961382, "id_str": "5961382", "indices": [ 20, 24 ] } ], "urls": [] }, "favorited": true, "retweeted": false, "lang": "en" }, { "created_at": "Tue Jun 09 10:04:40 +0000 2015", "id": 608213112861392896, "id_str": "608213112861392896", "text": "OH \"All the sudden we have an alien attack. Cassandra is still up.\" #scaladays", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 162283, "id_str": "162283", "name": "eugene yokota", "screen_name": "eed3si9n", "location": "western massachusetts", "description": "enjoys music, good food, coding, and talking about them.", "url": "http:\/\/t.co\/GNY9lk1yjB", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/GNY9lk1yjB", "expanded_url": "http:\/\/eed3si9n.com\/", "display_url": "eed3si9n.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 1575, "friends_count": 398, "listed_count": 100, "created_at": "Fri Dec 22 15:19:02 +0000 2006", "favourites_count": 690, "utc_offset": -14400, "time_zone": "Eastern Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 4868, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "999999", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme9\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme9\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1433303685\/profile-2011-07-09-200px_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1433303685\/profile-2011-07-09-200px_normal.jpg", "profile_link_color": "D6562F", "profile_sidebar_border_color": "999999", "profile_sidebar_fill_color": "999999", "profile_text_color": "1A1A1A", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 8, "favorite_count": 1, "entities": { "hashtags": [ { "text": "scaladays", "indices": [ 68, 78 ] } ], "symbols": [], "user_mentions": [], "urls": [] }, "favorited": true, "retweeted": true, "lang": "en" }, { "created_at": "Mon Jun 08 14:58:54 +0000 2015", "id": 607924769787396096, "id_str": "607924769787396096", "text": "@OVOEnergy crew ready for the keynote at #ScalaDays", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": 135180054, "in_reply_to_user_id_str": "135180054", "in_reply_to_screen_name": "OVOEnergy", "user": { "id": 161225991, "id_str": "161225991", "name": "Bruno Filippone", "screen_name": "BFil85", "location": "London, United Kingdom", "description": "Software Engineer @OVOEnergy - Working with Scala \/ Akka \/ Spray \/ AngularJS", "url": "http:\/\/t.co\/V7x3oO9RvM", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/V7x3oO9RvM", "expanded_url": "http:\/\/b-fil.com", "display_url": "b-fil.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 289, "friends_count": 627, "listed_count": 12, "created_at": "Wed Jun 30 08:54:05 +0000 2010", "favourites_count": 0, "utc_offset": 3600, "time_zone": "London", "geo_enabled": false, "verified": false, "statuses_count": 319, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "131516", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme14\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme14\/bg.gif", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/467051314992541696\/PRg0HD3A_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/467051314992541696\/PRg0HD3A_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/161225991\/1416776910", "profile_link_color": "363672", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "000000", "profile_text_color": "000000", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 1, "favorite_count": 2, "entities": { "hashtags": [ { "text": "ScalaDays", "indices": [ 41, 51 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "OVOEnergy", "name": "OVO Energy", "id": 135180054, "id_str": "135180054", "indices": [ 0, 10 ] } ], "urls": [] }, "favorited": true, "retweeted": false, "lang": "en" }, { "created_at": "Sat Jun 06 10:53:57 +0000 2015", "id": 607138350999289856, "id_str": "607138350999289856", "text": "Fav this if you're going to @scaladays #Amsterdam next week #scala #conf. See you there!", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 1372082066, "id_str": "1372082066", "name": "ScalaItaly", "screen_name": "ScalaItaly", "location": "Italy", "description": "L'unica conferenza su Scala in Italia \/ The only conference on Scala in Italy - https:\/\/t.co\/zwWSedilj6", "url": "http:\/\/t.co\/zo6utSwqJY", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/zo6utSwqJY", "expanded_url": "http:\/\/scala-italy.it\/", "display_url": "scala-italy.it", "indices": [ 0, 22 ] } ] }, "description": { "urls": [ { "url": "https:\/\/t.co\/zwWSedilj6", "expanded_url": "https:\/\/vimeo.com\/channels\/932072\/133344804", "display_url": "vimeo.com\/channels\/93207\u2026", "indices": [ 80, 103 ] } ] } }, "protected": false, "followers_count": 298, "friends_count": 291, "listed_count": 19, "created_at": "Mon Apr 22 12:58:44 +0000 2013", "favourites_count": 68, "utc_offset": 7200, "time_zone": "Rome", "geo_enabled": false, "verified": false, "statuses_count": 326, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/3572618102\/a6aedc265defd9e1f2adc680d83e7fc9_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/3572618102\/a6aedc265defd9e1f2adc680d83e7fc9_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/1372082066\/1442954007", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 3, "favorite_count": 7, "entities": { "hashtags": [ { "text": "Amsterdam", "indices": [ 39, 49 ] }, { "text": "scala", "indices": [ 60, 66 ] }, { "text": "conf", "indices": [ 67, 72 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "scaladays", "name": "Scala Days ", "id": 2375844330, "id_str": "2375844330", "indices": [ 28, 38 ] } ], "urls": [] }, "favorited": true, "retweeted": false, "lang": "en" }, { "created_at": "Fri May 29 16:19:15 +0000 2015", "id": 604321111778664448, "id_str": "604321111778664448", "text": "Lambda #4 is out! Featuring - @OweinReese @DanielaSfregola @ptrelford @kmett @stuartsierra @ErlangCentral - http:\/\/t.co\/1F4XoY9grA", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 1345043875, "id_str": "1345043875", "name": "Functional Works", "screen_name": "Functionalworks", "location": "London HQ | Global reach ", "description": "Functional Programming Advocates. Providing Talent Solutions, Strategic Advice, Curated Events & Insight across Clojure, Scala, Erlang, Haskell, F#, OCaml,Swift", "url": "http:\/\/t.co\/BXwhIYmO2c", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/BXwhIYmO2c", "expanded_url": "http:\/\/functionalworks.com\/", "display_url": "functionalworks.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 4227, "friends_count": 365, "listed_count": 217, "created_at": "Thu Apr 11 18:46:02 +0000 2013", "favourites_count": 4613, "utc_offset": 7200, "time_zone": "Amsterdam", "geo_enabled": true, "verified": false, "statuses_count": 4191, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "131516", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme14\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme14\/bg.gif", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/439367291214364673\/M_Z9rDrf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/439367291214364673\/M_Z9rDrf_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/1345043875\/1412684063", "profile_link_color": "F52727", "profile_sidebar_border_color": "EEEEEE", "profile_sidebar_fill_color": "EFEFEF", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 4, "favorite_count": 4, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "OweinReese", "name": "Owein Reese", "id": 404119861, "id_str": "404119861", "indices": [ 30, 41 ] }, { "screen_name": "DanielaSfregola", "name": "Daniela Sfregola", "id": 2911461333, "id_str": "2911461333", "indices": [ 42, 58 ] }, { "screen_name": "ptrelford", "name": "Sean's dad", "id": 30888410, "id_str": "30888410", "indices": [ 59, 69 ] }, { "screen_name": "kmett", "name": "Edward Kmett", "id": 16781974, "id_str": "16781974", "indices": [ 70, 76 ] }, { "screen_name": "stuartsierra", "name": "Stuart Sierra", "id": 22637653, "id_str": "22637653", "indices": [ 77, 90 ] }, { "screen_name": "ErlangCentral", "name": "Erlang Central", "id": 993425858, "id_str": "993425858", "indices": [ 91, 105 ] } ], "urls": [ { "url": "http:\/\/t.co\/1F4XoY9grA", "expanded_url": "http:\/\/us10.campaign-archive2.com\/?u=30f19e2c5b9f15cfb95906716&id=da26788923&e=9489bec169", "display_url": "us10.campaign-archive2.com\/?u=30f19e2c5b9\u2026", "indices": [ 108, 130 ] } ] }, "favorited": true, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Tue May 12 06:20:54 +0000 2015", "id": 598009939353829376, "id_str": "598009939353829376", "text": "@DanielaSfregola: \"Actors are like monkeys sending emails\" that's what I call a clear definition! :-D @ScalaItaly #ScalaItaly @akkateam", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": 2911461333, "in_reply_to_user_id_str": "2911461333", "in_reply_to_screen_name": "DanielaSfregola", "user": { "id": 17679666, "id_str": "17679666", "name": "michelemauro", "screen_name": "michelemauro", "location": "Near Venice, Italy", "description": "Passionate developer in Java and Scala. And sometimes, something else.\nCoFounder of Treviso Scala Group.", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 62, "friends_count": 118, "listed_count": 24, "created_at": "Thu Nov 27 14:56:41 +0000 2008", "favourites_count": 252, "utc_offset": 7200, "time_zone": "Rome", "geo_enabled": false, "verified": false, "statuses_count": 3075, "lang": "it", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "000000", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme9\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme9\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/2860320831\/5e56dc5ad237cfcae71e8cf59a309684_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/2860320831\/5e56dc5ad237cfcae71e8cf59a309684_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/17679666\/1438089386", "profile_link_color": "FFCC4D", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "000000", "profile_text_color": "000000", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 1, "entities": { "hashtags": [ { "text": "ScalaItaly", "indices": [ 114, 125 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "DanielaSfregola", "name": "Daniela Sfregola", "id": 2911461333, "id_str": "2911461333", "indices": [ 0, 16 ] }, { "screen_name": "ScalaItaly", "name": "ScalaItaly", "id": 1372082066, "id_str": "1372082066", "indices": [ 102, 113 ] }, { "screen_name": "akkateam", "name": "Akka Team", "id": 440686069, "id_str": "440686069", "indices": [ 126, 135 ] } ], "urls": [] }, "favorited": true, "retweeted": false, "lang": "en" }, { "created_at": "Sat May 09 10:44:45 +0000 2015", "id": 596989175980814336, "id_str": "596989175980814336", "text": "Grazie di nuovo a tutti ma soprattutto a @mircodotta, @DanielaSfregola, @cloudify, @buildoHQ, @aparo77, @AndreaFerrett20, @DATABIZit", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 1372082066, "id_str": "1372082066", "name": "ScalaItaly", "screen_name": "ScalaItaly", "location": "Italy", "description": "L'unica conferenza su Scala in Italia \/ The only conference on Scala in Italy - https:\/\/t.co\/zwWSedilj6", "url": "http:\/\/t.co\/zo6utSwqJY", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/zo6utSwqJY", "expanded_url": "http:\/\/scala-italy.it\/", "display_url": "scala-italy.it", "indices": [ 0, 22 ] } ] }, "description": { "urls": [ { "url": "https:\/\/t.co\/zwWSedilj6", "expanded_url": "https:\/\/vimeo.com\/channels\/932072\/133344804", "display_url": "vimeo.com\/channels\/93207\u2026", "indices": [ 80, 103 ] } ] } }, "protected": false, "followers_count": 298, "friends_count": 291, "listed_count": 19, "created_at": "Mon Apr 22 12:58:44 +0000 2013", "favourites_count": 68, "utc_offset": 7200, "time_zone": "Rome", "geo_enabled": false, "verified": false, "statuses_count": 326, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/3572618102\/a6aedc265defd9e1f2adc680d83e7fc9_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/3572618102\/a6aedc265defd9e1f2adc680d83e7fc9_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/1372082066\/1442954007", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 6, "favorite_count": 8, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "mircodotta", "name": "Mirco Dotta", "id": 15740484, "id_str": "15740484", "indices": [ 41, 52 ] }, { "screen_name": "DanielaSfregola", "name": "Daniela Sfregola", "id": 2911461333, "id_str": "2911461333", "indices": [ 54, 70 ] }, { "screen_name": "cloudify", "name": "Federico Feroldi", "id": 7936922, "id_str": "7936922", "indices": [ 72, 81 ] }, { "screen_name": "buildoHQ", "name": "buildo", "id": 2372173357, "id_str": "2372173357", "indices": [ 83, 92 ] }, { "screen_name": "aparo77", "name": "Alberto Paro", "id": 36622394, "id_str": "36622394", "indices": [ 94, 102 ] }, { "screen_name": "AndreaFerrett20", "name": "Andrea Ferretti", "id": 1240978285, "id_str": "1240978285", "indices": [ 104, 120 ] }, { "screen_name": "DATABIZit", "name": "databizit", "id": 3221404505, "id_str": "3221404505", "indices": [ 122, 132 ] } ], "urls": [] }, "favorited": true, "retweeted": true, "lang": "it" }, { "created_at": "Fri May 08 16:30:20 +0000 2015", "id": 596713757239304192, "id_str": "596713757239304192", "text": "Slides for my presentation \"A Blueprint for Scala based Microservices\" at #scalaitaly http:\/\/t.co\/painMMZuJt", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 7936922, "id_str": "7936922", "name": "Federico Feroldi", "screen_name": "cloudify", "location": "New York, NY", "description": "I like to code and break things. CTO at Measurence.", "url": "http:\/\/t.co\/uNes18ujPY", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/uNes18ujPY", "expanded_url": "http:\/\/measurence.com", "display_url": "measurence.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 1198, "friends_count": 817, "listed_count": 81, "created_at": "Fri Aug 03 17:28:36 +0000 2007", "favourites_count": 261, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 1373, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/491650137773445120\/crK2XX5Y_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/491650137773445120\/crK2XX5Y_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": { "id": "1ea588c12abd39d7", "url": "https:\/\/api.twitter.com\/1.1\/geo\/id\/1ea588c12abd39d7.json", "place_type": "city", "name": "Milan", "full_name": "Milan, Lombardy", "country_code": "IT", "country": "Italia", "contained_within": [], "bounding_box": { "type": "Polygon", "coordinates": [ [ [ 9.040628, 45.3867262 ], [ 9.2780451, 45.3867262 ], [ 9.2780451, 45.5359644 ], [ 9.040628, 45.5359644 ] ] ] }, "attributes": {} }, "contributors": null, "is_quote_status": false, "retweet_count": 1, "favorite_count": 5, "entities": { "hashtags": [ { "text": "scalaitaly", "indices": [ 74, 85 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/painMMZuJt", "expanded_url": "http:\/\/www.slideshare.net\/federicof\/fferoldi-scalaitaly2015", "display_url": "slideshare.net\/federicof\/ffer\u2026", "indices": [ 86, 108 ] } ] }, "favorited": true, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Fri May 08 15:41:27 +0000 2015", "id": 596701452174778368, "id_str": "596701452174778368", "text": "And the prize for most crowd cheering goes to: #Kernal64. Lovely, lovely, lovely! Thanks for making this happen, @ScalaItaly! #ScalaItaly", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 186747934, "id_str": "186747934", "name": "Stefano Baghino", "screen_name": "stefanobaghino", "location": "Milan, Italy", "description": "Not a teapot", "url": "https:\/\/t.co\/hO8XoioVWi", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/hO8XoioVWi", "expanded_url": "https:\/\/www.github.com\/stefanobaghino", "display_url": "github.com\/stefanobaghino", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 478, "friends_count": 34, "listed_count": 27, "created_at": "Sat Sep 04 08:21:19 +0000 2010", "favourites_count": 5810, "utc_offset": 7200, "time_zone": "Rome", "geo_enabled": true, "verified": false, "statuses_count": 17086, "lang": "it", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "112233", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/456766650239299584\/1ORIAdDb.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/456766650239299584\/1ORIAdDb.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/612632648826126336\/PsuHO2IE_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/612632648826126336\/PsuHO2IE_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/186747934\/1441704730", "profile_link_color": "3B94D9", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "99CC33", "profile_text_color": "3E4415", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 3, "favorite_count": 4, "entities": { "hashtags": [ { "text": "Kernal64", "indices": [ 47, 56 ] }, { "text": "ScalaItaly", "indices": [ 126, 137 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "ScalaItaly", "name": "ScalaItaly", "id": 1372082066, "id_str": "1372082066", "indices": [ 113, 124 ] } ], "urls": [] }, "favorited": true, "retweeted": true, "lang": "en" }, { "created_at": "Fri May 08 15:35:27 +0000 2015", "id": 596699945626898433, "id_str": "596699945626898433", "text": "@mfirry @DanielaSfregola http:\/\/t.co\/0Zjj5X8IIY", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": 596699541463769088, "in_reply_to_status_id_str": "596699541463769088", "in_reply_to_user_id": 86905773, "in_reply_to_user_id_str": "86905773", "in_reply_to_screen_name": "mfirry", "user": { "id": 186747934, "id_str": "186747934", "name": "Stefano Baghino", "screen_name": "stefanobaghino", "location": "Milan, Italy", "description": "Not a teapot", "url": "https:\/\/t.co\/hO8XoioVWi", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/hO8XoioVWi", "expanded_url": "https:\/\/www.github.com\/stefanobaghino", "display_url": "github.com\/stefanobaghino", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 478, "friends_count": 34, "listed_count": 27, "created_at": "Sat Sep 04 08:21:19 +0000 2010", "favourites_count": 5810, "utc_offset": 7200, "time_zone": "Rome", "geo_enabled": true, "verified": false, "statuses_count": 17086, "lang": "it", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "112233", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/456766650239299584\/1ORIAdDb.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/456766650239299584\/1ORIAdDb.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/612632648826126336\/PsuHO2IE_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/612632648826126336\/PsuHO2IE_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/186747934\/1441704730", "profile_link_color": "3B94D9", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "99CC33", "profile_text_color": "3E4415", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 1, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "mfirry", "name": "Marco F.", "id": 86905773, "id_str": "86905773", "indices": [ 0, 7 ] }, { "screen_name": "DanielaSfregola", "name": "Daniela Sfregola", "id": 2911461333, "id_str": "2911461333", "indices": [ 8, 24 ] } ], "urls": [], "media": [ { "id": 596699944431525889, "id_str": "596699944431525889", "indices": [ 25, 47 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CEfncCFWIAEzJ4P.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CEfncCFWIAEzJ4P.jpg", "url": "http:\/\/t.co\/0Zjj5X8IIY", "display_url": "pic.twitter.com\/0Zjj5X8IIY", "expanded_url": "http:\/\/twitter.com\/stefanobaghino\/status\/596699945626898433\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 340, "resize": "fit" }, "large": { "w": 400, "h": 400, "resize": "fit" }, "medium": { "w": 400, "h": 400, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 596699944431525889, "id_str": "596699944431525889", "indices": [ 25, 47 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CEfncCFWIAEzJ4P.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CEfncCFWIAEzJ4P.jpg", "url": "http:\/\/t.co\/0Zjj5X8IIY", "display_url": "pic.twitter.com\/0Zjj5X8IIY", "expanded_url": "http:\/\/twitter.com\/stefanobaghino\/status\/596699945626898433\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 340, "resize": "fit" }, "large": { "w": 400, "h": 400, "resize": "fit" }, "medium": { "w": 400, "h": 400, "resize": "fit" } } } ] }, "favorited": true, "retweeted": false, "possibly_sensitive": false, "lang": "und" }, { "created_at": "Fri May 08 12:49:44 +0000 2015", "id": 596658238755577856, "id_str": "596658238755577856", "text": "Note to self: give Actors a real try after this intro by @DanielaSfregola: https:\/\/t.co\/FLKnDpmDQt", "source": "\u003ca href=\"http:\/\/itunes.apple.com\/us\/app\/twitter\/id409789998?mt=12\" rel=\"nofollow\"\u003eTwitter for Mac\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 117056910, "id_str": "117056910", "name": "Gabriele Alese", "screen_name": "gabalese", "location": "London", "description": "Faccio gente, vedo cose.", "url": "http:\/\/t.co\/smIeHDjBj7", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/smIeHDjBj7", "expanded_url": "http:\/\/gabale.se", "display_url": "gabale.se", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 1051, "friends_count": 572, "listed_count": 53, "created_at": "Wed Feb 24 11:52:58 +0000 2010", "favourites_count": 355, "utc_offset": 7200, "time_zone": "Rome", "geo_enabled": true, "verified": false, "statuses_count": 19309, "lang": "en-gb", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "022330", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/586870249330475008\/qCM2tVNQ_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/586870249330475008\/qCM2tVNQ_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/117056910\/1398800947", "profile_link_color": "3D71BF", "profile_sidebar_border_color": "A8C7F7", "profile_sidebar_fill_color": "C0DFEC", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 1, "favorite_count": 1, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "DanielaSfregola", "name": "Daniela Sfregola", "id": 2911461333, "id_str": "2911461333", "indices": [ 57, 73 ] } ], "urls": [ { "url": "https:\/\/t.co\/FLKnDpmDQt", "expanded_url": "https:\/\/gist.github.com\/DanielaSfregola\/6dc52bffa2ed566de9b2", "display_url": "gist.github.com\/DanielaSfregol\u2026", "indices": [ 75, 98 ] } ] }, "favorited": true, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Fri May 08 12:37:38 +0000 2015", "id": 596655195695816704, "id_str": "596655195695816704", "text": "@ScalaItaly @DanielaSfregola so I'm not the only one using @sublimehq with #scala #ScalaItaly2015", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": 596654712428109824, "in_reply_to_status_id_str": "596654712428109824", "in_reply_to_user_id": 1372082066, "in_reply_to_user_id_str": "1372082066", "in_reply_to_screen_name": "ScalaItaly", "user": { "id": 86905773, "id_str": "86905773", "name": "Marco F.", "screen_name": "mfirry", "location": "", "description": "I code for food and glory while listening to music you haven't heard of. Hopping in and out of #Sicily because I'm worth it.", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 249, "friends_count": 379, "listed_count": 18, "created_at": "Mon Nov 02 09:12:21 +0000 2009", "favourites_count": 468, "utc_offset": 7200, "time_zone": "Rome", "geo_enabled": true, "verified": false, "statuses_count": 1067, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1143807082\/me2_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1143807082\/me2_normal.jpg", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 2, "favorite_count": 2, "entities": { "hashtags": [ { "text": "scala", "indices": [ 75, 81 ] }, { "text": "ScalaItaly2015", "indices": [ 82, 97 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "ScalaItaly", "name": "ScalaItaly", "id": 1372082066, "id_str": "1372082066", "indices": [ 0, 11 ] }, { "screen_name": "DanielaSfregola", "name": "Daniela Sfregola", "id": 2911461333, "id_str": "2911461333", "indices": [ 12, 28 ] }, { "screen_name": "sublimehq", "name": "Sublime HQ", "id": 138034438, "id_str": "138034438", "indices": [ 59, 69 ] } ], "urls": [] }, "favorited": true, "retweeted": true, "lang": "en" }, { "created_at": "Fri May 08 12:04:35 +0000 2015", "id": 596646879485685760, "id_str": "596646879485685760", "text": "#ScalaItaly2015 with @DanielaSfregola and a gentle introduction to #akka http:\/\/t.co\/FhVofVfJ1o", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 1372082066, "id_str": "1372082066", "name": "ScalaItaly", "screen_name": "ScalaItaly", "location": "Italy", "description": "L'unica conferenza su Scala in Italia \/ The only conference on Scala in Italy - https:\/\/t.co\/zwWSedilj6", "url": "http:\/\/t.co\/zo6utSwqJY", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/zo6utSwqJY", "expanded_url": "http:\/\/scala-italy.it\/", "display_url": "scala-italy.it", "indices": [ 0, 22 ] } ] }, "description": { "urls": [ { "url": "https:\/\/t.co\/zwWSedilj6", "expanded_url": "https:\/\/vimeo.com\/channels\/932072\/133344804", "display_url": "vimeo.com\/channels\/93207\u2026", "indices": [ 80, 103 ] } ] } }, "protected": false, "followers_count": 298, "friends_count": 291, "listed_count": 19, "created_at": "Mon Apr 22 12:58:44 +0000 2013", "favourites_count": 68, "utc_offset": 7200, "time_zone": "Rome", "geo_enabled": false, "verified": false, "statuses_count": 326, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/3572618102\/a6aedc265defd9e1f2adc680d83e7fc9_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/3572618102\/a6aedc265defd9e1f2adc680d83e7fc9_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/1372082066\/1442954007", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 4, "favorite_count": 6, "entities": { "hashtags": [ { "text": "ScalaItaly2015", "indices": [ 0, 15 ] }, { "text": "akka", "indices": [ 67, 72 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "DanielaSfregola", "name": "Daniela Sfregola", "id": 2911461333, "id_str": "2911461333", "indices": [ 21, 37 ] } ], "urls": [], "media": [ { "id": 596646872502149120, "id_str": "596646872502149120", "indices": [ 73, 95 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CEe3K1vWoAAxwA7.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CEe3K1vWoAAxwA7.jpg", "url": "http:\/\/t.co\/FhVofVfJ1o", "display_url": "pic.twitter.com\/FhVofVfJ1o", "expanded_url": "http:\/\/twitter.com\/ScalaItaly\/status\/596646879485685760\/photo\/1", "type": "photo", "sizes": { "small": { "w": 340, "h": 453, "resize": "fit" }, "medium": { "w": 600, "h": 800, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 768, "h": 1024, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 596646872502149120, "id_str": "596646872502149120", "indices": [ 73, 95 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CEe3K1vWoAAxwA7.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CEe3K1vWoAAxwA7.jpg", "url": "http:\/\/t.co\/FhVofVfJ1o", "display_url": "pic.twitter.com\/FhVofVfJ1o", "expanded_url": "http:\/\/twitter.com\/ScalaItaly\/status\/596646879485685760\/photo\/1", "type": "photo", "sizes": { "small": { "w": 340, "h": 453, "resize": "fit" }, "medium": { "w": 600, "h": 800, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 768, "h": 1024, "resize": "fit" } } } ] }, "favorited": true, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Fri May 08 10:22:51 +0000 2015", "id": 596621274245390337, "id_str": "596621274245390337", "text": "Slides from my #scalaItaly talk: http:\/\/t.co\/niUJ9wk65T", "source": "\u003ca href=\"https:\/\/about.twitter.com\/products\/tweetdeck\" rel=\"nofollow\"\u003eTweetDeck\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 10224712, "id_str": "10224712", "name": "Phil Cal\u00e7ado", "screen_name": "pcalcado", "location": "Berlin", "description": "I write code for @SoundCloud and for the voices inside my head. They won't leave me alone.", "url": "http:\/\/t.co\/YXkr6aj1Lt", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/YXkr6aj1Lt", "expanded_url": "http:\/\/philcalcado.com", "display_url": "philcalcado.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 5386, "friends_count": 4215, "listed_count": 345, "created_at": "Tue Nov 13 19:44:14 +0000 2007", "favourites_count": 810, "utc_offset": 7200, "time_zone": "Berlin", "geo_enabled": true, "verified": false, "statuses_count": 16800, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "BADFCD", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/378707730\/285041_10150264528594985_525579984_7491282_265572_n.jpg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/378707730\/285041_10150264528594985_525579984_7491282_265572_n.jpg", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/3256568297\/d7c075ca8b6799b091edb234503d0218_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/3256568297\/d7c075ca8b6799b091edb234503d0218_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/10224712\/1398355305", "profile_link_color": "385919", "profile_sidebar_border_color": "F2E195", "profile_sidebar_fill_color": "FFF7CC", "profile_text_color": "0C3E53", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 31, "favorite_count": 32, "entities": { "hashtags": [ { "text": "scalaItaly", "indices": [ 15, 26 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/niUJ9wk65T", "expanded_url": "http:\/\/www.slideshare.net\/pcalcado\/pcalcado-scalaitaly2015", "display_url": "slideshare.net\/pcalcado\/pcalc\u2026", "indices": [ 33, 55 ] } ] }, "favorited": true, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Fri May 08 09:19:23 +0000 2015", "id": 596605305284354048, "id_str": "596605305284354048", "text": "Listening to @pcalcado's talk on microservices at #ScalaItaly makes me want to start refactoring my code right now. Cool stuff! \/cc @utaal", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 15229928, "id_str": "15229928", "name": "Gabriele Petronella", "screen_name": "gabro27", "location": "Milano", "description": "functional programming enthusiast. Building awesome things in scala, react and swift at buildo.io", "url": "http:\/\/t.co\/LLVcnQBRC5", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/LLVcnQBRC5", "expanded_url": "http:\/\/buildo.io", "display_url": "buildo.io", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 268, "friends_count": 174, "listed_count": 21, "created_at": "Wed Jun 25 11:34:01 +0000 2008", "favourites_count": 400, "utc_offset": -7200, "time_zone": "Greenland", "geo_enabled": true, "verified": false, "statuses_count": 3875, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": true, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/640286453612834816\/GFSorOIB_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/640286453612834816\/GFSorOIB_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/15229928\/1410509742", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": true, "default_profile": true, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": { "id": "1ea588c12abd39d7", "url": "https:\/\/api.twitter.com\/1.1\/geo\/id\/1ea588c12abd39d7.json", "place_type": "city", "name": "Milan", "full_name": "Milan, Lombardy", "country_code": "IT", "country": "Italia", "contained_within": [], "bounding_box": { "type": "Polygon", "coordinates": [ [ [ 9.040628, 45.3867262 ], [ 9.2780451, 45.3867262 ], [ 9.2780451, 45.5359644 ], [ 9.040628, 45.5359644 ] ] ] }, "attributes": {} }, "contributors": null, "is_quote_status": false, "retweet_count": 6, "favorite_count": 2, "entities": { "hashtags": [ { "text": "ScalaItaly", "indices": [ 50, 61 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "pcalcado", "name": "Phil Cal\u00e7ado", "id": 10224712, "id_str": "10224712", "indices": [ 13, 22 ] }, { "screen_name": "utaal", "name": "Andrea Lattuada", "id": 187743747, "id_str": "187743747", "indices": [ 132, 138 ] } ], "urls": [] }, "favorited": true, "retweeted": true, "lang": "en" }, { "created_at": "Fri May 08 07:33:59 +0000 2015", "id": 596578779587354624, "id_str": "596578779587354624", "text": "Martin on the stage. And a new logo proposal for #ScalaItaly :D http:\/\/t.co\/ArQORyug2l", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 3221404505, "id_str": "3221404505", "name": "databizit", "screen_name": "DATABIZit", "location": "", "description": "", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 88, "friends_count": 169, "listed_count": 6, "created_at": "Wed Apr 29 13:29:26 +0000 2015", "favourites_count": 3, "utc_offset": 7200, "time_zone": "Rome", "geo_enabled": false, "verified": false, "statuses_count": 259, "lang": "it", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "000000", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/593407888196030464\/fTER_Y5O_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/593407888196030464\/fTER_Y5O_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/3221404505\/1430400719", "profile_link_color": "3B94D9", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "000000", "profile_text_color": "000000", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 2, "favorite_count": 3, "entities": { "hashtags": [ { "text": "ScalaItaly", "indices": [ 49, 60 ] } ], "symbols": [], "user_mentions": [], "urls": [], "media": [ { "id": 596578758397657088, "id_str": "596578758397657088", "indices": [ 64, 86 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CEd5OE7WAAAluZV.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CEd5OE7WAAAluZV.jpg", "url": "http:\/\/t.co\/ArQORyug2l", "display_url": "pic.twitter.com\/ArQORyug2l", "expanded_url": "http:\/\/twitter.com\/DATABIZit\/status\/596578779587354624\/photo\/1", "type": "photo", "sizes": { "small": { "w": 340, "h": 255, "resize": "fit" }, "medium": { "w": 600, "h": 450, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1024, "h": 768, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 596578758397657088, "id_str": "596578758397657088", "indices": [ 64, 86 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CEd5OE7WAAAluZV.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CEd5OE7WAAAluZV.jpg", "url": "http:\/\/t.co\/ArQORyug2l", "display_url": "pic.twitter.com\/ArQORyug2l", "expanded_url": "http:\/\/twitter.com\/DATABIZit\/status\/596578779587354624\/photo\/1", "type": "photo", "sizes": { "small": { "w": 340, "h": 255, "resize": "fit" }, "medium": { "w": 600, "h": 450, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1024, "h": 768, "resize": "fit" } } } ] }, "favorited": true, "retweeted": true, "possibly_sensitive": false, "lang": "en" } ] ================================================ FILE: src/test/resources/twitter/rest/favorites/unfavorite.json ================================================ { "contributors": null, "coordinates": null, "created_at": "Wed Sep 05 00:07:01 +0000 2012", "entities": { "hashtags": [], "urls": [], "user_mentions": [] }, "favorited": false, "geo": null, "id": 243138128959913986, "id_str": "243138128959913986", "in_reply_to_screen_name": null, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "place": null, "retweet_count": 0, "retweeted": false, "source": "Twitter for Mac", "text": "That feel when you accidentally type Bash commands into Campfire, and you also make a typo in them.", "truncated": false, "user": { "contributors_enabled": false, "created_at": "Wed Apr 23 20:32:35 +0000 2008", "default_profile": false, "default_profile_image": false, "description": "Developer at GitHub in San Francisco, CA.\r\n\r\nChicken nuggets is like my family.", "entities": { "description": { "urls": [] }, "url": { "urls": [ { "display_url": null, "expanded_url": null, "indices": [ 0, 21 ], "url": "http://jakeboxer.com/" } ] } }, "favourites_count": 187, "follow_request_sent": false, "followers_count": 714, "following": false, "friends_count": 327, "geo_enabled": true, "id": 14500363, "id_str": "14500363", "is_translator": false, "lang": "en", "listed_count": 39, "location": "San Francisco, CA", "name": "Jake Boxer", "notifications": false, "profile_background_color": "352726", "profile_background_image_url": "http://a0.twimg.com/images/themes/theme5/bg.gif", "profile_background_image_url_https": "https://si0.twimg.com/images/themes/theme5/bg.gif", "profile_background_tile": false, "profile_image_url": "http://a0.twimg.com/profile_images/1621757700/twitter_normal.png", "profile_image_url_https": "https://si0.twimg.com/profile_images/1621757700/twitter_normal.png", "profile_link_color": "D02B55", "profile_sidebar_border_color": "829D5E", "profile_sidebar_fill_color": "99CC33", "profile_text_color": "3E4415", "profile_use_background_image": true, "protected": false, "screen_name": "jake_boxer", "show_all_inline_media": false, "statuses_count": 5398, "time_zone": "Eastern Time (US & Canada)", "url": "http://jakeboxer.com/", "utc_offset": -18000, "verified": false } } ================================================ FILE: src/test/resources/twitter/rest/followers/followers.json ================================================ { "users": [ { "id": 115417677, "id_str": "115417677", "name": "vianel", "screen_name": "vianeltxt", "location": "", "description": "", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 312, "friends_count": 287, "listed_count": 2, "created_at": "Thu Feb 18 16:00:11 +0000 2010", "favourites_count": 27, "utc_offset": -16200, "time_zone": "Caracas", "geo_enabled": true, "verified": false, "statuses_count": 15400, "lang": "es", "status": { "created_at": "Thu Oct 08 02:35:08 +0000 2015", "id": 651948913981816832, "id_str": "651948913981816832", "text": "Just a bad day", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "022330", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/476864639511580672\/pjCo_hqX_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/476864639511580672\/pjCo_hqX_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/115417677\/1402527744", "profile_link_color": "0084B4", "profile_sidebar_border_color": "A8C7F7", "profile_sidebar_fill_color": "C0DFEC", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 46762206, "id_str": "46762206", "name": "Eman Shaaban", "screen_name": "eman_sha3ban", "location": "Egypt", "description": "", "url": null, "entities": { "description": { "urls": [] } }, "protected": true, "followers_count": 103, "friends_count": 158, "listed_count": 2, "created_at": "Fri Jun 12 22:15:51 +0000 2009", "favourites_count": 90, "utc_offset": 7200, "time_zone": "Cairo", "geo_enabled": false, "verified": false, "statuses_count": 126, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "BADFCD", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/460273362\/xc93e90571a9a3fb42d63c0c96cd7400.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/460273362\/xc93e90571a9a3fb42d63c0c96cd7400.png", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/620634983\/_1__normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/620634983\/_1__normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/46762206\/1397952631", "profile_link_color": "0084B4", "profile_sidebar_border_color": "464E52", "profile_sidebar_fill_color": "171B1C", "profile_text_color": "ED710C", "profile_use_background_image": true, "has_extended_profile": true, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 10422372, "id_str": "10422372", "name": "Hibai Unzueta", "screen_name": "hanbzu", "location": "Bilbao", "description": "Restless learner, curiosity driven being who likes to build things on top of things. Maps, schedules, urbanism, user experience, visualisation, open data...", "url": "http:\/\/t.co\/ftcV3ISCdx", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/ftcV3ISCdx", "expanded_url": "http:\/\/www.hibaiunzueta.com", "display_url": "hibaiunzueta.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 316, "friends_count": 881, "listed_count": 27, "created_at": "Tue Nov 20 20:06:19 +0000 2007", "favourites_count": 1493, "utc_offset": 7200, "time_zone": "Bern", "geo_enabled": false, "verified": false, "statuses_count": 3567, "lang": "eu", "status": { "created_at": "Thu Oct 08 14:14:36 +0000 2015", "id": 652124939898781697, "id_str": "652124939898781697", "text": "@sabik @MaxCRoser @ryankcroft Great. Let's make them get better faster.", "source": "\u003ca href=\"https:\/\/about.twitter.com\/products\/tweetdeck\" rel=\"nofollow\"\u003eTweetDeck\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": 652082286456803328, "in_reply_to_status_id_str": "652082286456803328", "in_reply_to_user_id": 18239001, "in_reply_to_user_id_str": "18239001", "in_reply_to_screen_name": "sabik", "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "sabik", "name": "sabik", "id": 18239001, "id_str": "18239001", "indices": [ 0, 6 ] }, { "screen_name": "MaxCRoser", "name": "Max Roser", "id": 610659001, "id_str": "610659001", "indices": [ 7, 17 ] }, { "screen_name": "ryankcroft", "name": "Ryan Croft", "id": 23508925, "id_str": "23508925", "indices": [ 18, 29 ] } ], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": true, "profile_background_color": "303B3A", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/378800000014647504\/afc6c9c095a1ecb82c64641182bd9e5d.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/378800000014647504\/afc6c9c095a1ecb82c64641182bd9e5d.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/477501971897671681\/iMcbVCyF_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/477501971897671681\/iMcbVCyF_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/10422372\/1402680057", "profile_link_color": "FFCC4D", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "FFFFFF", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 14351119, "id_str": "14351119", "name": "patrickmcgloin", "screen_name": "patrickmcgloin", "location": "Amsterdam", "description": "", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 40, "friends_count": 380, "listed_count": 1, "created_at": "Thu Apr 10 13:43:50 +0000 2008", "favourites_count": 11, "utc_offset": -7200, "time_zone": "Greenland", "geo_enabled": false, "verified": false, "statuses_count": 78, "lang": "en", "status": { "created_at": "Fri Sep 18 11:32:10 +0000 2015", "id": 644836303998160896, "id_str": "644836303998160896", "text": "RT @Hamperlady: Spotted in Boston today at the Irish famine monument. Sounds familiar? #refugeeswelcome http:\/\/t.co\/UNs0HkfWDM", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Sat Sep 12 23:44:06 +0000 2015", "id": 642846175687741440, "id_str": "642846175687741440", "text": "Spotted in Boston today at the Irish famine monument. Sounds familiar? #refugeeswelcome http:\/\/t.co\/UNs0HkfWDM", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 124, "favorite_count": 60, "entities": { "hashtags": [ { "text": "refugeeswelcome", "indices": [ 71, 87 ] } ], "symbols": [], "user_mentions": [], "urls": [], "media": [ { "id": 642846141629927424, "id_str": "642846141629927424", "indices": [ 88, 110 ], "media_url": "http:\/\/pbs.twimg.com\/media\/COvZKO0VEAAtmhf.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/COvZKO0VEAAtmhf.jpg", "url": "http:\/\/t.co\/UNs0HkfWDM", "display_url": "pic.twitter.com\/UNs0HkfWDM", "expanded_url": "http:\/\/twitter.com\/Hamperlady\/status\/642846175687741440\/photo\/1", "type": "photo", "sizes": { "small": { "w": 340, "h": 340, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "medium": { "w": 600, "h": 600, "resize": "fit" }, "large": { "w": 1024, "h": 1024, "resize": "fit" } } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "retweet_count": 124, "favorite_count": 0, "entities": { "hashtags": [ { "text": "refugeeswelcome", "indices": [ 87, 103 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "Hamperlady", "name": "Amanda", "id": 19398524, "id_str": "19398524", "indices": [ 3, 14 ] } ], "urls": [], "media": [ { "id": 642846141629927424, "id_str": "642846141629927424", "indices": [ 104, 126 ], "media_url": "http:\/\/pbs.twimg.com\/media\/COvZKO0VEAAtmhf.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/COvZKO0VEAAtmhf.jpg", "url": "http:\/\/t.co\/UNs0HkfWDM", "display_url": "pic.twitter.com\/UNs0HkfWDM", "expanded_url": "http:\/\/twitter.com\/Hamperlady\/status\/642846175687741440\/photo\/1", "type": "photo", "sizes": { "small": { "w": 340, "h": 340, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "medium": { "w": 600, "h": 600, "resize": "fit" }, "large": { "w": 1024, "h": 1024, "resize": "fit" } }, "source_status_id": 642846175687741440, "source_status_id_str": "642846175687741440", "source_user_id": 19398524, "source_user_id_str": "19398524" } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/510836130158489601\/ff7Pk4vw_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/510836130158489601\/ff7Pk4vw_normal.jpeg", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 57122539, "id_str": "57122539", "name": "Andrea Tomasello", "screen_name": "TomZ85", "location": "Bologna, Italy", "description": "", "url": "http:\/\/t.co\/HUvDLSOdhW", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/HUvDLSOdhW", "expanded_url": "http:\/\/about.me\/tomz85", "display_url": "about.me\/tomz85", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 92, "friends_count": 466, "listed_count": 3, "created_at": "Wed Jul 15 20:10:49 +0000 2009", "favourites_count": 25, "utc_offset": 7200, "time_zone": "Rome", "geo_enabled": true, "verified": false, "statuses_count": 188, "lang": "it", "status": { "created_at": "Fri Sep 25 13:03:04 +0000 2015", "id": 647395896540442625, "id_str": "647395896540442625", "text": "RT @supergiampaolo: Slides of my talk on Scala at Treviso Scala Group: \"Scala 101, first steps with Scala\": http:\/\/t.co\/PxgydyRARy #scala", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Thu Sep 24 22:47:33 +0000 2015", "id": 647180599153819652, "id_str": "647180599153819652", "text": "Slides of my talk on Scala at Treviso Scala Group: \"Scala 101, first steps with Scala\": http:\/\/t.co\/PxgydyRARy #scala", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": { "id": "cf5d106c94750000", "url": "https:\/\/api.twitter.com\/1.1\/geo\/id\/cf5d106c94750000.json", "place_type": "city", "name": "Trieste", "full_name": "Trieste, Friuli-Venezia Giulia", "country_code": "IT", "country": "Italia", "contained_within": [], "bounding_box": { "type": "Polygon", "coordinates": [ [ [ 13.6683593, 45.6067875 ], [ 13.8985003, 45.6067875 ], [ 13.8985003, 45.7467022 ], [ 13.6683593, 45.7467022 ] ] ] }, "attributes": {} }, "contributors": null, "retweet_count": 14, "favorite_count": 16, "entities": { "hashtags": [ { "text": "scala", "indices": [ 111, 117 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/PxgydyRARy", "expanded_url": "http:\/\/www.slideshare.net\/GiampaoloTrapasso\/scala101-first-steps-with-scala", "display_url": "slideshare.net\/GiampaoloTrapa\u2026", "indices": [ 88, 110 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "retweet_count": 14, "favorite_count": 0, "entities": { "hashtags": [ { "text": "scala", "indices": [ 131, 137 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "supergiampaolo", "name": "Giampaolo Trapasso", "id": 22006274, "id_str": "22006274", "indices": [ 3, 18 ] } ], "urls": [ { "url": "http:\/\/t.co\/PxgydyRARy", "expanded_url": "http:\/\/www.slideshare.net\/GiampaoloTrapasso\/scala101-first-steps-with-scala", "display_url": "slideshare.net\/GiampaoloTrapa\u2026", "indices": [ 108, 130 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "022330", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/638699520281444352\/wqy7U3QN_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/638699520281444352\/wqy7U3QN_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/57122539\/1441112921", "profile_link_color": "0084B4", "profile_sidebar_border_color": "A8C7F7", "profile_sidebar_fill_color": "C0DFEC", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 55730801, "id_str": "55730801", "name": "Nathaniel Hansen", "screen_name": "Nat_Hansen", "location": "Global", "description": "Primary actions: Research & Content Development. 2015: The machine becomes conscious, humans segment by heart interests, IoT takes off on a mass scale.", "url": "http:\/\/t.co\/1TBURBFHqg", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/1TBURBFHqg", "expanded_url": "http:\/\/www.thesocializers.com", "display_url": "thesocializers.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 2422, "friends_count": 2647, "listed_count": 158, "created_at": "Sat Jul 11 02:11:55 +0000 2009", "favourites_count": 1916, "utc_offset": 3600, "time_zone": "London", "geo_enabled": false, "verified": false, "statuses_count": 10376, "lang": "en", "status": { "created_at": "Thu Oct 08 14:27:25 +0000 2015", "id": 652128166966898688, "id_str": "652128166966898688", "text": "We wanted to help cut through the mess & lack of structure for businesses. Enter, intent-based data sets & use-case dashboards. ~ @joodoo9", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 1, "favorite_count": 1, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "joodoo9", "name": "Giles Palmer", "id": 6202252, "id_str": "6202252", "indices": [ 138, 146 ] } ], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "030101", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/68826143\/socializersbackground.jpg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/68826143\/socializersbackground.jpg", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/3565637784\/d3ccedf8ef387ec79bb7a0e0b6af9f1f_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/3565637784\/d3ccedf8ef387ec79bb7a0e0b6af9f1f_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/55730801\/1399985316", "profile_link_color": "2B7E9C", "profile_sidebar_border_color": "0D0808", "profile_sidebar_fill_color": "A9B2C2", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 51259426, "id_str": "51259426", "name": "Michel Azevedo", "screen_name": "sou3", "location": "Sao Paulo, SP, Brasil ", "description": "Consultant\/Developer", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 104, "friends_count": 135, "listed_count": 6, "created_at": "Fri Jun 26 22:42:24 +0000 2009", "favourites_count": 3, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 523, "lang": "en", "status": { "created_at": "Fri Jun 12 18:21:42 +0000 2015", "id": 609425357238874112, "id_str": "609425357238874112", "text": "Um cora\u00e7\u00e3o que morre por dar amor e que n\u00e3o conhece o fim, Um cora\u00e7\u00e3o que bate por voc\u00ea, minha rebeka. \u266b http:\/\/t.co\/GlJI9xP6Bj", "source": "\u003ca href=\"http:\/\/spotify.com\" rel=\"nofollow\"\u003eSpotify\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/GlJI9xP6Bj", "expanded_url": "http:\/\/spoti.fi\/Nfwqh7", "display_url": "spoti.fi\/Nfwqh7", "indices": [ 105, 127 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "pt" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/584104169029656577\/noZNU6Lc_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/584104169029656577\/noZNU6Lc_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/51259426\/1398200111", "profile_link_color": "105670", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 2870412833, "id_str": "2870412833", "name": "norma", "screen_name": "godnorma173", "location": "", "description": "El agua hace flotar ew barco, pero tambien puedevhundirlo.", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 102, "friends_count": 1328, "listed_count": 0, "created_at": "Mon Nov 10 11:10:31 +0000 2014", "favourites_count": 0, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 885, "lang": "es", "status": { "created_at": "Fri Oct 09 03:20:32 +0000 2015", "id": 652322725923540992, "id_str": "652322725923540992", "text": "El mensaje que recibes cada manana no solo significa buenos dias, tambien cuantoqpienso en ti yuando me levanto.", "source": "\u003ca href=\"http:\/\/www.9wodrzlbhqfgx5yp8mtj2ku3nvc16si074a.com\" rel=\"nofollow\"\u003edsjlcovx9q87ank2hbwiz134pygr50u6\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [] }, "favorited": false, "retweeted": false, "lang": "es" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/579590212394835968\/xLSP0WN9_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/579590212394835968\/xLSP0WN9_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/2870412833\/1427020053", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 570504804, "id_str": "570504804", "name": "BalaB", "screen_name": "BbalajiSg", "location": "Singapore", "description": "", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 11, "friends_count": 113, "listed_count": 0, "created_at": "Fri May 04 01:09:15 +0000 2012", "favourites_count": 31, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 1, "lang": "en", "status": { "created_at": "Tue Apr 14 14:45:28 +0000 2015", "id": 587990058164060160, "id_str": "587990058164060160", "text": "@benuretsky @digitalocean \n\nAll Dell's got Deleted", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": 587978947293483009, "in_reply_to_status_id_str": "587978947293483009", "in_reply_to_user_id": 266786132, "in_reply_to_user_id_str": "266786132", "in_reply_to_screen_name": "benuretsky", "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "benuretsky", "name": "Ben Uretsky", "id": 266786132, "id_str": "266786132", "indices": [ 0, 11 ] }, { "screen_name": "digitalocean", "name": "DigitalOcean", "id": 457033547, "id_str": "457033547", "indices": [ 12, 25 ] } ], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/abs.twimg.com\/sticky\/default_profile_images\/default_profile_2_normal.png", "profile_image_url_https": "https:\/\/abs.twimg.com\/sticky\/default_profile_images\/default_profile_2_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": true, "following": false, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 59114784, "id_str": "59114784", "name": "Marcos Kikuti", "screen_name": "kikutim", "location": "-23.581337,-46.634343", "description": "", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 16, "friends_count": 14, "listed_count": 0, "created_at": "Wed Jul 22 12:42:28 +0000 2009", "favourites_count": 3, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 4, "lang": "en", "status": { "created_at": "Sat Sep 14 22:44:47 +0000 2013", "id": 379012882819592192, "id_str": "379012882819592192", "text": "http:\/\/t.co\/MS47cDC7Dq", "source": "\u003ca href=\"http:\/\/www.apple.com\" rel=\"nofollow\"\u003eCamera on iOS\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [], "media": [ { "id": 379012882718928896, "id_str": "379012882718928896", "indices": [ 0, 22 ], "media_url": "http:\/\/pbs.twimg.com\/media\/BUKGNW_CMAA8l2t.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/BUKGNW_CMAA8l2t.jpg", "url": "http:\/\/t.co\/MS47cDC7Dq", "display_url": "pic.twitter.com\/MS47cDC7Dq", "expanded_url": "http:\/\/twitter.com\/kikutim\/status\/379012882819592192\/photo\/1", "type": "photo", "sizes": { "large": { "w": 716, "h": 960, "resize": "fit" }, "small": { "w": 340, "h": 455, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "medium": { "w": 600, "h": 804, "resize": "fit" } } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "und" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C6E2EE", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme2\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme2\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/abs.twimg.com\/sticky\/default_profile_images\/default_profile_1_normal.png", "profile_image_url_https": "https:\/\/abs.twimg.com\/sticky\/default_profile_images\/default_profile_1_normal.png", "profile_link_color": "1F98C7", "profile_sidebar_border_color": "C6E2EE", "profile_sidebar_fill_color": "DAECF4", "profile_text_color": "663B12", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": true, "following": false, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false } ], "next_cursor": 1509804826596207566, "next_cursor_str": "1509804826596207566", "previous_cursor": 0, "previous_cursor_str": "0" } ================================================ FILE: src/test/resources/twitter/rest/followers/followers_ids.json ================================================ { "ids": [ 3185001906, 2864749010, 2728578117, 2390428970, 2392623769, 2298388902, 2218822532, 2294010576, 2298665443, 2295646148, 2392372830, 2489878842, 2537896318, 1456646244, 2369342556, 908315570, 134681213, 2207996772, 1323648805, 2209966914, 1377248521, 450742576, 2169915990, 2168731405, 1032613423, 1897558387, 1651460672, 552136201, 1961595428, 622040005, 1723067108, 1940180042, 1921253352, 1916881861, 1909516183, 1899472064, 1409030454, 551190078, 98585322, 1287005810, 1857413564, 1507117872, 616207096, 1707416846, 795061039, 245171204, 1671544250, 550058321, 1661133924, 302907601, 1184312352, 1360513801, 1627139449, 1633417872, 1624546278, 1549848770, 1606806666, 1286204832, 102781433, 1547689992, 1549487112, 1546030177, 1232717508, 1366161096, 1470134192, 1538866020, 1525394654, 1360382390, 1485097536, 1520331235, 1360663580, 1517720449, 62084055, 1092628730, 1362034669, 1214653182, 556802885, 364135790 ], "next_cursor": 0, "next_cursor_str": "0", "previous_cursor": 0, "previous_cursor_str": "0" } ================================================ FILE: src/test/resources/twitter/rest/followers/followers_ids_stringified.json ================================================ { "ids": [ "3185001906", "2864749010", "2728578117", "2390428970", "2392623769", "2298388902", "2218822532", "2294010576", "2298665443", "2295646148", "2392372830", "2489878842", "2537896318", "1456646244", "2369342556", "908315570", "134681213", "2207996772", "1323648805", "2209966914", "1377248521", "450742576", "2169915990", "2168731405", "1032613423", "1897558387", "1651460672", "552136201", "1961595428", "622040005", "1723067108", "1940180042", "1921253352", "1916881861", "1909516183", "1899472064", "1409030454", "551190078", "98585322", "1287005810", "1857413564", "1507117872", "616207096", "1707416846", "795061039", "245171204", "1671544250", "550058321", "1661133924", "302907601", "1184312352", "1360513801", "1627139449", "1633417872", "1624546278", "1549848770", "1606806666", "1286204832", "102781433", "1547689992", "1549487112", "1546030177", "1232717508", "1366161096", "1470134192", "1538866020", "1525394654", "1360382390", "1485097536", "1520331235", "1360663580", "1517720449", "62084055", "1092628730", "1362034669", "1214653182", "556802885", "364135790" ], "next_cursor": 0, "next_cursor_str": "0", "previous_cursor": 0, "previous_cursor_str": "0" } ================================================ FILE: src/test/resources/twitter/rest/friends/friends_ids.json ================================================ { "ids": [ 3185001906, 2864749010, 2728578117, 2390428970, 2392623769, 2298388902, 2218822532, 2294010576, 2298665443, 2295646148, 2392372830, 2489878842, 2537896318, 1456646244, 2369342556, 908315570, 134681213, 2207996772, 1323648805, 2209966914, 1377248521, 450742576, 2169915990, 2168731405, 1032613423, 1897558387, 1651460672, 552136201, 1961595428, 622040005, 1723067108, 1940180042, 1921253352, 1916881861, 1909516183, 1899472064, 1409030454, 551190078, 98585322, 1287005810, 1857413564, 1507117872, 616207096, 1707416846, 795061039, 245171204, 1671544250, 550058321, 1661133924, 302907601, 1184312352, 1360513801, 1627139449, 1633417872, 1624546278, 1549848770, 1606806666, 1286204832, 102781433, 1547689992, 1549487112, 1546030177, 1232717508, 1366161096, 1470134192, 1538866020, 1525394654, 1360382390, 1485097536, 1520331235, 1360663580, 1517720449, 62084055, 1092628730, 1362034669, 1214653182, 556802885, 364135790 ], "next_cursor": 0, "next_cursor_str": "0", "previous_cursor": 0, "previous_cursor_str": "0" } ================================================ FILE: src/test/resources/twitter/rest/friends/friends_ids_stringified.json ================================================ { "ids": [ "3185001906", "2864749010", "2728578117", "2390428970", "2392623769", "2298388902", "2218822532", "2294010576", "2298665443", "2295646148", "2392372830", "2489878842", "2537896318", "1456646244", "2369342556", "908315570", "134681213", "2207996772", "1323648805", "2209966914", "1377248521", "450742576", "2169915990", "2168731405", "1032613423", "1897558387", "1651460672", "552136201", "1961595428", "622040005", "1723067108", "1940180042", "1921253352", "1916881861", "1909516183", "1899472064", "1409030454", "551190078", "98585322", "1287005810", "1857413564", "1507117872", "616207096", "1707416846", "795061039", "245171204", "1671544250", "550058321", "1661133924", "302907601", "1184312352", "1360513801", "1627139449", "1633417872", "1624546278", "1549848770", "1606806666", "1286204832", "102781433", "1547689992", "1549487112", "1546030177", "1232717508", "1366161096", "1470134192", "1538866020", "1525394654", "1360382390", "1485097536", "1520331235", "1360663580", "1517720449", "62084055", "1092628730", "1362034669", "1214653182", "556802885", "364135790" ], "next_cursor": 0, "next_cursor_str": "0", "previous_cursor": 0, "previous_cursor_str": "0" } ================================================ FILE: src/test/resources/twitter/rest/friends/users.json ================================================ { "users": [ { "id": 4325301, "id_str": "4325301", "name": "Jason Zaugg", "screen_name": "retronym", "location": "Brisbane, Australia", "description": "Compiler Engineer @ Typesafe", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 2878, "friends_count": 329, "listed_count": 149, "created_at": "Thu Apr 12 08:52:38 +0000 2007", "favourites_count": 171, "utc_offset": 32400, "time_zone": "Yakutsk", "geo_enabled": false, "verified": false, "statuses_count": 1472, "lang": "en", "status": { "created_at": "Wed Oct 07 19:53:28 +0000 2015", "id": 651847832538734593, "id_str": "651847832538734593", "text": "RT @scala_lang: Gitter room reorg: scala\/scala is now the general room. scala\/contributors for talking internals. (scala\/scala\/scala-user i\u2026", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Wed Oct 07 18:04:32 +0000 2015", "id": 651820418538602496, "id_str": "651820418538602496", "text": "Gitter room reorg: scala\/scala is now the general room. scala\/contributors for talking internals. (scala\/scala\/scala-user is being retired.)", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 5, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" }, "retweet_count": 5, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "scala_lang", "name": "Scala", "id": 1221300014, "id_str": "1221300014", "indices": [ 3, 14 ] } ], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "9AE4E8", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/378800000122871725\/5269c866ffadd34a3401ec3476476dad.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/378800000122871725\/5269c866ffadd34a3401ec3476476dad.png", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/515822337\/avatar_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/515822337\/avatar_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/4325301\/1398330737", "profile_link_color": "000000", "profile_sidebar_border_color": "87BC44", "profile_sidebar_fill_color": "E0FF92", "profile_text_color": "0000FF", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 118185789, "id_str": "118185789", "name": "Patrik Nordwall", "screen_name": "patriknw", "location": "Stockholm", "description": "Work @typesafe with #Scala, #Akka", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 1628, "friends_count": 131, "listed_count": 83, "created_at": "Sat Feb 27 21:41:51 +0000 2010", "favourites_count": 13, "utc_offset": 7200, "time_zone": "Stockholm", "geo_enabled": false, "verified": false, "statuses_count": 1080, "lang": "en", "status": { "created_at": "Sun Oct 04 15:06:39 +0000 2015", "id": 650688486631211008, "id_str": "650688486631211008", "text": "RT @mrt1nz: #Cassandra plugin for #Akka Persistence 2.4.0 released. https:\/\/t.co\/Bc840GyfXF Thanks @chbatey for all your high-quality work \u2026", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Sun Oct 04 08:34:53 +0000 2015", "id": 650589896407691264, "id_str": "650589896407691264", "text": "#Cassandra plugin for #Akka Persistence 2.4.0 released. https:\/\/t.co\/Bc840GyfXF Thanks @chbatey for all your high-quality work on it!", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 47, "favorite_count": 50, "entities": { "hashtags": [ { "text": "Cassandra", "indices": [ 0, 10 ] }, { "text": "Akka", "indices": [ 22, 27 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "chbatey", "name": "Christopher Batey", "id": 80530885, "id_str": "80530885", "indices": [ 87, 95 ] } ], "urls": [ { "url": "https:\/\/t.co\/Bc840GyfXF", "expanded_url": "https:\/\/github.com\/krasserm\/akka-persistence-cassandra\/issues?q=milestone%3A0.4+is%3Aclosed", "display_url": "github.com\/krasserm\/akka-\u2026", "indices": [ 56, 79 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "retweet_count": 47, "favorite_count": 0, "entities": { "hashtags": [ { "text": "Cassandra", "indices": [ 12, 22 ] }, { "text": "Akka", "indices": [ 34, 39 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "mrt1nz", "name": "Martin Krasser", "id": 15295946, "id_str": "15295946", "indices": [ 3, 10 ] }, { "screen_name": "chbatey", "name": "Christopher Batey", "id": 80530885, "id_str": "80530885", "indices": [ 99, 107 ] } ], "urls": [ { "url": "https:\/\/t.co\/Bc840GyfXF", "expanded_url": "https:\/\/github.com\/krasserm\/akka-persistence-cassandra\/issues?q=milestone%3A0.4+is%3Aclosed", "display_url": "github.com\/krasserm\/akka-\u2026", "indices": [ 68, 91 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "9AE4E8", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/94984933\/x22e289ef5702458dc86f5cd301a22f3.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/94984933\/x22e289ef5702458dc86f5cd301a22f3.png", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/2452148249\/p51txvmjs3gks27bs5vr_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/2452148249\/p51txvmjs3gks27bs5vr_normal.jpeg", "profile_link_color": "0000FF", "profile_sidebar_border_color": "87BC44", "profile_sidebar_fill_color": "E0FF92", "profile_text_color": "000000", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 19418890, "id_str": "19418890", "name": "Josh Suereth", "screen_name": "jsuereth", "location": "", "description": "Author: Scala In Depth\r\nDeveloper: Geeky Scala Stuff\r\nAll Around: Big Nerd", "url": "http:\/\/t.co\/VVHwaER3hu", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/VVHwaER3hu", "expanded_url": "http:\/\/jsuereth.com", "display_url": "jsuereth.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 6765, "friends_count": 399, "listed_count": 365, "created_at": "Fri Jan 23 22:53:57 +0000 2009", "favourites_count": 611, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 6797, "lang": "en", "status": { "created_at": "Sun Oct 04 15:29:30 +0000 2015", "id": 650694240176087041, "id_str": "650694240176087041", "text": "@aut0mat0n1c believe you can do that all in one string", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": 650521639931768832, "in_reply_to_status_id_str": "650521639931768832", "in_reply_to_user_id": 260389486, "in_reply_to_user_id_str": "260389486", "in_reply_to_screen_name": "aut0mat0n1c", "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "aut0mat0n1c", "name": "randy shepherd", "id": 260389486, "id_str": "260389486", "indices": [ 0, 12 ] } ], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/2162642114\/me-suprised-cropped_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/2162642114\/me-suprised-cropped_normal.jpg", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 15295946, "id_str": "15295946", "name": "Martin Krasser", "screen_name": "mrt1nz", "location": "", "description": "Distributed systems developer, Scala\/Java programmer, integration specialist, downhill whatever", "url": "http:\/\/t.co\/fUhk1fMSWp", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/fUhk1fMSWp", "expanded_url": "http:\/\/martin-krasser.de\/", "display_url": "martin-krasser.de", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 2302, "friends_count": 57, "listed_count": 136, "created_at": "Wed Jul 02 07:02:10 +0000 2008", "favourites_count": 159, "utc_offset": 7200, "time_zone": "Vienna", "geo_enabled": false, "verified": false, "statuses_count": 2732, "lang": "en", "status": { "created_at": "Wed Oct 07 17:02:20 +0000 2015", "id": 651804763030454272, "id_str": "651804763030454272", "text": "RT @okumin: akka-persistence-sql-async \u30d1\u30d6\u30ea\u30c3\u30b7\u30e5\u3057\u307e\u3057\u305f\u3002 https:\/\/t.co\/mVg93Znk9F #Akka", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Wed Oct 07 15:05:00 +0000 2015", "id": 651775238699552768, "id_str": "651775238699552768", "text": "akka-persistence-sql-async \u30d1\u30d6\u30ea\u30c3\u30b7\u30e5\u3057\u307e\u3057\u305f\u3002 https:\/\/t.co\/mVg93Znk9F #Akka", "source": "\u003ca href=\"http:\/\/sites.google.com\/site\/yorufukurou\/\" rel=\"nofollow\"\u003eYoruFukurou\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 6, "favorite_count": 7, "entities": { "hashtags": [ { "text": "Akka", "indices": [ 63, 68 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/mVg93Znk9F", "expanded_url": "https:\/\/github.com\/okumin\/akka-persistence-sql-async", "display_url": "github.com\/okumin\/akka-pe\u2026", "indices": [ 39, 62 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "ja" }, "retweet_count": 6, "favorite_count": 0, "entities": { "hashtags": [ { "text": "Akka", "indices": [ 75, 80 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "okumin", "name": "\u304a\u304f\u307f\u3093@\u5973\u5b50\u9ad8\u6821\u751f", "id": 91770461, "id_str": "91770461", "indices": [ 3, 10 ] } ], "urls": [ { "url": "https:\/\/t.co\/mVg93Znk9F", "expanded_url": "https:\/\/github.com\/okumin\/akka-persistence-sql-async", "display_url": "github.com\/okumin\/akka-pe\u2026", "indices": [ 51, 74 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "ja" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/801620954\/0b2c80a4fda06927c22a086826e87dd0.jpeg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/801620954\/0b2c80a4fda06927c22a086826e87dd0.jpeg", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1123689116\/Bild006a_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1123689116\/Bild006a_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/15295946\/1361957839", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 1345043875, "id_str": "1345043875", "name": "Functional Works", "screen_name": "Functionalworks", "location": "London HQ | Global reach ", "description": "Functional Programming Advocates. Providing Talent Solutions, Strategic Advice, Curated Events & Insight across Clojure, Scala, Erlang, Haskell, F#, OCaml,Swift", "url": "http:\/\/t.co\/BXwhIYmO2c", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/BXwhIYmO2c", "expanded_url": "http:\/\/functionalworks.com\/", "display_url": "functionalworks.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 4192, "friends_count": 365, "listed_count": 216, "created_at": "Thu Apr 11 18:46:02 +0000 2013", "favourites_count": 4606, "utc_offset": 7200, "time_zone": "Amsterdam", "geo_enabled": true, "verified": false, "statuses_count": 4168, "lang": "en", "status": { "created_at": "Wed Oct 07 20:08:17 +0000 2015", "id": 651851561082220544, "id_str": "651851561082220544", "text": "Debugging Functional #javascript http:\/\/t.co\/yqbQnpzGAn", "source": "\u003ca href=\"http:\/\/bufferapp.com\" rel=\"nofollow\"\u003eBuffer\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 7, "entities": { "hashtags": [ { "text": "javascript", "indices": [ 21, 32 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/yqbQnpzGAn", "expanded_url": "http:\/\/buff.ly\/1WMvfv1", "display_url": "buff.ly\/1WMvfv1", "indices": [ 33, 55 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "131516", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme14\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme14\/bg.gif", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/439367291214364673\/M_Z9rDrf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/439367291214364673\/M_Z9rDrf_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/1345043875\/1412684063", "profile_link_color": "F52727", "profile_sidebar_border_color": "EEEEEE", "profile_sidebar_fill_color": "EFEFEF", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 573048915, "id_str": "573048915", "name": "Scala Puzzlers", "screen_name": "ScalaPuzzlers", "location": "", "description": "", "url": "http:\/\/t.co\/ukKxj5OaSc", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/ukKxj5OaSc", "expanded_url": "http:\/\/scalapuzzlers.com", "display_url": "scalapuzzlers.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 378, "friends_count": 20, "listed_count": 15, "created_at": "Sun May 06 19:59:29 +0000 2012", "favourites_count": 0, "utc_offset": -10800, "time_zone": "Atlantic Time (Canada)", "geo_enabled": false, "verified": false, "statuses_count": 44, "lang": "en", "status": { "created_at": "Mon Mar 30 12:37:46 +0000 2015", "id": 582522103167094784, "id_str": "582522103167094784", "text": "RT @ConcreteVitamin: http:\/\/t.co\/hsrHnAxW2I is quite good & indeed surprising! Would love to see a variant on Scala performance gotchas :) \u2026", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Sun Mar 29 23:01:35 +0000 2015", "id": 582316704673447937, "id_str": "582316704673447937", "text": "http:\/\/t.co\/hsrHnAxW2I is quite good & indeed surprising! Would love to see a variant on Scala performance gotchas :) \/cc @rxin?", "source": "\u003ca href=\"http:\/\/www.hootsuite.com\" rel=\"nofollow\"\u003eHootsuite\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 2, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "rxin", "name": "Reynold Xin", "id": 17712257, "id_str": "17712257", "indices": [ 126, 131 ] } ], "urls": [ { "url": "http:\/\/t.co\/hsrHnAxW2I", "expanded_url": "http:\/\/scalapuzzlers.com\/", "display_url": "scalapuzzlers.com", "indices": [ 0, 22 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "retweet_count": 2, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "ConcreteVitamin", "name": "Zongheng Yang", "id": 11453482, "id_str": "11453482", "indices": [ 3, 19 ] }, { "screen_name": "rxin", "name": "Reynold Xin", "id": 17712257, "id_str": "17712257", "indices": [ 143, 144 ] } ], "urls": [ { "url": "http:\/\/t.co\/hsrHnAxW2I", "expanded_url": "http:\/\/scalapuzzlers.com\/", "display_url": "scalapuzzlers.com", "indices": [ 21, 43 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/2210992592\/sp_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/2210992592\/sp_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 3425836427, "id_str": "3425836427", "name": "Scala World", "screen_name": "scalaworldconf", "location": "Penrith, England", "description": "The most exciting Scala event of the year!", "url": "https:\/\/t.co\/7WqZMYNtQT", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/7WqZMYNtQT", "expanded_url": "https:\/\/scala.world\/", "display_url": "scala.world", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 452, "friends_count": 136, "listed_count": 17, "created_at": "Sun Aug 16 13:05:09 +0000 2015", "favourites_count": 340, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 200, "lang": "en", "status": { "created_at": "Thu Oct 08 07:18:33 +0000 2015", "id": 652020237617917952, "id_str": "652020237617917952", "text": "Here's a sneak preview of @extempore2's Scala World talk.\nhttp:\/\/t.co\/b2CHs9euKe", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "extempore2", "name": "Paul Phillips", "id": 21311342, "id_str": "21311342", "indices": [ 26, 37 ] } ], "urls": [ { "url": "http:\/\/t.co\/b2CHs9euKe", "expanded_url": "http:\/\/cdn.makeagif.com\/media\/10-08-2015\/05tcpi.gif", "display_url": "cdn.makeagif.com\/media\/10-08-20\u2026", "indices": [ 58, 80 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/632902788217970688\/rf0GE2M1_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/632902788217970688\/rf0GE2M1_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 297636217, "id_str": "297636217", "name": "Alex Lakatos", "screen_name": "lakatos88", "location": "London, England", "description": "Tech Lead by day, Mozilla Representative Mentor and Freelance Web Developer by night.", "url": "http:\/\/t.co\/0j6CAUcqKp", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/0j6CAUcqKp", "expanded_url": "http:\/\/alexlakatos.com", "display_url": "alexlakatos.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 544, "friends_count": 323, "listed_count": 37, "created_at": "Thu May 12 21:01:50 +0000 2011", "favourites_count": 183, "utc_offset": 10800, "time_zone": "Bucharest", "geo_enabled": true, "verified": false, "statuses_count": 1522, "lang": "en", "status": { "created_at": "Thu Oct 08 06:22:10 +0000 2015", "id": 652006049248055296, "id_str": "652006049248055296", "text": "I wonder what Power I'll get... http:\/\/t.co\/Pm4Rsk5YD7", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [], "media": [ { "id": 652006042402988032, "id_str": "652006042402988032", "indices": [ 32, 54 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQxkCoTWoAAYIwq.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQxkCoTWoAAYIwq.jpg", "url": "http:\/\/t.co\/Pm4Rsk5YD7", "display_url": "pic.twitter.com\/Pm4Rsk5YD7", "expanded_url": "http:\/\/twitter.com\/lakatos88\/status\/652006049248055296\/photo\/1", "type": "photo", "sizes": { "small": { "w": 340, "h": 459, "resize": "fit" }, "large": { "w": 758, "h": 1024, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "medium": { "w": 600, "h": 810, "resize": "fit" } } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "000000", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/635626850\/uygvubn5einvv79plu4l.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/635626850\/uygvubn5einvv79plu4l.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/488462714268692480\/s0fwq3m4_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/488462714268692480\/s0fwq3m4_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/297636217\/1393085844", "profile_link_color": "ABB8C2", "profile_sidebar_border_color": "222224", "profile_sidebar_fill_color": "1F1918", "profile_text_color": "474247", "profile_use_background_image": true, "has_extended_profile": true, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 2539089865, "id_str": "2539089865", "name": "ScalaJobs", "screen_name": "scalajobsorg", "location": "", "description": "Better Scala Play Lift Akka Jobs", "url": "http:\/\/t.co\/8DWx5AZUl1", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/8DWx5AZUl1", "expanded_url": "http:\/\/scalajobs.org", "display_url": "scalajobs.org", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 400, "friends_count": 911, "listed_count": 14, "created_at": "Sun Jun 01 08:18:53 +0000 2014", "favourites_count": 25, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 28, "lang": "tr", "status": { "created_at": "Wed Oct 07 18:50:34 +0000 2015", "id": 651832001314615296, "id_str": "651832001314615296", "text": "Hiring Senior Java \/ Scala Developer at Ytrail\nhttp:\/\/t.co\/LhmhhZ6FbB\n\n#scala #java #jobs #hiring #germany #JavaEE http:\/\/t.co\/jH2O5SgvWS", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 2, "favorite_count": 0, "entities": { "hashtags": [ { "text": "scala", "indices": [ 71, 77 ] }, { "text": "java", "indices": [ 78, 83 ] }, { "text": "jobs", "indices": [ 84, 89 ] }, { "text": "hiring", "indices": [ 90, 97 ] }, { "text": "germany", "indices": [ 98, 106 ] }, { "text": "JavaEE", "indices": [ 107, 114 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/LhmhhZ6FbB", "expanded_url": "http:\/\/scalajobs.org\/jobs\/30\/senior-java-scala-developer-ytrail\/", "display_url": "scalajobs.org\/jobs\/30\/senior\u2026", "indices": [ 47, 69 ] } ], "media": [ { "id": 651831999271825408, "id_str": "651831999271825408", "indices": [ 115, 137 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQvFv_HUcAAmbOo.png", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQvFv_HUcAAmbOo.png", "url": "http:\/\/t.co\/jH2O5SgvWS", "display_url": "pic.twitter.com\/jH2O5SgvWS", "expanded_url": "http:\/\/twitter.com\/scalajobsorg\/status\/651832001314615296\/photo\/1", "type": "photo", "sizes": { "small": { "w": 320, "h": 226, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 320, "h": 226, "resize": "fit" }, "medium": { "w": 320, "h": 226, "resize": "fit" } } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/473016900687908864\/6Jf-4esJ.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/473016900687908864\/6Jf-4esJ.png", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/473016425884307456\/j_Iz_Sbb_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/473016425884307456\/j_Iz_Sbb_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/2539089865\/1401611075", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false }, { "id": 150371060, "id_str": "150371060", "name": "Stefano Campana", "screen_name": "campanastefano", "location": "London", "description": "M&A and Strategy Consultant, Startup Mentor. I create innovative business models. Founder\/CEO", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 1097, "friends_count": 1103, "listed_count": 10, "created_at": "Mon May 31 19:30:31 +0000 2010", "favourites_count": 5, "utc_offset": 7200, "time_zone": "Rome", "geo_enabled": true, "verified": false, "statuses_count": 53, "lang": "en", "status": { "created_at": "Tue Aug 11 12:56:13 +0000 2015", "id": 631086717576060928, "id_str": "631086717576060928", "text": "Now live 'Great British Beer Festival Opens At London Olympia' #gbbf #beerfestival https:\/\/t.co\/byk6XxMY0g via @happenceapp", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [ { "text": "gbbf", "indices": [ 63, 68 ] }, { "text": "beerfestival", "indices": [ 69, 82 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "happenceapp", "name": "happence", "id": 3182353361, "id_str": "3182353361", "indices": [ 112, 124 ] } ], "urls": [ { "url": "https:\/\/t.co\/byk6XxMY0g", "expanded_url": "https:\/\/www.happence.com\/andywithacamera\/great-british-beer-festival-open-at-london-olympia", "display_url": "happence.com\/andywithacamer\u2026", "indices": [ 84, 107 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/520564270786809857\/yf95Wy07_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/520564270786809857\/yf95Wy07_normal.jpeg", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false, "muting": false, "blocking": false, "blocked_by": false } ], "next_cursor": 1505237162178665432, "next_cursor_str": "1505237162178665432", "previous_cursor": 0, "previous_cursor_str": "0" } ================================================ FILE: src/test/resources/twitter/rest/friendships/blocked_users.json ================================================ [777925,732321] ================================================ FILE: src/test/resources/twitter/rest/friendships/blocked_users_stringified.json ================================================ ["777925","732321"] ================================================ FILE: src/test/resources/twitter/rest/friendships/follow.json ================================================ { "id": 19018614, "id_str": "19018614", "name": "Marco Bonzanini", "screen_name": "marcobonzanini", "location": "London, United Kingdom", "description": "Data Scientist - Information Retrieval, NLP, Text Analytics, Machine Learning, everything Python. PhD from @QMUL", "url": "http:\/\/t.co\/34uCLCPVkH", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/34uCLCPVkH", "expanded_url": "http:\/\/marcobonzanini.com", "display_url": "marcobonzanini.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 240, "friends_count": 206, "listed_count": 34, "created_at": "Thu Jan 15 11:28:04 +0000 2009", "favourites_count": 3, "utc_offset": 3600, "time_zone": "London", "geo_enabled": false, "verified": false, "statuses_count": 171, "lang": "en", "status": { "created_at": "Tue Oct 06 20:17:44 +0000 2015", "id": 651491549889626112, "id_str": "651491549889626112", "text": "@miguelmalvarez nice one as usual", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": 651445856802074625, "in_reply_to_status_id_str": "651445856802074625", "in_reply_to_user_id": 97880420, "in_reply_to_user_id_str": "97880420", "in_reply_to_screen_name": "miguelmalvarez", "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 1, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "miguelmalvarez", "name": "Miguel Martinez", "id": 97880420, "id_str": "97880420", "indices": [ 0, 15 ] } ], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "709397", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_link_color": "FF3300", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "muting": false } ================================================ FILE: src/test/resources/twitter/rest/friendships/incoming_friendships_ids.json ================================================ { "ids": [ 3185001906, 2864749010, 2728578117, 2390428970, 2392623769, 2298388902, 2218822532, 2294010576, 2298665443, 2295646148, 2392372830, 2489878842, 2537896318, 1456646244, 2369342556, 908315570, 134681213, 2207996772, 1323648805, 2209966914, 1377248521, 450742576, 2169915990, 2168731405, 1032613423, 1897558387, 1651460672, 552136201, 1961595428, 622040005, 1723067108, 1940180042, 1921253352, 1916881861, 1909516183, 1899472064, 1409030454, 551190078, 98585322, 1287005810, 1857413564, 1507117872, 616207096, 1707416846, 795061039, 245171204, 1671544250, 550058321, 1661133924, 302907601, 1184312352, 1360513801, 1627139449, 1633417872, 1624546278, 1549848770, 1606806666, 1286204832, 102781433, 1547689992, 1549487112, 1546030177, 1232717508, 1366161096, 1470134192, 1538866020, 1525394654, 1360382390, 1485097536, 1520331235, 1360663580, 1517720449, 62084055, 1092628730, 1362034669, 1214653182, 556802885, 364135790 ], "next_cursor": 0, "next_cursor_str": "0", "previous_cursor": 0, "previous_cursor_str": "0" } ================================================ FILE: src/test/resources/twitter/rest/friendships/incoming_friendships_ids_stringified.json ================================================ { "ids": [ "3185001906", "2864749010", "2728578117", "2390428970", "2392623769", "2298388902", "2218822532", "2294010576", "2298665443", "2295646148", "2392372830", "2489878842", "2537896318", "1456646244", "2369342556", "908315570", "134681213", "2207996772", "1323648805", "2209966914", "1377248521", "450742576", "2169915990", "2168731405", "1032613423", "1897558387", "1651460672", "552136201", "1961595428", "622040005", "1723067108", "1940180042", "1921253352", "1916881861", "1909516183", "1899472064", "1409030454", "551190078", "98585322", "1287005810", "1857413564", "1507117872", "616207096", "1707416846", "795061039", "245171204", "1671544250", "550058321", "1661133924", "302907601", "1184312352", "1360513801", "1627139449", "1633417872", "1624546278", "1549848770", "1606806666", "1286204832", "102781433", "1547689992", "1549487112", "1546030177", "1232717508", "1366161096", "1470134192", "1538866020", "1525394654", "1360382390", "1485097536", "1520331235", "1360663580", "1517720449", "62084055", "1092628730", "1362034669", "1214653182", "556802885", "364135790" ], "next_cursor": 0, "next_cursor_str": "0", "previous_cursor": 0, "previous_cursor_str": "0" } ================================================ FILE: src/test/resources/twitter/rest/friendships/outgoing_friendships_ids.json ================================================ { "ids": [ 3185001906, 2864749010, 2728578117, 2390428970, 2392623769, 2298388902, 2218822532, 2294010576, 2298665443, 2295646148, 2392372830, 2489878842, 2537896318, 1456646244, 2369342556, 908315570, 134681213, 2207996772, 1323648805, 2209966914, 1377248521, 450742576, 2169915990, 2168731405, 1032613423, 1897558387, 1651460672, 552136201, 1961595428, 622040005, 1723067108, 1940180042, 1921253352, 1916881861, 1909516183, 1899472064, 1409030454, 551190078, 98585322, 1287005810, 1857413564, 1507117872, 616207096, 1707416846, 795061039, 245171204, 1671544250, 550058321, 1661133924, 302907601, 1184312352, 1360513801, 1627139449, 1633417872, 1624546278, 1549848770, 1606806666, 1286204832, 102781433, 1547689992, 1549487112, 1546030177, 1232717508, 1366161096, 1470134192, 1538866020, 1525394654, 1360382390, 1485097536, 1520331235, 1360663580, 1517720449, 62084055, 1092628730, 1362034669, 1214653182, 556802885, 364135790 ], "next_cursor": 0, "next_cursor_str": "0", "previous_cursor": 0, "previous_cursor_str": "0" } ================================================ FILE: src/test/resources/twitter/rest/friendships/outgoing_friendships_ids_stringified.json ================================================ { "ids": [ "3185001906", "2864749010", "2728578117", "2390428970", "2392623769", "2298388902", "2218822532", "2294010576", "2298665443", "2295646148", "2392372830", "2489878842", "2537896318", "1456646244", "2369342556", "908315570", "134681213", "2207996772", "1323648805", "2209966914", "1377248521", "450742576", "2169915990", "2168731405", "1032613423", "1897558387", "1651460672", "552136201", "1961595428", "622040005", "1723067108", "1940180042", "1921253352", "1916881861", "1909516183", "1899472064", "1409030454", "551190078", "98585322", "1287005810", "1857413564", "1507117872", "616207096", "1707416846", "795061039", "245171204", "1671544250", "550058321", "1661133924", "302907601", "1184312352", "1360513801", "1627139449", "1633417872", "1624546278", "1549848770", "1606806666", "1286204832", "102781433", "1547689992", "1549487112", "1546030177", "1232717508", "1366161096", "1470134192", "1538866020", "1525394654", "1360382390", "1485097536", "1520331235", "1360663580", "1517720449", "62084055", "1092628730", "1362034669", "1214653182", "556802885", "364135790" ], "next_cursor": 0, "next_cursor_str": "0", "previous_cursor": 0, "previous_cursor_str": "0" } ================================================ FILE: src/test/resources/twitter/rest/friendships/relationship.json ================================================ { "relationship": { "source": { "id": 2911461333, "id_str": "2911461333", "screen_name": "DanielaSfregola", "following": true, "followed_by": true, "following_received": null, "following_requested": false, "notifications_enabled": false, "can_dm": false, "blocking": false, "blocked_by": false, "muting": false, "want_retweets": true, "all_replies": false, "marked_spam": false }, "target": { "id": 19018614, "id_str": "19018614", "screen_name": "marcobonzanini", "following": true, "followed_by": true, "following_received": false, "following_requested": null } } } ================================================ FILE: src/test/resources/twitter/rest/friendships/relationships.json ================================================ [ { "name": "Marco Bonzanini", "screen_name": "marcobonzanini", "id": 19018614, "id_str": "19018614", "connections": [ "following", "followed_by" ] }, { "name": "Martin Odersky", "screen_name": "odersky", "id": 17765013, "id_str": "17765013", "connections": [ "following" ] } ] ================================================ FILE: src/test/resources/twitter/rest/friendships/unfollow.json ================================================ { "id": 19018614, "id_str": "19018614", "name": "Marco Bonzanini", "screen_name": "marcobonzanini", "location": "London, United Kingdom", "description": "Data Scientist - Information Retrieval, NLP, Text Analytics, Machine Learning, everything Python. PhD from @QMUL", "url": "http:\/\/t.co\/34uCLCPVkH", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/34uCLCPVkH", "expanded_url": "http:\/\/marcobonzanini.com", "display_url": "marcobonzanini.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 240, "friends_count": 206, "listed_count": 34, "created_at": "Thu Jan 15 11:28:04 +0000 2009", "favourites_count": 3, "utc_offset": 3600, "time_zone": "London", "geo_enabled": false, "verified": false, "statuses_count": 171, "lang": "en", "status": { "created_at": "Tue Oct 06 20:17:44 +0000 2015", "id": 651491549889626112, "id_str": "651491549889626112", "text": "@miguelmalvarez nice one as usual", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": 651445856802074625, "in_reply_to_status_id_str": "651445856802074625", "in_reply_to_user_id": 97880420, "in_reply_to_user_id_str": "97880420", "in_reply_to_screen_name": "miguelmalvarez", "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 1, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "miguelmalvarez", "name": "Miguel Martinez", "id": 97880420, "id_str": "97880420", "indices": [ 0, 15 ] } ], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "709397", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_link_color": "FF3300", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "muting": false } ================================================ FILE: src/test/resources/twitter/rest/friendships/update.json ================================================ { "relationship": { "source": { "id": 2911461333, "id_str": "2911461333", "screen_name": "DanielaSfregola", "following": true, "followed_by": true, "following_received": null, "following_requested": false, "notifications_enabled": false, "can_dm": false, "blocking": false, "blocked_by": false, "muting": false, "want_retweets": true, "all_replies": false, "marked_spam": false }, "target": { "id": 19018614, "id_str": "19018614", "screen_name": "marcobonzanini", "following": true, "followed_by": true, "following_received": false, "following_requested": null } } } ================================================ FILE: src/test/resources/twitter/rest/geo/advanced_search.json ================================================ { "result": { "places": [ { "id": "f6853c5cb8bce542", "url": "https:\/\/api.twitter.com\/1.1\/geo\/id\/f6853c5cb8bce542.json", "place_type": "city", "name": "Creazzo", "full_name": "Creazzo, Veneto", "country_code": "IT", "country": "Italia", "contained_within": [ { "id": "ab960b883b12e252", "url": "https:\/\/api.twitter.com\/1.1\/geo\/id\/ab960b883b12e252.json", "place_type": "admin", "name": "Vicenza", "full_name": "Vicenza, Veneto", "country_code": "IT", "country": "Italia", "centroid": [ 11.4057870480963, 45.6344105002099 ], "bounding_box": { "type": "Polygon", "coordinates": [ [ [ 11.1358969987069, 45.2553179991286 ], [ 11.1358969987069, 46.0133088013266 ], [ 11.8361999996732, 46.0133088013266 ], [ 11.8361999996732, 45.2553179991286 ], [ 11.1358969987069, 45.2553179991286 ] ] ] }, "attributes": {} } ], "centroid": [ 11.4707112843551, 45.53770675 ], "bounding_box": { "type": "Polygon", "coordinates": [ [ [ 11.4467501, 45.5186812 ], [ 11.4467501, 45.5560155 ], [ 11.5030507, 45.5560155 ], [ 11.5030507, 45.5186812 ], [ 11.4467501, 45.5186812 ] ] ] }, "attributes": {} } ] }, "query": { "url": "https:\/\/api.twitter.com\/1.1\/geo\/search.json?attribute:street_address=Via+Giotto+15&query=Creazzo", "type": "search", "params": { "accuracy": 0.0, "granularity": "neighborhood", "query": "Creazzo", "autocomplete": false, "trim_place": false, "attribute:street_address": "Via Giotto 15" } } } ================================================ FILE: src/test/resources/twitter/rest/geo/geo_place.json ================================================ { "id": "df51dec6f4ee2b2c", "url": "https:\/\/api.twitter.com\/1.1\/geo\/id\/df51dec6f4ee2b2c.json", "place_type": "neighborhood", "name": "Presidio", "full_name": "Presidio, San Francisco", "country_code": "US", "country": "United States", "contained_within": [ { "id": "5a110d312052166f", "url": "https:\/\/api.twitter.com\/1.1\/geo\/id\/5a110d312052166f.json", "place_type": "city", "name": "San Francisco", "full_name": "San Francisco, CA", "country_code": "US", "country": "United States", "centroid": [ -122.446140118543, 37.7598095 ], "bounding_box": { "type": "Polygon", "coordinates": [ [ [ -122.514926, 37.708075 ], [ -122.514926, 37.833238 ], [ -122.357031, 37.833238 ], [ -122.357031, 37.708075 ], [ -122.514926, 37.708075 ] ] ] }, "attributes": {} } ], "geometry": null, "polylines": [], "centroid": [ -122.465992089674, 37.7998245 ], "bounding_box": { "type": "Polygon", "coordinates": [ [ [ -122.4891333, 37.786925 ], [ -122.4891333, 37.8128675 ], [ -122.446306, 37.8128675 ], [ -122.446306, 37.786925 ], [ -122.4891333, 37.786925 ] ] ] }, "attributes": {"162834:id": "2202"} } ================================================ FILE: src/test/resources/twitter/rest/geo/reverse_geocode.json ================================================ { "query": { "params": { "accuracy": 0, "coordinates": { "coordinates": [ -122.42284884, 37.76893497 ], "type": "Point" }, "granularity": "neighborhood" }, "type": "reverse_geocode", "url": "https://api.twitter.com/1.1/geo/reverse_geocode.json?accuracy=0&granularity=neighborhood&lat=37.76893497&long=-122.42284884" }, "result": { "places": [ { "attributes": {}, "bounding_box": { "coordinates": [ [ [ -122.42676492, 37.75983003 ], [ -122.420736, 37.75983003 ], [ -122.420736, 37.77226299 ], [ -122.42676492, 37.77226299 ] ] ], "type": "Polygon" }, "contained_within": [ { "attributes": {}, "bounding_box": { "coordinates": [ [ [ -122.51368188, 37.70813196 ], [ -122.35845384, 37.70813196 ], [ -122.35845384, 37.83245301 ], [ -122.51368188, 37.83245301 ] ] ], "type": "Polygon" }, "country": "United States", "country_code": "US", "full_name": "San Francisco, CA", "id": "5a110d312052166f", "name": "San Francisco", "place_type": "city", "url": "https://api.twitter.com/1.1/geo/id/5a110d312052166f.json" } ], "country": "United States", "country_code": "US", "full_name": "Mission Dolores, San Francisco", "id": "cf7afb4ee6011bca", "name": "Mission Dolores", "place_type": "neighborhood", "url": "https://api.twitter.com/1.1/geo/id/cf7afb4ee6011bca.json" }, { "attributes": {}, "bounding_box": { "coordinates": [ [ [ -122.51368188, 37.70813196 ], [ -122.35845384, 37.70813196 ], [ -122.35845384, 37.83245301 ], [ -122.51368188, 37.83245301 ] ] ], "type": "Polygon" }, "contained_within": [ { "attributes": {}, "bounding_box": { "coordinates": [ [ [ -124.482003, 32.528832 ], [ -114.131211, 32.528832 ], [ -114.131211, 42.009517 ], [ -124.482003, 42.009517 ] ] ], "type": "Polygon" }, "country": "United States", "country_code": "US", "full_name": "California, US", "id": "fbd6d2f5a4e4a15e", "name": "California", "place_type": "admin", "url": "https://api.twitter.com/1.1/geo/id/fbd6d2f5a4e4a15e.json" } ], "country": "United States", "country_code": "US", "full_name": "San Francisco, CA", "id": "5a110d312052166f", "name": "San Francisco", "place_type": "city", "url": "https://api.twitter.com/1.1/geo/id/5a110d312052166f.json" }, { "attributes": {}, "bounding_box": { "coordinates": [ [ [ -124.482003, 32.528832 ], [ -114.131211, 32.528832 ], [ -114.131211, 42.009517 ], [ -124.482003, 42.009517 ] ] ], "type": "Polygon" }, "contained_within": [ { "attributes": {}, "bounding_box": null, "country": "United States", "country_code": "US", "full_name": "United States", "id": "96683cc9126741d1", "name": "United States", "place_type": "country", "url": "https://api.twitter.com/1.1/geo/id/96683cc9126741d1.json" } ], "country": "United States", "country_code": "US", "full_name": "California, US", "id": "fbd6d2f5a4e4a15e", "name": "California", "place_type": "admin", "url": "https://api.twitter.com/1.1/geo/id/fbd6d2f5a4e4a15e.json" }, { "attributes": {}, "bounding_box": null, "contained_within": [], "country": "United States", "country_code": "US", "full_name": "United States", "id": "96683cc9126741d1", "name": "United States", "place_type": "country", "url": "https://api.twitter.com/1.1/geo/id/96683cc9126741d1.json" } ] } } ================================================ FILE: src/test/resources/twitter/rest/geo/search.json ================================================ { "result": { "places": [ { "id": "f6853c5cb8bce542", "url": "https:\/\/api.twitter.com\/1.1\/geo\/id\/f6853c5cb8bce542.json", "place_type": "city", "name": "Creazzo", "full_name": "Creazzo, Veneto", "country_code": "IT", "country": "Italia", "contained_within": [ { "id": "ab960b883b12e252", "url": "https:\/\/api.twitter.com\/1.1\/geo\/id\/ab960b883b12e252.json", "place_type": "admin", "name": "Vicenza", "full_name": "Vicenza, Veneto", "country_code": "IT", "country": "Italia", "centroid": [ 11.4057870480963, 45.6344105002099 ], "bounding_box": { "type": "Polygon", "coordinates": [ [ [ 11.1358969987069, 45.2553179991286 ], [ 11.1358969987069, 46.0133088013266 ], [ 11.8361999996732, 46.0133088013266 ], [ 11.8361999996732, 45.2553179991286 ], [ 11.1358969987069, 45.2553179991286 ] ] ] }, "attributes": {} } ], "centroid": [ 11.4707112843551, 45.53770675 ], "bounding_box": { "type": "Polygon", "coordinates": [ [ [ 11.4467501, 45.5186812 ], [ 11.4467501, 45.5560155 ], [ 11.5030507, 45.5560155 ], [ 11.5030507, 45.5186812 ], [ 11.4467501, 45.5186812 ] ] ] }, "attributes": {} } ] }, "query": { "url": "https:\/\/api.twitter.com\/1.1\/geo\/search.json?query=Creazzo", "type": "search", "params": { "accuracy": 0.0, "granularity": "neighborhood", "query": "Creazzo", "autocomplete": false, "trim_place": false } } } ================================================ FILE: src/test/resources/twitter/rest/help/configuration.json ================================================ { "dm_text_character_limit": 10000, "characters_reserved_per_media": 24, "max_media_per_upload": 1, "non_username_paths": [ "about", "account", "accounts", "activity", "all", "announcements", "anywhere", "api_rules", "api_terms", "apirules", "apps", "auth", "badges", "blog", "business", "buttons", "contacts", "devices", "direct_messages", "download", "downloads", "edit_announcements", "faq", "favorites", "find_sources", "find_users", "followers", "following", "friend_request", "friendrequest", "friends", "goodies", "help", "home", "i", "im_account", "inbox", "invitations", "invite", "jobs", "list", "login", "logo", "logout", "me", "mentions", "messages", "mockview", "newtwitter", "notifications", "nudge", "oauth", "phoenix_search", "positions", "privacy", "public_timeline", "related_tweets", "replies", "retweeted_of_mine", "retweets", "retweets_by_others", "rules", "saved_searches", "search", "sent", "sessions", "settings", "share", "signup", "signin", "similar_to", "statistics", "terms", "tos", "translate", "trends", "tweetbutton", "twttr", "update_discoverability", "users", "welcome", "who_to_follow", "widgets", "zendesk_auth", "media_signup" ], "photo_size_limit": 3145728, "photo_sizes": { "thumb": { "h": 150, "resize": "crop", "w": 150 }, "small": { "h": 480, "resize": "fit", "w": 340 }, "medium": { "h": 1200, "resize": "fit", "w": 600 }, "large": { "h": 2048, "resize": "fit", "w": 1024 } }, "short_url_length": 23, "short_url_length_https": 23 } ================================================ FILE: src/test/resources/twitter/rest/help/languages.json ================================================ [ { "code": "fr", "name": "French", "status": "production" }, { "code": "en", "name": "English", "status": "production" }, { "code": "ar", "name": "Arabic", "status": "production" }, { "code": "ja", "name": "Japanese", "status": "production" }, { "code": "es", "name": "Spanish", "status": "production" }, { "code": "de", "name": "German", "status": "production" }, { "code": "it", "name": "Italian", "status": "production" }, { "code": "id", "name": "Indonesian", "status": "production" }, { "code": "pt", "name": "Portuguese", "status": "production" }, { "code": "ko", "name": "Korean", "status": "production" }, { "code": "tr", "name": "Turkish", "status": "production" }, { "code": "ru", "name": "Russian", "status": "production" }, { "code": "nl", "name": "Dutch", "status": "production" }, { "code": "fil", "name": "Filipino", "status": "production" }, { "code": "msa", "name": "Malay", "status": "production" }, { "code": "zh-tw", "name": "Traditional Chinese", "status": "production" }, { "code": "zh-cn", "name": "Simplified Chinese", "status": "production" }, { "code": "hi", "name": "Hindi", "status": "production" }, { "code": "no", "name": "Norwegian", "status": "production" }, { "code": "sv", "name": "Swedish", "status": "production" }, { "code": "fi", "name": "Finnish", "status": "production" }, { "code": "da", "name": "Danish", "status": "production" }, { "code": "pl", "name": "Polish", "status": "production" }, { "code": "hu", "name": "Hungarian", "status": "production" }, { "code": "fa", "name": "Persian", "status": "production" }, { "code": "he", "name": "Hebrew", "status": "production" }, { "code": "th", "name": "Thai", "status": "production" }, { "code": "uk", "name": "Ukrainian", "status": "production" }, { "code": "cs", "name": "Czech", "status": "production" }, { "code": "ro", "name": "Romanian", "status": "production" }, { "code": "en-gb", "name": "British English", "status": "production" }, { "code": "vi", "name": "Vietnamese", "status": "production" }, { "code": "bn", "name": "Bengali", "status": "production" } ] ================================================ FILE: src/test/resources/twitter/rest/help/privacy.json ================================================ { "privacy": "Twitter Privacy Policy\nOur Services instantly connect people everywhere to what's most meaningful to them. Any registered user of the Twitter Services can send a Tweet, which is a message of 140 characters or less that is public by default and can include other content like photos, videos, and links to other websites.\n\n\nTip: What you say on the Twitter Services may be viewed all around the world instantly. You are what you Tweet!\n\nThis Privacy Policy (\"Policy\") describes how and when Twitter collects, uses and shares your information when you use our Services. Twitter receives your information through our various websites, SMS, APIs, email notifications, applications, buttons, widgets, ads, commerce services (the \"Twitter Services\"), and our other covered services that link to this Policy (collectively, the \"Services\") and from our partners and other third parties. For example, you send us information when you use our Services on the web, via SMS, or from an application such as Twitter for Mac, Twitter for Android or TweetDeck. When using any of our Services you consent to the collection, transfer, storage, disclosure, and use of your information as described in this Privacy Policy.\nIf you live in the United States, your information is controlled by Twitter, Inc., 1355 Market Street, Suite 900, San Francisco, CA 94103 U.S.A. If you live outside the United States, the data controller responsible for your information is Twitter International Company, an Irish company with its registered office at The Academy, 42 Pearse Street, Dublin 2, Ireland. Irrespective of which country you reside in or supply information from, you authorize Twitter to use your information in the United States, Ireland, and any other country where Twitter operates.\nIf you have any questions or comments about this Privacy Policy, please contact us here or at privacy@twitter.com.\nInformation Collection and Use\n\n\nTip: We collect and use your information below to provide our Services and to measure and improve them over time.\n\nBasic Account Information: When you create or reconfigure an account, you provide some personal information, such as your name, username, password, email address, or phone number. On the Twitter Services, your name and username are listed publicly, including on your profile page and in search results, and you can use either your real name or a pseudonym. Some Twitter Services, such as searching and viewing public user profiles, do not require registration.\nContact Information: You may use your contact information, such as your email address or phone number, to customize your account or enable Services, for example, for login verification, Twitter via SMS, or Digits by Twitter. If you provide Twitter with your phone number, you agree to receive text messages to that number from Twitter. When you use Digits by Twitter to sign up for or login to a third-party application, you are directing Twitter to share your contact information, such as your phone number, with that application. We may use your contact information to send you information about our Services, to market to you, to help prevent spam, fraud, or abuse, and to help others find your account, including through third-party services and client applications. You may use your settings for email and mobile notifications to control notifications you receive from the Twitter Services. You may also unsubscribe from a notification by following the instructions contained within the notification or the instructions on our website. Your privacy settings control whether others can find you on the Twitter Services by your email address or phone number.\nAdditional Information: You may provide us with profile information to make public on the Twitter Services, such as a short biography, your location, your website, or a picture. You may choose to upload your address book so that we can help you find users you know or help other users find you. We may later make suggestions to you and other users based on imported address book contacts. You can delete your imported address book contacts at any time. Learn more here. If you email us, we may keep your message, email address and contact information to respond to your request. If you connect your account on our Services to your account on another service in order to cross-post between our Services and that service, the other service may send us your registration or profile information on that service and other information that you authorize. This information enables cross-posting, helps us improve the Services, and is deleted from our Services within a few weeks of your disconnecting from our Services your account on the other service. Learn more here. Providing the additional information described in this section is entirely optional.\nTweets, Following, Lists and other Public Information: Our Services are primarily designed to help you share information with the world. Most of the information you provide us through the Twitter Services is information you are asking us to make public. Your public information includes the messages you Tweet; the metadata provided with Tweets, such as when you Tweeted and the client application you used to Tweet; the language, country, and time zone associated with your account; and the lists you create, people you follow, Tweets you mark as favorites or Retweet, and many other bits of information that result from your use of the Twitter Services. We may use this information to make inferences, like what topics you may be interested in, and to customize the content we show you, including ads. Our default is almost always to make the information you provide through the Twitter Services public for as long as you do not delete it, but we generally give you settings or features, like direct messages, to make the information more private if you want. The Twitter Services broadly and instantly disseminate your public information to a wide range of users, customers, and services. For instance, your public user profile information and public Tweets are immediately delivered via SMS and our APIs to our partners and other third parties, including search engines, developers, and publishers that integrate Twitter content into their services, and institutions such as universities and public health agencies that analyze the information for trends and insights. When you share information or content like photos, videos, and links via the Services, you should think carefully about what you are making public.\nLocation Information: Twitter may receive information about your location. For example, you may choose to publish your location in your Tweets and in your Twitter profile. You may also tell us your location when you set your trend location on Twitter.com. We may also determine location by using other data from your device, such as precise location information from GPS, information about wireless networks or cell towers near your mobile device, or your IP address. We may use and store information about your location to provide features of our Services, such as Tweeting with your location, and to improve and customize the Services, for example, with more relevant content like local trends, stories, ads, and suggestions for people to follow. Learn more about our use of location here, and how to set your location preferences here.\nLinks: Twitter may keep track of how you interact with links across our Services, including our email notifications, third-party services, and client applications, by redirecting clicks or through other means. We do this to help improve our Services, to provide more relevant advertising, and to be able to share aggregate click statistics such as how many times a particular link was clicked on.\nCookies: Like many websites, we use cookies and similar technologies to collect additional website usage data and to improve our Services, but we do not require cookies for many parts of our Services such as searching and looking at public user profiles. A cookie is a small data file that is transferred to your computer or mobile device. Twitter may use both session cookies and persistent cookies to better understand how you interact with our Services, to monitor aggregate usage by our users and web traffic routing on our Services, and to customize and improve our Services. Most Internet browsers automatically accept cookies. You can instruct your browser, by changing its settings, to stop accepting cookies or to prompt you before accepting a cookie from the websites you visit. However, some Services may not function properly if you disable cookies. Learn more about how we use cookies and similar technologies here.\nLog Data: When you use our Services, we may receive information (\"Log Data\") such as your IP address, browser type, operating system, the referring web page, pages visited, location, your mobile carrier, device information (including device and application IDs), search terms, and cookie information. We receive Log Data when you interact with our Services, for example, when you visit our websites, sign into our Services, interact with our email notifications, use your account to authenticate to a third-party website or application, or visit a third-party website that includes a Twitter button or widget. We may also receive Log Data when you click on, view or interact with links on our Services, including links to third-party applications, such as when you choose to install another application through Twitter. Twitter uses Log Data to provide, understand, and improve our Services, to make inferences, like what topics you may be interested in, and to customize the content we show you, including ads. If not already done earlier, for example, as provided below for Widget Data, we will either delete Log Data or remove any common account identifiers, such as your username, full IP address, or email address, after a maximum of 18 months.\nWidget Data: We may tailor the Services for you based on your visits to third-party websites that integrate Twitter buttons or widgets. When these websites first load our buttons or widgets for display, we receive Log Data that includes the web page you visited and a cookie that identifies your browser (\"Widget Data\"). After a maximum of 10 days, we start the process of deleting, de-identifying, or aggregating Widget Data, which is usually instantaneous but in some cases may take up to a week. We may use Widget Data to tailor content for you, such as suggestions for people to follow and other content you may be interested in. Tailored content is stored with only browser cookies or device IDs and is separated from other Widget Data such as page-visit information. Learn more about the feature, including how you can suspend it or turn it off, here. For Tweets, Log Data, and other information that we receive from interactions with Twitter buttons or widgets, please see the other sections of this Privacy Policy.\nCommerce Services: You may provide your payment information, including your credit or debit card number, card expiration date, CVV code, and billing address (collectively, \"Payment Information\"), along with your shipping address, to complete a commerce transaction through our Services. You may also provide your credit or debit card number to register for card-linked services, such as offers. To facilitate future purchases, we store your Payment Information, excluding CVV code, and shipping address, which you can remove from your account at any time using your account settings. We consider your Payment Information and shipping address private and do not make such information public. We collect and store information created by your purchases made through our Services (\"Transaction Data\"). If you register your credit or debit card with Twitter for card-linked services, we receive information about the card transactions from a third-party payment services provider or card network (\"Registered Card Data\"). Transaction Data and Registered Card Data may include the merchant's name and the date, time and amount of the transaction. Twitter uses Registered Card Data to verify eligibility for card-linked services, and may also use Registered Card Data to limit the number of offers available to you and keep track of your offers.\nThird-Parties and Affiliates: Twitter uses a variety of third-party services to help provide our Services, such as hosting our various blogs and wikis, and to help us understand and improve the use of our Services, such as Google Analytics. These third-party service providers may collect information sent by your browser as part of a web page request, such as cookies or your IP address. Third-party ad partners may share information with us, like a browser cookie ID, website URL visited, mobile device ID, or cryptographic hash of a common account identifier (such as an email address), to help us measure and tailor ads. For example, this allows us to display ads about things you may have already shown interest in off of our Services. If you prefer, you can turn off tailored ads in your privacy settings so that your account will not be matched to information shared by ad partners for tailoring ads. Learn more about your privacy options here and about how ads work on our Services here. We may also receive information about you from our corporate affiliates in order to help provide, understand, and improve our Services and our affiliates' services, including the delivery of ads.\nInformation Sharing and Disclosure\n\nTip: We do not disclose your private personal information except in the limited circumstances described here.\n\nUser Consent or Direction: We may share or disclose your information at your direction, such as when you authorize a third-party web client or application to access your account. Other users may share or disclose information about you, such as when they mention you, share a photo of you, or tag you in a photo. Your privacy settings control who can tag you in a photo on the Twitter Services. If you've shared information, like direct messages or protected Tweets, with another user who accesses the Twitter Services through a third-party service, keep in mind that the information may be shared with the third-party service.\nService Providers: We engage service providers to perform functions and provide services to us in the United States, Ireland, and other countries. We may share your private personal information with such service providers subject to obligations consistent with this Privacy Policy and any other appropriate confidentiality and security measures, and on the condition that the third parties use your private personal data only on our behalf and pursuant to our instructions. We share your Payment Information with payment services providers to process payments; prevent, detect and investigate fraud or other prohibited activities; facilitate dispute resolution such as chargebacks or refunds; and for other purposes associated with the acceptance of credit or debit cards. We may share your credit or debit card number with payment services providers or card networks to monitor card transactions at participating merchants and track redemption activity for the purposes of providing card-linked services.\nSellers of Goods and Services: If you buy goods or services through our Services, we may provide the seller, commerce provider or marketplace with your name, email address, shipping address, Payment Information and Transaction Data to facilitate payment processing, order fulfilment and dispute resolution (including payment and shipping disputes) and to help prevent, detect and investigate fraud or other prohibited activities. Please refer to these third parties' privacy policies for information about their privacy practices.\nLaw and Harm: Notwithstanding anything to the contrary in this Policy, we may preserve or disclose your information if we believe that it is reasonably necessary to comply with a law, regulation, legal process, or governmental request; to protect the safety of any person; to address fraud, security or technical issues; or to protect Twitter's rights or property. However, nothing in this Privacy Policy is intended to limit any legal defenses or objections that you may have to a third party's, including a government's, request to disclose your information.\nBusiness Transfers and Affiliates: In the event that Twitter is involved in a bankruptcy, merger, acquisition, reorganization or sale of assets, your information may be sold or transferred as part of that transaction. This Privacy Policy will apply to your information as transferred to the new entity. We may also disclose information about you to our corporate affiliates in order to help provide, understand, and improve our Services and our affiliates' services, including the delivery of ads.\nNon-Private or Non-Personal Information: We may share or disclose your non-private, aggregated or otherwise non-personal information, such as your public user profile information, public Tweets, the people you follow or that follow you, or the number of users who clicked on a particular link (even if only one did), or reports to advertisers about unique users who saw or clicked on their ads after we have removed any private personal information (such as your name or contact information).\nAccessing and Modifying Your Personal Information\nIf you are a registered user of our Services, we provide you with tools and account settings to access, correct, delete, or modify the personal information you provided to us and associated with your account. You can download certain account information, including your Tweets, by following the instructions here and request access to additional information here.\nYou can also permanently delete your Twitter account. If you follow the instructions here, your account will be deactivated and then deleted. When your account is deactivated, it is not viewable on Twitter.com. For up to 30 days after deactivation it is still possible to restore your account if it was accidentally or wrongfully deactivated. Absent a separate arrangement between you and Twitter to extend your deactivation period, after 30 days, we begin the process of deleting your account from our systems, which can take up to a week.\nKeep in mind that search engines and other third parties may still retain copies of your public information, like your user profile information and public Tweets, even after you have deleted the information from the Twitter Services or deactivated your account. Learn more here.\nOur Policy Towards Children\nOur Services are not directed to persons under 13. If you become aware that your child has provided us with personal information without your consent, please contact us here. We do not knowingly collect personal information from children under 13. If we become aware that a child under 13 has provided us with personal information, we take steps to remove such information and terminate the child's account. You can find additional resources for parents and teens here.\nEU Safe Harbor Framework\nTwitter complies with the U.S.-E.U. and U.S.-Swiss Safe Harbor Privacy Principles of notice, choice, onward transfer, security, data integrity, access, and enforcement. To learn more about the Safe Harbor program, and to view our certification, please visit the U.S. Department of Commerce website.\nChanges to this Policy\nWe may revise this Privacy Policy from time to time. The most current version of the policy will govern our use of your information and will always be at https:\/\/twitter.com\/privacy. If we make a change to this policy that, in our sole discretion, is material, we will notify you via an @Twitter update or email to the email address associated with your account. By continuing to access or use the Services after those changes become effective, you agree to be bound by the revised Privacy Policy.\nEffective: May 18, 2015Archive of Previous Privacy PoliciesThoughts or questions about this Privacy Policy? Please, let us know." } ================================================ FILE: src/test/resources/twitter/rest/help/tos.json ================================================ { "tos": "Twitter Terms of Service\nThese Terms of Service (\"Terms\") govern your access to and use of our Services, including our various websites, SMS, APIs, email notifications, applications, buttons, widgets, ads, commerce services (the \"Twitter Services\"), and our other covered services that link to these Terms (collectively, the \"Services\"), and any information, text, graphics, photos or other materials uploaded, downloaded or appearing on the Services (collectively referred to as \"Content\"). Your access to and use of the Services are conditioned on your acceptance of and compliance with these Terms. By accessing or using the Services you agree to be bound by these Terms.\n1. Basic Terms\nYou are responsible for your use of the Services, for any Content you post to the Services, and for any consequences thereof. Most Content you submit, post, or display through the Twitter Services is public by default and will be able to be viewed by other users and through third party services and websites. Learn more here, and go to the account settings page to control who sees your Content. You should only provide Content that you are comfortable sharing with others under these Terms.\n\nTip: What you say on the Twitter Services may be viewed all around the world instantly. You are what you Tweet!\n\nYou may use the Services only if you can form a binding contract with Twitter and are not a person barred from receiving services under the laws of the United States or other applicable jurisdiction. If you are accepting these Terms and using the Services on behalf of a company, organization, government, or other legal entity, you represent and warrant that you are authorized to do so. You may use the Services only in compliance with these Terms and all applicable local, state, national, and international laws, rules and regulations.\nThe Services that Twitter provides are always evolving and the form and nature of the Services that Twitter provides may change from time to time without prior notice to you. In addition, Twitter may stop (permanently or temporarily) providing the Services (or any features within the Services) to you or to users generally and may not be able to provide you with prior notice. We also retain the right to create limits on use and storage at our sole discretion at any time without prior notice to you.\nThe Services may include advertisements, which may be targeted to the Content or information on the Services, queries made through the Services, or any other information. The types and extent of advertising by Twitter on the Services are subject to change. In consideration for Twitter granting you access to and use of the Services, you agree that Twitter and its third party providers and partners may place such advertising on the Services or in connection with the display of Content or information from the Services whether submitted by you or others.\n2. Privacy\nAny information that you or other users provide to Twitter is subject to our Privacy Policy, which governs our collection and use of your information. You understand that through your use of the Services you consent to the collection and use (as set forth in the Privacy Policy) of this information, including the transfer of this information to the United States, Ireland, and\/or other countries for storage, processing and use by Twitter. As part of providing you the Services, we may need to provide you with certain communications, such as service announcements and administrative messages. These communications are considered part of the Services and your account, which you may not be able to opt-out from receiving.\n\nTip: You can control most communications from the Twitter Services, including notifications about activity related to you, your Tweets, Retweets, and network, and updates from Twitter. Please see your settings for email and mobile notifications for more.\n\n 3. Passwords\n\nYou are responsible for safeguarding the password that you use to access the Services and for any activities or actions under your password. We encourage you to use \"strong\" passwords (passwords that use a combination of upper and lower case letters, numbers and symbols) with your account. Twitter cannot and will not be liable for any loss or damage arising from your failure to comply with the above.\n4. Content on the Services\nAll Content, whether publicly posted or privately transmitted, is the sole responsibility of the person who originated such Content. We may not monitor or control the Content posted via the Services and, we cannot take responsibility for such Content. Any use or reliance on any Content or materials posted via the Services or obtained by you through the Services is at your own risk.\nWe do not endorse, support, represent or guarantee the completeness, truthfulness, accuracy, or reliability of any Content or communications posted via the Services or endorse any opinions expressed via the Services. You understand that by using the Services, you may be exposed to Content that might be offensive, harmful, inaccurate or otherwise inappropriate, or in some cases, postings that have been mislabeled or are otherwise deceptive. Under no circumstances will Twitter be liable in any way for any Content, including, but not limited to, any errors or omissions in any Content, or any loss or damage of any kind incurred as a result of the use of any Content posted, emailed, transmitted or otherwise made available via the Services or broadcast elsewhere.\n5. Your Rights\nYou retain your rights to any Content you submit, post or display on or through the Services. By submitting, posting or displaying Content on or through the Services, you grant us a worldwide, non-exclusive, royalty-free license (with the right to sublicense) to use, copy, reproduce, process, adapt, modify, publish, transmit, display and distribute such Content in any and all media or distribution methods (now known or later developed).\n\n\nTip: This license is you authorizing us to make your Tweets on the Twitter Services available to the rest of the world and to let others do the same.\n\nYou agree that this license includes the right for Twitter to provide, promote, and improve the Services and to make Content submitted to or through the Services available to other companies, organizations or individuals who partner with Twitter for the syndication, broadcast, distribution or publication of such Content on other media and services, subject to our terms and conditions for such Content use.\n\n\nTip: Twitter has an evolving set of rules for how ecosystem partners can interact with your Content on the Twitter Services. These rules exist to enable an open ecosystem with your rights in mind. But what's yours is yours \u2013 you own your Content (and your photos are part of that Content).\n\nSuch additional uses by Twitter, or other companies, organizations or individuals who partner with Twitter, may be made with no compensation paid to you with respect to the Content that you submit, post, transmit or otherwise make available through the Services.\nWe may modify or adapt your Content in order to transmit, display or distribute it over computer networks and in various media and\/or make changes to your Content as are necessary to conform and adapt that Content to any requirements or limitations of any networks, devices, services or media.\nYou are responsible for your use of the Services, for any Content you provide, and for any consequences thereof, including the use of your Content by other users and our third party partners. You understand that your Content may be syndicated, broadcast, distributed, or published by our partners and if you do not have the right to submit Content for such use, it may subject you to liability. Twitter will not be responsible or liable for any use of your Content by Twitter in accordance with these Terms. You represent and warrant that you have all the rights, power and authority necessary to grant the rights granted herein to any Content that you submit.\n6. Your License To Use the Services\nTwitter gives you a personal, worldwide, royalty-free, non-assignable and non-exclusive license to use the software that is provided to you by Twitter as part of the Services. This license is for the sole purpose of enabling you to use and enjoy the benefit of the Services as provided by Twitter, in the manner permitted by these Terms.\n7. Twitter Rights\nAll right, title, and interest in and to the Services (excluding Content provided by users) are and will remain the exclusive property of Twitter and its licensors. The Services are protected by copyright, trademark, and other laws of both the United States and foreign countries. Nothing in the Terms gives you a right to use the Twitter name or any of the Twitter trademarks, logos, domain names, and other distinctive brand features. Any feedback, comments, or suggestions you may provide regarding Twitter, or the Services is entirely voluntary and we will be free to use such feedback, comments or suggestions as we see fit and without any obligation to you.\n8. Restrictions on Content and Use of the Services\nPlease review the Twitter Rules (which are part of these Terms) to better understand what is prohibited on the Twitter Services. We reserve the right at all times (but will not have an obligation) to remove or refuse to distribute any Content on the Services, to suspend or terminate users, and to reclaim usernames without liability to you. We also reserve the right to access, read, preserve, and disclose any information as we reasonably believe is necessary to (i) satisfy any applicable law, regulation, legal process or governmental request, (ii) enforce the Terms, including investigation of potential violations hereof, (iii) detect, prevent, or otherwise address fraud, security or technical issues, (iv) respond to user support requests, or (v) protect the rights, property or safety of Twitter, its users and the public.\n\n\nTip: Twitter does not disclose personally identifying information to third parties except in accordance with our Privacy Policy.\n\nExcept as permitted through the Twitter Services, these Terms, or the terms provided on dev.twitter.com, you have to use the Twitter API if you want to reproduce, modify, create derivative works, distribute, sell, transfer, publicly display, publicly perform, transmit, or otherwise use the Twitter Services or Content on the Twitter Services.\n\n\nTip: We encourage and permit broad re-use of Content on the Twitter Services. The Twitter API exists to enable this.\n\nIf you use commerce features of the Twitter Services that require credit or debit card information, such as our Buy Now feature, you agree to our Twitter Commerce Terms.\nYou may not do any of the following while accessing or using the Services: (i) access, tamper with, or use non-public areas of the Services, Twitter's computer systems, or the technical delivery systems of Twitter's providers; (ii) probe, scan, or test the vulnerability of any system or network or breach or circumvent any security or authentication measures; (iii) access or search or attempt to access or search the Services by any means (automated or otherwise) other than through our currently available, published interfaces that are provided by Twitter (and only pursuant to the applicable terms and conditions), unless you have been specifically allowed to do so in a separate agreement with Twitter (NOTE: crawling the Services is permissible if done in accordance with the provisions of the robots.txt file, however, scraping the Services without the prior consent of Twitter is expressly prohibited); (iv) forge any TCP\/IP packet header or any part of the header information in any email or posting, or in any way use the Services to send altered, deceptive or false source-identifying information; or (v) interfere with, or disrupt, (or attempt to do so), the access of any user, host or network, including, without limitation, sending a virus, overloading, flooding, spamming, mail-bombing the Services, or by scripting the creation of Content in such a manner as to interfere with or create an undue burden on the Services.\n9. Copyright Policy\nTwitter respects the intellectual property rights of others and expects users of the Services to do the same. We will respond to notices of alleged copyright infringement that comply with applicable law and are properly provided to us. If you believe that your Content has been copied in a way that constitutes copyright infringement, please provide us with the following information: (i) a physical or electronic signature of the copyright owner or a person authorized to act on their behalf; (ii) identification of the copyrighted work claimed to have been infringed; (iii) identification of the material that is claimed to be infringing or to be the subject of infringing activity and that is to be removed or access to which is to be disabled, and information reasonably sufficient to permit us to locate the material; (iv) your contact information, including your address, telephone number, and an email address; (v) a statement by you that you have a good faith belief that use of the material in the manner complained of is not authorized by the copyright owner, its agent, or the law; and (vi) a statement that the information in the notification is accurate, and, under penalty of perjury, that you are authorized to act on behalf of the copyright owner.\nWe reserve the right to remove Content alleged to be infringing without prior notice, at our sole discretion, and without liability to you. In appropriate circumstances, Twitter will also terminate a user's account if the user is determined to be a repeat infringer. Under the U.S. Digital Millennium Copyright Act, our designated copyright agent for notice of alleged copyright infringement appearing on the Services is:Twitter, Inc.Attn: Copyright Agent1355 Market Street, Suite 900San Francisco, CA 94103Reports: https:\/\/support.twitter.com\/forms\/dmcaEmail: copyright@twitter.com\n10. Ending These Terms\nThe Terms will continue to apply until terminated by either you or Twitter as follows.\nYou may end your legal agreement with Twitter at any time for any or no reason by deactivating your accounts and discontinuing your use of the Services. You do not need to specifically inform Twitter when you stop using the Services. If you stop using the Services without deactivating your accounts, your accounts may be deactivated due to prolonged inactivity under our Inactive Account Policy.\nWe may suspend or terminate your accounts or cease providing you with all or part of the Services at any time for any or no reason, including, but not limited to, if we reasonably believe: (i) you have violated these Terms or the Twitter Rules, (ii) you create risk or possible legal exposure for us; or (iii) our provision of the Services to you is no longer commercially viable. We will make reasonable efforts to notify you by the email address associated with your account or the next time you attempt to access your account.\nIn all such cases, the Terms shall terminate, including, without limitation, your license to use the Services, except that the following sections shall continue to apply: 4, 5, 7, 8, 10, 11, and 12.\nNothing in this section shall affect Twitter's rights to change, limit or stop the provision of the Services without prior notice, as provided above in section 1.\n11.Disclaimers and Limitations of Liability\nPlease read this section carefully since it limits the liability of Twitter and its parents, subsidiaries, affiliates, related companies, officers, directors, employees, agents, representatives, partners, and licensors (collectively, the \"Twitter Entities\"). Each of the subsections below only applies up to the maximum extent permitted under applicable law. Some jurisdictions do not allow the disclaimer of implied warranties or the limitation of liability in contracts, and as a result the contents of this section may not apply to you. Nothing in this section is intended to limit any rights you may have which may not be lawfully limited.\nA. The Services are Available \"AS-IS\"\nYour access to and use of the Services or any Content are at your own risk. You understand and agree that the Services are provided to you on an \"AS IS\" and \"AS AVAILABLE\" basis. Without limiting the foregoing, to the maximum extent permitted under applicable law, THE TWITTER ENTITIES DISCLAIM ALL WARRANTIES AND CONDITIONS, WHETHER EXPRESS OR IMPLIED, OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.\nThe Twitter Entities make no warranty or representation and disclaim all responsibility and liability for: (i) the completeness, accuracy, availability, timeliness, security or reliability of the Services or any Content; (ii) any harm to your computer system, loss of data, or other harm that results from your access to or use of the Services or any Content; (iii) the deletion of, or the failure to store or to transmit, any Content and other communications maintained by the Services; and (iv) whether the Services will meet your requirements or be available on an uninterrupted, secure, or error-free basis. No advice or information, whether oral or written, obtained from the Twitter Entities or through the Services, will create any warranty or representation not expressly made herein.\nB. Links\nThe Services may contain links to third-party websites or resources. You acknowledge and agree that the Twitter Entities are not responsible or liable for: (i) the availability or accuracy of such websites or resources; or (ii) the content, products, or services on or available from such websites or resources. Links to such websites or resources do not imply any endorsement by the Twitter Entities of such websites or resources or the content, products, or services available from such websites or resources. You acknowledge sole responsibility for and assume all risk arising from your use of any such websites or resources.\nC. Limitation of Liability\nTO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE TWITTER ENTITIES SHALL NOT BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL OR PUNITIVE DAMAGES, OR ANY LOSS OF PROFITS OR REVENUES, WHETHER INCURRED DIRECTLY OR INDIRECTLY, OR ANY LOSS OF DATA, USE, GOOD-WILL, OR OTHER INTANGIBLE LOSSES, RESULTING FROM (i) YOUR ACCESS TO OR USE OF OR INABILITY TO ACCESS OR USE THE SERVICES; (ii) ANY CONDUCT OR CONTENT OF ANY THIRD PARTY ON THE SERVICES, INCLUDING WITHOUT LIMITATION, ANY DEFAMATORY, OFFENSIVE OR ILLEGAL CONDUCT OF OTHER USERS OR THIRD PARTIES; (iii) ANY CONTENT OBTAINED FROM THE SERVICES; OR (iv) UNAUTHORIZED ACCESS, USE OR ALTERATION OF YOUR TRANSMISSIONS OR CONTENT.\nIN NO EVENT SHALL THE AGGREGATE LIABILITY OF THE TWITTER ENTITIES EXCEED THE GREATER OF ONE HUNDRED U.S. DOLLARS (U.S. $100.00) OR THE AMOUNT YOU PAID TWITTER, IF ANY, IN THE PAST SIX MONTHS FOR THE SERVICES GIVING RISE TO THE CLAIM.\nTHE LIMITATIONS OF THIS SUBSECTION SHALL APPLY TO ANY THEORY OF LIABILITY, WHETHER BASED ON WARRANTY, CONTRACT, STATUTE, TORT (INCLUDING NEGLIGENCE) OR OTHERWISE, AND WHETHER OR NOT THE TWITTER ENTITIES HAVE BEEN INFORMED OF THE POSSIBILITY OF ANY SUCH DAMAGE, AND EVEN IF A REMEDY SET FORTH HEREIN IS FOUND TO HAVE FAILED OF ITS ESSENTIAL PURPOSE.\n12. General Terms\nA. Waiver and Severability\nThe failure of Twitter to enforce any right or provision of these Terms will not be deemed a waiver of such right or provision. In the event that any provision of these Terms is held to be invalid or unenforceable, then that provision will be limited or eliminated to the minimum extent necessary, and the remaining provisions of these Terms will remain in full force and effect.\nB. Controlling Law and Jurisdiction\nThese Terms and any action related thereto will be governed by the laws of the State of California without regard to or application of its conflict of law provisions or your state or country of residence. All claims, legal proceedings or litigation arising in connection with the Services will be brought solely in the federal or state courts located in San Francisco County, California, United States, and you consent to the jurisdiction of and venue in such courts and waive any objection as to inconvenient forum.\nIf you are a federal, state, or local government entity in the United States using the Services in your official capacity and legally unable to accept the controlling law, jurisdiction or venue clauses above, then those clauses do not apply to you. For such U.S. federal government entities, these Terms and any action related thereto will be governed by the laws of the United States of America (without reference to conflict of laws) and, in the absence of federal law and to the extent permitted under federal law, the laws of the State of California (excluding choice of law).\nC. Entire Agreement\nThese Terms, including the Twitter Rules for the Twitter Services, and our Privacy Policy are the entire and exclusive agreement between Twitter and you regarding the Services (excluding any services for which you have a separate agreement with Twitter that is explicitly in addition or in place of these Terms), and these Terms supersede and replace any prior agreements between Twitter and you regarding the Services. Other than members of the group of companies of which Twitter, Inc. is the parent, no other person or company will be third party beneficiaries to the Terms.\nWe may revise these Terms from time to time, the most current version will always be at twitter.com\/tos. If the revision, in our sole discretion, is material we will notify you via an @Twitter update or e-mail to the email associated with your account. By continuing to access or use the Services after those revisions become effective, you agree to be bound by the revised Terms.\nIf you live in the United States, these Terms are an agreement between you and Twitter, Inc., 1355 Market Street, Suite 900, San Francisco, CA 94103 U.S.A. If you live outside the United States, your agreement is with Twitter International Company, an Irish company with its registered office at The Academy, 42 Pearse Street, Dublin 2, Ireland. If you have any questions about these Terms, please contact us.\nEffective: May 18, 2015Archive of Previous Terms\n" } ================================================ FILE: src/test/resources/twitter/rest/lists/create.json ================================================ { "id": 222669735, "id_str": "222669735", "name": "my-list", "uri": "\/DanielaSfregola\/lists\/my-list", "subscriber_count": 0, "member_count": 0, "mode": "private", "description": "a nice description", "slug": "my-list", "full_name": "@DanielaSfregola\/my-list", "created_at": "Wed Oct 14 06:29:51 +0000 2015", "following": false, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 133, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 69, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 192, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } } ================================================ FILE: src/test/resources/twitter/rest/lists/destroy.json ================================================ { "slug": "meetup-20100301", "name": "meetup-20100301", "created_at": "Sat Feb 27 21:39:24 +0000 2010", "uri": "/twitterapi/meetup-20100301", "subscriber_count": 147, "id_str": "8044403", "member_count": 116, "mode": "public", "id": 8044403, "full_name": "@twitterapi/meetup-20100301", "description": "Guests attending the Twitter meetup on 1 March 2010 at the @twoffice", "user": { "profile_background_tile": true, "profile_sidebar_border_color": "C0DEED", "name": "Twitter API", "profile_sidebar_fill_color": "DDEEF6", "location": "San Francisco, CA", "created_at": "Wed May 23 06:01:13 +0000 2007", "profile_image_url": "http://a0.twimg.com/profile_images/2284174872/7df3h38zabcvjylnyfe3_normal.png", "is_translator": false, "id_str": "6253282", "profile_link_color": "0084B4", "follow_request_sent": false, "favourites_count": 25, "contributors_enabled": true, "url": "http://dev.twitter.com", "default_profile": false, "profile_image_url_https": "https://si0.twimg.com/profile_images/2284174872/7df3h38zabcvjylnyfe3_normal.png", "utc_offset": -28800, "profile_banner_url": "https://si0.twimg.com/profile_banners/6253282/1347394302", "id": 6253282, "profile_use_background_image": true, "listed_count": 11201, "profile_text_color": "333333", "protected": false, "lang": "en", "followers_count": 1444739, "description": "The Real Twitter API. I tweet about API changes, service issues and happily answer questions about Twitter and our API. Don't get an answer? It's on my website.", "notifications": false, "geo_enabled": true, "verified": true, "time_zone": "Pacific Time (US & Canada)", "profile_background_color": "C0DEED", "profile_background_image_url_https": "https://si0.twimg.com/profile_background_images/656927849/miyt9dpjz77sc0w3d4vj.png", "statuses_count": 3367, "friends_count": 33, "default_profile_image": false, "profile_background_image_url": "http://a0.twimg.com/profile_background_images/656927849/miyt9dpjz77sc0w3d4vj.png", "following": true, "screen_name": "twitterapi" }, "following": false } ================================================ FILE: src/test/resources/twitter/rest/lists/lists.json ================================================ [ { "slug": "meetup-20100301", "name": "meetup-20100301", "created_at": "Sat Feb 27 21:39:24 +0000 2010", "uri": "/twitterapi/meetup-20100301", "subscriber_count": 147, "id_str": "8044403", "member_count": 116, "mode": "public", "id": 8044403, "full_name": "@twitterapi/meetup-20100301", "description": "Guests attending the Twitter meetup on 1 March 2010 at the @twoffice", "user": { "profile_background_tile": true, "profile_sidebar_border_color": "C0DEED", "name": "Twitter API", "profile_sidebar_fill_color": "DDEEF6", "location": "San Francisco, CA", "created_at": "Wed May 23 06:01:13 +0000 2007", "profile_image_url": "http://a0.twimg.com/profile_images/2284174872/7df3h38zabcvjylnyfe3_normal.png", "is_translator": false, "id_str": "6253282", "profile_link_color": "0084B4", "follow_request_sent": false, "favourites_count": 25, "contributors_enabled": true, "url": "http://dev.twitter.com", "default_profile": false, "profile_image_url_https": "https://si0.twimg.com/profile_images/2284174872/7df3h38zabcvjylnyfe3_normal.png", "utc_offset": -28800, "profile_banner_url": "https://si0.twimg.com/profile_banners/6253282/1347394302", "id": 6253282, "profile_use_background_image": true, "listed_count": 11201, "profile_text_color": "333333", "protected": false, "lang": "en", "followers_count": 1444739, "description": "The Real Twitter API. I tweet about API changes, service issues and happily answer questions about Twitter and our API. Don't get an answer? It's on my website.", "notifications": false, "geo_enabled": true, "verified": true, "time_zone": "Pacific Time (US & Canada)", "profile_background_color": "C0DEED", "profile_background_image_url_https": "https://si0.twimg.com/profile_background_images/656927849/miyt9dpjz77sc0w3d4vj.png", "statuses_count": 3367, "friends_count": 33, "default_profile_image": false, "profile_background_image_url": "http://a0.twimg.com/profile_background_images/656927849/miyt9dpjz77sc0w3d4vj.png", "following": true, "screen_name": "twitterapi" }, "following": false }, { "slug": "team", "name": "team", "created_at": "Wed Nov 04 01:24:28 +0000 2009", "uri": "/twitterapi/team", "subscriber_count": 277, "id_str": "2031945", "member_count": 20, "mode": "public", "id": 2031945, "full_name": "@twitterapi/team", "description": "", "user": { "profile_background_tile": true, "profile_sidebar_border_color": "C0DEED", "name": "Twitter API", "profile_sidebar_fill_color": "DDEEF6", "location": "San Francisco, CA", "created_at": "Wed May 23 06:01:13 +0000 2007", "profile_image_url": "http://a0.twimg.com/profile_images/2284174872/7df3h38zabcvjylnyfe3_normal.png", "is_translator": false, "id_str": "6253282", "profile_link_color": "0084B4", "follow_request_sent": false, "favourites_count": 25, "contributors_enabled": true, "url": "http://dev.twitter.com", "default_profile": false, "profile_image_url_https": "https://si0.twimg.com/profile_images/2284174872/7df3h38zabcvjylnyfe3_normal.png", "utc_offset": -28800, "profile_banner_url": "https://si0.twimg.com/profile_banners/6253282/1347394302", "id": 6253282, "profile_use_background_image": true, "listed_count": 11201, "profile_text_color": "333333", "protected": false, "lang": "en", "followers_count": 1444739, "description": "The Real Twitter API. I tweet about API changes, service issues and happily answer questions about Twitter and our API. Don't get an answer? It's on my website.", "notifications": false, "geo_enabled": true, "verified": true, "time_zone": "Pacific Time (US & Canada)", "profile_background_color": "C0DEED", "profile_background_image_url_https": "https://si0.twimg.com/profile_background_images/656927849/miyt9dpjz77sc0w3d4vj.png", "statuses_count": 3367, "friends_count": 33, "default_profile_image": false, "profile_background_image_url": "http://a0.twimg.com/profile_background_images/656927849/miyt9dpjz77sc0w3d4vj.png", "following": true, "screen_name": "twitterapi" }, "following": true } ] ================================================ FILE: src/test/resources/twitter/rest/lists/member.json ================================================ { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } ================================================ FILE: src/test/resources/twitter/rest/lists/members.json ================================================ { "users":[{ "blocked_by":false, "blocking":false, "contributors_enabled":false, "created_at":"Thu Apr 12 09:52:38 +0100 2007", "default_profile":false, "default_profile_image":false, "description":"Compiler Engineer @ Typesafe", "entities":{ "hashtags":[], "media":[], "urls":[], "user_mentions":[], "description":{ "urls":[] } }, "favourites_count":171, "follow_request_sent":false, "following":true, "followers_count":2878, "friends_count":329, "geo_enabled":false, "has_extended_profile":false, "id":4325301, "id_str":"4325301", "is_translation_enabled":false, "is_translator":false, "lang":"en", "listed_count":149, "location":"Brisbane, Australia", "muting":false, "name":"Jason Zaugg", "notifications":false, "profile_background_color":"9AE4E8", "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/378800000122871725/5269c866ffadd34a3401ec3476476dad.png", "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/378800000122871725/5269c866ffadd34a3401ec3476476dad.png", "profile_background_tile":true, "profile_banner_url":"https://pbs.twimg.com/profile_banners/4325301/1398330737", "profile_image_url":"http://pbs.twimg.com/profile_images/515822337/avatar_normal.jpg", "profile_image_url_https":"https://pbs.twimg.com/profile_images/515822337/avatar_normal.jpg", "profile_link_color":"000000", "profile_sidebar_border_color":"87BC44", "profile_sidebar_fill_color":"E0FF92", "profile_text_color":"0000FF", "profile_use_background_image":true, "protected":false, "screen_name":"retronym", "show_all_inline_media":false, "status":{ "contributors":[], "created_at":"Wed Oct 07 20:53:28 +0100 2015", "entities":{ "hashtags":[], "media":[], "urls":[], "user_mentions":[{ "id":1221300014, "id_str":"1221300014", "indices":[3,14], "name":"Scala", "screen_name":"scala_lang" }] }, "favorite_count":0, "favorited":false, "id":651847832538734593, "id_str":"651847832538734593", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":5, "retweeted":false, "retweeted_status":{ "contributors":[], "created_at":"Wed Oct 07 19:04:32 +0100 2015", "entities":{ "hashtags":[], "media":[], "urls":[], "user_mentions":[] }, "favorite_count":2, "favorited":false, "id":651820418538602496, "id_str":"651820418538602496", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":5, "retweeted":false, "source":"Twitter Web Client", "text":"Gitter room reorg: scala/scala is now the general room. scala/contributors for talking internals. (scala/scala/scala-user is being retired.)", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "source":"Twitter for iPhone", "text":"RT @scala_lang: Gitter room reorg: scala/scala is now the general room. scala/contributors for talking internals. (scala/scala/scala-user i\u2026", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "statuses_count":1472, "time_zone":"Yakutsk", "utc_offset":32400, "verified":false },{ "blocked_by":false, "blocking":false, "contributors_enabled":false, "created_at":"Sat Feb 27 21:41:51 +0000 2010", "default_profile":false, "default_profile_image":false, "description":"Work @typesafe with #Scala, #Akka", "entities":{ "hashtags":[], "media":[], "urls":[], "user_mentions":[], "description":{ "urls":[] } }, "favourites_count":13, "follow_request_sent":false, "following":true, "followers_count":1628, "friends_count":131, "geo_enabled":false, "has_extended_profile":false, "id":118185789, "id_str":"118185789", "is_translation_enabled":false, "is_translator":false, "lang":"en", "listed_count":83, "location":"Stockholm", "muting":false, "name":"Patrik Nordwall", "notifications":false, "profile_background_color":"9AE4E8", "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/94984933/x22e289ef5702458dc86f5cd301a22f3.png", "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/94984933/x22e289ef5702458dc86f5cd301a22f3.png", "profile_background_tile":true, "profile_image_url":"http://pbs.twimg.com/profile_images/2452148249/p51txvmjs3gks27bs5vr_normal.jpeg", "profile_image_url_https":"https://pbs.twimg.com/profile_images/2452148249/p51txvmjs3gks27bs5vr_normal.jpeg", "profile_link_color":"0000FF", "profile_sidebar_border_color":"87BC44", "profile_sidebar_fill_color":"E0FF92", "profile_text_color":"000000", "profile_use_background_image":true, "protected":false, "screen_name":"patriknw", "show_all_inline_media":false, "status":{ "contributors":[], "created_at":"Sun Oct 04 16:06:39 +0100 2015", "entities":{ "hashtags":[{ "text":"Cassandra", "indices":[12,22] },{ "text":"Akka", "indices":[34,39] }], "media":[], "urls":[{ "indices":[68,91], "url":"https://t.co/Bc840GyfXF", "display_url":"github.com/krasserm/akka-\u2026", "expanded_url":"https://github.com/krasserm/akka-persistence-cassandra/issues?q=milestone%3A0.4+is%3Aclosed" }], "user_mentions":[{ "id":15295946, "id_str":"15295946", "indices":[3,10], "name":"Martin Krasser", "screen_name":"mrt1nz" },{ "id":80530885, "id_str":"80530885", "indices":[99,107], "name":"Christopher Batey", "screen_name":"chbatey" }] }, "favorite_count":0, "favorited":false, "id":650688486631211008, "id_str":"650688486631211008", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":47, "retweeted":false, "retweeted_status":{ "contributors":[], "created_at":"Sun Oct 04 09:34:53 +0100 2015", "entities":{ "hashtags":[{ "text":"Cassandra", "indices":[0,10] },{ "text":"Akka", "indices":[22,27] }], "media":[], "urls":[{ "indices":[56,79], "url":"https://t.co/Bc840GyfXF", "display_url":"github.com/krasserm/akka-\u2026", "expanded_url":"https://github.com/krasserm/akka-persistence-cassandra/issues?q=milestone%3A0.4+is%3Aclosed" }], "user_mentions":[{ "id":80530885, "id_str":"80530885", "indices":[87,95], "name":"Christopher Batey", "screen_name":"chbatey" }] }, "favorite_count":50, "favorited":false, "id":650589896407691264, "id_str":"650589896407691264", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":47, "retweeted":false, "source":"Twitter Web Client", "text":"#Cassandra plugin for #Akka Persistence 2.4.0 released. https://t.co/Bc840GyfXF Thanks @chbatey for all your high-quality work on it!", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "source":"Twitter for iPhone", "text":"RT @mrt1nz: #Cassandra plugin for #Akka Persistence 2.4.0 released. https://t.co/Bc840GyfXF Thanks @chbatey for all your high-quality work \u2026", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "statuses_count":1080, "time_zone":"Stockholm", "utc_offset":7200, "verified":false },{ "blocked_by":false, "blocking":false, "contributors_enabled":false, "created_at":"Fri Jan 23 22:53:57 +0000 2009", "default_profile":true, "default_profile_image":false, "description":"Author: Scala In Depth\r\nDeveloper: Geeky Scala Stuff\r\nAll Around: Big Nerd", "entities":{ "hashtags":[], "media":[], "url":{ "urls":[{ "indices":[0,22], "url":"http://t.co/VVHwaER3hu", "display_url":"jsuereth.com", "expanded_url":"http://jsuereth.com" }] }, "urls":[], "user_mentions":[], "description":{ "urls":[] } }, "favourites_count":611, "follow_request_sent":false, "following":true, "followers_count":6765, "friends_count":399, "geo_enabled":true, "has_extended_profile":false, "id":19418890, "id_str":"19418890", "is_translation_enabled":false, "is_translator":false, "lang":"en", "listed_count":365, "location":"", "muting":false, "name":"Josh Suereth", "notifications":false, "profile_background_color":"C0DEED", "profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile":false, "profile_image_url":"http://pbs.twimg.com/profile_images/2162642114/me-suprised-cropped_normal.jpg", "profile_image_url_https":"https://pbs.twimg.com/profile_images/2162642114/me-suprised-cropped_normal.jpg", "profile_link_color":"0084B4", "profile_sidebar_border_color":"C0DEED", "profile_sidebar_fill_color":"DDEEF6", "profile_text_color":"333333", "profile_use_background_image":true, "protected":false, "screen_name":"jsuereth", "show_all_inline_media":false, "status":{ "contributors":[], "created_at":"Sun Oct 04 16:29:30 +0100 2015", "entities":{ "hashtags":[], "media":[], "urls":[], "user_mentions":[{ "id":260389486, "id_str":"260389486", "indices":[0,12], "name":"randy shepherd", "screen_name":"aut0mat0n1c" }] }, "favorite_count":0, "favorited":false, "id":650694240176087041, "id_str":"650694240176087041", "in_reply_to_screen_name":"aut0mat0n1c", "in_reply_to_status_id":650521639931768832, "in_reply_to_status_id_str":"650521639931768832", "in_reply_to_user_id":260389486, "in_reply_to_user_id_str":"260389486", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":0, "retweeted":false, "source":"Twitter for Android", "text":"@aut0mat0n1c believe you can do that all in one string", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "statuses_count":6797, "url":"http://t.co/VVHwaER3hu", "verified":false },{ "blocked_by":false, "blocking":false, "contributors_enabled":false, "created_at":"Wed Jul 02 08:02:10 +0100 2008", "default_profile":false, "default_profile_image":false, "description":"Distributed systems developer, Scala/Java programmer, integration specialist, downhill whatever", "entities":{ "hashtags":[], "media":[], "url":{ "urls":[{ "indices":[0,22], "url":"http://t.co/fUhk1fMSWp", "display_url":"martin-krasser.de", "expanded_url":"http://martin-krasser.de/" }] }, "urls":[], "user_mentions":[], "description":{ "urls":[] } }, "favourites_count":159, "follow_request_sent":false, "following":true, "followers_count":2302, "friends_count":57, "geo_enabled":false, "has_extended_profile":false, "id":15295946, "id_str":"15295946", "is_translation_enabled":false, "is_translator":false, "lang":"en", "listed_count":136, "location":"", "muting":false, "name":"Martin Krasser", "notifications":false, "profile_background_color":"C0DEED", "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/801620954/0b2c80a4fda06927c22a086826e87dd0.jpeg", "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/801620954/0b2c80a4fda06927c22a086826e87dd0.jpeg", "profile_background_tile":false, "profile_banner_url":"https://pbs.twimg.com/profile_banners/15295946/1361957839", "profile_image_url":"http://pbs.twimg.com/profile_images/1123689116/Bild006a_normal.jpg", "profile_image_url_https":"https://pbs.twimg.com/profile_images/1123689116/Bild006a_normal.jpg", "profile_link_color":"0084B4", "profile_sidebar_border_color":"FFFFFF", "profile_sidebar_fill_color":"DDEEF6", "profile_text_color":"333333", "profile_use_background_image":false, "protected":false, "screen_name":"mrt1nz", "show_all_inline_media":false, "status":{ "contributors":[], "created_at":"Wed Oct 07 18:02:20 +0100 2015", "entities":{ "hashtags":[{ "text":"Akka", "indices":[75,80] }], "media":[], "urls":[{ "indices":[51,74], "url":"https://t.co/mVg93Znk9F", "display_url":"github.com/okumin/akka-pe\u2026", "expanded_url":"https://github.com/okumin/akka-persistence-sql-async" }], "user_mentions":[{ "id":91770461, "id_str":"91770461", "indices":[3,10], "name":"おくみん@女子高校生", "screen_name":"okumin" }] }, "favorite_count":0, "favorited":false, "id":651804763030454272, "id_str":"651804763030454272", "is_quote_status":false, "lang":"ja", "possibly_sensitive":false, "scopes":{ }, "retweet_count":6, "retweeted":false, "retweeted_status":{ "contributors":[], "created_at":"Wed Oct 07 16:05:00 +0100 2015", "entities":{ "hashtags":[{ "text":"Akka", "indices":[63,68] }], "media":[], "urls":[{ "indices":[39,62], "url":"https://t.co/mVg93Znk9F", "display_url":"github.com/okumin/akka-pe\u2026", "expanded_url":"https://github.com/okumin/akka-persistence-sql-async" }], "user_mentions":[] }, "favorite_count":7, "favorited":false, "id":651775238699552768, "id_str":"651775238699552768", "is_quote_status":false, "lang":"ja", "possibly_sensitive":false, "scopes":{ }, "retweet_count":6, "retweeted":false, "source":"YoruFukurou", "text":"akka-persistence-sql-async パブリッシュしました。 https://t.co/mVg93Znk9F #Akka", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "source":"Twitter for Android", "text":"RT @okumin: akka-persistence-sql-async パブリッシュしました。 https://t.co/mVg93Znk9F #Akka", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "statuses_count":2732, "time_zone":"Vienna", "url":"http://t.co/fUhk1fMSWp", "utc_offset":7200, "verified":false },{ "blocked_by":false, "blocking":false, "contributors_enabled":false, "created_at":"Thu Apr 11 19:46:02 +0100 2013", "default_profile":false, "default_profile_image":false, "description":"Functional Programming Advocates. Providing Talent Solutions, Strategic Advice, Curated Events & Insight across Clojure, Scala, Erlang, Haskell, F#, OCaml,Swift", "entities":{ "hashtags":[], "media":[], "url":{ "urls":[{ "indices":[0,22], "url":"http://t.co/BXwhIYmO2c", "display_url":"functionalworks.com", "expanded_url":"http://functionalworks.com/" }] }, "urls":[], "user_mentions":[], "description":{ "urls":[] } }, "favourites_count":4606, "follow_request_sent":false, "following":true, "followers_count":4192, "friends_count":365, "geo_enabled":true, "has_extended_profile":false, "id":1345043875, "id_str":"1345043875", "is_translation_enabled":false, "is_translator":false, "lang":"en", "listed_count":216, "location":"London HQ | Global reach ", "muting":false, "name":"Functional Works", "notifications":false, "profile_background_color":"131516", "profile_background_image_url":"http://abs.twimg.com/images/themes/theme14/bg.gif", "profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme14/bg.gif", "profile_background_tile":true, "profile_banner_url":"https://pbs.twimg.com/profile_banners/1345043875/1412684063", "profile_image_url":"http://pbs.twimg.com/profile_images/439367291214364673/M_Z9rDrf_normal.png", "profile_image_url_https":"https://pbs.twimg.com/profile_images/439367291214364673/M_Z9rDrf_normal.png", "profile_link_color":"F52727", "profile_sidebar_border_color":"EEEEEE", "profile_sidebar_fill_color":"EFEFEF", "profile_text_color":"333333", "profile_use_background_image":true, "protected":false, "screen_name":"Functionalworks", "show_all_inline_media":false, "status":{ "contributors":[], "created_at":"Wed Oct 07 21:08:17 +0100 2015", "entities":{ "hashtags":[{ "text":"javascript", "indices":[21,32] }], "media":[], "urls":[{ "indices":[33,55], "url":"http://t.co/yqbQnpzGAn", "display_url":"buff.ly/1WMvfv1", "expanded_url":"http://buff.ly/1WMvfv1" }], "user_mentions":[] }, "favorite_count":7, "favorited":false, "id":651851561082220544, "id_str":"651851561082220544", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":0, "retweeted":false, "source":"Buffer", "text":"Debugging Functional #javascript http://t.co/yqbQnpzGAn", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "statuses_count":4168, "time_zone":"Amsterdam", "url":"http://t.co/BXwhIYmO2c", "utc_offset":7200, "verified":false },{ "blocked_by":false, "blocking":false, "contributors_enabled":false, "created_at":"Sun May 06 20:59:29 +0100 2012", "default_profile":true, "default_profile_image":false, "description":"", "entities":{ "hashtags":[], "media":[], "url":{ "urls":[{ "indices":[0,22], "url":"http://t.co/ukKxj5OaSc", "display_url":"scalapuzzlers.com", "expanded_url":"http://scalapuzzlers.com" }] }, "urls":[], "user_mentions":[], "description":{ "urls":[] } }, "favourites_count":0, "follow_request_sent":false, "following":true, "followers_count":378, "friends_count":20, "geo_enabled":false, "has_extended_profile":false, "id":573048915, "id_str":"573048915", "is_translation_enabled":false, "is_translator":false, "lang":"en", "listed_count":15, "location":"", "muting":false, "name":"Scala Puzzlers", "notifications":false, "profile_background_color":"C0DEED", "profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile":false, "profile_image_url":"http://pbs.twimg.com/profile_images/2210992592/sp_normal.png", "profile_image_url_https":"https://pbs.twimg.com/profile_images/2210992592/sp_normal.png", "profile_link_color":"0084B4", "profile_sidebar_border_color":"C0DEED", "profile_sidebar_fill_color":"DDEEF6", "profile_text_color":"333333", "profile_use_background_image":true, "protected":false, "screen_name":"ScalaPuzzlers", "show_all_inline_media":false, "status":{ "contributors":[], "created_at":"Mon Mar 30 13:37:46 +0100 2015", "entities":{ "hashtags":[], "media":[], "urls":[{ "indices":[21,43], "url":"http://t.co/hsrHnAxW2I", "display_url":"scalapuzzlers.com", "expanded_url":"http://scalapuzzlers.com/" }], "user_mentions":[{ "id":11453482, "id_str":"11453482", "indices":[3,19], "name":"Zongheng Yang", "screen_name":"ConcreteVitamin" },{ "id":17712257, "id_str":"17712257", "indices":[143,144], "name":"Reynold Xin", "screen_name":"rxin" }] }, "favorite_count":0, "favorited":false, "id":582522103167094784, "id_str":"582522103167094784", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":2, "retweeted":false, "retweeted_status":{ "contributors":[], "created_at":"Mon Mar 30 00:01:35 +0100 2015", "entities":{ "hashtags":[], "media":[], "urls":[{ "indices":[0,22], "url":"http://t.co/hsrHnAxW2I", "display_url":"scalapuzzlers.com", "expanded_url":"http://scalapuzzlers.com/" }], "user_mentions":[{ "id":17712257, "id_str":"17712257", "indices":[126,131], "name":"Reynold Xin", "screen_name":"rxin" }] }, "favorite_count":2, "favorited":false, "id":582316704673447937, "id_str":"582316704673447937", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":2, "retweeted":false, "source":"Hootsuite", "text":"http://t.co/hsrHnAxW2I is quite good & indeed surprising! Would love to see a variant on Scala performance gotchas :) /cc @rxin?", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "source":"Twitter Web Client", "text":"RT @ConcreteVitamin: http://t.co/hsrHnAxW2I is quite good & indeed surprising! Would love to see a variant on Scala performance gotchas :) \u2026", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "statuses_count":44, "time_zone":"Atlantic Time (Canada)", "url":"http://t.co/ukKxj5OaSc", "utc_offset":-10800, "verified":false },{ "blocked_by":false, "blocking":false, "contributors_enabled":false, "created_at":"Sun Aug 16 14:05:09 +0100 2015", "default_profile":true, "default_profile_image":false, "description":"The most exciting Scala event of the year!", "entities":{ "hashtags":[], "media":[], "url":{ "urls":[{ "indices":[0,23], "url":"https://t.co/7WqZMYNtQT", "display_url":"scala.world", "expanded_url":"https://scala.world/" }] }, "urls":[], "user_mentions":[], "description":{ "urls":[] } }, "favourites_count":340, "follow_request_sent":false, "following":true, "followers_count":452, "friends_count":136, "geo_enabled":false, "has_extended_profile":false, "id":3425836427, "id_str":"3425836427", "is_translation_enabled":false, "is_translator":false, "lang":"en", "listed_count":17, "location":"Penrith, England", "muting":false, "name":"Scala World", "notifications":false, "profile_background_color":"C0DEED", "profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile":false, "profile_image_url":"http://pbs.twimg.com/profile_images/632902788217970688/rf0GE2M1_normal.png", "profile_image_url_https":"https://pbs.twimg.com/profile_images/632902788217970688/rf0GE2M1_normal.png", "profile_link_color":"0084B4", "profile_sidebar_border_color":"C0DEED", "profile_sidebar_fill_color":"DDEEF6", "profile_text_color":"333333", "profile_use_background_image":true, "protected":false, "screen_name":"scalaworldconf", "show_all_inline_media":false, "status":{ "contributors":[], "created_at":"Thu Oct 08 08:18:33 +0100 2015", "entities":{ "hashtags":[], "media":[], "urls":[{ "indices":[58,80], "url":"http://t.co/b2CHs9euKe", "display_url":"cdn.makeagif.com/media/10-08-20\u2026", "expanded_url":"http://cdn.makeagif.com/media/10-08-2015/05tcpi.gif" }], "user_mentions":[{ "id":21311342, "id_str":"21311342", "indices":[26,37], "name":"Paul Phillips", "screen_name":"extempore2" }] }, "favorite_count":2, "favorited":false, "id":652020237617917952, "id_str":"652020237617917952", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":0, "retweeted":false, "source":"Twitter Web Client", "text":"Here's a sneak preview of @extempore2's Scala World talk.\nhttp://t.co/b2CHs9euKe", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "statuses_count":200, "url":"https://t.co/7WqZMYNtQT", "verified":false },{ "blocked_by":false, "blocking":false, "contributors_enabled":false, "created_at":"Thu May 12 22:01:50 +0100 2011", "default_profile":false, "default_profile_image":false, "description":"Tech Lead by day, Mozilla Representative Mentor and Freelance Web Developer by night.", "entities":{ "hashtags":[], "media":[], "url":{ "urls":[{ "indices":[0,22], "url":"http://t.co/0j6CAUcqKp", "display_url":"alexlakatos.com", "expanded_url":"http://alexlakatos.com" }] }, "urls":[], "user_mentions":[], "description":{ "urls":[] } }, "favourites_count":183, "follow_request_sent":false, "following":true, "followers_count":544, "friends_count":323, "geo_enabled":true, "has_extended_profile":true, "id":297636217, "id_str":"297636217", "is_translation_enabled":false, "is_translator":false, "lang":"en", "listed_count":37, "location":"London, England", "muting":false, "name":"Alex Lakatos", "notifications":false, "profile_background_color":"000000", "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/635626850/uygvubn5einvv79plu4l.png", "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/635626850/uygvubn5einvv79plu4l.png", "profile_background_tile":false, "profile_banner_url":"https://pbs.twimg.com/profile_banners/297636217/1393085844", "profile_image_url":"http://pbs.twimg.com/profile_images/488462714268692480/s0fwq3m4_normal.jpeg", "profile_image_url_https":"https://pbs.twimg.com/profile_images/488462714268692480/s0fwq3m4_normal.jpeg", "profile_link_color":"ABB8C2", "profile_sidebar_border_color":"222224", "profile_sidebar_fill_color":"1F1918", "profile_text_color":"474247", "profile_use_background_image":true, "protected":false, "screen_name":"lakatos88", "show_all_inline_media":false, "status":{ "contributors":[], "created_at":"Thu Oct 08 07:22:10 +0100 2015", "entities":{ "hashtags":[], "media":[], "urls":[], "user_mentions":[] }, "favorite_count":0, "favorited":false, "id":652006049248055296, "id_str":"652006049248055296", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":0, "retweeted":false, "source":"Twitter for Android", "text":"I wonder what Power I'll get... http://t.co/Pm4Rsk5YD7", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "statuses_count":1522, "time_zone":"Bucharest", "url":"http://t.co/0j6CAUcqKp", "utc_offset":10800, "verified":false },{ "blocked_by":false, "blocking":false, "contributors_enabled":false, "created_at":"Sun Jun 01 09:18:53 +0100 2014", "default_profile":false, "default_profile_image":false, "description":"Better Scala Play Lift Akka Jobs", "entities":{ "hashtags":[], "media":[], "url":{ "urls":[{ "indices":[0,22], "url":"http://t.co/8DWx5AZUl1", "display_url":"scalajobs.org", "expanded_url":"http://scalajobs.org" }] }, "urls":[], "user_mentions":[], "description":{ "urls":[] } }, "favourites_count":25, "follow_request_sent":false, "following":true, "followers_count":400, "friends_count":911, "geo_enabled":false, "has_extended_profile":false, "id":2539089865, "id_str":"2539089865", "is_translation_enabled":false, "is_translator":false, "lang":"tr", "listed_count":14, "location":"", "muting":false, "name":"ScalaJobs", "notifications":false, "profile_background_color":"C0DEED", "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/473016900687908864/6Jf-4esJ.png", "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/473016900687908864/6Jf-4esJ.png", "profile_background_tile":true, "profile_banner_url":"https://pbs.twimg.com/profile_banners/2539089865/1401611075", "profile_image_url":"http://pbs.twimg.com/profile_images/473016425884307456/j_Iz_Sbb_normal.png", "profile_image_url_https":"https://pbs.twimg.com/profile_images/473016425884307456/j_Iz_Sbb_normal.png", "profile_link_color":"0084B4", "profile_sidebar_border_color":"FFFFFF", "profile_sidebar_fill_color":"DDEEF6", "profile_text_color":"333333", "profile_use_background_image":true, "protected":false, "screen_name":"scalajobsorg", "show_all_inline_media":false, "status":{ "contributors":[], "created_at":"Wed Oct 07 19:50:34 +0100 2015", "entities":{ "hashtags":[{ "text":"scala", "indices":[71,77] },{ "text":"java", "indices":[78,83] },{ "text":"jobs", "indices":[84,89] },{ "text":"hiring", "indices":[90,97] },{ "text":"germany", "indices":[98,106] },{ "text":"JavaEE", "indices":[107,114] }], "media":[], "urls":[{ "indices":[47,69], "url":"http://t.co/LhmhhZ6FbB", "display_url":"scalajobs.org/jobs/30/senior\u2026", "expanded_url":"http://scalajobs.org/jobs/30/senior-java-scala-developer-ytrail/" }], "user_mentions":[] }, "favorite_count":0, "favorited":false, "id":651832001314615296, "id_str":"651832001314615296", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":2, "retweeted":false, "source":"Twitter Web Client", "text":"Hiring Senior Java / Scala Developer at Ytrail\nhttp://t.co/LhmhhZ6FbB\n\n#scala #java #jobs #hiring #germany #JavaEE http://t.co/jH2O5SgvWS", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "statuses_count":28, "url":"http://t.co/8DWx5AZUl1", "verified":false },{ "blocked_by":false, "blocking":false, "contributors_enabled":false, "created_at":"Mon May 31 20:30:31 +0100 2010", "default_profile":true, "default_profile_image":false, "description":"M&A and Strategy Consultant, Startup Mentor. I create innovative business models. Founder/CEO", "entities":{ "hashtags":[], "media":[], "urls":[], "user_mentions":[], "description":{ "urls":[] } }, "favourites_count":5, "follow_request_sent":false, "following":true, "followers_count":1097, "friends_count":1103, "geo_enabled":true, "has_extended_profile":false, "id":150371060, "id_str":"150371060", "is_translation_enabled":false, "is_translator":false, "lang":"en", "listed_count":10, "location":"London", "muting":false, "name":"Stefano Campana", "notifications":false, "profile_background_color":"C0DEED", "profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile":false, "profile_image_url":"http://pbs.twimg.com/profile_images/520564270786809857/yf95Wy07_normal.jpeg", "profile_image_url_https":"https://pbs.twimg.com/profile_images/520564270786809857/yf95Wy07_normal.jpeg", "profile_link_color":"0084B4", "profile_sidebar_border_color":"C0DEED", "profile_sidebar_fill_color":"DDEEF6", "profile_text_color":"333333", "profile_use_background_image":true, "protected":false, "screen_name":"campanastefano", "show_all_inline_media":false, "status":{ "contributors":[], "created_at":"Tue Aug 11 13:56:13 +0100 2015", "entities":{ "hashtags":[{ "text":"gbbf", "indices":[63,68] },{ "text":"beerfestival", "indices":[69,82] }], "media":[], "urls":[{ "indices":[84,107], "url":"https://t.co/byk6XxMY0g", "display_url":"happence.com/andywithacamer\u2026", "expanded_url":"https://www.happence.com/andywithacamera/great-british-beer-festival-open-at-london-olympia" }], "user_mentions":[{ "id":3182353361, "id_str":"3182353361", "indices":[112,124], "name":"happence", "screen_name":"happenceapp" }] }, "favorite_count":0, "favorited":false, "id":631086717576060928, "id_str":"631086717576060928", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":0, "retweeted":false, "source":"Twitter for Android", "text":"Now live 'Great British Beer Festival Opens At London Olympia' #gbbf #beerfestival https://t.co/byk6XxMY0g via @happenceapp", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "statuses_count":53, "time_zone":"Rome", "utc_offset":7200, "verified":false }], "next_cursor":1505237162178665432, "previous_cursor":0 } ================================================ FILE: src/test/resources/twitter/rest/lists/memberships.json ================================================ { "next_cursor": 0, "next_cursor_str": "0", "previous_cursor": 0, "previous_cursor_str": "0", "lists": [ { "id": 201610803, "id_str": "201610803", "name": "elasticsearch", "uri": "\/dersteppen\/lists\/elasticsearch", "subscriber_count": 34, "member_count": 4482, "mode": "public", "description": "", "slug": "elasticsearch", "full_name": "@dersteppen\/elasticsearch", "created_at": "Wed Apr 08 04:05:19 +0000 2015", "following": false, "user": { "id": 70660603, "id_str": "70660603", "name": "dersteppen", "screen_name": "dersteppen", "location": "Bogot\u00e1, Colombia", "description": "Entrepreneur, GeoGeek CTO at @gkudos \/ Mapping", "url": "http:\/\/t.co\/md3M2db8xN", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/md3M2db8xN", "expanded_url": "http:\/\/gkudos.com", "display_url": "gkudos.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 1317, "friends_count": 2001, "listed_count": 132, "created_at": "Tue Sep 01 11:50:14 +0000 2009", "favourites_count": 743, "utc_offset": -18000, "time_zone": "Central Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 20549, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "131516", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/572974544618565632\/S8shQkFL.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/572974544618565632\/S8shQkFL.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/477074799966298113\/MhEOorTs_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/477074799966298113\/MhEOorTs_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/70660603\/1425460774", "profile_link_color": "009999", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "81B3DF", "profile_text_color": "090F49", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 217183769, "id_str": "217183769", "name": "angularjs", "uri": "\/EmmanuelDemey\/lists\/angularjs", "subscriber_count": 50, "member_count": 5000, "mode": "public", "description": "", "slug": "angularjs", "full_name": "@EmmanuelDemey\/angularjs", "created_at": "Fri Aug 14 19:34:22 +0000 2015", "following": false, "user": { "id": 48291605, "id_str": "48291605", "name": "Emmanuel DEMEY", "screen_name": "EmmanuelDemey", "location": "Lille - France", "description": "Web Specialist - Java and JavaScript technologies - @ZenikaNord", "url": "http:\/\/t.co\/lWeVaL9H6J", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/lWeVaL9H6J", "expanded_url": "http:\/\/Gillespie59.github.io", "display_url": "Gillespie59.github.io", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 797, "friends_count": 1421, "listed_count": 109, "created_at": "Thu Jun 18 08:40:05 +0000 2009", "favourites_count": 1281, "utc_offset": 7200, "time_zone": "Paris", "geo_enabled": true, "verified": false, "statuses_count": 4241, "lang": "fr", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "022330", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/628190699951923200\/vS3yoC1K_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/628190699951923200\/vS3yoC1K_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/48291605\/1427485955", "profile_link_color": "0084B4", "profile_sidebar_border_color": "A8C7F7", "profile_sidebar_fill_color": "C0DFEC", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 212501487, "id_str": "212501487", "name": "Angular -- but not square", "uri": "\/sarahjessica1\/lists\/angular-but-not-square", "subscriber_count": 64, "member_count": 4989, "mode": "public", "description": "", "slug": "angular-but-not-square", "full_name": "@sarahjessica1\/angular-but-not-square", "created_at": "Wed Jul 01 19:20:42 +0000 2015", "following": false, "user": { "id": 20260726, "id_str": "20260726", "name": "SarahJessica Leivers", "screen_name": "sarahjessica1", "location": "London, England", "description": "#fullstack #javascript #angular #mongo #node #gulp #ux #java #cucumber &c.\nTime Person of the Year 2006.\n\nNot mother to any beautiful children.", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 955, "friends_count": 500, "listed_count": 83, "created_at": "Fri Feb 06 18:56:54 +0000 2009", "favourites_count": 117, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 6353, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "669900", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/427200164\/LucLeLapin.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/427200164\/LucLeLapin.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1570721406\/Screen_shot_2011-10-03_at_10.28.02_AM_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1570721406\/Screen_shot_2011-10-03_at_10.28.02_AM_normal.png", "profile_link_color": "CC0000", "profile_sidebar_border_color": "545454", "profile_sidebar_fill_color": "E0DCE0", "profile_text_color": "545454", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 217142789, "id_str": "217142789", "name": "Convinced scala-ist", "uri": "\/jchampemont\/lists\/convinced-scala-ist", "subscriber_count": 12, "member_count": 2141, "mode": "public", "description": "", "slug": "convinced-scala-ist", "full_name": "@jchampemont\/convinced-scala-ist", "created_at": "Fri Aug 14 10:04:43 +0000 2015", "following": false, "user": { "id": 1977656136, "id_str": "1977656136", "name": "Jean Champ\u00e9mont", "screen_name": "jchampemont", "location": "", "description": "Software Engineer, Java enthusiast and video-gamer. Opinions and tweets are my own - Mes tweets n'engagent que moi.", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 180, "friends_count": 313, "listed_count": 15, "created_at": "Mon Oct 21 06:39:54 +0000 2013", "favourites_count": 31, "utc_offset": 7200, "time_zone": "Paris", "geo_enabled": true, "verified": false, "statuses_count": 857, "lang": "fr", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "9AE4E8", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme16\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme16\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/613428626281906177\/gT5EqwBd_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/613428626281906177\/gT5EqwBd_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/1977656136\/1396594808", "profile_link_color": "0084B4", "profile_sidebar_border_color": "BDDCAD", "profile_sidebar_fill_color": "DDFFCC", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 196129088, "id_str": "196129088", "name": "scaladays", "uri": "\/jubal_ince\/lists\/scaladays", "subscriber_count": 18, "member_count": 2560, "mode": "public", "description": "", "slug": "scaladays", "full_name": "@jubal_ince\/scaladays", "created_at": "Fri Feb 20 22:26:12 +0000 2015", "following": false, "user": { "id": 57829667, "id_str": "57829667", "name": "Jubal Ince", "screen_name": "jubal_ince", "location": "SF \/ Portland \/ Seattle", "description": "Talent Community Manager at @Workday. #wdayjobs http:\/\/t.co\/ltMXCY571T", "url": "http:\/\/t.co\/sJSGeRyFvd", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/sJSGeRyFvd", "expanded_url": "http:\/\/linkedin.com\/in\/jubal", "display_url": "linkedin.com\/in\/jubal", "indices": [ 0, 22 ] } ] }, "description": { "urls": [ { "url": "http:\/\/t.co\/ltMXCY571T", "expanded_url": "http:\/\/bit.ly\/wdayjobs", "display_url": "bit.ly\/wdayjobs", "indices": [ 48, 70 ] } ] } }, "protected": false, "followers_count": 1112, "friends_count": 2001, "listed_count": 140, "created_at": "Sat Jul 18 02:30:07 +0000 2009", "favourites_count": 684, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": false, "verified": false, "statuses_count": 11449, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "022330", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/477503848601251840\/m72n5bWx_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/477503848601251840\/m72n5bWx_normal.jpeg", "profile_link_color": "0084B4", "profile_sidebar_border_color": "A8C7F7", "profile_sidebar_fill_color": "C0DFEC", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 198038907, "id_str": "198038907", "name": "Python", "uri": "\/_nicolasdavid_\/lists\/python", "subscriber_count": 46, "member_count": 3761, "mode": "public", "description": "", "slug": "python", "full_name": "@_nicolasdavid_\/python", "created_at": "Sat Mar 07 19:22:10 +0000 2015", "following": false, "user": { "id": 505934711, "id_str": "505934711", "name": "Nicolas David", "screen_name": "_nicolasdavid_", "location": "Cap-Ferret \/ Paris", "description": "curious sceptic", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 291, "friends_count": 101, "listed_count": 35, "created_at": "Mon Feb 27 14:40:35 +0000 2012", "favourites_count": 788, "utc_offset": 7200, "time_zone": "Amsterdam", "geo_enabled": true, "verified": false, "statuses_count": 636, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "000000", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/378800000072697290\/3f4db122fd8f3cfe6be2c1003aa30d41.jpeg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/378800000072697290\/3f4db122fd8f3cfe6be2c1003aa30d41.jpeg", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/378800000531487985\/d0871543c3ddb9be32ee9f88a426fff7_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/378800000531487985\/d0871543c3ddb9be32ee9f88a426fff7_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/505934711\/1409423008", "profile_link_color": "3B94D9", "profile_sidebar_border_color": "204207", "profile_sidebar_fill_color": "060A00", "profile_text_color": "618238", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 199926658, "id_str": "199926658", "name": "datavis fans", "uri": "\/ctricot\/lists\/datavis-fans", "subscriber_count": 29, "member_count": 4987, "mode": "public", "description": "", "slug": "datavis-fans", "full_name": "@ctricot\/datavis-fans", "created_at": "Wed Mar 25 10:49:02 +0000 2015", "following": false, "user": { "id": 16663249, "id_str": "16663249", "name": "Christophe Tricot", "screen_name": "ctricot", "location": "Earth", "description": "Join Brokl now! - http:\/\/t.co\/21bM2XIFgJ", "url": "http:\/\/t.co\/vmHvimKzmR", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/vmHvimKzmR", "expanded_url": "http:\/\/about.me\/christophe.tricot", "display_url": "about.me\/christophe.tri\u2026", "indices": [ 0, 22 ] } ] }, "description": { "urls": [ { "url": "http:\/\/t.co\/21bM2XIFgJ", "expanded_url": "http:\/\/www.brokl.com", "display_url": "brokl.com", "indices": [ 18, 40 ] } ] } }, "protected": false, "followers_count": 766, "friends_count": 1080, "listed_count": 74, "created_at": "Thu Oct 09 07:02:11 +0000 2008", "favourites_count": 362, "utc_offset": 7200, "time_zone": "Paris", "geo_enabled": true, "verified": false, "statuses_count": 2718, "lang": "fr", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "000000", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/611414140649897984\/1dXJOBeY_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/611414140649897984\/1dXJOBeY_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/16663249\/1441121331", "profile_link_color": "1B1E1C", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "000000", "profile_text_color": "000000", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 84463329, "id_str": "84463329", "name": "dev", "uri": "\/clarkkampfe\/lists\/dev", "subscriber_count": 2, "member_count": 706, "mode": "public", "description": "", "slug": "dev", "full_name": "@clarkkampfe\/dev", "created_at": "Tue Jan 29 15:35:33 +0000 2013", "following": false, "user": { "id": 13142292, "id_str": "13142292", "name": "Clark Kampfe", "screen_name": "clarkkampfe", "location": "Chicago", "description": "Lapsed photojourno, politico, into that sweet, sweet functional programming (elixir, scala).", "url": "http:\/\/t.co\/swduSKgr6q", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/swduSKgr6q", "expanded_url": "http:\/\/zeroclarkthirty.com", "display_url": "zeroclarkthirty.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 438, "friends_count": 978, "listed_count": 38, "created_at": "Wed Feb 06 05:20:29 +0000 2008", "favourites_count": 3901, "utc_offset": -18000, "time_zone": "Central Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 19427, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/597072106258604035\/jhCeAc3i_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/597072106258604035\/jhCeAc3i_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/13142292\/1380223021", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 196051344, "id_str": "196051344", "name": "Scala---Haskell", "uri": "\/ChuckMiskyes\/lists\/scala-haskell", "subscriber_count": 0, "member_count": 122, "mode": "public", "description": "", "slug": "scala-haskell", "full_name": "@ChuckMiskyes\/scala-haskell", "created_at": "Fri Feb 20 12:35:18 +0000 2015", "following": false, "user": { "id": 151523180, "id_str": "151523180", "name": "Carlo Micieli", "screen_name": "ChuckMiskyes", "location": "Italy", "description": "Code monkey at day; #scala #haskell hacker at night.", "url": "https:\/\/t.co\/RL830YMrNG", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/RL830YMrNG", "expanded_url": "https:\/\/carlomicieli.github.io\/", "display_url": "carlomicieli.github.io", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 66, "friends_count": 177, "listed_count": 7, "created_at": "Thu Jun 03 16:04:29 +0000 2010", "favourites_count": 94, "utc_offset": -7200, "time_zone": "Greenland", "geo_enabled": false, "verified": false, "statuses_count": 2660, "lang": "it", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "31343D", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/738738455\/8efe6b44a8f641a9e5c90318cc8231b5.jpeg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/738738455\/8efe6b44a8f641a9e5c90318cc8231b5.jpeg", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/479339376456261634\/J6OyKFQV_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/479339376456261634\/J6OyKFQV_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/151523180\/1356172358", "profile_link_color": "323E4C", "profile_sidebar_border_color": "212535", "profile_sidebar_fill_color": "000C29", "profile_text_color": "784726", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 109023360, "id_str": "109023360", "name": "Scala", "uri": "\/muuki88\/lists\/scala", "subscriber_count": 0, "member_count": 19, "mode": "public", "description": "", "slug": "scala", "full_name": "@muuki88\/scala", "created_at": "Mon Mar 24 18:53:54 +0000 2014", "following": false, "user": { "id": 157671522, "id_str": "157671522", "name": "Muki Seiler", "screen_name": "muuki88", "location": "Munich", "description": "Scala, Java and Open Source Enthusiast. sbt-native-packager", "url": "http:\/\/t.co\/g6KgI6Rigb", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/g6KgI6Rigb", "expanded_url": "http:\/\/about.me\/muuki88", "display_url": "about.me\/muuki88", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 211, "friends_count": 336, "listed_count": 41, "created_at": "Sun Jun 20 14:19:32 +0000 2010", "favourites_count": 1265, "utc_offset": 7200, "time_zone": "Berlin", "geo_enabled": false, "verified": false, "statuses_count": 1177, "lang": "de", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "1A1B1F", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/537723943725961218\/gK_UtfA7.jpeg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/537723943725961218\/gK_UtfA7.jpeg", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1736846888\/muki_profile_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1736846888\/muki_profile_normal.png", "profile_link_color": "4E1475", "profile_sidebar_border_color": "181A1E", "profile_sidebar_fill_color": "252429", "profile_text_color": "666666", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 195229102, "id_str": "195229102", "name": "scala", "uri": "\/TheDriox\/lists\/scala", "subscriber_count": 27, "member_count": 5001, "mode": "public", "description": "", "slug": "scala", "full_name": "@TheDriox\/scala", "created_at": "Fri Feb 13 16:28:43 +0000 2015", "following": false, "user": { "id": 216042075, "id_str": "216042075", "name": "Adrien Crovetto", "screen_name": "TheDriox", "location": "Paris", "description": "", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 24, "friends_count": 56, "listed_count": 5, "created_at": "Mon Nov 15 16:56:31 +0000 2010", "favourites_count": 2, "utc_offset": 7200, "time_zone": "Ljubljana", "geo_enabled": true, "verified": false, "statuses_count": 1614, "lang": "fr", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/519390825852059649\/mjqYTRJS_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/519390825852059649\/mjqYTRJS_normal.jpeg", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 117272517, "id_str": "117272517", "name": "devs", "uri": "\/joescii\/lists\/devs", "subscriber_count": 7, "member_count": 684, "mode": "public", "description": "Developers and development-related stuff I follow", "slug": "devs", "full_name": "@joescii\/devs", "created_at": "Fri Apr 25 16:15:18 +0000 2014", "following": false, "user": { "id": 295976669, "id_str": "295976669", "name": "Joe Barnes", "screen_name": "joescii", "location": "Heart o' Dixie", "description": "Agility, cloud, and functional programming from south of the Mason-Dixon. #RollTide", "url": "http:\/\/t.co\/UEFRxskCpP", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/UEFRxskCpP", "expanded_url": "http:\/\/proseand.co.nz", "display_url": "proseand.co.nz", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 1232, "friends_count": 1234, "listed_count": 59, "created_at": "Tue May 10 00:15:06 +0000 2011", "favourites_count": 1346, "utc_offset": -18000, "time_zone": "Central Time (US & Canada)", "geo_enabled": false, "verified": false, "statuses_count": 19643, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "1A1B1F", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/858504176\/29346b1d8d891c522951cda7ce635eaf.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/858504176\/29346b1d8d891c522951cda7ce635eaf.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/641002714068070400\/md8Mh33H_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/641002714068070400\/md8Mh33H_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/295976669\/1401380434", "profile_link_color": "BD1818", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "252429", "profile_text_color": "666666", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 183555623, "id_str": "183555623", "name": "Pragmatism", "uri": "\/LincolnCannon\/lists\/pragmatism", "subscriber_count": 38, "member_count": 4865, "mode": "public", "description": "This is a list of accounts tweeting about pragmatism.", "slug": "pragmatism", "full_name": "@LincolnCannon\/pragmatism", "created_at": "Mon Dec 01 00:42:10 +0000 2014", "following": false, "user": { "id": 14074860, "id_str": "14074860", "name": "Lincoln Cannon", "screen_name": "LincolnCannon", "location": "Orem UT USA", "description": "Lincoln Cannon is a technologist and philosopher, and leading advocate of technological evolution and postsecular religion.", "url": "http:\/\/t.co\/jApZlzxhjQ", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/jApZlzxhjQ", "expanded_url": "http:\/\/lincoln.metacannon.net", "display_url": "lincoln.metacannon.net", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 2355, "friends_count": 46, "listed_count": 207, "created_at": "Mon Mar 03 22:20:05 +0000 2008", "favourites_count": 1436, "utc_offset": -21600, "time_zone": "Mountain Time (US & Canada)", "geo_enabled": false, "verified": false, "statuses_count": 8174, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "EEEEEE", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/870152292\/d591a8eaf17964675f929e6bef09d4cf.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/870152292\/d591a8eaf17964675f929e6bef09d4cf.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1676605590\/369378_692791745_437728135_n_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1676605590\/369378_692791745_437728135_n_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/14074860\/1398310528", "profile_link_color": "336699", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "C0DFEC", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } } ] } ================================================ FILE: src/test/resources/twitter/rest/lists/ownerships.json ================================================ { "next_cursor": 0, "next_cursor_str": "0", "previous_cursor": 0, "previous_cursor_str": "0", "lists": [ { "id": 201610803, "id_str": "201610803", "name": "elasticsearch", "uri": "\/dersteppen\/lists\/elasticsearch", "subscriber_count": 34, "member_count": 4482, "mode": "public", "description": "", "slug": "elasticsearch", "full_name": "@dersteppen\/elasticsearch", "created_at": "Wed Apr 08 04:05:19 +0000 2015", "following": false, "user": { "id": 70660603, "id_str": "70660603", "name": "dersteppen", "screen_name": "dersteppen", "location": "Bogot\u00e1, Colombia", "description": "Entrepreneur, GeoGeek CTO at @gkudos \/ Mapping", "url": "http:\/\/t.co\/md3M2db8xN", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/md3M2db8xN", "expanded_url": "http:\/\/gkudos.com", "display_url": "gkudos.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 1317, "friends_count": 2001, "listed_count": 132, "created_at": "Tue Sep 01 11:50:14 +0000 2009", "favourites_count": 743, "utc_offset": -18000, "time_zone": "Central Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 20549, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "131516", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/572974544618565632\/S8shQkFL.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/572974544618565632\/S8shQkFL.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/477074799966298113\/MhEOorTs_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/477074799966298113\/MhEOorTs_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/70660603\/1425460774", "profile_link_color": "009999", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "81B3DF", "profile_text_color": "090F49", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 217183769, "id_str": "217183769", "name": "angularjs", "uri": "\/EmmanuelDemey\/lists\/angularjs", "subscriber_count": 50, "member_count": 5000, "mode": "public", "description": "", "slug": "angularjs", "full_name": "@EmmanuelDemey\/angularjs", "created_at": "Fri Aug 14 19:34:22 +0000 2015", "following": false, "user": { "id": 48291605, "id_str": "48291605", "name": "Emmanuel DEMEY", "screen_name": "EmmanuelDemey", "location": "Lille - France", "description": "Web Specialist - Java and JavaScript technologies - @ZenikaNord", "url": "http:\/\/t.co\/lWeVaL9H6J", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/lWeVaL9H6J", "expanded_url": "http:\/\/Gillespie59.github.io", "display_url": "Gillespie59.github.io", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 797, "friends_count": 1421, "listed_count": 109, "created_at": "Thu Jun 18 08:40:05 +0000 2009", "favourites_count": 1281, "utc_offset": 7200, "time_zone": "Paris", "geo_enabled": true, "verified": false, "statuses_count": 4241, "lang": "fr", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "022330", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/628190699951923200\/vS3yoC1K_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/628190699951923200\/vS3yoC1K_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/48291605\/1427485955", "profile_link_color": "0084B4", "profile_sidebar_border_color": "A8C7F7", "profile_sidebar_fill_color": "C0DFEC", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 212501487, "id_str": "212501487", "name": "Angular -- but not square", "uri": "\/sarahjessica1\/lists\/angular-but-not-square", "subscriber_count": 64, "member_count": 4989, "mode": "public", "description": "", "slug": "angular-but-not-square", "full_name": "@sarahjessica1\/angular-but-not-square", "created_at": "Wed Jul 01 19:20:42 +0000 2015", "following": false, "user": { "id": 20260726, "id_str": "20260726", "name": "SarahJessica Leivers", "screen_name": "sarahjessica1", "location": "London, England", "description": "#fullstack #javascript #angular #mongo #node #gulp #ux #java #cucumber &c.\nTime Person of the Year 2006.\n\nNot mother to any beautiful children.", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 955, "friends_count": 500, "listed_count": 83, "created_at": "Fri Feb 06 18:56:54 +0000 2009", "favourites_count": 117, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 6353, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "669900", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/427200164\/LucLeLapin.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/427200164\/LucLeLapin.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1570721406\/Screen_shot_2011-10-03_at_10.28.02_AM_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1570721406\/Screen_shot_2011-10-03_at_10.28.02_AM_normal.png", "profile_link_color": "CC0000", "profile_sidebar_border_color": "545454", "profile_sidebar_fill_color": "E0DCE0", "profile_text_color": "545454", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 217142789, "id_str": "217142789", "name": "Convinced scala-ist", "uri": "\/jchampemont\/lists\/convinced-scala-ist", "subscriber_count": 12, "member_count": 2141, "mode": "public", "description": "", "slug": "convinced-scala-ist", "full_name": "@jchampemont\/convinced-scala-ist", "created_at": "Fri Aug 14 10:04:43 +0000 2015", "following": false, "user": { "id": 1977656136, "id_str": "1977656136", "name": "Jean Champ\u00e9mont", "screen_name": "jchampemont", "location": "", "description": "Software Engineer, Java enthusiast and video-gamer. Opinions and tweets are my own - Mes tweets n'engagent que moi.", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 180, "friends_count": 313, "listed_count": 15, "created_at": "Mon Oct 21 06:39:54 +0000 2013", "favourites_count": 31, "utc_offset": 7200, "time_zone": "Paris", "geo_enabled": true, "verified": false, "statuses_count": 857, "lang": "fr", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "9AE4E8", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme16\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme16\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/613428626281906177\/gT5EqwBd_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/613428626281906177\/gT5EqwBd_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/1977656136\/1396594808", "profile_link_color": "0084B4", "profile_sidebar_border_color": "BDDCAD", "profile_sidebar_fill_color": "DDFFCC", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 196129088, "id_str": "196129088", "name": "scaladays", "uri": "\/jubal_ince\/lists\/scaladays", "subscriber_count": 18, "member_count": 2560, "mode": "public", "description": "", "slug": "scaladays", "full_name": "@jubal_ince\/scaladays", "created_at": "Fri Feb 20 22:26:12 +0000 2015", "following": false, "user": { "id": 57829667, "id_str": "57829667", "name": "Jubal Ince", "screen_name": "jubal_ince", "location": "SF \/ Portland \/ Seattle", "description": "Talent Community Manager at @Workday. #wdayjobs http:\/\/t.co\/ltMXCY571T", "url": "http:\/\/t.co\/sJSGeRyFvd", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/sJSGeRyFvd", "expanded_url": "http:\/\/linkedin.com\/in\/jubal", "display_url": "linkedin.com\/in\/jubal", "indices": [ 0, 22 ] } ] }, "description": { "urls": [ { "url": "http:\/\/t.co\/ltMXCY571T", "expanded_url": "http:\/\/bit.ly\/wdayjobs", "display_url": "bit.ly\/wdayjobs", "indices": [ 48, 70 ] } ] } }, "protected": false, "followers_count": 1112, "friends_count": 2001, "listed_count": 140, "created_at": "Sat Jul 18 02:30:07 +0000 2009", "favourites_count": 684, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": false, "verified": false, "statuses_count": 11449, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "022330", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/477503848601251840\/m72n5bWx_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/477503848601251840\/m72n5bWx_normal.jpeg", "profile_link_color": "0084B4", "profile_sidebar_border_color": "A8C7F7", "profile_sidebar_fill_color": "C0DFEC", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 198038907, "id_str": "198038907", "name": "Python", "uri": "\/_nicolasdavid_\/lists\/python", "subscriber_count": 46, "member_count": 3761, "mode": "public", "description": "", "slug": "python", "full_name": "@_nicolasdavid_\/python", "created_at": "Sat Mar 07 19:22:10 +0000 2015", "following": false, "user": { "id": 505934711, "id_str": "505934711", "name": "Nicolas David", "screen_name": "_nicolasdavid_", "location": "Cap-Ferret \/ Paris", "description": "curious sceptic", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 291, "friends_count": 101, "listed_count": 35, "created_at": "Mon Feb 27 14:40:35 +0000 2012", "favourites_count": 788, "utc_offset": 7200, "time_zone": "Amsterdam", "geo_enabled": true, "verified": false, "statuses_count": 636, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "000000", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/378800000072697290\/3f4db122fd8f3cfe6be2c1003aa30d41.jpeg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/378800000072697290\/3f4db122fd8f3cfe6be2c1003aa30d41.jpeg", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/378800000531487985\/d0871543c3ddb9be32ee9f88a426fff7_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/378800000531487985\/d0871543c3ddb9be32ee9f88a426fff7_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/505934711\/1409423008", "profile_link_color": "3B94D9", "profile_sidebar_border_color": "204207", "profile_sidebar_fill_color": "060A00", "profile_text_color": "618238", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 199926658, "id_str": "199926658", "name": "datavis fans", "uri": "\/ctricot\/lists\/datavis-fans", "subscriber_count": 29, "member_count": 4987, "mode": "public", "description": "", "slug": "datavis-fans", "full_name": "@ctricot\/datavis-fans", "created_at": "Wed Mar 25 10:49:02 +0000 2015", "following": false, "user": { "id": 16663249, "id_str": "16663249", "name": "Christophe Tricot", "screen_name": "ctricot", "location": "Earth", "description": "Join Brokl now! - http:\/\/t.co\/21bM2XIFgJ", "url": "http:\/\/t.co\/vmHvimKzmR", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/vmHvimKzmR", "expanded_url": "http:\/\/about.me\/christophe.tricot", "display_url": "about.me\/christophe.tri\u2026", "indices": [ 0, 22 ] } ] }, "description": { "urls": [ { "url": "http:\/\/t.co\/21bM2XIFgJ", "expanded_url": "http:\/\/www.brokl.com", "display_url": "brokl.com", "indices": [ 18, 40 ] } ] } }, "protected": false, "followers_count": 766, "friends_count": 1080, "listed_count": 74, "created_at": "Thu Oct 09 07:02:11 +0000 2008", "favourites_count": 362, "utc_offset": 7200, "time_zone": "Paris", "geo_enabled": true, "verified": false, "statuses_count": 2718, "lang": "fr", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "000000", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/611414140649897984\/1dXJOBeY_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/611414140649897984\/1dXJOBeY_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/16663249\/1441121331", "profile_link_color": "1B1E1C", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "000000", "profile_text_color": "000000", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 84463329, "id_str": "84463329", "name": "dev", "uri": "\/clarkkampfe\/lists\/dev", "subscriber_count": 2, "member_count": 706, "mode": "public", "description": "", "slug": "dev", "full_name": "@clarkkampfe\/dev", "created_at": "Tue Jan 29 15:35:33 +0000 2013", "following": false, "user": { "id": 13142292, "id_str": "13142292", "name": "Clark Kampfe", "screen_name": "clarkkampfe", "location": "Chicago", "description": "Lapsed photojourno, politico, into that sweet, sweet functional programming (elixir, scala).", "url": "http:\/\/t.co\/swduSKgr6q", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/swduSKgr6q", "expanded_url": "http:\/\/zeroclarkthirty.com", "display_url": "zeroclarkthirty.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 438, "friends_count": 978, "listed_count": 38, "created_at": "Wed Feb 06 05:20:29 +0000 2008", "favourites_count": 3901, "utc_offset": -18000, "time_zone": "Central Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 19427, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/597072106258604035\/jhCeAc3i_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/597072106258604035\/jhCeAc3i_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/13142292\/1380223021", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 196051344, "id_str": "196051344", "name": "Scala---Haskell", "uri": "\/ChuckMiskyes\/lists\/scala-haskell", "subscriber_count": 0, "member_count": 122, "mode": "public", "description": "", "slug": "scala-haskell", "full_name": "@ChuckMiskyes\/scala-haskell", "created_at": "Fri Feb 20 12:35:18 +0000 2015", "following": false, "user": { "id": 151523180, "id_str": "151523180", "name": "Carlo Micieli", "screen_name": "ChuckMiskyes", "location": "Italy", "description": "Code monkey at day; #scala #haskell hacker at night.", "url": "https:\/\/t.co\/RL830YMrNG", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/RL830YMrNG", "expanded_url": "https:\/\/carlomicieli.github.io\/", "display_url": "carlomicieli.github.io", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 66, "friends_count": 177, "listed_count": 7, "created_at": "Thu Jun 03 16:04:29 +0000 2010", "favourites_count": 94, "utc_offset": -7200, "time_zone": "Greenland", "geo_enabled": false, "verified": false, "statuses_count": 2660, "lang": "it", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "31343D", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/738738455\/8efe6b44a8f641a9e5c90318cc8231b5.jpeg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/738738455\/8efe6b44a8f641a9e5c90318cc8231b5.jpeg", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/479339376456261634\/J6OyKFQV_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/479339376456261634\/J6OyKFQV_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/151523180\/1356172358", "profile_link_color": "323E4C", "profile_sidebar_border_color": "212535", "profile_sidebar_fill_color": "000C29", "profile_text_color": "784726", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 109023360, "id_str": "109023360", "name": "Scala", "uri": "\/muuki88\/lists\/scala", "subscriber_count": 0, "member_count": 19, "mode": "public", "description": "", "slug": "scala", "full_name": "@muuki88\/scala", "created_at": "Mon Mar 24 18:53:54 +0000 2014", "following": false, "user": { "id": 157671522, "id_str": "157671522", "name": "Muki Seiler", "screen_name": "muuki88", "location": "Munich", "description": "Scala, Java and Open Source Enthusiast. sbt-native-packager", "url": "http:\/\/t.co\/g6KgI6Rigb", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/g6KgI6Rigb", "expanded_url": "http:\/\/about.me\/muuki88", "display_url": "about.me\/muuki88", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 211, "friends_count": 336, "listed_count": 41, "created_at": "Sun Jun 20 14:19:32 +0000 2010", "favourites_count": 1265, "utc_offset": 7200, "time_zone": "Berlin", "geo_enabled": false, "verified": false, "statuses_count": 1177, "lang": "de", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "1A1B1F", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/537723943725961218\/gK_UtfA7.jpeg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/537723943725961218\/gK_UtfA7.jpeg", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1736846888\/muki_profile_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1736846888\/muki_profile_normal.png", "profile_link_color": "4E1475", "profile_sidebar_border_color": "181A1E", "profile_sidebar_fill_color": "252429", "profile_text_color": "666666", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 195229102, "id_str": "195229102", "name": "scala", "uri": "\/TheDriox\/lists\/scala", "subscriber_count": 27, "member_count": 5001, "mode": "public", "description": "", "slug": "scala", "full_name": "@TheDriox\/scala", "created_at": "Fri Feb 13 16:28:43 +0000 2015", "following": false, "user": { "id": 216042075, "id_str": "216042075", "name": "Adrien Crovetto", "screen_name": "TheDriox", "location": "Paris", "description": "", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 24, "friends_count": 56, "listed_count": 5, "created_at": "Mon Nov 15 16:56:31 +0000 2010", "favourites_count": 2, "utc_offset": 7200, "time_zone": "Ljubljana", "geo_enabled": true, "verified": false, "statuses_count": 1614, "lang": "fr", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/519390825852059649\/mjqYTRJS_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/519390825852059649\/mjqYTRJS_normal.jpeg", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 117272517, "id_str": "117272517", "name": "devs", "uri": "\/joescii\/lists\/devs", "subscriber_count": 7, "member_count": 684, "mode": "public", "description": "Developers and development-related stuff I follow", "slug": "devs", "full_name": "@joescii\/devs", "created_at": "Fri Apr 25 16:15:18 +0000 2014", "following": false, "user": { "id": 295976669, "id_str": "295976669", "name": "Joe Barnes", "screen_name": "joescii", "location": "Heart o' Dixie", "description": "Agility, cloud, and functional programming from south of the Mason-Dixon. #RollTide", "url": "http:\/\/t.co\/UEFRxskCpP", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/UEFRxskCpP", "expanded_url": "http:\/\/proseand.co.nz", "display_url": "proseand.co.nz", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 1232, "friends_count": 1234, "listed_count": 59, "created_at": "Tue May 10 00:15:06 +0000 2011", "favourites_count": 1346, "utc_offset": -18000, "time_zone": "Central Time (US & Canada)", "geo_enabled": false, "verified": false, "statuses_count": 19643, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "1A1B1F", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/858504176\/29346b1d8d891c522951cda7ce635eaf.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/858504176\/29346b1d8d891c522951cda7ce635eaf.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/641002714068070400\/md8Mh33H_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/641002714068070400\/md8Mh33H_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/295976669\/1401380434", "profile_link_color": "BD1818", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "252429", "profile_text_color": "666666", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 183555623, "id_str": "183555623", "name": "Pragmatism", "uri": "\/LincolnCannon\/lists\/pragmatism", "subscriber_count": 38, "member_count": 4865, "mode": "public", "description": "This is a list of accounts tweeting about pragmatism.", "slug": "pragmatism", "full_name": "@LincolnCannon\/pragmatism", "created_at": "Mon Dec 01 00:42:10 +0000 2014", "following": false, "user": { "id": 14074860, "id_str": "14074860", "name": "Lincoln Cannon", "screen_name": "LincolnCannon", "location": "Orem UT USA", "description": "Lincoln Cannon is a technologist and philosopher, and leading advocate of technological evolution and postsecular religion.", "url": "http:\/\/t.co\/jApZlzxhjQ", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/jApZlzxhjQ", "expanded_url": "http:\/\/lincoln.metacannon.net", "display_url": "lincoln.metacannon.net", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 2355, "friends_count": 46, "listed_count": 207, "created_at": "Mon Mar 03 22:20:05 +0000 2008", "favourites_count": 1436, "utc_offset": -21600, "time_zone": "Mountain Time (US & Canada)", "geo_enabled": false, "verified": false, "statuses_count": 8174, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "EEEEEE", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/870152292\/d591a8eaf17964675f929e6bef09d4cf.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/870152292\/d591a8eaf17964675f929e6bef09d4cf.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1676605590\/369378_692791745_437728135_n_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1676605590\/369378_692791745_437728135_n_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/14074860\/1398310528", "profile_link_color": "336699", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "C0DFEC", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } } ] } ================================================ FILE: src/test/resources/twitter/rest/lists/show.json ================================================ { "id": 222669735, "id_str": "222669735", "name": "my-list", "uri": "\/DanielaSfregola\/lists\/my-list", "subscriber_count": 0, "member_count": 0, "mode": "private", "description": "a nice description", "slug": "my-list", "full_name": "@DanielaSfregola\/my-list", "created_at": "Wed Oct 14 06:29:51 +0000 2015", "following": false, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 133, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 69, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 192, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } } ================================================ FILE: src/test/resources/twitter/rest/lists/subscribers.json ================================================ [ { "id": 19018614, "id_str": "19018614", "name": "Marco Bonzanini", "screen_name": "marcobonzanini", "location": "London, United Kingdom", "description": "Data Scientist - Information Retrieval, NLP, Text Analytics, Machine Learning, everything Python. PhD from @QMUL", "url": "http:\/\/t.co\/34uCLCPVkH", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/34uCLCPVkH", "expanded_url": "http:\/\/marcobonzanini.com", "display_url": "marcobonzanini.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 243, "friends_count": 206, "listed_count": 33, "created_at": "Thu Jan 15 11:28:04 +0000 2009", "favourites_count": 3, "utc_offset": 3600, "time_zone": "London", "geo_enabled": false, "verified": false, "statuses_count": 171, "lang": "en", "status": { "created_at": "Tue Oct 06 20:17:44 +0000 2015", "id": 651491549889626112, "id_str": "651491549889626112", "text": "@miguelmalvarez nice one as usual", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": 651445856802074625, "in_reply_to_status_id_str": "651445856802074625", "in_reply_to_user_id": 97880420, "in_reply_to_user_id_str": "97880420", "in_reply_to_screen_name": "miguelmalvarez", "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 1, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "miguelmalvarez", "name": "Miguel Martinez", "id": 97880420, "id_str": "97880420", "indices": [ 0, 15 ] } ], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "709397", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_link_color": "FF3300", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, { "id": 17765013, "id_str": "17765013", "name": "Martin Odersky", "screen_name": "odersky", "location": "Switzerland", "description": "lead designer of Scala", "url": "http:\/\/t.co\/eLC2ehOVXJ", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/eLC2ehOVXJ", "expanded_url": "http:\/\/lamp.epfl.ch\/~odersky", "display_url": "lamp.epfl.ch\/~odersky", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 34414, "friends_count": 148, "listed_count": 1418, "created_at": "Sun Nov 30 22:56:21 +0000 2008", "favourites_count": 13, "utc_offset": 7200, "time_zone": "Bern", "geo_enabled": false, "verified": false, "statuses_count": 730, "lang": "en", "status": { "created_at": "Fri Oct 09 18:36:26 +0000 2015", "id": 652553222977138689, "id_str": "652553222977138689", "text": "RT @larsr_h: Slides from my talk \"What Haskell can learn from Scala\" at #haskellx https:\/\/t.co\/smC9KvzZqd \u2013 mistakes are mine, not @milessa\u2026", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Fri Oct 09 13:30:11 +0000 2015", "id": 652476152070586369, "id_str": "652476152070586369", "text": "Slides from my talk \"What Haskell can learn from Scala\" at #haskellx https:\/\/t.co\/smC9KvzZqd \u2013 mistakes are mine, not @milessabin's :-)", "source": "\u003ca href=\"https:\/\/about.twitter.com\/products\/tweetdeck\" rel=\"nofollow\"\u003eTweetDeck\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 35, "favorite_count": 92, "entities": { "hashtags": [ { "text": "haskellx", "indices": [ 59, 68 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "milessabin", "name": "Miles Sabin", "id": 29444566, "id_str": "29444566", "indices": [ 118, 129 ] } ], "urls": [ { "url": "https:\/\/t.co\/smC9KvzZqd", "expanded_url": "https:\/\/speakerdeck.com\/larsrh\/what-haskell-can-learn-from-scala", "display_url": "speakerdeck.com\/larsrh\/what-ha\u2026", "indices": [ 69, 92 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "retweet_count": 35, "favorite_count": 0, "entities": { "hashtags": [ { "text": "haskellx", "indices": [ 72, 81 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "larsr_h", "name": "Lars Hupel", "id": 548301113, "id_str": "548301113", "indices": [ 3, 11 ] }, { "screen_name": "milessabin", "name": "Miles Sabin", "id": 29444566, "id_str": "29444566", "indices": [ 131, 140 ] } ], "urls": [ { "url": "https:\/\/t.co\/smC9KvzZqd", "expanded_url": "https:\/\/speakerdeck.com\/larsrh\/what-haskell-can-learn-from-scala", "display_url": "speakerdeck.com\/larsrh\/what-ha\u2026", "indices": [ 82, 105 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/673909115\/Martin_normal.JPG", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/673909115\/Martin_normal.JPG", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false } ] ================================================ FILE: src/test/resources/twitter/rest/lists/subscriptions.json ================================================ { "next_cursor": 1381665145279094592, "next_cursor_str": "1381665145279094592", "previous_cursor": 0, "previous_cursor_str": "0", "lists": [ { "id": 79043502, "id_str": "79043502", "name": "v1", "uri": "\/fww\/lists\/v1", "subscriber_count": 28, "member_count": 64, "mode": "public", "description": "", "slug": "v1", "full_name": "@fww\/v1", "created_at": "Mon Oct 15 22:00:35 +0000 2012", "following": false, "user": { "id": 7413782, "id_str": "7413782", "name": "Frankie Warren", "screen_name": "fww", "location": "Oakland", "description": "I keep data flowing for @clever, developing partnerships with leading Student Information Systems across the country.", "url": "http:\/\/t.co\/Ejm4fygCkh", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/Ejm4fygCkh", "expanded_url": "http:\/\/www.frankiewarren.com", "display_url": "frankiewarren.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 578, "friends_count": 570, "listed_count": 19, "created_at": "Wed Jul 11 21:57:49 +0000 2007", "favourites_count": 1106, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 6306, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "03080A", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/778004043\/8a89e4413fd3bf06de2b18962ddd864e.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/778004043\/8a89e4413fd3bf06de2b18962ddd864e.png", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/2724418311\/b023f27714e85fdbbe2009c4ba802267_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/2724418311\/b023f27714e85fdbbe2009c4ba802267_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/7413782\/1400111366", "profile_link_color": "706E6E", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "FFFFFF", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 58790720, "id_str": "58790720", "name": "Left the Flock", "uri": "\/F6x\/lists\/left-the-flock", "subscriber_count": 3, "member_count": 105, "mode": "public", "description": "Looking forward to what\u2019s next for these former Twitter employees. ", "slug": "left-the-flock", "full_name": "@F6x\/left-the-flock", "created_at": "Fri Nov 11 22:57:17 +0000 2011", "following": false, "user": { "id": 5507572, "id_str": "5507572", "name": "Stephen R. Fox", "screen_name": "F6x", "location": "San Francisco, CA", "description": "Social networking xenophobe.", "url": "http:\/\/t.co\/ygIEmovbxy", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/ygIEmovbxy", "expanded_url": "http:\/\/stephenrfox.com", "display_url": "stephenrfox.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 1048, "friends_count": 666, "listed_count": 58, "created_at": "Wed Apr 25 20:22:21 +0000 2007", "favourites_count": 2976, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 16112, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "9AE4E8", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/454778235130105856\/Cbq-Um8Q.jpeg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/454778235130105856\/Cbq-Um8Q.jpeg", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/539330777713221632\/nmQGrRV__normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/539330777713221632\/nmQGrRV__normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/5507572\/1348936071", "profile_link_color": "0000FF", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "44A2FD", "profile_text_color": "000000", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 95508994, "id_str": "95508994", "name": "Dev + Platform Relations", "uri": "\/froginthevalley\/lists\/dev-platform-relations", "subscriber_count": 5, "member_count": 24, "mode": "public", "description": "My Team @ Twitter", "slug": "dev-platform-relations", "full_name": "@froginthevalley\/dev-platform-relations", "created_at": "Wed Sep 04 20:43:30 +0000 2013", "following": false, "user": { "id": 657693, "id_str": "657693", "name": "Sylvain Carle", "screen_name": "froginthevalley", "location": "Montr\u00e9al", "description": "General Manager @FounderFuel and Partner @RealVentures. Previously: Senior Developer Advocate @Twitter. Aussi en Fran\u00e7ais: @sylvain.", "url": "http:\/\/t.co\/DpimqhcXZ0", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/DpimqhcXZ0", "expanded_url": "http:\/\/afroginthevalley.com", "display_url": "afroginthevalley.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 9769, "friends_count": 2844, "listed_count": 492, "created_at": "Thu Jan 18 00:10:45 +0000 2007", "favourites_count": 3331, "utc_offset": -14400, "time_zone": "Eastern Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 10698, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": true, "profile_background_color": "000000", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/568768757669957633\/YznskDzj.jpeg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/568768757669957633\/YznskDzj.jpeg", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/425774377657827328\/p8B9ooUc_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/425774377657827328\/p8B9ooUc_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/657693\/1403209471", "profile_link_color": "949494", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "252429", "profile_text_color": "666666", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 95113344, "id_str": "95113344", "name": "Users with IDs \u003e 32 bits", "uri": "\/kurrik\/lists\/users-with-ids-32-bits", "subscriber_count": 6, "member_count": 2, "mode": "public", "description": "", "slug": "users-with-ids-32-bits", "full_name": "@kurrik\/users-with-ids-32-bits", "created_at": "Wed Aug 28 16:55:40 +0000 2013", "following": false, "user": { "id": 7588892, "id_str": "7588892", "name": "Arne R\u0ca0_\u0ca0mann-Kurrik", "screen_name": "kurrik", "location": "Sam Francesco", "description": "Software Engineer at Twitter dot com, practitioner of dark sandwich arts.", "url": "http:\/\/t.co\/UrjQWyPSkY", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/UrjQWyPSkY", "expanded_url": "http:\/\/blog.roomanna.com", "display_url": "blog.roomanna.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 8121, "friends_count": 2129, "listed_count": 235, "created_at": "Thu Jul 19 15:58:07 +0000 2007", "favourites_count": 5159, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 6096, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "8FC1FF", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/454673496996462592\/cezGFZYN.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/454673496996462592\/cezGFZYN.png", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/378800000644633364\/fc3b6ae787f7b54bbdc3613a3520a7bb_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/378800000644633364\/fc3b6ae787f7b54bbdc3613a3520a7bb_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/7588892\/1397085720", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "C7E0FF", "profile_text_color": "000000", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } }, { "id": 55932616, "id_str": "55932616", "name": "team", "uri": "\/TwitterEng\/lists\/team", "subscriber_count": 205, "member_count": 318, "mode": "public", "description": "", "slug": "team", "full_name": "@TwitterEng\/team", "created_at": "Mon Oct 03 02:48:07 +0000 2011", "following": false, "user": { "id": 6844292, "id_str": "6844292", "name": "Twitter Engineering", "screen_name": "TwitterEng", "location": "San Francisco, CA", "description": "The official account for Twitter Engineering.", "url": "http:\/\/t.co\/gJvsjUZJ3O", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/gJvsjUZJ3O", "expanded_url": "http:\/\/engineering.twitter.com", "display_url": "engineering.twitter.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 924052, "friends_count": 1, "listed_count": 3871, "created_at": "Sat Jun 16 00:14:36 +0000 2007", "favourites_count": 9, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": true, "verified": true, "statuses_count": 311, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C6E2EE", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme2\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme2\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/2284174594\/apcu4c9tu2zkefnev0jt_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/2284174594\/apcu4c9tu2zkefnev0jt_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/6844292\/1396958504", "profile_link_color": "1F98C7", "profile_sidebar_border_color": "C6E2EE", "profile_sidebar_fill_color": "DAECF4", "profile_text_color": "663B12", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } } ] } ================================================ FILE: src/test/resources/twitter/rest/lists/timeline.json ================================================ [ { "coordinates": null, "created_at": "Mon Sep 10 14:04:58 +0000 2012", "truncated": false, "favorited": false, "id_str": "245160944223793152", "in_reply_to_user_id_str": null, "entities": { "urls": [ { "expanded_url": "http://bit.ly/MuCCDo", "url": "http://t.co/W2tON3OK", "indices": [ 41, 61 ], "display_url": "bit.ly/MuCCDo" } ], "hashtags": [ { "text": "TorontoFC", "indices": [ 87, 97 ] }, { "text": "MLS", "indices": [ 98, 102 ] } ], "user_mentions": [ { "name": "Team Up Foundation", "id_str": "210844741", "id": 210844741, "indices": [ 76, 86 ], "screen_name": "TeamUpFdn" } ] }, "text": "Create your own TFC ESQ by Movado Watch: http://t.co/W2tON3OK in support of @TeamUpFdn #TorontoFC #MLS", "contributors": null, "id": 245160944223793152, "retweet_count": 0, "in_reply_to_status_id_str": null, "geo": null, "retweeted": false, "possibly_sensitive": false, "in_reply_to_user_id": null, "in_reply_to_screen_name": null, "source": "TweetDeck", "user": { "profile_sidebar_fill_color": "EB1D31", "profile_background_tile": false, "profile_sidebar_border_color": "FFFFFF", "name": "Toronto FC", "profile_image_url": "http://a0.twimg.com/profile_images/1827235104/TorontoFC1_normal.jpg", "created_at": "Fri Sep 11 15:42:26 +0000 2009", "location": "Toronto, ON", "follow_request_sent": false, "is_translator": false, "id_str": "73412535", "profile_link_color": "000000", "entities": { "url": { "urls": [ { "expanded_url": null, "url": "http://www.torontofc.ca", "indices": [ 0, 23 ], "display_url": null } ] }, "description": { "urls": [ ] } }, "favourites_count": 2, "url": "http://www.torontofc.ca", "default_profile": false, "contributors_enabled": false, "profile_image_url_https": "https://si0.twimg.com/profile_images/1827235104/TorontoFC1_normal.jpg", "utc_offset": -18000, "id": 73412535, "listed_count": 1078, "profile_use_background_image": true, "followers_count": 28281, "protected": false, "profile_text_color": "000000", "lang": "en", "profile_background_color": "BC1228", "verified": true, "time_zone": "Eastern Time (US & Canada)", "profile_background_image_url_https": "https://si0.twimg.com/profile_background_images/603424485/k9py0fm18qrjr8l22qlp.jpeg", "notifications": false, "description": "Official Toronto FC Twitter by @AsifinToronto & @JonSinden. Follow us for the latest club news, links, pics & videos. Join us during matches for #TFClive", "geo_enabled": false, "default_profile_image": false, "friends_count": 13947, "profile_background_image_url": "http://a0.twimg.com/profile_background_images/603424485/k9py0fm18qrjr8l22qlp.jpeg", "statuses_count": 10774, "screen_name": "torontofc", "following": true, "show_all_inline_media": false }, "place": null, "in_reply_to_status_id": null } ] ================================================ FILE: src/test/resources/twitter/rest/media/media_details.json ================================================ { "media_id":710511363345354753, "media_id_string":"710511363345354753", "expires_after_secs":3593, "video":{ "video_type":"video\/mp4" }, "processing_info":{ "state":"succeeded", "progress_percent":100 } } ================================================ FILE: src/test/resources/twitter/rest/mutes/muted_users_ids.json ================================================ { "ids": [ 3185001906, 2864749010, 2728578117, 2390428970, 2392623769, 2298388902, 2218822532, 2294010576, 2298665443, 2295646148, 2392372830, 2489878842, 2537896318, 1456646244, 2369342556, 908315570, 134681213, 2207996772, 1323648805, 2209966914, 1377248521, 450742576, 2169915990, 2168731405, 1032613423, 1897558387, 1651460672, 552136201, 1961595428, 622040005, 1723067108, 1940180042, 1921253352, 1916881861, 1909516183, 1899472064, 1409030454, 551190078, 98585322, 1287005810, 1857413564, 1507117872, 616207096, 1707416846, 795061039, 245171204, 1671544250, 550058321, 1661133924, 302907601, 1184312352, 1360513801, 1627139449, 1633417872, 1624546278, 1549848770, 1606806666, 1286204832, 102781433, 1547689992, 1549487112, 1546030177, 1232717508, 1366161096, 1470134192, 1538866020, 1525394654, 1360382390, 1485097536, 1520331235, 1360663580, 1517720449, 62084055, 1092628730, 1362034669, 1214653182, 556802885, 364135790 ], "next_cursor": 0, "next_cursor_str": "0", "previous_cursor": 0, "previous_cursor_str": "0" } ================================================ FILE: src/test/resources/twitter/rest/mutes/user.json ================================================ { "blocked_by":false, "blocking":false, "contributors_enabled":false, "created_at":"Mon Dec 08 20:00:20 +0000 2014", "default_profile":true, "default_profile_image":false, "description":"Java / Scala Team Leader working at @OVOEnergy", "entities":{ "hashtags":[], "media":[], "url":{ "urls":[{ "indices":[0,23], "url":"https://t.co/0FKNGVnRwX", "display_url":"danielasfregola.com", "expanded_url":"https://www.danielasfregola.com/" }] }, "urls":[], "user_mentions":[], "description":{ "urls":[] } }, "favourites_count":68, "follow_request_sent":false, "following":false, "followers_count":134, "friends_count":98, "geo_enabled":true, "has_extended_profile":false, "id":2911461333, "id_str":"2911461333", "is_translation_enabled":false, "is_translator":false, "lang":"en", "listed_count":13, "location":"London, United Kingdom", "muting":false, "name":"Daniela Sfregola", "notifications":false, "profile_background_color":"C0DEED", "profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile":false, "profile_image_url":"http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https":"https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color":"0084B4", "profile_sidebar_border_color":"C0DEED", "profile_sidebar_fill_color":"DDEEF6", "profile_text_color":"333333", "profile_use_background_image":true, "protected":false, "screen_name":"DanielaSfregola", "show_all_inline_media":false, "status":{ "contributors":[], "created_at":"Tue Oct 06 19:52:40 +0100 2015", "entities":{ "hashtags":[], "media":[], "urls":[{ "indices":[50,73], "url":"https://t.co/whZl0cBx05", "display_url":"mapr.com/blog/thinking-\u2026", "expanded_url":"https://www.mapr.com/blog/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter" }], "user_mentions":[] }, "favorite_count":2, "favorited":false, "id":651470141381865473, "id_str":"651470141381865473", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":0, "retweeted":false, "source":"Twitter Web Client", "text":"Thinking of Apache Spark in Terms of Legos | MapR https://t.co/whZl0cBx05", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "statuses_count":191, "url":"https://t.co/0FKNGVnRwX", "verified":false } ================================================ FILE: src/test/resources/twitter/rest/mutes/users.json ================================================ { "users":[{ "blocked_by":false, "blocking":false, "contributors_enabled":false, "created_at":"Thu Apr 12 09:52:38 +0100 2007", "default_profile":false, "default_profile_image":false, "description":"Compiler Engineer @ Typesafe", "entities":{ "hashtags":[], "media":[], "urls":[], "user_mentions":[], "description":{ "urls":[] } }, "favourites_count":171, "follow_request_sent":false, "following":true, "followers_count":2878, "friends_count":329, "geo_enabled":false, "has_extended_profile":false, "id":4325301, "id_str":"4325301", "is_translation_enabled":false, "is_translator":false, "lang":"en", "listed_count":149, "location":"Brisbane, Australia", "muting":false, "name":"Jason Zaugg", "notifications":false, "profile_background_color":"9AE4E8", "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/378800000122871725/5269c866ffadd34a3401ec3476476dad.png", "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/378800000122871725/5269c866ffadd34a3401ec3476476dad.png", "profile_background_tile":true, "profile_banner_url":"https://pbs.twimg.com/profile_banners/4325301/1398330737", "profile_image_url":"http://pbs.twimg.com/profile_images/515822337/avatar_normal.jpg", "profile_image_url_https":"https://pbs.twimg.com/profile_images/515822337/avatar_normal.jpg", "profile_link_color":"000000", "profile_sidebar_border_color":"87BC44", "profile_sidebar_fill_color":"E0FF92", "profile_text_color":"0000FF", "profile_use_background_image":true, "protected":false, "screen_name":"retronym", "show_all_inline_media":false, "status":{ "contributors":[], "created_at":"Wed Oct 07 20:53:28 +0100 2015", "entities":{ "hashtags":[], "media":[], "urls":[], "user_mentions":[{ "id":1221300014, "id_str":"1221300014", "indices":[3,14], "name":"Scala", "screen_name":"scala_lang" }] }, "favorite_count":0, "favorited":false, "id":651847832538734593, "id_str":"651847832538734593", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":5, "retweeted":false, "retweeted_status":{ "contributors":[], "created_at":"Wed Oct 07 19:04:32 +0100 2015", "entities":{ "hashtags":[], "media":[], "urls":[], "user_mentions":[] }, "favorite_count":2, "favorited":false, "id":651820418538602496, "id_str":"651820418538602496", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":5, "retweeted":false, "source":"Twitter Web Client", "text":"Gitter room reorg: scala/scala is now the general room. scala/contributors for talking internals. (scala/scala/scala-user is being retired.)", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "source":"Twitter for iPhone", "text":"RT @scala_lang: Gitter room reorg: scala/scala is now the general room. scala/contributors for talking internals. (scala/scala/scala-user i\u2026", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "statuses_count":1472, "time_zone":"Yakutsk", "utc_offset":32400, "verified":false },{ "blocked_by":false, "blocking":false, "contributors_enabled":false, "created_at":"Sat Feb 27 21:41:51 +0000 2010", "default_profile":false, "default_profile_image":false, "description":"Work @typesafe with #Scala, #Akka", "entities":{ "hashtags":[], "media":[], "urls":[], "user_mentions":[], "description":{ "urls":[] } }, "favourites_count":13, "follow_request_sent":false, "following":true, "followers_count":1628, "friends_count":131, "geo_enabled":false, "has_extended_profile":false, "id":118185789, "id_str":"118185789", "is_translation_enabled":false, "is_translator":false, "lang":"en", "listed_count":83, "location":"Stockholm", "muting":false, "name":"Patrik Nordwall", "notifications":false, "profile_background_color":"9AE4E8", "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/94984933/x22e289ef5702458dc86f5cd301a22f3.png", "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/94984933/x22e289ef5702458dc86f5cd301a22f3.png", "profile_background_tile":true, "profile_image_url":"http://pbs.twimg.com/profile_images/2452148249/p51txvmjs3gks27bs5vr_normal.jpeg", "profile_image_url_https":"https://pbs.twimg.com/profile_images/2452148249/p51txvmjs3gks27bs5vr_normal.jpeg", "profile_link_color":"0000FF", "profile_sidebar_border_color":"87BC44", "profile_sidebar_fill_color":"E0FF92", "profile_text_color":"000000", "profile_use_background_image":true, "protected":false, "screen_name":"patriknw", "show_all_inline_media":false, "status":{ "contributors":[], "created_at":"Sun Oct 04 16:06:39 +0100 2015", "entities":{ "hashtags":[{ "text":"Cassandra", "indices":[12,22] },{ "text":"Akka", "indices":[34,39] }], "media":[], "urls":[{ "indices":[68,91], "url":"https://t.co/Bc840GyfXF", "display_url":"github.com/krasserm/akka-\u2026", "expanded_url":"https://github.com/krasserm/akka-persistence-cassandra/issues?q=milestone%3A0.4+is%3Aclosed" }], "user_mentions":[{ "id":15295946, "id_str":"15295946", "indices":[3,10], "name":"Martin Krasser", "screen_name":"mrt1nz" },{ "id":80530885, "id_str":"80530885", "indices":[99,107], "name":"Christopher Batey", "screen_name":"chbatey" }] }, "favorite_count":0, "favorited":false, "id":650688486631211008, "id_str":"650688486631211008", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":47, "retweeted":false, "retweeted_status":{ "contributors":[], "created_at":"Sun Oct 04 09:34:53 +0100 2015", "entities":{ "hashtags":[{ "text":"Cassandra", "indices":[0,10] },{ "text":"Akka", "indices":[22,27] }], "media":[], "urls":[{ "indices":[56,79], "url":"https://t.co/Bc840GyfXF", "display_url":"github.com/krasserm/akka-\u2026", "expanded_url":"https://github.com/krasserm/akka-persistence-cassandra/issues?q=milestone%3A0.4+is%3Aclosed" }], "user_mentions":[{ "id":80530885, "id_str":"80530885", "indices":[87,95], "name":"Christopher Batey", "screen_name":"chbatey" }] }, "favorite_count":50, "favorited":false, "id":650589896407691264, "id_str":"650589896407691264", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":47, "retweeted":false, "source":"Twitter Web Client", "text":"#Cassandra plugin for #Akka Persistence 2.4.0 released. https://t.co/Bc840GyfXF Thanks @chbatey for all your high-quality work on it!", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "source":"Twitter for iPhone", "text":"RT @mrt1nz: #Cassandra plugin for #Akka Persistence 2.4.0 released. https://t.co/Bc840GyfXF Thanks @chbatey for all your high-quality work \u2026", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "statuses_count":1080, "time_zone":"Stockholm", "utc_offset":7200, "verified":false },{ "blocked_by":false, "blocking":false, "contributors_enabled":false, "created_at":"Fri Jan 23 22:53:57 +0000 2009", "default_profile":true, "default_profile_image":false, "description":"Author: Scala In Depth\r\nDeveloper: Geeky Scala Stuff\r\nAll Around: Big Nerd", "entities":{ "hashtags":[], "media":[], "url":{ "urls":[{ "indices":[0,22], "url":"http://t.co/VVHwaER3hu", "display_url":"jsuereth.com", "expanded_url":"http://jsuereth.com" }] }, "urls":[], "user_mentions":[], "description":{ "urls":[] } }, "favourites_count":611, "follow_request_sent":false, "following":true, "followers_count":6765, "friends_count":399, "geo_enabled":true, "has_extended_profile":false, "id":19418890, "id_str":"19418890", "is_translation_enabled":false, "is_translator":false, "lang":"en", "listed_count":365, "location":"", "muting":false, "name":"Josh Suereth", "notifications":false, "profile_background_color":"C0DEED", "profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile":false, "profile_image_url":"http://pbs.twimg.com/profile_images/2162642114/me-suprised-cropped_normal.jpg", "profile_image_url_https":"https://pbs.twimg.com/profile_images/2162642114/me-suprised-cropped_normal.jpg", "profile_link_color":"0084B4", "profile_sidebar_border_color":"C0DEED", "profile_sidebar_fill_color":"DDEEF6", "profile_text_color":"333333", "profile_use_background_image":true, "protected":false, "screen_name":"jsuereth", "show_all_inline_media":false, "status":{ "contributors":[], "created_at":"Sun Oct 04 16:29:30 +0100 2015", "entities":{ "hashtags":[], "media":[], "urls":[], "user_mentions":[{ "id":260389486, "id_str":"260389486", "indices":[0,12], "name":"randy shepherd", "screen_name":"aut0mat0n1c" }] }, "favorite_count":0, "favorited":false, "id":650694240176087041, "id_str":"650694240176087041", "in_reply_to_screen_name":"aut0mat0n1c", "in_reply_to_status_id":650521639931768832, "in_reply_to_status_id_str":"650521639931768832", "in_reply_to_user_id":260389486, "in_reply_to_user_id_str":"260389486", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":0, "retweeted":false, "source":"Twitter for Android", "text":"@aut0mat0n1c believe you can do that all in one string", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "statuses_count":6797, "url":"http://t.co/VVHwaER3hu", "verified":false },{ "blocked_by":false, "blocking":false, "contributors_enabled":false, "created_at":"Wed Jul 02 08:02:10 +0100 2008", "default_profile":false, "default_profile_image":false, "description":"Distributed systems developer, Scala/Java programmer, integration specialist, downhill whatever", "entities":{ "hashtags":[], "media":[], "url":{ "urls":[{ "indices":[0,22], "url":"http://t.co/fUhk1fMSWp", "display_url":"martin-krasser.de", "expanded_url":"http://martin-krasser.de/" }] }, "urls":[], "user_mentions":[], "description":{ "urls":[] } }, "favourites_count":159, "follow_request_sent":false, "following":true, "followers_count":2302, "friends_count":57, "geo_enabled":false, "has_extended_profile":false, "id":15295946, "id_str":"15295946", "is_translation_enabled":false, "is_translator":false, "lang":"en", "listed_count":136, "location":"", "muting":false, "name":"Martin Krasser", "notifications":false, "profile_background_color":"C0DEED", "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/801620954/0b2c80a4fda06927c22a086826e87dd0.jpeg", "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/801620954/0b2c80a4fda06927c22a086826e87dd0.jpeg", "profile_background_tile":false, "profile_banner_url":"https://pbs.twimg.com/profile_banners/15295946/1361957839", "profile_image_url":"http://pbs.twimg.com/profile_images/1123689116/Bild006a_normal.jpg", "profile_image_url_https":"https://pbs.twimg.com/profile_images/1123689116/Bild006a_normal.jpg", "profile_link_color":"0084B4", "profile_sidebar_border_color":"FFFFFF", "profile_sidebar_fill_color":"DDEEF6", "profile_text_color":"333333", "profile_use_background_image":false, "protected":false, "screen_name":"mrt1nz", "show_all_inline_media":false, "status":{ "contributors":[], "created_at":"Wed Oct 07 18:02:20 +0100 2015", "entities":{ "hashtags":[{ "text":"Akka", "indices":[75,80] }], "media":[], "urls":[{ "indices":[51,74], "url":"https://t.co/mVg93Znk9F", "display_url":"github.com/okumin/akka-pe\u2026", "expanded_url":"https://github.com/okumin/akka-persistence-sql-async" }], "user_mentions":[{ "id":91770461, "id_str":"91770461", "indices":[3,10], "name":"おくみん@女子高校生", "screen_name":"okumin" }] }, "favorite_count":0, "favorited":false, "id":651804763030454272, "id_str":"651804763030454272", "is_quote_status":false, "lang":"ja", "possibly_sensitive":false, "scopes":{ }, "retweet_count":6, "retweeted":false, "retweeted_status":{ "contributors":[], "created_at":"Wed Oct 07 16:05:00 +0100 2015", "entities":{ "hashtags":[{ "text":"Akka", "indices":[63,68] }], "media":[], "urls":[{ "indices":[39,62], "url":"https://t.co/mVg93Znk9F", "display_url":"github.com/okumin/akka-pe\u2026", "expanded_url":"https://github.com/okumin/akka-persistence-sql-async" }], "user_mentions":[] }, "favorite_count":7, "favorited":false, "id":651775238699552768, "id_str":"651775238699552768", "is_quote_status":false, "lang":"ja", "possibly_sensitive":false, "scopes":{ }, "retweet_count":6, "retweeted":false, "source":"YoruFukurou", "text":"akka-persistence-sql-async パブリッシュしました。 https://t.co/mVg93Znk9F #Akka", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "source":"Twitter for Android", "text":"RT @okumin: akka-persistence-sql-async パブリッシュしました。 https://t.co/mVg93Znk9F #Akka", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "statuses_count":2732, "time_zone":"Vienna", "url":"http://t.co/fUhk1fMSWp", "utc_offset":7200, "verified":false },{ "blocked_by":false, "blocking":false, "contributors_enabled":false, "created_at":"Thu Apr 11 19:46:02 +0100 2013", "default_profile":false, "default_profile_image":false, "description":"Functional Programming Advocates. Providing Talent Solutions, Strategic Advice, Curated Events & Insight across Clojure, Scala, Erlang, Haskell, F#, OCaml,Swift", "entities":{ "hashtags":[], "media":[], "url":{ "urls":[{ "indices":[0,22], "url":"http://t.co/BXwhIYmO2c", "display_url":"functionalworks.com", "expanded_url":"http://functionalworks.com/" }] }, "urls":[], "user_mentions":[], "description":{ "urls":[] } }, "favourites_count":4606, "follow_request_sent":false, "following":true, "followers_count":4192, "friends_count":365, "geo_enabled":true, "has_extended_profile":false, "id":1345043875, "id_str":"1345043875", "is_translation_enabled":false, "is_translator":false, "lang":"en", "listed_count":216, "location":"London HQ | Global reach ", "muting":false, "name":"Functional Works", "notifications":false, "profile_background_color":"131516", "profile_background_image_url":"http://abs.twimg.com/images/themes/theme14/bg.gif", "profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme14/bg.gif", "profile_background_tile":true, "profile_banner_url":"https://pbs.twimg.com/profile_banners/1345043875/1412684063", "profile_image_url":"http://pbs.twimg.com/profile_images/439367291214364673/M_Z9rDrf_normal.png", "profile_image_url_https":"https://pbs.twimg.com/profile_images/439367291214364673/M_Z9rDrf_normal.png", "profile_link_color":"F52727", "profile_sidebar_border_color":"EEEEEE", "profile_sidebar_fill_color":"EFEFEF", "profile_text_color":"333333", "profile_use_background_image":true, "protected":false, "screen_name":"Functionalworks", "show_all_inline_media":false, "status":{ "contributors":[], "created_at":"Wed Oct 07 21:08:17 +0100 2015", "entities":{ "hashtags":[{ "text":"javascript", "indices":[21,32] }], "media":[], "urls":[{ "indices":[33,55], "url":"http://t.co/yqbQnpzGAn", "display_url":"buff.ly/1WMvfv1", "expanded_url":"http://buff.ly/1WMvfv1" }], "user_mentions":[] }, "favorite_count":7, "favorited":false, "id":651851561082220544, "id_str":"651851561082220544", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":0, "retweeted":false, "source":"Buffer", "text":"Debugging Functional #javascript http://t.co/yqbQnpzGAn", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "statuses_count":4168, "time_zone":"Amsterdam", "url":"http://t.co/BXwhIYmO2c", "utc_offset":7200, "verified":false },{ "blocked_by":false, "blocking":false, "contributors_enabled":false, "created_at":"Sun May 06 20:59:29 +0100 2012", "default_profile":true, "default_profile_image":false, "description":"", "entities":{ "hashtags":[], "media":[], "url":{ "urls":[{ "indices":[0,22], "url":"http://t.co/ukKxj5OaSc", "display_url":"scalapuzzlers.com", "expanded_url":"http://scalapuzzlers.com" }] }, "urls":[], "user_mentions":[], "description":{ "urls":[] } }, "favourites_count":0, "follow_request_sent":false, "following":true, "followers_count":378, "friends_count":20, "geo_enabled":false, "has_extended_profile":false, "id":573048915, "id_str":"573048915", "is_translation_enabled":false, "is_translator":false, "lang":"en", "listed_count":15, "location":"", "muting":false, "name":"Scala Puzzlers", "notifications":false, "profile_background_color":"C0DEED", "profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile":false, "profile_image_url":"http://pbs.twimg.com/profile_images/2210992592/sp_normal.png", "profile_image_url_https":"https://pbs.twimg.com/profile_images/2210992592/sp_normal.png", "profile_link_color":"0084B4", "profile_sidebar_border_color":"C0DEED", "profile_sidebar_fill_color":"DDEEF6", "profile_text_color":"333333", "profile_use_background_image":true, "protected":false, "screen_name":"ScalaPuzzlers", "show_all_inline_media":false, "status":{ "contributors":[], "created_at":"Mon Mar 30 13:37:46 +0100 2015", "entities":{ "hashtags":[], "media":[], "urls":[{ "indices":[21,43], "url":"http://t.co/hsrHnAxW2I", "display_url":"scalapuzzlers.com", "expanded_url":"http://scalapuzzlers.com/" }], "user_mentions":[{ "id":11453482, "id_str":"11453482", "indices":[3,19], "name":"Zongheng Yang", "screen_name":"ConcreteVitamin" },{ "id":17712257, "id_str":"17712257", "indices":[143,144], "name":"Reynold Xin", "screen_name":"rxin" }] }, "favorite_count":0, "favorited":false, "id":582522103167094784, "id_str":"582522103167094784", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":2, "retweeted":false, "retweeted_status":{ "contributors":[], "created_at":"Mon Mar 30 00:01:35 +0100 2015", "entities":{ "hashtags":[], "media":[], "urls":[{ "indices":[0,22], "url":"http://t.co/hsrHnAxW2I", "display_url":"scalapuzzlers.com", "expanded_url":"http://scalapuzzlers.com/" }], "user_mentions":[{ "id":17712257, "id_str":"17712257", "indices":[126,131], "name":"Reynold Xin", "screen_name":"rxin" }] }, "favorite_count":2, "favorited":false, "id":582316704673447937, "id_str":"582316704673447937", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":2, "retweeted":false, "source":"Hootsuite", "text":"http://t.co/hsrHnAxW2I is quite good & indeed surprising! Would love to see a variant on Scala performance gotchas :) /cc @rxin?", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "source":"Twitter Web Client", "text":"RT @ConcreteVitamin: http://t.co/hsrHnAxW2I is quite good & indeed surprising! Would love to see a variant on Scala performance gotchas :) \u2026", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "statuses_count":44, "time_zone":"Atlantic Time (Canada)", "url":"http://t.co/ukKxj5OaSc", "utc_offset":-10800, "verified":false },{ "blocked_by":false, "blocking":false, "contributors_enabled":false, "created_at":"Sun Aug 16 14:05:09 +0100 2015", "default_profile":true, "default_profile_image":false, "description":"The most exciting Scala event of the year!", "entities":{ "hashtags":[], "media":[], "url":{ "urls":[{ "indices":[0,23], "url":"https://t.co/7WqZMYNtQT", "display_url":"scala.world", "expanded_url":"https://scala.world/" }] }, "urls":[], "user_mentions":[], "description":{ "urls":[] } }, "favourites_count":340, "follow_request_sent":false, "following":true, "followers_count":452, "friends_count":136, "geo_enabled":false, "has_extended_profile":false, "id":3425836427, "id_str":"3425836427", "is_translation_enabled":false, "is_translator":false, "lang":"en", "listed_count":17, "location":"Penrith, England", "muting":false, "name":"Scala World", "notifications":false, "profile_background_color":"C0DEED", "profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile":false, "profile_image_url":"http://pbs.twimg.com/profile_images/632902788217970688/rf0GE2M1_normal.png", "profile_image_url_https":"https://pbs.twimg.com/profile_images/632902788217970688/rf0GE2M1_normal.png", "profile_link_color":"0084B4", "profile_sidebar_border_color":"C0DEED", "profile_sidebar_fill_color":"DDEEF6", "profile_text_color":"333333", "profile_use_background_image":true, "protected":false, "screen_name":"scalaworldconf", "show_all_inline_media":false, "status":{ "contributors":[], "created_at":"Thu Oct 08 08:18:33 +0100 2015", "entities":{ "hashtags":[], "media":[], "urls":[{ "indices":[58,80], "url":"http://t.co/b2CHs9euKe", "display_url":"cdn.makeagif.com/media/10-08-20\u2026", "expanded_url":"http://cdn.makeagif.com/media/10-08-2015/05tcpi.gif" }], "user_mentions":[{ "id":21311342, "id_str":"21311342", "indices":[26,37], "name":"Paul Phillips", "screen_name":"extempore2" }] }, "favorite_count":2, "favorited":false, "id":652020237617917952, "id_str":"652020237617917952", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":0, "retweeted":false, "source":"Twitter Web Client", "text":"Here's a sneak preview of @extempore2's Scala World talk.\nhttp://t.co/b2CHs9euKe", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "statuses_count":200, "url":"https://t.co/7WqZMYNtQT", "verified":false },{ "blocked_by":false, "blocking":false, "contributors_enabled":false, "created_at":"Thu May 12 22:01:50 +0100 2011", "default_profile":false, "default_profile_image":false, "description":"Tech Lead by day, Mozilla Representative Mentor and Freelance Web Developer by night.", "entities":{ "hashtags":[], "media":[], "url":{ "urls":[{ "indices":[0,22], "url":"http://t.co/0j6CAUcqKp", "display_url":"alexlakatos.com", "expanded_url":"http://alexlakatos.com" }] }, "urls":[], "user_mentions":[], "description":{ "urls":[] } }, "favourites_count":183, "follow_request_sent":false, "following":true, "followers_count":544, "friends_count":323, "geo_enabled":true, "has_extended_profile":true, "id":297636217, "id_str":"297636217", "is_translation_enabled":false, "is_translator":false, "lang":"en", "listed_count":37, "location":"London, England", "muting":false, "name":"Alex Lakatos", "notifications":false, "profile_background_color":"000000", "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/635626850/uygvubn5einvv79plu4l.png", "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/635626850/uygvubn5einvv79plu4l.png", "profile_background_tile":false, "profile_banner_url":"https://pbs.twimg.com/profile_banners/297636217/1393085844", "profile_image_url":"http://pbs.twimg.com/profile_images/488462714268692480/s0fwq3m4_normal.jpeg", "profile_image_url_https":"https://pbs.twimg.com/profile_images/488462714268692480/s0fwq3m4_normal.jpeg", "profile_link_color":"ABB8C2", "profile_sidebar_border_color":"222224", "profile_sidebar_fill_color":"1F1918", "profile_text_color":"474247", "profile_use_background_image":true, "protected":false, "screen_name":"lakatos88", "show_all_inline_media":false, "status":{ "contributors":[], "created_at":"Thu Oct 08 07:22:10 +0100 2015", "entities":{ "hashtags":[], "media":[], "urls":[], "user_mentions":[] }, "favorite_count":0, "favorited":false, "id":652006049248055296, "id_str":"652006049248055296", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":0, "retweeted":false, "source":"Twitter for Android", "text":"I wonder what Power I'll get... http://t.co/Pm4Rsk5YD7", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "statuses_count":1522, "time_zone":"Bucharest", "url":"http://t.co/0j6CAUcqKp", "utc_offset":10800, "verified":false },{ "blocked_by":false, "blocking":false, "contributors_enabled":false, "created_at":"Sun Jun 01 09:18:53 +0100 2014", "default_profile":false, "default_profile_image":false, "description":"Better Scala Play Lift Akka Jobs", "entities":{ "hashtags":[], "media":[], "url":{ "urls":[{ "indices":[0,22], "url":"http://t.co/8DWx5AZUl1", "display_url":"scalajobs.org", "expanded_url":"http://scalajobs.org" }] }, "urls":[], "user_mentions":[], "description":{ "urls":[] } }, "favourites_count":25, "follow_request_sent":false, "following":true, "followers_count":400, "friends_count":911, "geo_enabled":false, "has_extended_profile":false, "id":2539089865, "id_str":"2539089865", "is_translation_enabled":false, "is_translator":false, "lang":"tr", "listed_count":14, "location":"", "muting":false, "name":"ScalaJobs", "notifications":false, "profile_background_color":"C0DEED", "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/473016900687908864/6Jf-4esJ.png", "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/473016900687908864/6Jf-4esJ.png", "profile_background_tile":true, "profile_banner_url":"https://pbs.twimg.com/profile_banners/2539089865/1401611075", "profile_image_url":"http://pbs.twimg.com/profile_images/473016425884307456/j_Iz_Sbb_normal.png", "profile_image_url_https":"https://pbs.twimg.com/profile_images/473016425884307456/j_Iz_Sbb_normal.png", "profile_link_color":"0084B4", "profile_sidebar_border_color":"FFFFFF", "profile_sidebar_fill_color":"DDEEF6", "profile_text_color":"333333", "profile_use_background_image":true, "protected":false, "screen_name":"scalajobsorg", "show_all_inline_media":false, "status":{ "contributors":[], "created_at":"Wed Oct 07 19:50:34 +0100 2015", "entities":{ "hashtags":[{ "text":"scala", "indices":[71,77] },{ "text":"java", "indices":[78,83] },{ "text":"jobs", "indices":[84,89] },{ "text":"hiring", "indices":[90,97] },{ "text":"germany", "indices":[98,106] },{ "text":"JavaEE", "indices":[107,114] }], "media":[], "urls":[{ "indices":[47,69], "url":"http://t.co/LhmhhZ6FbB", "display_url":"scalajobs.org/jobs/30/senior\u2026", "expanded_url":"http://scalajobs.org/jobs/30/senior-java-scala-developer-ytrail/" }], "user_mentions":[] }, "favorite_count":0, "favorited":false, "id":651832001314615296, "id_str":"651832001314615296", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":2, "retweeted":false, "source":"Twitter Web Client", "text":"Hiring Senior Java / Scala Developer at Ytrail\nhttp://t.co/LhmhhZ6FbB\n\n#scala #java #jobs #hiring #germany #JavaEE http://t.co/jH2O5SgvWS", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "statuses_count":28, "url":"http://t.co/8DWx5AZUl1", "verified":false },{ "blocked_by":false, "blocking":false, "contributors_enabled":false, "created_at":"Mon May 31 20:30:31 +0100 2010", "default_profile":true, "default_profile_image":false, "description":"M&A and Strategy Consultant, Startup Mentor. I create innovative business models. Founder/CEO", "entities":{ "hashtags":[], "media":[], "urls":[], "user_mentions":[], "description":{ "urls":[] } }, "favourites_count":5, "follow_request_sent":false, "following":true, "followers_count":1097, "friends_count":1103, "geo_enabled":true, "has_extended_profile":false, "id":150371060, "id_str":"150371060", "is_translation_enabled":false, "is_translator":false, "lang":"en", "listed_count":10, "location":"London", "muting":false, "name":"Stefano Campana", "notifications":false, "profile_background_color":"C0DEED", "profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile":false, "profile_image_url":"http://pbs.twimg.com/profile_images/520564270786809857/yf95Wy07_normal.jpeg", "profile_image_url_https":"https://pbs.twimg.com/profile_images/520564270786809857/yf95Wy07_normal.jpeg", "profile_link_color":"0084B4", "profile_sidebar_border_color":"C0DEED", "profile_sidebar_fill_color":"DDEEF6", "profile_text_color":"333333", "profile_use_background_image":true, "protected":false, "screen_name":"campanastefano", "show_all_inline_media":false, "status":{ "contributors":[], "created_at":"Tue Aug 11 13:56:13 +0100 2015", "entities":{ "hashtags":[{ "text":"gbbf", "indices":[63,68] },{ "text":"beerfestival", "indices":[69,82] }], "media":[], "urls":[{ "indices":[84,107], "url":"https://t.co/byk6XxMY0g", "display_url":"happence.com/andywithacamer\u2026", "expanded_url":"https://www.happence.com/andywithacamera/great-british-beer-festival-open-at-london-olympia" }], "user_mentions":[{ "id":3182353361, "id_str":"3182353361", "indices":[112,124], "name":"happence", "screen_name":"happenceapp" }] }, "favorite_count":0, "favorited":false, "id":631086717576060928, "id_str":"631086717576060928", "is_quote_status":false, "lang":"en", "possibly_sensitive":false, "scopes":{ }, "retweet_count":0, "retweeted":false, "source":"Twitter for Android", "text":"Now live 'Great British Beer Festival Opens At London Olympia' #gbbf #beerfestival https://t.co/byk6XxMY0g via @happenceapp", "truncated":false, "withheld_copyright":false, "withheld_in_countries":[] }, "statuses_count":53, "time_zone":"Rome", "utc_offset":7200, "verified":false }], "next_cursor":1505237162178665432, "previous_cursor":0 } ================================================ FILE: src/test/resources/twitter/rest/savedsearches/create.json ================================================ { "created_at": "Tue Jun 15 09:37:24 +0000 2010", "id": 9569704, "id_str": "9569704", "name": "@twitterapi", "position": null, "query": "@twitterapi" } ================================================ FILE: src/test/resources/twitter/rest/savedsearches/destroy.json ================================================ { "created_at": "Tue Jun 15 09:37:24 +0000 2010", "id": 9569704, "id_str": "9569704", "name": "@twitterapi", "position": null, "query": "@twitterapi" } ================================================ FILE: src/test/resources/twitter/rest/savedsearches/list.json ================================================ [ { "created_at": "Tue Jun 15 09:37:24 +0000 2010", "id": 9569704, "id_str": "9569704", "name": "@twitterapi", "position": null, "query": "@twitterapi" }, { "created_at": "Tue Jun 15 09:38:04 +0000 2010", "id": 9569730, "id_str": "9569730", "name": "@twitter OR twitterapi OR \"twitter api\" OR \"@anywhere\"", "position": null, "query": "@twitter OR twitterapi OR \"twitter api\" OR \"@anywhere\"" } ] ================================================ FILE: src/test/resources/twitter/rest/savedsearches/show.json ================================================ { "created_at": "Tue Jun 15 09:37:24 +0000 2010", "id": 9569704, "id_str": "9569704", "name": "@twitterapi", "position": null, "query": "@twitterapi" } ================================================ FILE: src/test/resources/twitter/rest/search/tweets.json ================================================ { "statuses": [ { "metadata": { "result_type": "recent", "iso_language_code": "ru" }, "created_at": "Sun Oct 25 10:22:13 +0000 2015", "id": 658227054874382336, "id_str": "658227054874382336", "text": "\u0447\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u043d\u0435 \u043d\u0440\u0430\u0432\u044f\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438 #scala", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 9377422, "id_str": "9377422", "name": "\u041a\u043b\u0430\u0441\u0441\u0438\u043a", "screen_name": "classx", "location": "Israel", "description": "Co-founder of Topixoft, founder of TarTar, podcaster.", "url": "http:\/\/t.co\/LhJUYujJMZ", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/LhJUYujJMZ", "expanded_url": "http:\/\/about.me\/classx", "display_url": "about.me\/classx", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 429, "friends_count": 97, "listed_count": 28, "created_at": "Thu Oct 11 13:21:06 +0000 2007", "favourites_count": 188, "utc_offset": 7200, "time_zone": "Jerusalem", "geo_enabled": false, "verified": false, "statuses_count": 9081, "lang": "ru", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "022330", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/521582250186395649\/ybLVCU_R_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/521582250186395649\/ybLVCU_R_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/9377422\/1391610764", "profile_link_color": "0084B4", "profile_sidebar_border_color": "A8C7F7", "profile_sidebar_fill_color": "C0DFEC", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [ { "text": "scala", "indices": [ 57, 63 ] } ], "symbols": [], "user_mentions": [], "urls": [] }, "favorited": false, "retweeted": false, "lang": "ru" }, { "metadata": { "iso_language_code": "en", "result_type": "recent" }, "created_at": "Sun Oct 25 10:13:30 +0000 2015", "id": 658224858933927940, "id_str": "658224858933927940", "text": "RT @ScalaAcademy: \u201c#Scala: Arrays are not (that much of) a special case\u201d https:\/\/t.co\/SqcXLNyx3H | #Java", "source": "\u003ca href=\"http:\/\/not.yet\/\" rel=\"nofollow\"\u003efinal one kk\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2942356560, "id_str": "2942356560", "name": "Java", "screen_name": "retweetjava", "location": "", "description": "Hey, I retweet #Java related tweets. Follow us and maybe you'll learn something new! Questions\/concerns? Contact @jdf221 or @Jordanb844", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 2883, "friends_count": 19, "listed_count": 2757, "created_at": "Thu Dec 25 02:07:45 +0000 2014", "favourites_count": 62453, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 167794, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "022330", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/547942714675712000\/Kr9dDPXJ_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/547942714675712000\/Kr9dDPXJ_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "A8C7F7", "profile_sidebar_fill_color": "C0DFEC", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "metadata": { "iso_language_code": "en", "result_type": "recent" }, "created_at": "Sun Oct 25 07:47:01 +0000 2015", "id": 658187995024109569, "id_str": "658187995024109569", "text": "\u201c#Scala: Arrays are not (that much of) a special case\u201d https:\/\/t.co\/SqcXLNyx3H | #Java", "source": "\u003ca href=\"http:\/\/bufferapp.com\" rel=\"nofollow\"\u003eBuffer\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2600538973, "id_str": "2600538973", "name": "Scala Academy", "screen_name": "ScalaAcademy", "location": "", "description": "Live Interactive Scala Training Online!\ninfo@scalaacademy.com", "url": "http:\/\/t.co\/EopXLzpmhB", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/EopXLzpmhB", "expanded_url": "http:\/\/www.scala-academy.com\/", "display_url": "scala-academy.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 143, "friends_count": 190, "listed_count": 22, "created_at": "Wed Jul 02 21:51:01 +0000 2014", "favourites_count": 103, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 429, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/489702099534352384\/JYeeaPg4_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/489702099534352384\/JYeeaPg4_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/2600538973\/1443610793", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 1, "favorite_count": 0, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 1, 7 ] }, { "text": "Java", "indices": [ 81, 86 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/SqcXLNyx3H", "expanded_url": "http:\/\/buff.ly\/1G1SVXJ", "display_url": "buff.ly\/1G1SVXJ", "indices": [ 55, 78 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 1, "favorite_count": 0, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 19, 25 ] }, { "text": "Java", "indices": [ 99, 104 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "ScalaAcademy", "name": "Scala Academy", "id": 2600538973, "id_str": "2600538973", "indices": [ 3, 16 ] } ], "urls": [ { "url": "https:\/\/t.co\/SqcXLNyx3H", "expanded_url": "http:\/\/buff.ly\/1G1SVXJ", "display_url": "buff.ly\/1G1SVXJ", "indices": [ 73, 96 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "metadata": { "iso_language_code": "en", "result_type": "recent" }, "created_at": "Sun Oct 25 10:12:20 +0000 2015", "id": 658224567039717376, "id_str": "658224567039717376", "text": "RT @ManningBooks: Hey #LambdaWorld! Save 39% on #fp, #java, #scala, and other books with code ctwlambdaw at https:\/\/t.co\/OdkWpwUDeg #mannin\u2026", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 14908048, "id_str": "14908048", "name": "Sr.Software Engineer", "screen_name": "dmkavanagh", "location": "...over an Irish rainbow", "description": "Software Developer for 35 years currently involved in Java\/Java EE, Apache Camel, Service Mix, ActiveMQ, Blueprint", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 844, "friends_count": 2003, "listed_count": 208, "created_at": "Mon May 26 11:34:34 +0000 2008", "favourites_count": 26276, "utc_offset": -14400, "time_zone": "Eastern Time (US & Canada)", "geo_enabled": false, "verified": false, "statuses_count": 22244, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "ACDED6", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/3229442079\/800b5f79bd5ad9c586ce5c2de8dadbed_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/3229442079\/800b5f79bd5ad9c586ce5c2de8dadbed_normal.jpeg", "profile_link_color": "038544", "profile_sidebar_border_color": "EEEEEE", "profile_sidebar_fill_color": "F6F6F6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "metadata": { "iso_language_code": "en", "result_type": "recent" }, "created_at": "Sun Oct 25 10:00:10 +0000 2015", "id": 658221505948442625, "id_str": "658221505948442625", "text": "Hey #LambdaWorld! Save 39% on #fp, #java, #scala, and other books with code ctwlambdaw at https:\/\/t.co\/OdkWpwUDeg #manningbooks", "source": "\u003ca href=\"https:\/\/about.twitter.com\/products\/tweetdeck\" rel=\"nofollow\"\u003eTweetDeck\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 24914741, "id_str": "24914741", "name": "Manning Publications", "screen_name": "ManningBooks", "location": "Shelter Island, United States", "description": "Follow Manning Publications on Twitter and get exclusive discounts, product announcements, author news, and great content.", "url": "http:\/\/t.co\/hoWlwoEP88", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/hoWlwoEP88", "expanded_url": "http:\/\/www.manning.com", "display_url": "manning.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 13036, "friends_count": 882, "listed_count": 1114, "created_at": "Tue Mar 17 17:13:25 +0000 2009", "favourites_count": 1596, "utc_offset": -14400, "time_zone": "Eastern Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 20053, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "ACDED6", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/386363365\/uglyguy_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/386363365\/uglyguy_normal.jpg", "profile_link_color": "038543", "profile_sidebar_border_color": "EEEEEE", "profile_sidebar_fill_color": "F6F6F6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 1, "favorite_count": 1, "entities": { "hashtags": [ { "text": "LambdaWorld", "indices": [ 4, 16 ] }, { "text": "fp", "indices": [ 30, 33 ] }, { "text": "java", "indices": [ 35, 40 ] }, { "text": "scala", "indices": [ 42, 48 ] }, { "text": "manningbooks", "indices": [ 114, 127 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/OdkWpwUDeg", "expanded_url": "http:\/\/manning.com", "display_url": "manning.com", "indices": [ 90, 113 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 1, "favorite_count": 0, "entities": { "hashtags": [ { "text": "LambdaWorld", "indices": [ 22, 34 ] }, { "text": "fp", "indices": [ 48, 51 ] }, { "text": "java", "indices": [ 53, 58 ] }, { "text": "scala", "indices": [ 60, 66 ] }, { "text": "manningbooks", "indices": [ 132, 140 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "ManningBooks", "name": "Manning Publications", "id": 24914741, "id_str": "24914741", "indices": [ 3, 16 ] } ], "urls": [ { "url": "https:\/\/t.co\/OdkWpwUDeg", "expanded_url": "http:\/\/manning.com", "display_url": "manning.com", "indices": [ 108, 131 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "metadata": { "iso_language_code": "sv", "result_type": "recent" }, "created_at": "Sun Oct 25 10:11:06 +0000 2015", "id": 658224254136266752, "id_str": "658224254136266752", "text": "RT @inoxcrom66: Grotesco p\u00e5 scala \u00e4r l\u00e4tt det roligaste jag sett! #sthlm #grotesco #scala", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2829569412, "id_str": "2829569412", "name": "Lena Ahlstedt", "screen_name": "AhlstedtLena", "location": "Stockholm ", "description": "Specialpedagogik,Diktberoende, L\u00e4rarf\u00f6rbundet, Forskning ,utveckling, Nyfiken ,Helhetssyn ,Musik g\u00e4ller i alla l\u00e4gen..Orden \u00e4r mina egna.G\u00e5tt med 2014", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 746, "friends_count": 2019, "listed_count": 15, "created_at": "Wed Sep 24 09:52:42 +0000 2014", "favourites_count": 193, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 2284, "lang": "sv", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/516293991663284224\/PfpToqSG_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/516293991663284224\/PfpToqSG_normal.jpeg", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "metadata": { "iso_language_code": "sv", "result_type": "recent" }, "created_at": "Sat Sep 26 20:21:30 +0000 2015", "id": 647868621352513537, "id_str": "647868621352513537", "text": "Grotesco p\u00e5 scala \u00e4r l\u00e4tt det roligaste jag sett! #sthlm #grotesco #scala", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 360092133, "id_str": "360092133", "name": "Joakim Karlsson", "screen_name": "inoxcrom66", "location": "Sweden", "description": "Arbetar som coach inom skolans v\u00e4rld d\u00e4r jag fr\u00e4mst utf\u00f6r kartl\u00e4ggningar, r\u00e5dgiver samt modellhandleder d\u00e4r h\u00f6gre m\u00e5luppfyllelse samt inkludering \u00e4r m\u00e5len!", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 474, "friends_count": 1018, "listed_count": 7, "created_at": "Mon Aug 22 17:34:27 +0000 2011", "favourites_count": 1188, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 5360, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/3028538656\/0744f020227938a4513fb65931279954_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/3028538656\/0744f020227938a4513fb65931279954_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 1, "favorite_count": 2, "entities": { "hashtags": [ { "text": "sthlm", "indices": [ 50, 56 ] }, { "text": "grotesco", "indices": [ 57, 66 ] }, { "text": "scala", "indices": [ 67, 73 ] } ], "symbols": [], "user_mentions": [], "urls": [] }, "favorited": false, "retweeted": false, "lang": "sv" }, "is_quote_status": false, "retweet_count": 1, "favorite_count": 0, "entities": { "hashtags": [ { "text": "sthlm", "indices": [ 66, 72 ] }, { "text": "grotesco", "indices": [ 73, 82 ] }, { "text": "scala", "indices": [ 83, 89 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "inoxcrom66", "name": "Joakim Karlsson", "id": 360092133, "id_str": "360092133", "indices": [ 3, 14 ] } ], "urls": [] }, "favorited": false, "retweeted": false, "lang": "sv" }, { "metadata": { "iso_language_code": "und", "result_type": "recent" }, "created_at": "Sun Oct 25 10:10:07 +0000 2015", "id": 658224007532146689, "id_str": "658224007532146689", "text": "@PiLu975 mass\u00ed,un #pezzo,na #scala,fai tu..", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": 658223568560484352, "in_reply_to_status_id_str": "658223568560484352", "in_reply_to_user_id": 847497841, "in_reply_to_user_id_str": "847497841", "in_reply_to_screen_name": "PiLu975", "user": { "id": 2742164776, "id_str": "2742164776", "name": "\u27a1IO,ROBIROBOT\u27a1", "screen_name": "robirobot74", "location": "STOCAZZO ", "description": "BIONICO", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 999, "friends_count": 536, "listed_count": 15, "created_at": "Wed Aug 13 22:11:29 +0000 2014", "favourites_count": 40902, "utc_offset": 3600, "time_zone": "Ljubljana", "geo_enabled": false, "verified": false, "statuses_count": 34209, "lang": "it", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "000000", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/581585418942038016\/pWGN3SUe_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/581585418942038016\/pWGN3SUe_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/2742164776\/1420286493", "profile_link_color": "DD2E44", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "000000", "profile_text_color": "000000", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 1, "entities": { "hashtags": [ { "text": "pezzo", "indices": [ 18, 24 ] }, { "text": "scala", "indices": [ 28, 34 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "PiLu975", "name": "#ercica", "id": 847497841, "id_str": "847497841", "indices": [ 0, 8 ] } ], "urls": [] }, "favorited": false, "retweeted": false, "lang": "und" }, { "metadata": { "iso_language_code": "en", "result_type": "recent" }, "created_at": "Sun Oct 25 10:04:18 +0000 2015", "id": 658222545196437504, "id_str": "658222545196437504", "text": "RT @cvogt: Need #Slick 2 -> 3 migration example? Just upgraded #ensime-server. https:\/\/t.co\/ixPHEeFYpL cc @fommil #scala", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 6526632, "id_str": "6526632", "name": "Sam Halliday", "screen_name": "fommil", "location": "London", "description": "Scala, Java, Big Data, R&D, Mathematics, Leadership", "url": "http:\/\/t.co\/cuoDY9MRMI", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/cuoDY9MRMI", "expanded_url": "http:\/\/github.com\/fommil", "display_url": "github.com\/fommil", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 504, "friends_count": 186, "listed_count": 44, "created_at": "Sat Jun 02 17:54:55 +0000 2007", "favourites_count": 2199, "utc_offset": 0, "time_zone": "Europe\/London", "geo_enabled": true, "verified": false, "statuses_count": 1840, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/494912315976736768\/x9VVsrs2_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/494912315976736768\/x9VVsrs2_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/6526632\/1363946877", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "metadata": { "iso_language_code": "en", "result_type": "recent" }, "created_at": "Sun Oct 25 01:55:18 +0000 2015", "id": 658099484866564097, "id_str": "658099484866564097", "text": "Need #Slick 2 -> 3 migration example? Just upgraded #ensime-server. https:\/\/t.co\/ixPHEeFYpL cc @fommil #scala", "source": "\u003ca href=\"https:\/\/about.twitter.com\/products\/tweetdeck\" rel=\"nofollow\"\u003eTweetDeck\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 315265842, "id_str": "315265842", "name": "Christopher Vogt", "screen_name": "cvogt", "location": "NYC", "description": "Software Engineer at @xdotai \/ Scala Slick developer", "url": "https:\/\/t.co\/iOgSCN2TH8", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/iOgSCN2TH8", "expanded_url": "https:\/\/github.com\/cvogt\/compossible", "display_url": "github.com\/cvogt\/compossi\u2026", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 748, "friends_count": 40, "listed_count": 27, "created_at": "Sat Jun 11 15:42:41 +0000 2011", "favourites_count": 105, "utc_offset": 3600, "time_zone": "Berlin", "geo_enabled": false, "verified": false, "statuses_count": 681, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "000000", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme14\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme14\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/542684298621358080\/sTwaAI0k_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/542684298621358080\/sTwaAI0k_normal.jpeg", "profile_link_color": "3B94D9", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "000000", "profile_text_color": "000000", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 7, "favorite_count": 10, "entities": { "hashtags": [ { "text": "Slick", "indices": [ 5, 11 ] }, { "text": "ensime", "indices": [ 55, 62 ] }, { "text": "scala", "indices": [ 107, 113 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "fommil", "name": "Sam Halliday", "id": 6526632, "id_str": "6526632", "indices": [ 98, 105 ] } ], "urls": [ { "url": "https:\/\/t.co\/ixPHEeFYpL", "expanded_url": "https:\/\/github.com\/ensime\/ensime-server\/pull\/1119", "display_url": "github.com\/ensime\/ensime-\u2026", "indices": [ 71, 94 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 7, "favorite_count": 0, "entities": { "hashtags": [ { "text": "Slick", "indices": [ 16, 22 ] }, { "text": "ensime", "indices": [ 66, 73 ] }, { "text": "scala", "indices": [ 118, 124 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "cvogt", "name": "Christopher Vogt", "id": 315265842, "id_str": "315265842", "indices": [ 3, 9 ] }, { "screen_name": "fommil", "name": "Sam Halliday", "id": 6526632, "id_str": "6526632", "indices": [ 109, 116 ] } ], "urls": [ { "url": "https:\/\/t.co\/ixPHEeFYpL", "expanded_url": "https:\/\/github.com\/ensime\/ensime-server\/pull\/1119", "display_url": "github.com\/ensime\/ensime-\u2026", "indices": [ 82, 105 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "metadata": { "iso_language_code": "en", "result_type": "recent" }, "created_at": "Sun Oct 25 10:00:10 +0000 2015", "id": 658221505948442625, "id_str": "658221505948442625", "text": "Hey #LambdaWorld! Save 39% on #fp, #java, #scala, and other books with code ctwlambdaw at https:\/\/t.co\/OdkWpwUDeg #manningbooks", "source": "\u003ca href=\"https:\/\/about.twitter.com\/products\/tweetdeck\" rel=\"nofollow\"\u003eTweetDeck\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 24914741, "id_str": "24914741", "name": "Manning Publications", "screen_name": "ManningBooks", "location": "Shelter Island, United States", "description": "Follow Manning Publications on Twitter and get exclusive discounts, product announcements, author news, and great content.", "url": "http:\/\/t.co\/hoWlwoEP88", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/hoWlwoEP88", "expanded_url": "http:\/\/www.manning.com", "display_url": "manning.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 13036, "friends_count": 882, "listed_count": 1114, "created_at": "Tue Mar 17 17:13:25 +0000 2009", "favourites_count": 1596, "utc_offset": -14400, "time_zone": "Eastern Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 20053, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "ACDED6", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/386363365\/uglyguy_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/386363365\/uglyguy_normal.jpg", "profile_link_color": "038543", "profile_sidebar_border_color": "EEEEEE", "profile_sidebar_fill_color": "F6F6F6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 1, "favorite_count": 1, "entities": { "hashtags": [ { "text": "LambdaWorld", "indices": [ 4, 16 ] }, { "text": "fp", "indices": [ 30, 33 ] }, { "text": "java", "indices": [ 35, 40 ] }, { "text": "scala", "indices": [ 42, 48 ] }, { "text": "manningbooks", "indices": [ 114, 127 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/OdkWpwUDeg", "expanded_url": "http:\/\/manning.com", "display_url": "manning.com", "indices": [ 90, 113 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "metadata": { "iso_language_code": "en", "result_type": "recent" }, "created_at": "Sun Oct 25 09:50:27 +0000 2015", "id": 658219058169409536, "id_str": "658219058169409536", "text": "We Won! How #Scala Conquered the Big Data World https:\/\/t.co\/cC10FT52gk via @siah", "source": "\u003ca href=\"http:\/\/stackoverflow.com\/questions\/tagged\/scala\" rel=\"nofollow\"\u003eBestScala\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 1243555766, "id_str": "1243555766", "name": "ScalaFact", "screen_name": "ScalaFact", "location": "", "description": "Daily Scala tweets.", "url": "http:\/\/t.co\/Ckal8yqLIg", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/Ckal8yqLIg", "expanded_url": "http:\/\/stackoverflow.com\/questions\/tagged\/scala", "display_url": "stackoverflow.com\/questions\/tagg\u2026", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 1717, "friends_count": 187, "listed_count": 220, "created_at": "Tue Mar 05 11:56:10 +0000 2013", "favourites_count": 44, "utc_offset": 10800, "time_zone": "Baghdad", "geo_enabled": false, "verified": false, "statuses_count": 4368, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/3341837871\/935c3136c5e25db90658931fbc2bc59e_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/3341837871\/935c3136c5e25db90658931fbc2bc59e_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 12, 18 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "siah", "name": "Mark Faridani", "id": 5082531, "id_str": "5082531", "indices": [ 76, 81 ] } ], "urls": [ { "url": "https:\/\/t.co\/cC10FT52gk", "expanded_url": "http:\/\/gettopical.com\/scala\/85a8e074bafaa037c860872f8bcebf41?src=twitter", "display_url": "gettopical.com\/scala\/85a8e074\u2026", "indices": [ 48, 71 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "metadata": { "iso_language_code": "en", "result_type": "recent" }, "created_at": "Sun Oct 25 09:47:56 +0000 2015", "id": 658218424691249152, "id_str": "658218424691249152", "text": "Just published #shapeless 2.2.5 for #Scala 2.12.0-M3 ... JVM only until Scala.js supports 2.12.0-M3.", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 29444566, "id_str": "29444566", "name": "Miles Sabin", "screen_name": "milessabin", "location": "Brighton, UK", "description": "I do stuff with Scala. Partner at _.underscore. Type astronaut and shapeless hacker.", "url": "http:\/\/t.co\/wvSQ6p9vWL", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/wvSQ6p9vWL", "expanded_url": "http:\/\/milessabin.com\/blog", "display_url": "milessabin.com\/blog", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 5002, "friends_count": 262, "listed_count": 336, "created_at": "Tue Apr 07 13:15:40 +0000 2009", "favourites_count": 6532, "utc_offset": 0, "time_zone": "London", "geo_enabled": true, "verified": false, "statuses_count": 14970, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "E0E0E0", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/566725281516236800\/A97aW1Pg_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/566725281516236800\/A97aW1Pg_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/29444566\/1398457582", "profile_link_color": "A24545", "profile_sidebar_border_color": "999999", "profile_sidebar_fill_color": "F0F0F0", "profile_text_color": "555555", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [ { "text": "shapeless", "indices": [ 15, 25 ] }, { "text": "Scala", "indices": [ 36, 42 ] } ], "symbols": [], "user_mentions": [], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" }, { "metadata": { "iso_language_code": "en", "result_type": "recent" }, "created_at": "Sun Oct 25 09:47:36 +0000 2015", "id": 658218341287489536, "id_str": "658218341287489536", "text": "RT @fommil: #scala #slick once again has a #freesoftware MSSQL driver, plus a new Oracle one! https:\/\/t.co\/fesRHsjccM @fsf", "source": "\u003ca href=\"http:\/\/www.myplume.com\/\" rel=\"nofollow\"\u003ePlume\u00a0for\u00a0Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2152063228, "id_str": "2152063228", "name": "Timo Rantalaiho", "screen_name": "timorantalaiho", "location": "Helsinki", "description": "Programmer and consultant working for @ReaktorNow . I do everything from UI to persistent storages, and currently dig functional style, not much TDD\/BDD anymore", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 249, "friends_count": 286, "listed_count": 71, "created_at": "Fri Oct 25 04:42:48 +0000 2013", "favourites_count": 1513, "utc_offset": 7200, "time_zone": "Helsinki", "geo_enabled": false, "verified": false, "statuses_count": 2684, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/378800000103278048\/66ea25370f210d08f2e77b03199bd7b5.jpeg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/378800000103278048\/66ea25370f210d08f2e77b03199bd7b5.jpeg", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/378800000644351016\/193c68598e64f3391facf9774e53d0f2_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/378800000644351016\/193c68598e64f3391facf9774e53d0f2_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/2152063228\/1382678015", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "metadata": { "iso_language_code": "en", "result_type": "recent" }, "created_at": "Sat Oct 24 18:54:46 +0000 2015", "id": 657993652233482240, "id_str": "657993652233482240", "text": "#scala #slick once again has a #freesoftware MSSQL driver, plus a new Oracle one! https:\/\/t.co\/fesRHsjccM @fsf", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 6526632, "id_str": "6526632", "name": "Sam Halliday", "screen_name": "fommil", "location": "London", "description": "Scala, Java, Big Data, R&D, Mathematics, Leadership", "url": "http:\/\/t.co\/cuoDY9MRMI", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/cuoDY9MRMI", "expanded_url": "http:\/\/github.com\/fommil", "display_url": "github.com\/fommil", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 504, "friends_count": 186, "listed_count": 44, "created_at": "Sat Jun 02 17:54:55 +0000 2007", "favourites_count": 2199, "utc_offset": 0, "time_zone": "Europe\/London", "geo_enabled": true, "verified": false, "statuses_count": 1840, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/494912315976736768\/x9VVsrs2_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/494912315976736768\/x9VVsrs2_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/6526632\/1363946877", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 6, "favorite_count": 12, "entities": { "hashtags": [ { "text": "scala", "indices": [ 0, 6 ] }, { "text": "slick", "indices": [ 7, 13 ] }, { "text": "freesoftware", "indices": [ 31, 44 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "fsf", "name": "Free Software Fndn.", "id": 14662473, "id_str": "14662473", "indices": [ 106, 110 ] } ], "urls": [ { "url": "https:\/\/t.co\/fesRHsjccM", "expanded_url": "https:\/\/github.com\/smootoo\/freeslick", "display_url": "github.com\/smootoo\/freesl\u2026", "indices": [ 82, 105 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 6, "favorite_count": 0, "entities": { "hashtags": [ { "text": "scala", "indices": [ 12, 18 ] }, { "text": "slick", "indices": [ 19, 25 ] }, { "text": "freesoftware", "indices": [ 43, 56 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "fommil", "name": "Sam Halliday", "id": 6526632, "id_str": "6526632", "indices": [ 3, 10 ] }, { "screen_name": "fsf", "name": "Free Software Fndn.", "id": 14662473, "id_str": "14662473", "indices": [ 118, 122 ] } ], "urls": [ { "url": "https:\/\/t.co\/fesRHsjccM", "expanded_url": "https:\/\/github.com\/smootoo\/freeslick", "display_url": "github.com\/smootoo\/freesl\u2026", "indices": [ 94, 117 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "metadata": { "iso_language_code": "en", "result_type": "recent" }, "created_at": "Sun Oct 25 09:37:33 +0000 2015", "id": 658215813103636482, "id_str": "658215813103636482", "text": "RT @cvogt: Need #Slick 2 -> 3 migration example? Just upgraded #ensime-server. https:\/\/t.co\/ixPHEeFYpL cc @fommil #scala", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 60093, "id_str": "60093", "name": "Richard Dallaway", "screen_name": "d6y", "location": "Brighton, UK", "description": "Scala at Underscore Consulting; author of Essential Slick, Lift Cookbook. Hobbies: Exoplanets.", "url": "http:\/\/t.co\/bsVxyMHdFt", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/bsVxyMHdFt", "expanded_url": "http:\/\/richard.dallaway.com", "display_url": "richard.dallaway.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 783, "friends_count": 311, "listed_count": 81, "created_at": "Tue Dec 12 11:00:51 +0000 2006", "favourites_count": 1264, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 5445, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "EDECE9", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme3\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme3\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/378800000600224854\/68e0b03f6a64590a3c22637714546600_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/378800000600224854\/68e0b03f6a64590a3c22637714546600_normal.jpeg", "profile_link_color": "088253", "profile_sidebar_border_color": "D3D2CF", "profile_sidebar_fill_color": "E3E2DE", "profile_text_color": "634047", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "metadata": { "iso_language_code": "en", "result_type": "recent" }, "created_at": "Sun Oct 25 01:55:18 +0000 2015", "id": 658099484866564097, "id_str": "658099484866564097", "text": "Need #Slick 2 -> 3 migration example? Just upgraded #ensime-server. https:\/\/t.co\/ixPHEeFYpL cc @fommil #scala", "source": "\u003ca href=\"https:\/\/about.twitter.com\/products\/tweetdeck\" rel=\"nofollow\"\u003eTweetDeck\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 315265842, "id_str": "315265842", "name": "Christopher Vogt", "screen_name": "cvogt", "location": "NYC", "description": "Software Engineer at @xdotai \/ Scala Slick developer", "url": "https:\/\/t.co\/iOgSCN2TH8", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/iOgSCN2TH8", "expanded_url": "https:\/\/github.com\/cvogt\/compossible", "display_url": "github.com\/cvogt\/compossi\u2026", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 748, "friends_count": 40, "listed_count": 27, "created_at": "Sat Jun 11 15:42:41 +0000 2011", "favourites_count": 105, "utc_offset": 3600, "time_zone": "Berlin", "geo_enabled": false, "verified": false, "statuses_count": 681, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "000000", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme14\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme14\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/542684298621358080\/sTwaAI0k_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/542684298621358080\/sTwaAI0k_normal.jpeg", "profile_link_color": "3B94D9", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "000000", "profile_text_color": "000000", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 7, "favorite_count": 10, "entities": { "hashtags": [ { "text": "Slick", "indices": [ 5, 11 ] }, { "text": "ensime", "indices": [ 55, 62 ] }, { "text": "scala", "indices": [ 107, 113 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "fommil", "name": "Sam Halliday", "id": 6526632, "id_str": "6526632", "indices": [ 98, 105 ] } ], "urls": [ { "url": "https:\/\/t.co\/ixPHEeFYpL", "expanded_url": "https:\/\/github.com\/ensime\/ensime-server\/pull\/1119", "display_url": "github.com\/ensime\/ensime-\u2026", "indices": [ 71, 94 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 7, "favorite_count": 0, "entities": { "hashtags": [ { "text": "Slick", "indices": [ 16, 22 ] }, { "text": "ensime", "indices": [ 66, 73 ] }, { "text": "scala", "indices": [ 118, 124 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "cvogt", "name": "Christopher Vogt", "id": 315265842, "id_str": "315265842", "indices": [ 3, 9 ] }, { "screen_name": "fommil", "name": "Sam Halliday", "id": 6526632, "id_str": "6526632", "indices": [ 109, 116 ] } ], "urls": [ { "url": "https:\/\/t.co\/ixPHEeFYpL", "expanded_url": "https:\/\/github.com\/ensime\/ensime-server\/pull\/1119", "display_url": "github.com\/ensime\/ensime-\u2026", "indices": [ 82, 105 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "metadata": { "iso_language_code": "en", "result_type": "recent" }, "created_at": "Sun Oct 25 09:09:03 +0000 2015", "id": 658208641204539392, "id_str": "658208641204539392", "text": "\u201c#Scala is a very expressive language. And yet it lets you express your ideas with very few lines of code.\u201d https:\/\/t.co\/mVbfZF0GOw", "source": "\u003ca href=\"http:\/\/bufferapp.com\" rel=\"nofollow\"\u003eBuffer\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2600538973, "id_str": "2600538973", "name": "Scala Academy", "screen_name": "ScalaAcademy", "location": "", "description": "Live Interactive Scala Training Online!\ninfo@scalaacademy.com", "url": "http:\/\/t.co\/EopXLzpmhB", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/EopXLzpmhB", "expanded_url": "http:\/\/www.scala-academy.com\/", "display_url": "scala-academy.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 143, "friends_count": 190, "listed_count": 22, "created_at": "Wed Jul 02 21:51:01 +0000 2014", "favourites_count": 103, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 429, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/489702099534352384\/JYeeaPg4_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/489702099534352384\/JYeeaPg4_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/2600538973\/1443610793", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 1, 7 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/mVbfZF0GOw", "expanded_url": "http:\/\/buff.ly\/1LrzUKo", "display_url": "buff.ly\/1LrzUKo", "indices": [ 108, 131 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "metadata": { "iso_language_code": "es", "result_type": "recent" }, "created_at": "Sun Oct 25 09:00:31 +0000 2015", "id": 658206491455807489, "id_str": "658206491455807489", "text": "Bajo la protecci\u00f3n del gran maestro Leonardo \ud83c\udfa8\u2764\n#goodmorning #buongiorno #scala #leonardodavinci\u2026 https:\/\/t.co\/hb40sZtGu9", "source": "\u003ca href=\"http:\/\/instagram.com\" rel=\"nofollow\"\u003eInstagram\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 132919802, "id_str": "132919802", "name": "Annie C", "screen_name": "AnnieC_art", "location": "Milano, Italia ", "description": "Made in Spain. 1990. Live in Milano. Artist. Music is my passion. Wanderlust.\nSorridi sempre alla vita! Art Historian.\nInstagram @annielawanderlust", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 1005, "friends_count": 1103, "listed_count": 24, "created_at": "Wed Apr 14 14:39:28 +0000 2010", "favourites_count": 1380, "utc_offset": 0, "time_zone": "Casablanca", "geo_enabled": true, "verified": false, "statuses_count": 43746, "lang": "es", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "FF6699", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/378800000046453051\/038e57fcff57e320e7eae07121e6dea0.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/378800000046453051\/038e57fcff57e320e7eae07121e6dea0.png", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/647035348778897408\/5hcLjhQh_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/647035348778897408\/5hcLjhQh_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/132919802\/1433168260", "profile_link_color": "B40B43", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "E5507E", "profile_text_color": "362720", "profile_use_background_image": true, "has_extended_profile": true, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": { "type": "Point", "coordinates": [ 45.466736, 9.189618 ] }, "coordinates": { "type": "Point", "coordinates": [ 9.189618, 45.466736 ] }, "place": { "id": "1ea588c12abd39d7", "url": "https:\/\/api.twitter.com\/1.1\/geo\/id\/1ea588c12abd39d7.json", "place_type": "city", "name": "Milan", "full_name": "Milan, Lombardy", "country_code": "IT", "country": "Italia", "contained_within": [], "bounding_box": { "type": "Polygon", "coordinates": [ [ [ 9.040628, 45.3867262 ], [ 9.2780451, 45.3867262 ], [ 9.2780451, 45.5359644 ], [ 9.040628, 45.5359644 ] ] ] }, "attributes": {} }, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [ { "text": "goodmorning", "indices": [ 48, 60 ] }, { "text": "buongiorno", "indices": [ 61, 72 ] }, { "text": "scala", "indices": [ 73, 79 ] }, { "text": "leonardodavinci", "indices": [ 80, 96 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/hb40sZtGu9", "expanded_url": "https:\/\/instagram.com\/p\/9QThHtoZ52\/", "display_url": "instagram.com\/p\/9QThHtoZ52\/", "indices": [ 98, 121 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "es" }, { "metadata": { "iso_language_code": "en", "result_type": "recent" }, "created_at": "Sun Oct 25 08:44:24 +0000 2015", "id": 658202436184707073, "id_str": "658202436184707073", "text": "RT @fommil: #scala #slick once again has a #freesoftware MSSQL driver, plus a new Oracle one! https:\/\/t.co\/fesRHsjccM @fsf", "source": "\u003ca href=\"http:\/\/twitter.com\/#!\/download\/ipad\" rel=\"nofollow\"\u003eTwitter for iPad\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 1464559968, "id_str": "1464559968", "name": "Filippo Rottoli", "screen_name": "FilHippo", "location": "", "description": "Software Engineer with a strong interest for innovative ICT technologies, passionate about #BigData, #FastData, #HTAP, #CloudComputing and #WebProgramming", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 118, "friends_count": 471, "listed_count": 135, "created_at": "Tue May 28 12:41:43 +0000 2013", "favourites_count": 409, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 3419, "lang": "it", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/441562694420676608\/x8gB9h_N_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/441562694420676608\/x8gB9h_N_normal.jpeg", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "metadata": { "iso_language_code": "en", "result_type": "recent" }, "created_at": "Sat Oct 24 18:54:46 +0000 2015", "id": 657993652233482240, "id_str": "657993652233482240", "text": "#scala #slick once again has a #freesoftware MSSQL driver, plus a new Oracle one! https:\/\/t.co\/fesRHsjccM @fsf", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 6526632, "id_str": "6526632", "name": "Sam Halliday", "screen_name": "fommil", "location": "London", "description": "Scala, Java, Big Data, R&D, Mathematics, Leadership", "url": "http:\/\/t.co\/cuoDY9MRMI", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/cuoDY9MRMI", "expanded_url": "http:\/\/github.com\/fommil", "display_url": "github.com\/fommil", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 504, "friends_count": 186, "listed_count": 44, "created_at": "Sat Jun 02 17:54:55 +0000 2007", "favourites_count": 2199, "utc_offset": 0, "time_zone": "Europe\/London", "geo_enabled": true, "verified": false, "statuses_count": 1840, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/494912315976736768\/x9VVsrs2_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/494912315976736768\/x9VVsrs2_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/6526632\/1363946877", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 6, "favorite_count": 12, "entities": { "hashtags": [ { "text": "scala", "indices": [ 0, 6 ] }, { "text": "slick", "indices": [ 7, 13 ] }, { "text": "freesoftware", "indices": [ 31, 44 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "fsf", "name": "Free Software Fndn.", "id": 14662473, "id_str": "14662473", "indices": [ 106, 110 ] } ], "urls": [ { "url": "https:\/\/t.co\/fesRHsjccM", "expanded_url": "https:\/\/github.com\/smootoo\/freeslick", "display_url": "github.com\/smootoo\/freesl\u2026", "indices": [ 82, 105 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 6, "favorite_count": 0, "entities": { "hashtags": [ { "text": "scala", "indices": [ 12, 18 ] }, { "text": "slick", "indices": [ 19, 25 ] }, { "text": "freesoftware", "indices": [ 43, 56 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "fommil", "name": "Sam Halliday", "id": 6526632, "id_str": "6526632", "indices": [ 3, 10 ] }, { "screen_name": "fsf", "name": "Free Software Fndn.", "id": 14662473, "id_str": "14662473", "indices": [ 118, 122 ] } ], "urls": [ { "url": "https:\/\/t.co\/fesRHsjccM", "expanded_url": "https:\/\/github.com\/smootoo\/freeslick", "display_url": "github.com\/smootoo\/freesl\u2026", "indices": [ 94, 117 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "metadata": { "iso_language_code": "en", "result_type": "recent" }, "created_at": "Sun Oct 25 08:35:21 +0000 2015", "id": 658200158442790912, "id_str": "658200158442790912", "text": "Senior Backend Developer at relayr (Berlin, Germany) https:\/\/t.co\/matf795QNq #scala", "source": "\u003ca href=\"https:\/\/careers.stackoverflow.com\" rel=\"nofollow\"\u003eCareers 2.0 bot\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 190626981, "id_str": "190626981", "name": "Stack Overflow Jobs", "screen_name": "StackDevJobs", "location": "", "description": "Stack Overflow Careers is the official careers platform of Stack Overflow, the #1 Q&A site built by programmers, for programmers.", "url": "http:\/\/t.co\/sG1zqXgzNq", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/sG1zqXgzNq", "expanded_url": "http:\/\/careers.stackoverflow.com\/", "display_url": "careers.stackoverflow.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 11333, "friends_count": 327, "listed_count": 845, "created_at": "Tue Sep 14 12:53:24 +0000 2010", "favourites_count": 391, "utc_offset": -14400, "time_zone": "Eastern Time (US & Canada)", "geo_enabled": false, "verified": false, "statuses_count": 71723, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "FBFBFB", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/148752680\/xe55b7d4c9f2811fad54fc85d6d45f80.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/148752680\/xe55b7d4c9f2811fad54fc85d6d45f80.png", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/643779014268579840\/bRJStj7A_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/643779014268579840\/bRJStj7A_normal.png", "profile_link_color": "F48024", "profile_sidebar_border_color": "EBEBEB", "profile_sidebar_fill_color": "E9E9E9", "profile_text_color": "666666", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 1, "entities": { "hashtags": [ { "text": "scala", "indices": [ 77, 83 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/matf795QNq", "expanded_url": "http:\/\/careers.stackoverflow.com\/jobs\/101069\/senior-backend-developer-relayr", "display_url": "careers.stackoverflow.com\/jobs\/101069\/se\u2026", "indices": [ 53, 76 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" } ], "search_metadata": { "completed_in": 0.062, "max_id": 658227054874382336, "max_id_str": "658227054874382336", "next_results": "?max_id=658200158442790911&q=%23scala&include_entities=1&result_type=mixed", "query": "%23scala", "refresh_url": "?since_id=658227054874382336&q=%23scala&result_type=mixed&include_entities=1", "count": 15, "since_id": 0, "since_id_str": "0" } } ================================================ FILE: src/test/resources/twitter/rest/statuses/destroy.json ================================================ { "created_at": "Wed Sep 30 16:34:55 +0000 2015", "id": 649261149893074944, "id_str": "649261149893074944", "text": "This is a test", "source": "\u003ca href=\"http:\/\/danielasfregola.com\/\" rel=\"nofollow\"\u003escala-twitter-tutorial\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 132, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 187, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" } ================================================ FILE: src/test/resources/twitter/rest/statuses/direct_message.json ================================================ { "created_at": "Wed Sep 30 16:34:55 +0000 2015", "id": 649261149893074944, "id_str": "649261149893074944", "text": "This is a test", "source": "\u003ca href=\"http:\/\/danielasfregola.com\/\" rel=\"nofollow\"\u003escala-twitter-tutorial\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 132, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 187, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" } ================================================ FILE: src/test/resources/twitter/rest/statuses/home_timeline.json ================================================ [ { "created_at": "Tue Sep 29 15:48:20 +0000 2015", "id": 648887037152620544, "id_str": "648887037152620544", "text": "Just finished my \"daily git\" slides for tonight using @decksetapp\nEspecially with the crazy 75% discount, is really a no-brainer to get.", "source": "\u003ca href=\"http:\/\/itunes.apple.com\/us\/app\/twitter\/id409789998?mt=12\" rel=\"nofollow\"\u003eTwitter for Mac\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 15229928, "id_str": "15229928", "name": "Gabriele Petronella", "screen_name": "gabro27", "location": "Milano", "description": "professional nerd, functional programming enthusiast, building awesome things in scala at buildo.io", "url": "http:\/\/t.co\/LLVcnQBRC5", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/LLVcnQBRC5", "expanded_url": "http:\/\/buildo.io", "display_url": "buildo.io", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 258, "friends_count": 168, "listed_count": 20, "created_at": "Wed Jun 25 11:34:01 +0000 2008", "favourites_count": 380, "utc_offset": -7200, "time_zone": "Greenland", "geo_enabled": true, "verified": false, "statuses_count": 3812, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": true, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/640286453612834816\/GFSorOIB_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/640286453612834816\/GFSorOIB_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/15229928\/1410509742", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": true, "default_profile": true, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "decksetapp", "name": "Deckset", "id": 2251684044, "id_str": "2251684044", "indices": [ 54, 65 ] } ], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" }, { "created_at": "Tue Sep 29 15:44:28 +0000 2015", "id": 648886067014311936, "id_str": "648886067014311936", "text": "I hate busses.", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 15679174, "id_str": "15679174", "name": "Luca Spiller", "screen_name": "lucaspiller", "location": "Rome, Italy", "description": "I build the web. Rails, Erlang, JS \/ Coffee, Android. Made in England.", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 270, "friends_count": 247, "listed_count": 26, "created_at": "Thu Jul 31 19:24:50 +0000 2008", "favourites_count": 1435, "utc_offset": 7200, "time_zone": "Rome", "geo_enabled": true, "verified": false, "statuses_count": 10448, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "709397", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/378800000579608625\/3647a8476ce3efd33152be280cfe9a16_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/378800000579608625\/3647a8476ce3efd33152be280cfe9a16_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/15679174\/1392649205", "profile_link_color": "FF3300", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" }, { "created_at": "Tue Sep 29 15:44:23 +0000 2015", "id": 648886043832401920, "id_str": "648886043832401920", "text": "RT @decksetapp: \ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.c\u2026", "source": "\u003ca href=\"http:\/\/itunes.apple.com\/us\/app\/twitter\/id409789998?mt=12\" rel=\"nofollow\"\u003eTwitter for Mac\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 15229928, "id_str": "15229928", "name": "Gabriele Petronella", "screen_name": "gabro27", "location": "Milano", "description": "professional nerd, functional programming enthusiast, building awesome things in scala at buildo.io", "url": "http:\/\/t.co\/LLVcnQBRC5", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/LLVcnQBRC5", "expanded_url": "http:\/\/buildo.io", "display_url": "buildo.io", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 258, "friends_count": 168, "listed_count": 20, "created_at": "Wed Jun 25 11:34:01 +0000 2008", "favourites_count": 380, "utc_offset": -7200, "time_zone": "Greenland", "geo_enabled": true, "verified": false, "statuses_count": 3812, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": true, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/640286453612834816\/GFSorOIB_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/640286453612834816\/GFSorOIB_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/15229928\/1410509742", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": true, "default_profile": true, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Tue Sep 29 14:27:18 +0000 2015", "id": 648866645855879168, "id_str": "648866645855879168", "text": "\ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.co\/hIdTA3v2zE", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2251684044, "id_str": "2251684044", "name": "Deckset", "screen_name": "decksetapp", "location": "Your Mac", "description": "Turn your notes into beautiful presentations.", "url": "http:\/\/t.co\/qZdruXQkI0", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/qZdruXQkI0", "expanded_url": "http:\/\/www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 1821, "friends_count": 31, "listed_count": 68, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "favourites_count": 451, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 1218, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "323740", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/2251684044\/1401122921", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 55, "favorite_count": 15, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 90, 112 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "possibly_sensitive_appealable": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 55, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "decksetapp", "name": "Deckset", "id": 2251684044, "id_str": "2251684044", "indices": [ 3, 14 ] } ], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 106, 128 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "source_user_id": 2251684044, "source_user_id_str": "2251684044" } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "source_user_id": 2251684044, "source_user_id_str": "2251684044" } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "possibly_sensitive_appealable": false, "lang": "en" }, { "created_at": "Tue Sep 29 15:44:02 +0000 2015", "id": 648885956364275719, "id_str": "648885956364275719", "text": "RT @giltene: A recording of the #HowNOTtoMeasureLatency talk I gave at #strangeloop2015. Same old title, many new slides.\nhttps:\/\/t.co\/ljj3\u2026", "source": "\u003ca href=\"http:\/\/sites.google.com\/site\/yorufukurou\/\" rel=\"nofollow\"\u003eYoruFukurou\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 16935750, "id_str": "16935750", "name": "Jamie Allen", "screen_name": "jamie_allen", "location": "Bay Area", "description": "Senior Director of Global Services for Typesafe. Noted Lambda hater. Author of Effective Akka (O'Reilly), co-author of Reactive Design Patterns (Manning)", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 3854, "friends_count": 527, "listed_count": 246, "created_at": "Thu Oct 23 21:13:35 +0000 2008", "favourites_count": 4734, "utc_offset": -14400, "time_zone": "Eastern Time (US & Canada)", "geo_enabled": false, "verified": false, "statuses_count": 19318, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/611590139702288384\/h4VNo1_p_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/611590139702288384\/h4VNo1_p_normal.jpg", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Tue Sep 29 15:43:16 +0000 2015", "id": 648885761996034049, "id_str": "648885761996034049", "text": "A recording of the #HowNOTtoMeasureLatency talk I gave at #strangeloop2015. Same old title, many new slides.\nhttps:\/\/t.co\/ljj3Qbu3GH", "source": "\u003ca href=\"http:\/\/itunes.apple.com\/us\/app\/twitter\/id409789998?mt=12\" rel=\"nofollow\"\u003eTwitter for Mac\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 15583376, "id_str": "15583376", "name": "Gil Tene", "screen_name": "giltene", "location": "Palo Alto, CA", "description": "I spend time in front of computer screens, and some behind them", "url": "http:\/\/t.co\/7yLslJTQoQ", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/7yLslJTQoQ", "expanded_url": "http:\/\/latencytipoftheday.blogspot.com\/", "display_url": "latencytipoftheday.blogspot.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 2582, "friends_count": 143, "listed_count": 103, "created_at": "Thu Jul 24 15:30:09 +0000 2008", "favourites_count": 273, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 1893, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1268016455\/Gil_Tene-White2_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1268016455\/Gil_Tene-White2_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/15583376\/1395460313", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 7, "favorite_count": 4, "entities": { "hashtags": [ { "text": "HowNOTtoMeasureLatency", "indices": [ 19, 42 ] }, { "text": "strangeloop2015", "indices": [ 58, 74 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/ljj3Qbu3GH", "expanded_url": "https:\/\/www.youtube.com\/watch?v=lJ8ydIuPFeU", "display_url": "youtube.com\/watch?v=lJ8ydI\u2026", "indices": [ 109, 132 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "possibly_sensitive_appealable": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 7, "favorite_count": 0, "entities": { "hashtags": [ { "text": "HowNOTtoMeasureLatency", "indices": [ 32, 55 ] }, { "text": "strangeloop2015", "indices": [ 71, 87 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "giltene", "name": "Gil Tene", "id": 15583376, "id_str": "15583376", "indices": [ 3, 11 ] } ], "urls": [ { "url": "https:\/\/t.co\/ljj3Qbu3GH", "expanded_url": "https:\/\/www.youtube.com\/watch?v=lJ8ydIuPFeU", "display_url": "youtube.com\/watch?v=lJ8ydI\u2026", "indices": [ 122, 140 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "possibly_sensitive_appealable": false, "lang": "en" }, { "created_at": "Tue Sep 29 15:33:11 +0000 2015", "id": 648883228414074880, "id_str": "648883228414074880", "text": "RT @adron: Somebody should start a \"clueless decisions by large corporations that decimated their reputation among developers\" blog. I'd re\u2026", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 1941471, "id_str": "1941471", "name": "Thomas Lockney", "screen_name": "tlockney", "location": "Portland, OR", "description": "Engineering manager @Nike. Distributed systems, functional programming, dogs, music, PNW.", "url": "http:\/\/t.co\/CVvC0wC3ab", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/CVvC0wC3ab", "expanded_url": "http:\/\/thomas.lockney.net", "display_url": "thomas.lockney.net", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 2418, "friends_count": 902, "listed_count": 202, "created_at": "Thu Mar 22 21:47:22 +0000 2007", "favourites_count": 27377, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 24724, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "1A1B1F", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme9\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme9\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/378800000865054419\/5hX4bJOQ_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/378800000865054419\/5hX4bJOQ_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/1941471\/1386911688", "profile_link_color": "2FC2EF", "profile_sidebar_border_color": "181A1E", "profile_sidebar_fill_color": "252429", "profile_text_color": "666666", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Tue Sep 29 13:48:31 +0000 2015", "id": 648856887706939393, "id_str": "648856887706939393", "text": "Somebody should start a \"clueless decisions by large corporations that decimated their reputation among developers\" blog. I'd read it. :D", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 16063910, "id_str": "16063910", "name": "\u039bdr\u00f8n", "screen_name": "adron", "location": "Portland, OR", "description": "Coder, recon, metal, messenger, cyclist, economist, livability, urban love rural passion and whatever...", "url": "http:\/\/t.co\/IPcSay6b8O", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/IPcSay6b8O", "expanded_url": "http:\/\/compositecode.com", "display_url": "compositecode.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 6453, "friends_count": 3182, "listed_count": 465, "created_at": "Sun Aug 31 05:56:04 +0000 2008", "favourites_count": 14715, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 54154, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "000000", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme14\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme14\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/435895803299647488\/LV-z_KjQ_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/435895803299647488\/LV-z_KjQ_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/16063910\/1398268936", "profile_link_color": "3B94D9", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "000000", "profile_text_color": "000000", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": { "id": "c458763765cea500", "url": "https:\/\/api.twitter.com\/1.1\/geo\/id\/c458763765cea500.json", "place_type": "city", "name": "Krakow", "full_name": "Krakow, Lesser Poland", "country_code": "PL", "country": "Polska", "contained_within": [], "bounding_box": { "type": "Polygon", "coordinates": [ [ [ 19.79343, 49.967561 ], [ 20.2179622, 49.967561 ], [ 20.2179622, 50.124963 ], [ 19.79343, 50.124963 ] ] ] }, "attributes": {} }, "contributors": null, "is_quote_status": false, "retweet_count": 4, "favorite_count": 4, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 4, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "adron", "name": "\u039bdr\u00f8n", "id": 16063910, "id_str": "16063910", "indices": [ 3, 9 ] } ], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" }, { "created_at": "Tue Sep 29 15:23:59 +0000 2015", "id": 648880909421182976, "id_str": "648880909421182976", "text": "Startup Spotlight: @CivisAnalytics, empowering the data-driven startup with Amazon Redshift http:\/\/t.co\/Py6aDPQpFj http:\/\/t.co\/MJZgfsQUsO", "source": "\u003ca href=\"http:\/\/adobe.com\" rel=\"nofollow\"\u003eAdobe\u00ae Social\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 168826960, "id_str": "168826960", "name": "AWS startups", "screen_name": "AWSstartups", "location": "", "description": "AWS startup updates, resources, events, & news about #AWSActivate", "url": "http:\/\/t.co\/7Oaf2nvqPa", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/7Oaf2nvqPa", "expanded_url": "http:\/\/aws.amazon.com\/start-ups\/", "display_url": "aws.amazon.com\/start-ups\/", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 58493, "friends_count": 2570, "listed_count": 921, "created_at": "Tue Jul 20 22:08:31 +0000 2010", "favourites_count": 160, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 3776, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/454338848906948608\/_zpbixV_.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/454338848906948608\/_zpbixV_.png", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/454338653334953984\/KSnQL1nk_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/454338653334953984\/KSnQL1nk_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/168826960\/1428334607", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 2, "favorite_count": 3, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "CivisAnalytics", "name": "Civis Analytics", "id": 1447417104, "id_str": "1447417104", "indices": [ 19, 34 ] } ], "urls": [ { "url": "http:\/\/t.co\/Py6aDPQpFj", "expanded_url": "http:\/\/oak.ctx.ly\/r\/3rway", "display_url": "oak.ctx.ly\/r\/3rway", "indices": [ 92, 114 ] } ], "media": [ { "id": 648880907940589568, "id_str": "648880907940589568", "indices": [ 115, 137 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQFJv3NU8AAndy9.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQFJv3NU8AAndy9.jpg", "url": "http:\/\/t.co\/MJZgfsQUsO", "display_url": "pic.twitter.com\/MJZgfsQUsO", "expanded_url": "http:\/\/twitter.com\/AWSstartups\/status\/648880909421182976\/photo\/1", "type": "photo", "sizes": { "large": { "w": 1024, "h": 512, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "medium": { "w": 600, "h": 300, "resize": "fit" }, "small": { "w": 340, "h": 170, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 648880907940589568, "id_str": "648880907940589568", "indices": [ 115, 137 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQFJv3NU8AAndy9.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQFJv3NU8AAndy9.jpg", "url": "http:\/\/t.co\/MJZgfsQUsO", "display_url": "pic.twitter.com\/MJZgfsQUsO", "expanded_url": "http:\/\/twitter.com\/AWSstartups\/status\/648880909421182976\/photo\/1", "type": "photo", "sizes": { "large": { "w": 1024, "h": 512, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "medium": { "w": 600, "h": 300, "resize": "fit" }, "small": { "w": 340, "h": 170, "resize": "fit" } } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "possibly_sensitive_appealable": false, "lang": "en" }, { "created_at": "Tue Sep 29 15:17:09 +0000 2015", "id": 648879193216917504, "id_str": "648879193216917504", "text": "Good news! #Typesafe and @DataStax Partner to Bring Reactive Data Infrastructure to Enterprises | http:\/\/t.co\/rDnd7S3AEU #cassandra #akka", "source": "\u003ca href=\"http:\/\/bufferapp.com\" rel=\"nofollow\"\u003eBuffer\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 16602164, "id_str": "16602164", "name": "Typesafe", "screen_name": "typesafe", "location": "", "description": "Typesafe Reactive Platform is a production-grade JVM runtime & toolset for building Reactive Systems. Be successful: http:\/\/t.co\/o1Bt6dQtgH", "url": "http:\/\/t.co\/bzGTwCmOGg", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/bzGTwCmOGg", "expanded_url": "http:\/\/typesafe.com", "display_url": "typesafe.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [ { "url": "http:\/\/t.co\/o1Bt6dQtgH", "expanded_url": "http:\/\/www.typesafe.com\/company\/contact", "display_url": "typesafe.com\/company\/contact", "indices": [ 117, 139 ] } ] } }, "protected": false, "followers_count": 22985, "friends_count": 180, "listed_count": 842, "created_at": "Sun Oct 05 14:50:41 +0000 2008", "favourites_count": 877, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": false, "verified": false, "statuses_count": 3620, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "53CCEC", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/526790424048828416\/b9QDtyl7_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/526790424048828416\/b9QDtyl7_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/16602164\/1422404674", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 1, "favorite_count": 0, "entities": { "hashtags": [ { "text": "Typesafe", "indices": [ 11, 20 ] }, { "text": "cassandra", "indices": [ 121, 131 ] }, { "text": "akka", "indices": [ 132, 137 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "DataStax", "name": "DataStax", "id": 132051240, "id_str": "132051240", "indices": [ 25, 34 ] } ], "urls": [ { "url": "http:\/\/t.co\/rDnd7S3AEU", "expanded_url": "http:\/\/bit.ly\/1NZ7Rr0", "display_url": "bit.ly\/1NZ7Rr0", "indices": [ 98, 120 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "possibly_sensitive_appealable": false, "lang": "en" }, { "created_at": "Tue Sep 29 15:16:32 +0000 2015", "id": 648879035741798400, "id_str": "648879035741798400", "text": "How a probabilistic reasoning system predicts the outcome of a corner kick from http:\/\/t.co\/oFvRE7bvdf http:\/\/t.co\/zytXLkyndk", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 24914741, "id_str": "24914741", "name": "Manning Publications", "screen_name": "ManningBooks", "location": "Shelter Island, United States", "description": "Follow Manning Publications on Twitter and get exclusive discounts, product announcements, author news, and great content.", "url": "http:\/\/t.co\/hoWlwoEP88", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/hoWlwoEP88", "expanded_url": "http:\/\/www.manning.com", "display_url": "manning.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 12952, "friends_count": 871, "listed_count": 1088, "created_at": "Tue Mar 17 17:13:25 +0000 2009", "favourites_count": 1527, "utc_offset": -14400, "time_zone": "Eastern Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 19670, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "ACDED6", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/386363365\/uglyguy_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/386363365\/uglyguy_normal.jpg", "profile_link_color": "038543", "profile_sidebar_border_color": "EEEEEE", "profile_sidebar_fill_color": "F6F6F6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/oFvRE7bvdf", "expanded_url": "http:\/\/manning.com\/books\/practical-probabilistic-programming", "display_url": "manning.com\/books\/practica\u2026", "indices": [ 80, 102 ] } ], "media": [ { "id": 648879035179769856, "id_str": "648879035179769856", "indices": [ 103, 125 ], "media_url": "http:\/\/pbs.twimg.com\/tweet_video_thumb\/CQFIC2oWoAAVUNK.png", "media_url_https": "https:\/\/pbs.twimg.com\/tweet_video_thumb\/CQFIC2oWoAAVUNK.png", "url": "http:\/\/t.co\/zytXLkyndk", "display_url": "pic.twitter.com\/zytXLkyndk", "expanded_url": "http:\/\/twitter.com\/ManningBooks\/status\/648879035741798400\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 900, "h": 512, "resize": "fit" }, "medium": { "w": 600, "h": 341, "resize": "fit" }, "small": { "w": 340, "h": 193, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 648879035179769856, "id_str": "648879035179769856", "indices": [ 103, 125 ], "media_url": "http:\/\/pbs.twimg.com\/tweet_video_thumb\/CQFIC2oWoAAVUNK.png", "media_url_https": "https:\/\/pbs.twimg.com\/tweet_video_thumb\/CQFIC2oWoAAVUNK.png", "url": "http:\/\/t.co\/zytXLkyndk", "display_url": "pic.twitter.com\/zytXLkyndk", "expanded_url": "http:\/\/twitter.com\/ManningBooks\/status\/648879035741798400\/photo\/1", "type": "animated_gif", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 900, "h": 512, "resize": "fit" }, "medium": { "w": 600, "h": 341, "resize": "fit" }, "small": { "w": 340, "h": 193, "resize": "fit" } }, "video_info": { "aspect_ratio": [ 225, 128 ], "variants": [ { "bitrate": 0, "content_type": "video\/mp4", "url": "https:\/\/pbs.twimg.com\/tweet_video\/CQFIC2oWoAAVUNK.mp4" } ] } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "possibly_sensitive_appealable": false, "lang": "en" }, { "created_at": "Tue Sep 29 15:01:29 +0000 2015", "id": 648875249824567296, "id_str": "648875249824567296", "text": "Download the eBook \"Description, Discovery, and Profiles\" @InfoQ @apiacademy http:\/\/t.co\/4GmQKpvN5A #DDandP http:\/\/t.co\/BDrHG8cpfj", "source": "\u003ca href=\"http:\/\/bufferapp.com\" rel=\"nofollow\"\u003eBuffer\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 1121591, "id_str": "1121591", "name": "Mike Amundsen", "screen_name": "mamund", "location": "Erlanger, KY", "description": "Director of API Architecture, API Academy at CA Technologies || Working to improve the quality and usability of information on the Web.", "url": "http:\/\/t.co\/sVYacwmB4U", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/sVYacwmB4U", "expanded_url": "http:\/\/amundsen.com\/blog\/", "display_url": "amundsen.com\/blog\/", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 7067, "friends_count": 6498, "listed_count": 390, "created_at": "Tue Mar 13 22:38:54 +0000 2007", "favourites_count": 270, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 27223, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "131516", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/511652706767740928\/nmaKGj0S.jpeg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/511652706767740928\/nmaKGj0S.jpeg", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/340449683\/madmen_icon_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/340449683\/madmen_icon_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/1121591\/1410798584", "profile_link_color": "1F3052", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "EFEFEF", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 2, "favorite_count": 1, "entities": { "hashtags": [ { "text": "DDandP", "indices": [ 100, 107 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "InfoQ", "name": "InfoQ", "id": 14073560, "id_str": "14073560", "indices": [ 58, 64 ] }, { "screen_name": "apiacademy", "name": "API Academy", "id": 628529020, "id_str": "628529020", "indices": [ 65, 76 ] } ], "urls": [ { "url": "http:\/\/t.co\/4GmQKpvN5A", "expanded_url": "http:\/\/b.mamund.com\/1MynXGo", "display_url": "b.mamund.com\/1MynXGo", "indices": [ 77, 99 ] } ], "media": [ { "id": 648875249585553408, "id_str": "648875249585553408", "indices": [ 108, 130 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQFEmgMXAAAfULX.png", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQFEmgMXAAAfULX.png", "url": "http:\/\/t.co\/BDrHG8cpfj", "display_url": "pic.twitter.com\/BDrHG8cpfj", "expanded_url": "http:\/\/twitter.com\/mamund\/status\/648875249824567296\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "medium": { "w": 583, "h": 714, "resize": "fit" }, "large": { "w": 583, "h": 714, "resize": "fit" }, "small": { "w": 340, "h": 416, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 648875249585553408, "id_str": "648875249585553408", "indices": [ 108, 130 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQFEmgMXAAAfULX.png", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQFEmgMXAAAfULX.png", "url": "http:\/\/t.co\/BDrHG8cpfj", "display_url": "pic.twitter.com\/BDrHG8cpfj", "expanded_url": "http:\/\/twitter.com\/mamund\/status\/648875249824567296\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "medium": { "w": 583, "h": 714, "resize": "fit" }, "large": { "w": 583, "h": 714, "resize": "fit" }, "small": { "w": 340, "h": 416, "resize": "fit" } } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "possibly_sensitive_appealable": false, "lang": "en" }, { "created_at": "Tue Sep 29 15:00:54 +0000 2015", "id": 648875102084427776, "id_str": "648875102084427776", "text": "Meet @Databricks at Booth 550 in #StrataHadoop World in NYC http:\/\/t.co\/jF4axxJU8j http:\/\/t.co\/fvGjyot6zu", "source": "\u003ca href=\"http:\/\/www.hubspot.com\/\" rel=\"nofollow\"\u003eHubSpot\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 1562518867, "id_str": "1562518867", "name": "Databricks", "screen_name": "databricks", "location": "", "description": "Through the Apache Spark platform, we're working to revolutionize data processing.", "url": "http:\/\/t.co\/PoQGTE0sky", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/PoQGTE0sky", "expanded_url": "http:\/\/databricks.com", "display_url": "databricks.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 9449, "friends_count": 12, "listed_count": 328, "created_at": "Tue Jul 02 07:28:36 +0000 2013", "favourites_count": 17, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": false, "verified": false, "statuses_count": 439, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/509756469000937472\/tMI4Tn2p_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/509756469000937472\/tMI4Tn2p_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [ { "text": "StrataHadoop", "indices": [ 33, 46 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "databricks", "name": "Databricks", "id": 1562518867, "id_str": "1562518867", "indices": [ 5, 16 ] } ], "urls": [ { "url": "http:\/\/t.co\/jF4axxJU8j", "expanded_url": "http:\/\/dbricks.co\/1WvvQRz", "display_url": "dbricks.co\/1WvvQRz", "indices": [ 60, 82 ] } ], "media": [ { "id": 648875101975367680, "id_str": "648875101975367680", "indices": [ 83, 105 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQFEd6TWUAAyVY0.png", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQFEd6TWUAAyVY0.png", "url": "http:\/\/t.co\/fvGjyot6zu", "display_url": "pic.twitter.com\/fvGjyot6zu", "expanded_url": "http:\/\/twitter.com\/databricks\/status\/648875102084427776\/photo\/1", "type": "photo", "sizes": { "large": { "w": 139, "h": 22, "resize": "fit" }, "small": { "w": 139, "h": 22, "resize": "fit" }, "medium": { "w": 139, "h": 22, "resize": "fit" }, "thumb": { "w": 139, "h": 22, "resize": "crop" } } } ] }, "extended_entities": { "media": [ { "id": 648875101975367680, "id_str": "648875101975367680", "indices": [ 83, 105 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQFEd6TWUAAyVY0.png", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQFEd6TWUAAyVY0.png", "url": "http:\/\/t.co\/fvGjyot6zu", "display_url": "pic.twitter.com\/fvGjyot6zu", "expanded_url": "http:\/\/twitter.com\/databricks\/status\/648875102084427776\/photo\/1", "type": "photo", "sizes": { "large": { "w": 139, "h": 22, "resize": "fit" }, "small": { "w": 139, "h": 22, "resize": "fit" }, "medium": { "w": 139, "h": 22, "resize": "fit" }, "thumb": { "w": 139, "h": 22, "resize": "crop" } } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "possibly_sensitive_appealable": false, "lang": "en" }, { "created_at": "Mon Nov 27 15:26:22 +0000 2017", "id": 935167925786480600, "id_str": "935167925786480640", "text": "RT @Disney: On March 9, be a warrior. The new trailer for A #WrinkleInTime is here. https://t.co/UBUiRZWiAc", "truncated": false, "entities": { "hashtags": [ { "text": "WrinkleInTime", "indices": [ 60, 74 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "Disney", "name": "Disney", "id": 67418441, "id_str": "67418441", "indices": [ 3, 10 ] } ], "urls": [], "media": [ { "id": 932389855874621400, "id_str": "932389855874621440", "indices": [ 84, 107 ], "media_url": "http://pbs.twimg.com/media/DPCGOwRV4AA0oya.jpg", "media_url_https": "https://pbs.twimg.com/media/DPCGOwRV4AA0oya.jpg", "url": "https://t.co/UBUiRZWiAc", "display_url": "pic.twitter.com/UBUiRZWiAc", "expanded_url": "https://twitter.com/Disney/status/932418695854305281/video/1", "type": "photo", "sizes": { "small": { "w": 680, "h": 283, "resize": "fit" }, "large": { "w": 2048, "h": 853, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "medium": { "w": 1200, "h": 500, "resize": "fit" } }, "source_status_id": 932418695854305300, "source_status_id_str": "932418695854305281", "source_user_id": 67418441, "source_user_id_str": "67418441" } ] }, "extended_entities": { "media": [ { "id": 932389855874621400, "id_str": "932389855874621440", "indices": [ 84, 107 ], "media_url": "http://pbs.twimg.com/media/DPCGOwRV4AA0oya.jpg", "media_url_https": "https://pbs.twimg.com/media/DPCGOwRV4AA0oya.jpg", "url": "https://t.co/UBUiRZWiAc", "display_url": "pic.twitter.com/UBUiRZWiAc", "expanded_url": "https://twitter.com/Disney/status/932418695854305281/video/1", "type": "video", "sizes": { "small": { "w": 680, "h": 283, "resize": "fit" }, "large": { "w": 2048, "h": 853, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "medium": { "w": 1200, "h": 500, "resize": "fit" } }, "source_status_id": 932418695854305300, "source_status_id_str": "932418695854305281", "source_user_id": 67418441, "source_user_id_str": "67418441", "video_info": { "aspect_ratio": [ 320, 133 ], "duration_millis": 144645, "variants": [ { "bitrate": 832000, "content_type": "video/mp4", "url": "https://video.twimg.com/amplify_video/932389855874621440/vid/866x360/4zQMTKefAozX5GAR.mp4" }, { "bitrate": 320000, "content_type": "video/mp4", "url": "https://video.twimg.com/amplify_video/932389855874621440/vid/432x180/UsPQIopmeg_Q3RSr.mp4" }, { "content_type": "application/x-mpegURL", "url": "https://video.twimg.com/amplify_video/932389855874621440/pl/bwoRE3FyURJd8yTl.m3u8" } ] }, "additional_media_info": { "title": "", "description": "", "embeddable": true, "monetizable": false, "source_user": { "id": 67418441, "id_str": "67418441", "name": "Disney", "screen_name": "Disney", "location": "", "description": "The official Twitter for Disney. Don’t miss a minute of the magic.", "url": "https://t.co/m5jwysh10i", "entities": { "url": { "urls": [ { "url": "https://t.co/m5jwysh10i", "expanded_url": "http://www.disney.com/", "display_url": "disney.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 5748846, "friends_count": 47, "listed_count": 13388, "created_at": "Thu Aug 20 20:40:59 +0000 2009", "favourites_count": 26, "utc_offset": -28800, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": false, "verified": true, "statuses_count": 9518, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "FCFCFC", "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/648548100672323585/vVeGkWy3.jpg", "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/648548100672323585/vVeGkWy3.jpg", "profile_background_tile": false, "profile_image_url": "http://pbs.twimg.com/profile_images/851861956591927296/ArujktQe_normal.jpg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/851861956591927296/ArujktQe_normal.jpg", "profile_banner_url": "https://pbs.twimg.com/profile_banners/67418441/1510603344", "profile_link_color": "0E5A82", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "CFE6FF", "profile_text_color": "000000", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "translator_type": "none" } } } ] }, "source": "Twitter Web Client", "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 90044663, "id_str": "90044663", "name": "Bruno Rossi", "screen_name": "bob_kkk", "location": "Sao Paulo, Brazil", "description": "", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 69, "friends_count": 32, "listed_count": 6, "created_at": "Sat Nov 14 23:21:21 +0000 2009", "favourites_count": 8, "utc_offset": -10800, "time_zone": "Greenland", "geo_enabled": true, "verified": false, "statuses_count": 344, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "000000", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme9/bg.gif", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme9/bg.gif", "profile_background_tile": false, "profile_image_url": "http://pbs.twimg.com/profile_images/1154583440/70369_1560623900_8089403_q_normal.jpg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/1154583440/70369_1560623900_8089403_q_normal.jpg", "profile_banner_url": "https://pbs.twimg.com/profile_banners/90044663/1419423391", "profile_link_color": "C2BC42", "profile_sidebar_border_color": "101202", "profile_sidebar_fill_color": "DBE6D8", "profile_text_color": "050500", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "translator_type": "none" }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Mon Nov 20 01:21:55 +0000 2017", "id": 932418695854305300, "id_str": "932418695854305281", "text": "On March 9, be a warrior. The new trailer for A #WrinkleInTime is here. https://t.co/UBUiRZWiAc", "truncated": false, "entities": { "hashtags": [ { "text": "WrinkleInTime", "indices": [ 48, 62 ] } ], "symbols": [], "user_mentions": [], "urls": [], "media": [ { "id": 932389855874621400, "id_str": "932389855874621440", "indices": [ 72, 95 ], "media_url": "http://pbs.twimg.com/media/DPCGOwRV4AA0oya.jpg", "media_url_https": "https://pbs.twimg.com/media/DPCGOwRV4AA0oya.jpg", "url": "https://t.co/UBUiRZWiAc", "display_url": "pic.twitter.com/UBUiRZWiAc", "expanded_url": "https://twitter.com/Disney/status/932418695854305281/video/1", "type": "photo", "sizes": { "small": { "w": 680, "h": 283, "resize": "fit" }, "large": { "w": 2048, "h": 853, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "medium": { "w": 1200, "h": 500, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 932389855874621400, "id_str": "932389855874621440", "indices": [ 72, 95 ], "media_url": "http://pbs.twimg.com/media/DPCGOwRV4AA0oya.jpg", "media_url_https": "https://pbs.twimg.com/media/DPCGOwRV4AA0oya.jpg", "url": "https://t.co/UBUiRZWiAc", "display_url": "pic.twitter.com/UBUiRZWiAc", "expanded_url": "https://twitter.com/Disney/status/932418695854305281/video/1", "type": "video", "sizes": { "small": { "w": 680, "h": 283, "resize": "fit" }, "large": { "w": 2048, "h": 853, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "medium": { "w": 1200, "h": 500, "resize": "fit" } }, "video_info": { "aspect_ratio": [ 320, 133 ], "duration_millis": 144645, "variants": [ { "bitrate": 832000, "content_type": "video/mp4", "url": "https://video.twimg.com/amplify_video/932389855874621440/vid/866x360/4zQMTKefAozX5GAR.mp4" }, { "bitrate": 320000, "content_type": "video/mp4", "url": "https://video.twimg.com/amplify_video/932389855874621440/vid/432x180/UsPQIopmeg_Q3RSr.mp4" }, { "content_type": "application/x-mpegURL", "url": "https://video.twimg.com/amplify_video/932389855874621440/pl/bwoRE3FyURJd8yTl.m3u8" } ] }, "additional_media_info": { "title": "", "description": "", "embeddable": true, "monetizable": false } } ] }, "source": "Media Studio", "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 67418441, "id_str": "67418441", "name": "Disney", "screen_name": "Disney", "location": "", "description": "The official Twitter for Disney. Don’t miss a minute of the magic.", "url": "https://t.co/m5jwysh10i", "entities": { "url": { "urls": [ { "url": "https://t.co/m5jwysh10i", "expanded_url": "http://www.disney.com/", "display_url": "disney.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 5748846, "friends_count": 47, "listed_count": 13388, "created_at": "Thu Aug 20 20:40:59 +0000 2009", "favourites_count": 26, "utc_offset": -28800, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": false, "verified": true, "statuses_count": 9518, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "FCFCFC", "profile_background_image_url": "http://pbs.twimg.com/profile_background_images/648548100672323585/vVeGkWy3.jpg", "profile_background_image_url_https": "https://pbs.twimg.com/profile_background_images/648548100672323585/vVeGkWy3.jpg", "profile_background_tile": false, "profile_image_url": "http://pbs.twimg.com/profile_images/851861956591927296/ArujktQe_normal.jpg", "profile_image_url_https": "https://pbs.twimg.com/profile_images/851861956591927296/ArujktQe_normal.jpg", "profile_banner_url": "https://pbs.twimg.com/profile_banners/67418441/1510603344", "profile_link_color": "0E5A82", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "CFE6FF", "profile_text_color": "000000", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "translator_type": "none" }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 1071, "favorite_count": 2968, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 1071, "favorite_count": 0, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" } ] ================================================ FILE: src/test/resources/twitter/rest/statuses/lookup.json ================================================ [ { "created_at": "Thu Apr 25 17:27:18 +0000 2013", "id": 327473909412814850, "id_str": "327473909412814850", "text": "We've updated Twitter for Mac with an easier way to share photos, retina display support, and more languages: http:\/\/t.co\/mn4RkcpaPf", "source": "\u003ca href=\"http:\/\/itunes.apple.com\/us\/app\/twitter\/id409789998?mt=12\" rel=\"nofollow\"\u003eTwitter for Mac\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 783214, "id_str": "783214", "name": "Twitter", "screen_name": "twitter", "location": "San Francisco, CA", "description": "Your official source for news, updates and tips from Twitter, Inc.\n\n\nNeed help? Visit http:\/\/t.co\/qq1HEzvnrA.", "url": "http:\/\/t.co\/5iRhy7wTgu", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/5iRhy7wTgu", "expanded_url": "http:\/\/blog.twitter.com\/", "display_url": "blog.twitter.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [ { "url": "http:\/\/t.co\/qq1HEzvnrA", "expanded_url": "http:\/\/support.twitter.com", "display_url": "support.twitter.com", "indices": [ 86, 108 ] } ] } }, "protected": false, "followers_count": 46603313, "friends_count": 139, "listed_count": 88463, "created_at": "Tue Feb 20 14:35:54 +0000 2007", "favourites_count": 73, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": true, "verified": true, "statuses_count": 2156, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "ACDED6", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/657090062\/l1uqey5sy82r9ijhke1i.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/657090062\/l1uqey5sy82r9ijhke1i.png", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/615680132565504000\/EIpgSD2K_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/615680132565504000\/EIpgSD2K_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/783214\/1436401887", "profile_link_color": "226699", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "F6F6F6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 1016, "favorite_count": 415, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/mn4RkcpaPf", "expanded_url": "http:\/\/blog.twitter.com\/2013\/04\/new-improvements-to-twitter-for-mac.html", "display_url": "blog.twitter.com\/2013\/04\/new-im\u2026", "indices": [ 110, 132 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" } ] ================================================ FILE: src/test/resources/twitter/rest/statuses/lookup_extended.json ================================================ [ { "created_at": "Wed Jan 24 10:28:00 +0000 2018", "id": 956111334898270209, "id_str": "956111334898270209", "full_text": "Today's Neu Pick comes in the form of 'Favourite', the brilliantly catchy new single from Irish trio @PillowQueeens. https:\/\/t.co\/2JAI4GV3Qe https:\/\/t.co\/p67oJLeZ76", "truncated": false, "display_text_range": [ 0, 140 ], "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "PillowQueeens", "name": "Pillow Queens", "id": 795659026218491904, "id_str": "795659026218491904", "indices": [ 101, 115 ] } ], "urls": [ { "url": "https:\/\/t.co\/2JAI4GV3Qe", "expanded_url": "http:\/\/diymag.com\/2018\/01\/24\/pillow-queens-favourite-neu-pick-premiere-listen", "display_url": "diymag.com\/2018\/01\/24\/pil\u2026", "indices": [ 117, 140 ] } ], "media": [ { "id": 956108706302844930, "id_str": "956108706302844930", "indices": [ 141, 164 ], "media_url": "http:\/\/pbs.twimg.com\/media\/DUTHzX3W4AIqF-a.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/DUTHzX3W4AIqF-a.jpg", "url": "https:\/\/t.co\/p67oJLeZ76", "display_url": "pic.twitter.com\/p67oJLeZ76", "expanded_url": "https:\/\/twitter.com\/diymagazine\/status\/956111334898270209\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "medium": { "w": 1200, "h": 800, "resize": "fit" }, "small": { "w": 680, "h": 453, "resize": "fit" }, "large": { "w": 1500, "h": 1000, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 956108706302844930, "id_str": "956108706302844930", "indices": [ 141, 164 ], "media_url": "http:\/\/pbs.twimg.com\/media\/DUTHzX3W4AIqF-a.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/DUTHzX3W4AIqF-a.jpg", "url": "https:\/\/t.co\/p67oJLeZ76", "display_url": "pic.twitter.com\/p67oJLeZ76", "expanded_url": "https:\/\/twitter.com\/diymagazine\/status\/956111334898270209\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "medium": { "w": 1200, "h": 800, "resize": "fit" }, "small": { "w": 680, "h": 453, "resize": "fit" }, "large": { "w": 1500, "h": 1000, "resize": "fit" } } } ] }, "source": "\u003ca href=\"https:\/\/about.twitter.com\/products\/tweetdeck\" rel=\"nofollow\"\u003eTweetDeck\u003c\/a\u003e", "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 18938807, "id_str": "18938807", "name": "DIY", "screen_name": "diymagazine", "location": "UK", "description": "Almost certainly the greatest music magazine in the world.", "url": "https:\/\/t.co\/5yaW51Rud6", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/5yaW51Rud6", "expanded_url": "http:\/\/diymag.com\/", "display_url": "diymag.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 142766, "friends_count": 2640, "listed_count": 1538, "created_at": "Tue Jan 13 14:13:13 +0000 2009", "favourites_count": 3706, "utc_offset": 0, "time_zone": "London", "geo_enabled": false, "verified": true, "statuses_count": 90609, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "FFFFFF", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/646661269\/0k07bet0tfn57xl3jb6x.jpeg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/646661269\/0k07bet0tfn57xl3jb6x.jpeg", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/550415811274223616\/3caLuhwl_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/550415811274223616\/3caLuhwl_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/18938807\/1516811354", "profile_link_color": "000000", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "EBEBEB", "profile_text_color": "222222", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "translator_type": "none" }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 17, "favorite_count": 35, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Mon Feb 12 20:03:08 +0000 2018", "id": 963141440695078912, "id_str": "963141440695078912", "full_text": "I just got a Raspberry Pi 3. What can I do with it? \n\u007b author: @michaelsoolee \u007d\nhttps:\/\/t.co\/pd7iHHjcdL", "truncated": false, "display_text_range": [ 0, 103 ], "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "michaelsoolee", "name": "Michael Lee \ud83c\udf55", "id": 21836818, "id_str": "21836818", "indices": [ 63, 77 ] } ], "urls": [ { "url": "https:\/\/t.co\/pd7iHHjcdL", "expanded_url": "https:\/\/dev.to\/michael\/i-just-got-a-raspberry-pi-3-what-can-i-do-with-it--4ne1", "display_url": "dev.to\/michael\/i-just\u2026", "indices": [ 80, 103 ] } ] }, "source": "\u003ca href=\"http:\/\/bufferapp.com\" rel=\"nofollow\"\u003eBuffer\u003c\/a\u003e", "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2735246778, "id_str": "2735246778", "name": "The Practical Dev", "screen_name": "ThePracticalDev", "location": "", "description": "Coding resources, commentary and community. Helping you become a better developer maybe. Created by @bendhalpern", "url": "https:\/\/t.co\/lhcCPP1ReQ", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/lhcCPP1ReQ", "expanded_url": "http:\/\/dev.to", "display_url": "dev.to", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 137060, "friends_count": 2253, "listed_count": 2882, "created_at": "Fri Aug 15 19:11:17 +0000 2014", "favourites_count": 41832, "utc_offset": -28800, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": false, "verified": false, "statuses_count": 14695, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "131516", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/601385812760993793\/2pxLSwZZ.jpg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/601385812760993793\/2pxLSwZZ.jpg", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/881896578633445376\/j_dhfgoj_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/881896578633445376\/j_dhfgoj_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/2735246778\/1492833420", "profile_link_color": "14BD7B", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "000000", "profile_text_color": "000000", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false, "translator_type": "none" }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 21, "favorite_count": 127, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" } ] ================================================ FILE: src/test/resources/twitter/rest/statuses/lookup_mapped.json ================================================ { "id": { "327473909412814850": { "created_at": "Thu Apr 25 17:27:18 +0000 2013", "id": 327473909412814850, "id_str": "327473909412814850", "text": "We've updated Twitter for Mac with an easier way to share photos, retina display support, and more languages: http:\/\/t.co\/mn4RkcpaPf", "source": "\u003ca href=\"http:\/\/itunes.apple.com\/us\/app\/twitter\/id409789998?mt=12\" rel=\"nofollow\"\u003eTwitter for Mac\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 783214, "id_str": "783214", "name": "Twitter", "screen_name": "twitter", "location": "San Francisco, CA", "description": "Your official source for news, updates and tips from Twitter, Inc.\n\n\nNeed help? Visit http:\/\/t.co\/qq1HEzvnrA.", "url": "http:\/\/t.co\/5iRhy7wTgu", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/5iRhy7wTgu", "expanded_url": "http:\/\/blog.twitter.com\/", "display_url": "blog.twitter.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [ { "url": "http:\/\/t.co\/qq1HEzvnrA", "expanded_url": "http:\/\/support.twitter.com", "display_url": "support.twitter.com", "indices": [ 86, 108 ] } ] } }, "protected": false, "followers_count": 46631316, "friends_count": 139, "listed_count": 88469, "created_at": "Tue Feb 20 14:35:54 +0000 2007", "favourites_count": 73, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": true, "verified": true, "statuses_count": 2158, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "ACDED6", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/657090062\/l1uqey5sy82r9ijhke1i.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/657090062\/l1uqey5sy82r9ijhke1i.png", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/615680132565504000\/EIpgSD2K_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/615680132565504000\/EIpgSD2K_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/783214\/1436401887", "profile_link_color": "226699", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "F6F6F6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 1016, "favorite_count": 415, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/mn4RkcpaPf", "expanded_url": "http:\/\/blog.twitter.com\/2013\/04\/new-improvements-to-twitter-for-mac.html", "display_url": "blog.twitter.com\/2013\/04\/new-im\u2026", "indices": [ 110, 132 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "327473909412814851": null } } ================================================ FILE: src/test/resources/twitter/rest/statuses/lookup_mapped_extended.json ================================================ { "id": { "956111334898270209": { "created_at": "Wed Jan 24 10:28:00 +0000 2018", "id": 956111334898270209, "id_str": "956111334898270209", "full_text": "Today's Neu Pick comes in the form of 'Favourite', the brilliantly catchy new single from Irish trio @PillowQueeens. https:\/\/t.co\/2JAI4GV3Qe https:\/\/t.co\/p67oJLeZ76", "truncated": false, "display_text_range": [ 0, 140 ], "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "PillowQueeens", "name": "Pillow Queens", "id": 795659026218491904, "id_str": "795659026218491904", "indices": [ 101, 115 ] } ], "urls": [ { "url": "https:\/\/t.co\/2JAI4GV3Qe", "expanded_url": "http:\/\/diymag.com\/2018\/01\/24\/pillow-queens-favourite-neu-pick-premiere-listen", "display_url": "diymag.com\/2018\/01\/24\/pil\u2026", "indices": [ 117, 140 ] } ], "media": [ { "id": 956108706302844930, "id_str": "956108706302844930", "indices": [ 141, 164 ], "media_url": "http:\/\/pbs.twimg.com\/media\/DUTHzX3W4AIqF-a.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/DUTHzX3W4AIqF-a.jpg", "url": "https:\/\/t.co\/p67oJLeZ76", "display_url": "pic.twitter.com\/p67oJLeZ76", "expanded_url": "https:\/\/twitter.com\/diymagazine\/status\/956111334898270209\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "medium": { "w": 1200, "h": 800, "resize": "fit" }, "small": { "w": 680, "h": 453, "resize": "fit" }, "large": { "w": 1500, "h": 1000, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 956108706302844930, "id_str": "956108706302844930", "indices": [ 141, 164 ], "media_url": "http:\/\/pbs.twimg.com\/media\/DUTHzX3W4AIqF-a.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/DUTHzX3W4AIqF-a.jpg", "url": "https:\/\/t.co\/p67oJLeZ76", "display_url": "pic.twitter.com\/p67oJLeZ76", "expanded_url": "https:\/\/twitter.com\/diymagazine\/status\/956111334898270209\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "medium": { "w": 1200, "h": 800, "resize": "fit" }, "small": { "w": 680, "h": 453, "resize": "fit" }, "large": { "w": 1500, "h": 1000, "resize": "fit" } } } ] }, "source": "\u003ca href=\"https:\/\/about.twitter.com\/products\/tweetdeck\" rel=\"nofollow\"\u003eTweetDeck\u003c\/a\u003e", "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 18938807, "id_str": "18938807", "name": "DIY", "screen_name": "diymagazine", "location": "UK", "description": "Almost certainly the greatest music magazine in the world.", "url": "https:\/\/t.co\/5yaW51Rud6", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/5yaW51Rud6", "expanded_url": "http:\/\/diymag.com\/", "display_url": "diymag.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 142766, "friends_count": 2640, "listed_count": 1538, "created_at": "Tue Jan 13 14:13:13 +0000 2009", "favourites_count": 3706, "utc_offset": 0, "time_zone": "London", "geo_enabled": false, "verified": true, "statuses_count": 90609, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "FFFFFF", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/646661269\/0k07bet0tfn57xl3jb6x.jpeg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/646661269\/0k07bet0tfn57xl3jb6x.jpeg", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/550415811274223616\/3caLuhwl_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/550415811274223616\/3caLuhwl_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/18938807\/1516811354", "profile_link_color": "000000", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "EBEBEB", "profile_text_color": "222222", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "translator_type": "none" }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 17, "favorite_count": 35, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, "963141440695078912L": null } } ================================================ FILE: src/test/resources/twitter/rest/statuses/mentions_timeline.json ================================================ [ { "created_at": "Tue Jul 14 09:22:51 +0000 2015", "id": 620886161964208129, "id_str": "620886161964208129", "text": "@DanielaSfregola hy scala women :D nice to meet u :D", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": 2911461333, "in_reply_to_user_id_str": "2911461333", "in_reply_to_screen_name": "DanielaSfregola", "user": { "id": 177237415, "id_str": "177237415", "name": "Qbiel", "screen_name": "SoeHokBiel", "location": "Bandung", "description": "Less Sleep Coffee More", "url": null, "entities": {"description": {"urls": []}}, "protected": false, "followers_count": 88, "friends_count": 56, "listed_count": 1, "created_at": "Wed Aug 11 16:26:31 +0000 2010", "favourites_count": 2, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 389, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "022330", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme15\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1298491494\/174474_1670288542_7944926_n_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1298491494\/174474_1670288542_7944926_n_normal.jpg", "profile_link_color": "0084B4", "profile_sidebar_border_color": "A8C7F7", "profile_sidebar_fill_color": "C0DFEC", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 1, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "DanielaSfregola", "name": "Daniela Sfregola", "id": 2911461333, "id_str": "2911461333", "indices": [ 0, 16 ] } ], "urls": [] }, "favorited": true, "retweeted": false, "lang": "en" }, { "created_at": "Wed Jul 01 09:20:38 +0000 2015", "id": 616174565232918528, "id_str": "616174565232918528", "text": "How to Create a Spray Custom Authenticator http:\/\/t.co\/tIJCpDByxs via @DanielaSfregola #Scala #HTTP", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 55290238, "id_str": "55290238", "name": "Alfredo Serafini", "screen_name": "seralf", "location": "Roma", "description": "Mi appassiona di pi\u00f9 il come del cosa. I am more passionate about the how than the what.\nhttp:\/\/t.co\/tFbjLHhACd", "url": "http:\/\/t.co\/wZBkmkueb3", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/wZBkmkueb3", "expanded_url": "http:\/\/seralf.it", "display_url": "seralf.it", "indices": [ 0, 22 ] } ] }, "description": { "urls": [ { "url": "http:\/\/t.co\/tFbjLHhACd", "expanded_url": "http:\/\/seralf.it\/hire-me", "display_url": "seralf.it\/hire-me", "indices": [ 90, 112 ] } ] } }, "protected": false, "followers_count": 388, "friends_count": 2001, "listed_count": 66, "created_at": "Thu Jul 09 16:53:20 +0000 2009", "favourites_count": 316, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 1809, "lang": "it", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C6E2EE", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme2\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme2\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/2957120738\/7c184f1138563d6c82667b62cc50942a_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/2957120738\/7c184f1138563d6c82667b62cc50942a_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/55290238\/1398231127", "profile_link_color": "447700", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DAECF4", "profile_text_color": "663B12", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 87, 93 ] }, { "text": "HTTP", "indices": [ 94, 99 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "DanielaSfregola", "name": "Daniela Sfregola", "id": 2911461333, "id_str": "2911461333", "indices": [ 70, 86 ] } ], "urls": [ { "url": "http:\/\/t.co\/tIJCpDByxs", "expanded_url": "http:\/\/wp.me\/p5uYrc-6L", "display_url": "wp.me\/p5uYrc-6L", "indices": [ 43, 65 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Wed Jul 01 08:35:28 +0000 2015", "id": 616163194638364672, "id_str": "616163194638364672", "text": "Oops! One more! https:\/\/t.co\/yJhCsyPRCI \/cc @DanielaSfregola", "source": "\u003ca href=\"https:\/\/about.twitter.com\/products\/tweetdeck\" rel=\"nofollow\"\u003eTweetDeck\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 1372082066, "id_str": "1372082066", "name": "ScalaItaly", "screen_name": "ScalaItaly", "location": "Italy", "description": "L'unica conferenza su Scala in Italia \/ The only conference on Scala in Italy - https:\/\/t.co\/zwWSedilj6", "url": "http:\/\/t.co\/zo6utSwqJY", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/zo6utSwqJY", "expanded_url": "http:\/\/scala-italy.it\/", "display_url": "scala-italy.it", "indices": [ 0, 22 ] } ] }, "description": { "urls": [ { "url": "https:\/\/t.co\/zwWSedilj6", "expanded_url": "https:\/\/vimeo.com\/channels\/932072\/133344804", "display_url": "vimeo.com\/channels\/93207\u2026", "indices": [ 80, 103 ] } ] } }, "protected": false, "followers_count": 284, "friends_count": 261, "listed_count": 19, "created_at": "Mon Apr 22 12:58:44 +0000 2013", "favourites_count": 65, "utc_offset": 7200, "time_zone": "Rome", "geo_enabled": false, "verified": false, "statuses_count": 311, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/3572618102\/a6aedc265defd9e1f2adc680d83e7fc9_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/3572618102\/a6aedc265defd9e1f2adc680d83e7fc9_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/1372082066\/1442954007", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 2, "favorite_count": 1, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "DanielaSfregola", "name": "Daniela Sfregola", "id": 2911461333, "id_str": "2911461333", "indices": [ 44, 60 ] } ], "urls": [ { "url": "https:\/\/t.co\/yJhCsyPRCI", "expanded_url": "https:\/\/vimeo.com\/channels\/932072", "display_url": "vimeo.com\/channels\/932072", "indices": [ 16, 39 ] } ] }, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Wed Jun 10 13:47:37 +0000 2015", "id": 608631606270668801, "id_str": "608631606270668801", "text": "@DanielaSfregola @MichaelPNash Enjoy!", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": 608631256788676608, "in_reply_to_status_id_str": "608631256788676608", "in_reply_to_user_id": 2911461333, "in_reply_to_user_id_str": "2911461333", "in_reply_to_screen_name": "DanielaSfregola", "user": { "id": 431984720, "id_str": "431984720", "name": "BoldRadius Solutions", "screen_name": "BoldRadius", "location": "San Francisco | Ottawa", "description": "BoldRadius is an expert consulting, training & software development firm, specializing in the Typesafe Reactive Platform: #Scala, #Akka, #PlayFramework & #Spark", "url": "http:\/\/t.co\/oCDcGzSfvA", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/oCDcGzSfvA", "expanded_url": "http:\/\/www.boldradius.com", "display_url": "boldradius.com", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 759, "friends_count": 681, "listed_count": 51, "created_at": "Thu Dec 08 22:24:52 +0000 2011", "favourites_count": 1119, "utc_offset": -10800, "time_zone": "Atlantic Time (Canada)", "geo_enabled": true, "verified": false, "statuses_count": 3681, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "232130", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/546542000\/TindrTwitterBG.jpg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/546542000\/TindrTwitterBG.jpg", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/446507388300849152\/1MTOg3Up_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/446507388300849152\/1MTOg3Up_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/431984720\/1427130287", "profile_link_color": "208096", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 2, "favorite_count": 1, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "DanielaSfregola", "name": "Daniela Sfregola", "id": 2911461333, "id_str": "2911461333", "indices": [ 0, 16 ] }, { "screen_name": "MichaelPNash", "name": "Michael Nash", "id": 24999933, "id_str": "24999933", "indices": [ 17, 30 ] } ], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" }, { "created_at": "Fri May 29 16:19:15 +0000 2015", "id": 604321111778664448, "id_str": "604321111778664448", "text": "Lambda #4 is out! Featuring - @OweinReese @DanielaSfregola @ptrelford @kmett @stuartsierra @ErlangCentral - http:\/\/t.co\/1F4XoY9grA", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 1345043875, "id_str": "1345043875", "name": "Functional Works", "screen_name": "Functionalworks", "location": "London HQ | Global reach ", "description": "Functional Programming Advocates. Providing Talent Solutions, Strategic Advice, Curated Events & Insight across Clojure, Scala, Erlang, Haskell, F#, OCaml,Swift", "url": "http:\/\/t.co\/BXwhIYmO2c", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/BXwhIYmO2c", "expanded_url": "http:\/\/functionalworks.com\/", "display_url": "functionalworks.com", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 4061, "friends_count": 360, "listed_count": 212, "created_at": "Thu Apr 11 18:46:02 +0000 2013", "favourites_count": 4557, "utc_offset": 7200, "time_zone": "Amsterdam", "geo_enabled": true, "verified": false, "statuses_count": 4027, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "131516", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme14\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme14\/bg.gif", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/439367291214364673\/M_Z9rDrf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/439367291214364673\/M_Z9rDrf_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/1345043875\/1412684063", "profile_link_color": "F52727", "profile_sidebar_border_color": "EEEEEE", "profile_sidebar_fill_color": "EFEFEF", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 4, "favorite_count": 4, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "OweinReese", "name": "Owein Reese", "id": 404119861, "id_str": "404119861", "indices": [ 30, 41 ] }, { "screen_name": "DanielaSfregola", "name": "Daniela Sfregola", "id": 2911461333, "id_str": "2911461333", "indices": [ 42, 58 ] }, { "screen_name": "ptrelford", "name": "Sean's dad", "id": 30888410, "id_str": "30888410", "indices": [ 59, 69 ] }, { "screen_name": "kmett", "name": "Edward Kmett", "id": 16781974, "id_str": "16781974", "indices": [ 70, 76 ] }, { "screen_name": "stuartsierra", "name": "Stuart Sierra", "id": 22637653, "id_str": "22637653", "indices": [ 77, 90 ] }, { "screen_name": "ErlangCentral", "name": "Erlang Central", "id": 993425858, "id_str": "993425858", "indices": [ 91, 105 ] } ], "urls": [ { "url": "http:\/\/t.co\/1F4XoY9grA", "expanded_url": "http:\/\/us10.campaign-archive2.com\/?u=30f19e2c5b9f15cfb95906716&id=da26788923&e=9489bec169", "display_url": "us10.campaign-archive2.com\/?u=30f19e2c5b9\u2026", "indices": [ 108, 130 ] } ] }, "favorited": true, "retweeted": true, "possibly_sensitive": false, "lang": "en" } ] ================================================ FILE: src/test/resources/twitter/rest/statuses/oembed.json ================================================ { "cache_age": "3153600000", "url": "https:\/\/twitter.com\/decksetapp\/statuses\/648866645855879168", "height": null, "provider_url": "https:\/\/twitter.com", "provider_name": "Twitter", "author_name": "Deckset", "version": "1.0", "author_url": "https:\/\/twitter.com\/decksetapp", "type": "rich", "html": "\u003Cblockquote class=\"twitter-tweet\" lang=\"en\"\u003E\u003Cp lang=\"en\" dir=\"ltr\"\u003E\uD83D\uDCA5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. \u003Ca href=\"http:\/\/t.co\/irHM9eIN6B\"\u003Ehttp:\/\/t.co\/irHM9eIN6B\u003C\/a\u003E \u003Ca href=\"http:\/\/t.co\/hIdTA3v2zE\"\u003Epic.twitter.com\/hIdTA3v2zE\u003C\/a\u003E\u003C\/p\u003E— Deckset (@decksetapp) \u003Ca href=\"https:\/\/twitter.com\/decksetapp\/status\/648866645855879168\"\u003ESeptember 29, 2015\u003C\/a\u003E\u003C\/blockquote\u003E\n\u003Cscript async src=\"\/\/platform.twitter.com\/widgets.js\" charset=\"utf-8\"\u003E\u003C\/script\u003E", "width": 550 } ================================================ FILE: src/test/resources/twitter/rest/statuses/retweet.json ================================================ { "created_at": "Wed Sep 30 16:34:55 +0000 2015", "id": 649261149893074944, "id_str": "649261149893074944", "text": "This is a test", "source": "\u003ca href=\"http:\/\/danielasfregola.com\/\" rel=\"nofollow\"\u003escala-twitter-tutorial\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 132, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 187, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" } ================================================ FILE: src/test/resources/twitter/rest/statuses/retweeters_ids.json ================================================ { "ids": [ 3185001906, 2864749010, 2728578117, 2390428970, 2392623769, 2298388902, 2218822532, 2294010576, 2298665443, 2295646148, 2392372830, 2489878842, 2537896318, 1456646244, 2369342556, 908315570, 134681213, 2207996772, 1323648805, 2209966914, 1377248521, 450742576, 2169915990, 2168731405, 1032613423, 1897558387, 1651460672, 552136201, 1961595428, 622040005, 1723067108, 1940180042, 1921253352, 1916881861, 1909516183, 1899472064, 1409030454, 551190078, 98585322, 1287005810, 1857413564, 1507117872, 616207096, 1707416846, 795061039, 245171204, 1671544250, 550058321, 1661133924, 302907601, 1184312352, 1360513801, 1627139449, 1633417872, 1624546278, 1549848770, 1606806666, 1286204832, 102781433, 1547689992, 1549487112, 1546030177, 1232717508, 1366161096, 1470134192, 1538866020, 1525394654, 1360382390, 1485097536, 1520331235, 1360663580, 1517720449, 62084055, 1092628730, 1362034669, 1214653182, 556802885, 364135790 ], "next_cursor": 0, "next_cursor_str": "0", "previous_cursor": 0, "previous_cursor_str": "0" } ================================================ FILE: src/test/resources/twitter/rest/statuses/retweeters_ids_stringified.json ================================================ { "ids": [ "3185001906", "2864749010", "2728578117", "2390428970", "2392623769", "2298388902", "2218822532", "2294010576", "2298665443", "2295646148", "2392372830", "2489878842", "2537896318", "1456646244", "2369342556", "908315570", "134681213", "2207996772", "1323648805", "2209966914", "1377248521", "450742576", "2169915990", "2168731405", "1032613423", "1897558387", "1651460672", "552136201", "1961595428", "622040005", "1723067108", "1940180042", "1921253352", "1916881861", "1909516183", "1899472064", "1409030454", "551190078", "98585322", "1287005810", "1857413564", "1507117872", "616207096", "1707416846", "795061039", "245171204", "1671544250", "550058321", "1661133924", "302907601", "1184312352", "1360513801", "1627139449", "1633417872", "1624546278", "1549848770", "1606806666", "1286204832", "102781433", "1547689992", "1549487112", "1546030177", "1232717508", "1366161096", "1470134192", "1538866020", "1525394654", "1360382390", "1485097536", "1520331235", "1360663580", "1517720449", "62084055", "1092628730", "1362034669", "1214653182", "556802885", "364135790" ], "next_cursor": 0, "next_cursor_str": "0", "previous_cursor": 0, "previous_cursor_str": "0" } ================================================ FILE: src/test/resources/twitter/rest/statuses/retweets.json ================================================ [ { "created_at": "Wed Sep 30 06:31:32 +0000 2015", "id": 649109302582595584, "id_str": "649109302582595584", "text": "RT @decksetapp: \ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.c\u2026", "source": "\u003ca href=\"http:\/\/tapbots.com\/tweetbot\" rel=\"nofollow\"\u003eTweetbot for i\u039fS\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 94045596, "id_str": "94045596", "name": "Ellen Shapiro", "screen_name": "designatednerd", "location": "Chicago, IL", "description": "I make apps that make your phone go beep for @VOKALmobile by day and @justhum by night. Tech here, personal nonsense over at @loudguitars.", "url": "http:\/\/t.co\/CNcfzb3sFC", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/CNcfzb3sFC", "expanded_url": "http:\/\/www.designatednerd.com", "display_url": "designatednerd.com", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 1372, "friends_count": 316, "listed_count": 91, "created_at": "Wed Dec 02 07:58:34 +0000 2009", "favourites_count": 4784, "utc_offset": -18000, "time_zone": "Central Time (US & Canada)", "geo_enabled": false, "verified": false, "statuses_count": 14237, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "709397", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/476185528774057985\/gHqyiSXW_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/476185528774057985\/gHqyiSXW_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/94045596\/1398228767", "profile_link_color": "AD3E3E", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Tue Sep 29 14:27:18 +0000 2015", "id": 648866645855879168, "id_str": "648866645855879168", "text": "\ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.co\/hIdTA3v2zE", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2251684044, "id_str": "2251684044", "name": "Deckset", "screen_name": "decksetapp", "location": "Your Mac", "description": "Turn your notes into beautiful presentations.", "url": "http:\/\/t.co\/qZdruXQkI0", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/qZdruXQkI0", "expanded_url": "http:\/\/www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 1838, "friends_count": 31, "listed_count": 67, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "favourites_count": 477, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 1222, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "323740", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/2251684044\/1401122921", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 73, "favorite_count": 28, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 90, 112 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 73, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "decksetapp", "name": "Deckset", "id": 2251684044, "id_str": "2251684044", "indices": [ 3, 14 ] } ], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 106, 128 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "source_user_id": 2251684044, "source_user_id_str": "2251684044" } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "source_user_id": 2251684044, "source_user_id_str": "2251684044" } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Wed Sep 30 04:07:31 +0000 2015", "id": 649073059345797120, "id_str": "649073059345797120", "text": "RT @decksetapp: \ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.c\u2026", "source": "\u003ca href=\"http:\/\/tapbots.com\/tweetbot\" rel=\"nofollow\"\u003eTweetbot for i\u039fS\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 55828016, "id_str": "55828016", "name": "Heesang", "screen_name": "soletheand", "location": "", "description": "\uc2a4\uc719\uc7ac\uc988\uc640 \ub9b0\ub514\ud569\uc744 \uc88b\uc544\ud558\ub294 \uacfc\ubb35\ud55c \uc6f9\uac1c\ubc1c \ub178\ub3d9\uc790.", "url": null, "entities": {"description": {"urls": []}}, "protected": false, "followers_count": 747, "friends_count": 1093, "listed_count": 29, "created_at": "Sat Jul 11 13:15:44 +0000 2009", "favourites_count": 76480, "utc_offset": 32400, "time_zone": "Seoul", "geo_enabled": false, "verified": false, "statuses_count": 34987, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C6E2EE", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme2\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme2\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/2998268211\/81c92fe5fb3a85767e4553f6916c1e6b_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/2998268211\/81c92fe5fb3a85767e4553f6916c1e6b_normal.jpeg", "profile_link_color": "1F98C7", "profile_sidebar_border_color": "C6E2EE", "profile_sidebar_fill_color": "DAECF4", "profile_text_color": "663B12", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Tue Sep 29 14:27:18 +0000 2015", "id": 648866645855879168, "id_str": "648866645855879168", "text": "\ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.co\/hIdTA3v2zE", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2251684044, "id_str": "2251684044", "name": "Deckset", "screen_name": "decksetapp", "location": "Your Mac", "description": "Turn your notes into beautiful presentations.", "url": "http:\/\/t.co\/qZdruXQkI0", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/qZdruXQkI0", "expanded_url": "http:\/\/www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 1838, "friends_count": 31, "listed_count": 67, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "favourites_count": 477, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 1222, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "323740", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/2251684044\/1401122921", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 73, "favorite_count": 28, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 90, 112 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 73, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "decksetapp", "name": "Deckset", "id": 2251684044, "id_str": "2251684044", "indices": [ 3, 14 ] } ], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 106, 128 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "source_user_id": 2251684044, "source_user_id_str": "2251684044" } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "source_user_id": 2251684044, "source_user_id_str": "2251684044" } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Wed Sep 30 01:54:33 +0000 2015", "id": 649039597586944000, "id_str": "649039597586944000", "text": "RT @decksetapp: \ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.c\u2026", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 11566092, "id_str": "11566092", "name": "TAMAYAN", "screen_name": "Gyoku", "location": "B3F", "description": "\uff3c\uff3c\\\u0669( '\u03c9' )\u0648 \/\/\uff0f\uff0f", "url": null, "entities": {"description": {"urls": []}}, "protected": false, "followers_count": 233, "friends_count": 267, "listed_count": 25, "created_at": "Thu Dec 27 13:54:50 +0000 2007", "favourites_count": 1618, "utc_offset": 32400, "time_zone": "Tokyo", "geo_enabled": false, "verified": false, "statuses_count": 17929, "lang": "ja", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "1A1B1F", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/34520193\/Speaker_A.jpg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/34520193\/Speaker_A.jpg", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/604606785782022145\/h4ePX-yO_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/604606785782022145\/h4ePX-yO_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/11566092\/1411225329", "profile_link_color": "2FC2EF", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "252429", "profile_text_color": "666666", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Tue Sep 29 14:27:18 +0000 2015", "id": 648866645855879168, "id_str": "648866645855879168", "text": "\ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.co\/hIdTA3v2zE", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2251684044, "id_str": "2251684044", "name": "Deckset", "screen_name": "decksetapp", "location": "Your Mac", "description": "Turn your notes into beautiful presentations.", "url": "http:\/\/t.co\/qZdruXQkI0", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/qZdruXQkI0", "expanded_url": "http:\/\/www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 1838, "friends_count": 31, "listed_count": 67, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "favourites_count": 477, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 1222, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "323740", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/2251684044\/1401122921", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 73, "favorite_count": 28, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 90, 112 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 73, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "decksetapp", "name": "Deckset", "id": 2251684044, "id_str": "2251684044", "indices": [ 3, 14 ] } ], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 106, 128 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "source_user_id": 2251684044, "source_user_id_str": "2251684044" } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "source_user_id": 2251684044, "source_user_id_str": "2251684044" } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Wed Sep 30 00:16:47 +0000 2015", "id": 649014996140212225, "id_str": "649014996140212225", "text": "RT @decksetapp: \ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.c\u2026", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 12583982, "id_str": "12583982", "name": "Jeff Triplett", "screen_name": "webology", "location": "Lawrence, KS", "description": "Djangonaut, developer, @revsys employee, @defnado co-founder, @DjangoCon US Chair, DSF Developer Member, and occasional runner. @djangobirthday co-conspirator.", "url": "http:\/\/t.co\/Ir0X6UGryn", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/Ir0X6UGryn", "expanded_url": "http:\/\/jefftriplett.com", "display_url": "jefftriplett.com", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 2146, "friends_count": 708, "listed_count": 95, "created_at": "Wed Jan 23 06:53:39 +0000 2008", "favourites_count": 4603, "utc_offset": -18000, "time_zone": "Central Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 13925, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "FFFFFF", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/730325544\/d2150f2fc1923173bb6ec536e6c6c3a5.jpeg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/730325544\/d2150f2fc1923173bb6ec536e6c6c3a5.jpeg", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/642449768665456641\/MhM2mhYi_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/642449768665456641\/MhM2mhYi_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/12583982\/1431286792", "profile_link_color": "81A8B8", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "CCCCCC", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Tue Sep 29 14:27:18 +0000 2015", "id": 648866645855879168, "id_str": "648866645855879168", "text": "\ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.co\/hIdTA3v2zE", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2251684044, "id_str": "2251684044", "name": "Deckset", "screen_name": "decksetapp", "location": "Your Mac", "description": "Turn your notes into beautiful presentations.", "url": "http:\/\/t.co\/qZdruXQkI0", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/qZdruXQkI0", "expanded_url": "http:\/\/www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 1838, "friends_count": 31, "listed_count": 67, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "favourites_count": 477, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 1222, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "323740", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/2251684044\/1401122921", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 73, "favorite_count": 28, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 90, 112 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 73, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "decksetapp", "name": "Deckset", "id": 2251684044, "id_str": "2251684044", "indices": [ 3, 14 ] } ], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 106, 128 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "source_user_id": 2251684044, "source_user_id_str": "2251684044" } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "source_user_id": 2251684044, "source_user_id_str": "2251684044" } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Tue Sep 29 20:53:54 +0000 2015", "id": 648963936394604548, "id_str": "648963936394604548", "text": "RT @decksetapp: \ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.c\u2026", "source": "\u003ca href=\"http:\/\/tweetlogix.com\" rel=\"nofollow\"\u003eTweetlogix\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 1211071, "id_str": "1211071", "name": "Jamie Lawrence", "screen_name": "ideasasylum", "location": "Cork, Ireland", "description": "Consultant CTO & Rails developer; frequent swimmer; photographer (http:\/\/t.co\/jlC2q0lzrn);\namused dad to my best creations.", "url": "http:\/\/t.co\/sTR5UzQ7rR", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/sTR5UzQ7rR", "expanded_url": "http:\/\/ideasasylum.com", "display_url": "ideasasylum.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [ { "url": "http:\/\/t.co\/jlC2q0lzrn", "expanded_url": "http:\/\/hotoffthememorycard.com", "display_url": "hotoffthememorycard.com", "indices": [ 66, 88 ] } ] } }, "protected": false, "followers_count": 1645, "friends_count": 854, "listed_count": 148, "created_at": "Thu Mar 15 09:19:18 +0000 2007", "favourites_count": 884, "utc_offset": 3600, "time_zone": "Dublin", "geo_enabled": true, "verified": false, "statuses_count": 43874, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "1D2A3D", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/754425864\/1b118129596123d88023977799d796d3.jpeg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/754425864\/1b118129596123d88023977799d796d3.jpeg", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/426871844709216256\/78r6Tj6-_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/426871844709216256\/78r6Tj6-_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/1211071\/1398248501", "profile_link_color": "33BD24", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "F6FFD1", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Tue Sep 29 14:27:18 +0000 2015", "id": 648866645855879168, "id_str": "648866645855879168", "text": "\ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.co\/hIdTA3v2zE", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2251684044, "id_str": "2251684044", "name": "Deckset", "screen_name": "decksetapp", "location": "Your Mac", "description": "Turn your notes into beautiful presentations.", "url": "http:\/\/t.co\/qZdruXQkI0", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/qZdruXQkI0", "expanded_url": "http:\/\/www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 1838, "friends_count": 31, "listed_count": 67, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "favourites_count": 477, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 1222, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "323740", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/2251684044\/1401122921", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 73, "favorite_count": 28, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 90, 112 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 73, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "decksetapp", "name": "Deckset", "id": 2251684044, "id_str": "2251684044", "indices": [ 3, 14 ] } ], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 106, 128 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "source_user_id": 2251684044, "source_user_id_str": "2251684044" } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "source_user_id": 2251684044, "source_user_id_str": "2251684044" } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Tue Sep 29 19:53:17 +0000 2015", "id": 648948683359289344, "id_str": "648948683359289344", "text": "RT @decksetapp: \ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.c\u2026", "source": "\u003ca href=\"http:\/\/tapbots.com\/tweetbot\" rel=\"nofollow\"\u003eTweetbot for i\u039fS\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 439890252, "id_str": "439890252", "name": "Eduard Panasiuk", "screen_name": "EdPanasiuk", "location": "Belarus", "description": "iOS developer at Intellectsoft", "url": null, "entities": {"description": {"urls": []}}, "protected": false, "followers_count": 51, "friends_count": 103, "listed_count": 5, "created_at": "Sun Dec 18 09:38:31 +0000 2011", "favourites_count": 105, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 1155, "lang": "ru", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/466650785325932544\/JQn8qb8a_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/466650785325932544\/JQn8qb8a_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/439890252\/1384086196", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Tue Sep 29 14:27:18 +0000 2015", "id": 648866645855879168, "id_str": "648866645855879168", "text": "\ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.co\/hIdTA3v2zE", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2251684044, "id_str": "2251684044", "name": "Deckset", "screen_name": "decksetapp", "location": "Your Mac", "description": "Turn your notes into beautiful presentations.", "url": "http:\/\/t.co\/qZdruXQkI0", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/qZdruXQkI0", "expanded_url": "http:\/\/www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 1838, "friends_count": 31, "listed_count": 67, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "favourites_count": 477, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 1222, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "323740", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/2251684044\/1401122921", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 73, "favorite_count": 28, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 90, 112 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 73, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "decksetapp", "name": "Deckset", "id": 2251684044, "id_str": "2251684044", "indices": [ 3, 14 ] } ], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 106, 128 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "source_user_id": 2251684044, "source_user_id_str": "2251684044" } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "source_user_id": 2251684044, "source_user_id_str": "2251684044" } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Tue Sep 29 19:46:04 +0000 2015", "id": 648946868156792832, "id_str": "648946868156792832", "text": "RT @decksetapp: \ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.c\u2026", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2162591, "id_str": "2162591", "name": "Emanuela", "screen_name": "brassy", "location": "Berlin, Germany", "description": "Working in software industry. Visual designer who loves make the web sexier. currently working @HitFoxGroup and part of the @fromthefront team", "url": "http:\/\/t.co\/lWYgWFtWjD", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/lWYgWFtWjD", "expanded_url": "http:\/\/mced.it", "display_url": "mced.it", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 1000, "friends_count": 825, "listed_count": 40, "created_at": "Sun Mar 25 07:40:06 +0000 2007", "favourites_count": 662, "utc_offset": -36000, "time_zone": "Hawaii", "geo_enabled": true, "verified": false, "statuses_count": 4381, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "FFFFFF", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/626856698\/jzhl2o3akcp5w26j8yrp.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/626856698\/jzhl2o3akcp5w26j8yrp.png", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/594488016720240640\/bunG7gU6_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/594488016720240640\/bunG7gU6_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/2162591\/1430571893", "profile_link_color": "013541", "profile_sidebar_border_color": "BC4482", "profile_sidebar_fill_color": "FF9191", "profile_text_color": "000000", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Tue Sep 29 14:27:18 +0000 2015", "id": 648866645855879168, "id_str": "648866645855879168", "text": "\ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.co\/hIdTA3v2zE", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2251684044, "id_str": "2251684044", "name": "Deckset", "screen_name": "decksetapp", "location": "Your Mac", "description": "Turn your notes into beautiful presentations.", "url": "http:\/\/t.co\/qZdruXQkI0", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/qZdruXQkI0", "expanded_url": "http:\/\/www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 1838, "friends_count": 31, "listed_count": 67, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "favourites_count": 477, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 1222, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "323740", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/2251684044\/1401122921", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 73, "favorite_count": 28, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 90, 112 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 73, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "decksetapp", "name": "Deckset", "id": 2251684044, "id_str": "2251684044", "indices": [ 3, 14 ] } ], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 106, 128 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "source_user_id": 2251684044, "source_user_id_str": "2251684044" } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "source_user_id": 2251684044, "source_user_id_str": "2251684044" } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Tue Sep 29 19:45:31 +0000 2015", "id": 648946726976421888, "id_str": "648946726976421888", "text": "RT @decksetapp: \ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.c\u2026", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 14304427, "id_str": "14304427", "name": "Some Josh", "screen_name": "MrBlank", "location": "Columbia, MO", "description": "Web designer, comic drawer, video game playing, all-around creative", "url": "http:\/\/t.co\/31Mb2Djyk6", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/31Mb2Djyk6", "expanded_url": "http:\/\/joshnichols.com", "display_url": "joshnichols.com", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 378, "friends_count": 245, "listed_count": 25, "created_at": "Fri Apr 04 17:10:06 +0000 2008", "favourites_count": 848, "utc_offset": -18000, "time_zone": "Central Time (US & Canada)", "geo_enabled": true, "verified": false, "statuses_count": 10903, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "241601", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/691391761\/b86ac8d95cc828f3bf01a84fac9ee6f6.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/691391761\/b86ac8d95cc828f3bf01a84fac9ee6f6.png", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/554763778089172992\/ksdITt5e_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/554763778089172992\/ksdITt5e_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/14304427\/1398279804", "profile_link_color": "F55B2C", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "DADADA", "profile_text_color": "3C2819", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Tue Sep 29 14:27:18 +0000 2015", "id": 648866645855879168, "id_str": "648866645855879168", "text": "\ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.co\/hIdTA3v2zE", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2251684044, "id_str": "2251684044", "name": "Deckset", "screen_name": "decksetapp", "location": "Your Mac", "description": "Turn your notes into beautiful presentations.", "url": "http:\/\/t.co\/qZdruXQkI0", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/qZdruXQkI0", "expanded_url": "http:\/\/www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 1838, "friends_count": 31, "listed_count": 67, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "favourites_count": 477, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 1222, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "323740", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/2251684044\/1401122921", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 73, "favorite_count": 28, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 90, 112 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 73, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "decksetapp", "name": "Deckset", "id": 2251684044, "id_str": "2251684044", "indices": [ 3, 14 ] } ], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 106, 128 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "source_user_id": 2251684044, "source_user_id_str": "2251684044" } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "source_user_id": 2251684044, "source_user_id_str": "2251684044" } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Tue Sep 29 19:13:52 +0000 2015", "id": 648938762349752320, "id_str": "648938762349752320", "text": "RT @decksetapp: \ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.c\u2026", "source": "\u003ca href=\"http:\/\/tapbots.com\/tweetbot\" rel=\"nofollow\"\u003eTweetbot for i\u039fS\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 16361412, "id_str": "16361412", "name": "Jan", "screen_name": "agento", "location": "A large trendy Planet", "description": "officially better than google", "url": null, "entities": {"description": {"urls": []}}, "protected": false, "followers_count": 908, "friends_count": 598, "listed_count": 78, "created_at": "Fri Sep 19 09:38:01 +0000 2008", "favourites_count": 1066, "utc_offset": 7200, "time_zone": "Berlin", "geo_enabled": true, "verified": false, "statuses_count": 14978, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "1A1B1F", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/65940750\/Photoshop_The_nuclear_explosion___bomb_011528_.jpg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/65940750\/Photoshop_The_nuclear_explosion___bomb_011528_.jpg", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/461810309372473344\/qyXN2CuZ_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/461810309372473344\/qyXN2CuZ_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/16361412\/1396528725", "profile_link_color": "2FC2EF", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "252429", "profile_text_color": "666666", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Tue Sep 29 14:27:18 +0000 2015", "id": 648866645855879168, "id_str": "648866645855879168", "text": "\ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.co\/hIdTA3v2zE", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2251684044, "id_str": "2251684044", "name": "Deckset", "screen_name": "decksetapp", "location": "Your Mac", "description": "Turn your notes into beautiful presentations.", "url": "http:\/\/t.co\/qZdruXQkI0", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/qZdruXQkI0", "expanded_url": "http:\/\/www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 1838, "friends_count": 31, "listed_count": 67, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "favourites_count": 477, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 1222, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "323740", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/2251684044\/1401122921", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 73, "favorite_count": 28, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 90, 112 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 73, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "decksetapp", "name": "Deckset", "id": 2251684044, "id_str": "2251684044", "indices": [ 3, 14 ] } ], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 106, 128 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "source_user_id": 2251684044, "source_user_id_str": "2251684044" } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "source_user_id": 2251684044, "source_user_id_str": "2251684044" } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Tue Sep 29 19:08:13 +0000 2015", "id": 648937339620859904, "id_str": "648937339620859904", "text": "RT @decksetapp: \ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.c\u2026", "source": "\u003ca href=\"http:\/\/itunes.apple.com\/us\/app\/twitter\/id409789998?mt=12\" rel=\"nofollow\"\u003eTwitter for Mac\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 22287658, "id_str": "22287658", "name": "Chris Brown", "screen_name": "DrByteZC", "location": "", "description": "I may be a bit biased, but ... #ZenCart really is the best way to do eCommerce!", "url": null, "entities": {"description": {"urls": []}}, "protected": false, "followers_count": 125, "friends_count": 267, "listed_count": 9, "created_at": "Sat Feb 28 19:38:06 +0000 2009", "favourites_count": 70, "utc_offset": -14400, "time_zone": "Eastern Time (US & Canada)", "geo_enabled": false, "verified": false, "statuses_count": 163, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "DBE9ED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme17\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme17\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/84687656\/drbyte_normal.gif", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/84687656\/drbyte_normal.gif", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/22287658\/1401309134", "profile_link_color": "CC3366", "profile_sidebar_border_color": "DBE9ED", "profile_sidebar_fill_color": "E6F6F9", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Tue Sep 29 14:27:18 +0000 2015", "id": 648866645855879168, "id_str": "648866645855879168", "text": "\ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.co\/hIdTA3v2zE", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2251684044, "id_str": "2251684044", "name": "Deckset", "screen_name": "decksetapp", "location": "Your Mac", "description": "Turn your notes into beautiful presentations.", "url": "http:\/\/t.co\/qZdruXQkI0", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/qZdruXQkI0", "expanded_url": "http:\/\/www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 1838, "friends_count": 31, "listed_count": 67, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "favourites_count": 477, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 1222, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "323740", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/2251684044\/1401122921", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 73, "favorite_count": 28, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 90, 112 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 73, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "decksetapp", "name": "Deckset", "id": 2251684044, "id_str": "2251684044", "indices": [ 3, 14 ] } ], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 106, 128 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "source_user_id": 2251684044, "source_user_id_str": "2251684044" } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 139, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } }, "source_status_id": 648866645855879168, "source_status_id_str": "648866645855879168", "source_user_id": 2251684044, "source_user_id_str": "2251684044" } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" } ] ================================================ FILE: src/test/resources/twitter/rest/statuses/retweets_of_me.json ================================================ [ { "created_at": "Tue Sep 29 14:14:44 +0000 2015", "id": 648863485888208896, "id_str": "648863485888208896", "text": "Scumbag Chrome http:\/\/t.co\/3raBctS9qh", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 132, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 186, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 1, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/3raBctS9qh", "expanded_url": "http:\/\/www.commitstrip.com\/en\/2015\/09\/28\/scumbag-chrome\/", "display_url": "commitstrip.com\/en\/2015\/09\/28\/\u2026", "indices": [ 15, 37 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Mon Aug 17 18:48:39 +0000 2015", "id": 633349736943235072, "id_str": "633349736943235072", "text": "#Spray: how to (de)serialize objects with #json4s http:\/\/t.co\/CxnHzaH9H1 #scala", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 132, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 186, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 1, "favorite_count": 0, "entities": { "hashtags": [ { "text": "Spray", "indices": [ 0, 6 ] }, { "text": "json4s", "indices": [ 42, 49 ] }, { "text": "scala", "indices": [ 73, 79 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/CxnHzaH9H1", "expanded_url": "http:\/\/wp.me\/p5uYrc-7k", "display_url": "wp.me\/p5uYrc-7k", "indices": [ 50, 72 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Mon Jun 29 18:07:35 +0000 2015", "id": 615582396868509696, "id_str": "615582396868509696", "text": "How to Create a #Spray Custom Authenticator http:\/\/t.co\/KBB3hmnRoA", "source": "\u003ca href=\"http:\/\/publicize.wp.com\/\" rel=\"nofollow\"\u003eWordPress.com\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 132, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 186, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 2, "favorite_count": 0, "entities": { "hashtags": [ { "text": "Spray", "indices": [ 16, 22 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/KBB3hmnRoA", "expanded_url": "http:\/\/danielasfregola.com\/2015\/06\/29\/how-to-create-a-spray-custom-authenticator", "display_url": "danielasfregola.com\/2015\/06\/29\/how\u2026", "indices": [ 44, 66 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Thu Jun 25 05:57:44 +0000 2015", "id": 613949174871126016, "id_str": "613949174871126016", "text": "#Scala 2.11.7 is now available! http:\/\/t.co\/Lcqh19jFeO", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 132, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 186, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 1, "favorite_count": 0, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 0, 6 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/Lcqh19jFeO", "expanded_url": "http:\/\/scala-lang.org\/news\/2.11.7", "display_url": "scala-lang.org\/news\/2.11.7", "indices": [ 32, 54 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Tue Jun 23 18:00:37 +0000 2015", "id": 613406318406176768, "id_str": "613406318406176768", "text": "Static Duck Typing in #Scala http:\/\/t.co\/NKwO7cvsZ1", "source": "\u003ca href=\"http:\/\/publicize.wp.com\/\" rel=\"nofollow\"\u003eWordPress.com\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 132, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 186, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 2, "favorite_count": 0, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 22, 28 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/NKwO7cvsZ1", "expanded_url": "http:\/\/danielasfregola.com\/2015\/06\/23\/static-duck-typing-in-scala", "display_url": "danielasfregola.com\/2015\/06\/23\/sta\u2026", "indices": [ 29, 51 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Thu Jun 18 18:13:56 +0000 2015", "id": 611597729769385984, "id_str": "611597729769385984", "text": "Performance Comparison between immutable Seq, List, Vector #Scala http:\/\/t.co\/6L9wl8BVoq", "source": "\u003ca href=\"http:\/\/mobile.twitter.com\" rel=\"nofollow\"\u003eMobile Web\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 132, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 186, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 1, "favorite_count": 1, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 59, 65 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/6L9wl8BVoq", "expanded_url": "http:\/\/wp.me\/p5uYrc-6a", "display_url": "wp.me\/p5uYrc-6a", "indices": [ 66, 88 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "fr" }, { "created_at": "Mon Jun 15 20:51:51 +0000 2015", "id": 610550305718013952, "id_str": "610550305718013952", "text": "Performance comparison between immutable Seq, List, Vector #Scala http:\/\/t.co\/SgUBcs97rj http:\/\/t.co\/XpS3nIcAh1", "source": "\u003ca href=\"http:\/\/publicize.wp.com\/\" rel=\"nofollow\"\u003eWordPress.com\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 132, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 186, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 2, "favorite_count": 0, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 59, 65 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/SgUBcs97rj", "expanded_url": "http:\/\/danielasfregola.com\/2015\/06\/15\/which-immutable-scala-collection", "display_url": "danielasfregola.com\/2015\/06\/15\/whi\u2026", "indices": [ 66, 88 ] } ], "media": [ { "id": 610550304732418048, "id_str": "610550304732418048", "indices": [ 89, 111 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CHkcRG8VEAA64MP.png", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CHkcRG8VEAA64MP.png", "url": "http:\/\/t.co\/XpS3nIcAh1", "display_url": "pic.twitter.com\/XpS3nIcAh1", "expanded_url": "http:\/\/twitter.com\/DanielaSfregola\/status\/610550305718013952\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 101, "resize": "crop" }, "large": { "w": 300, "h": 101, "resize": "fit" }, "small": { "w": 300, "h": 101, "resize": "fit" }, "medium": { "w": 300, "h": 101, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 610550304732418048, "id_str": "610550304732418048", "indices": [ 89, 111 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CHkcRG8VEAA64MP.png", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CHkcRG8VEAA64MP.png", "url": "http:\/\/t.co\/XpS3nIcAh1", "display_url": "pic.twitter.com\/XpS3nIcAh1", "expanded_url": "http:\/\/twitter.com\/DanielaSfregola\/status\/610550305718013952\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 101, "resize": "crop" }, "large": { "w": 300, "h": 101, "resize": "fit" }, "small": { "w": 300, "h": 101, "resize": "fit" }, "medium": { "w": 300, "h": 101, "resize": "fit" } } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "fr" }, { "created_at": "Wed Jun 10 14:15:58 +0000 2015", "id": 608638741155049472, "id_str": "608638741155049472", "text": "Great talk by @MichaelPNash at #ScalaDays: nice case study to compare the performance between CRUD and DDDD systems... #Akka rocks! :D", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 132, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 186, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 8, "favorite_count": 7, "entities": { "hashtags": [ { "text": "ScalaDays", "indices": [ 31, 41 ] }, { "text": "Akka", "indices": [ 119, 124 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "MichaelPNash", "name": "Michael Nash", "id": 24999933, "id_str": "24999933", "indices": [ 14, 27 ] } ], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" }, { "created_at": "Wed Jun 10 13:46:14 +0000 2015", "id": 608631256788676608, "id_str": "608631256788676608", "text": "Attending @MichaelPNash talk at #ScalaDays on Akka Scalability", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 132, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 186, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 3, "favorite_count": 2, "entities": { "hashtags": [ { "text": "ScalaDays", "indices": [ 32, 42 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "MichaelPNash", "name": "Michael Nash", "id": 24999933, "id_str": "24999933", "indices": [ 10, 23 ] } ], "urls": [] }, "favorited": false, "retweeted": false, "lang": "tl" }, { "created_at": "Tue Jun 09 09:54:00 +0000 2015", "id": 608210429060521984, "id_str": "608210429060521984", "text": "\"Your Data is like Candy: you want it now\" @helenaedelson at #ScalaDays", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 132, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 186, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 2, "favorite_count": 1, "entities": { "hashtags": [ { "text": "ScalaDays", "indices": [ 61, 71 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "helenaedelson", "name": "Helena Edelson", "id": 98145567, "id_str": "98145567", "indices": [ 43, 57 ] } ], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" } ] ================================================ FILE: src/test/resources/twitter/rest/statuses/show.json ================================================ { "created_at": "Tue Sep 29 14:27:18 +0000 2015", "id": 648866645855879168, "id_str": "648866645855879168", "text": "\ud83d\udca5New version of Deckset is out now! Comes with 5 new themes and is 75% off! Limited time. http:\/\/t.co\/irHM9eIN6B http:\/\/t.co\/hIdTA3v2zE", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2251684044, "id_str": "2251684044", "name": "Deckset", "screen_name": "decksetapp", "location": "Your Mac", "description": "Turn your notes into beautiful presentations.", "url": "http:\/\/t.co\/qZdruXQkI0", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/qZdruXQkI0", "expanded_url": "http:\/\/www.decksetapp.com", "display_url": "decksetapp.com", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 1838, "friends_count": 31, "listed_count": 67, "created_at": "Wed Dec 18 08:59:28 +0000 2013", "favourites_count": 477, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 1222, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "323740", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/452858703981461504\/nLm-Lvvn_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/2251684044\/1401122921", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 73, "favorite_count": 28, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/irHM9eIN6B", "expanded_url": "http:\/\/apple.co\/1ig68dx", "display_url": "apple.co\/1ig68dx", "indices": [ 90, 112 ] } ], "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 648866644899573760, "id_str": "648866644899573760", "indices": [ 113, 135 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CQE8xpPWsAA1lj2.jpg", "url": "http:\/\/t.co\/hIdTA3v2zE", "display_url": "pic.twitter.com\/hIdTA3v2zE", "expanded_url": "http:\/\/twitter.com\/decksetapp\/status\/648866645855879168\/photo\/1", "type": "photo", "sizes": { "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 191, "resize": "fit" }, "medium": { "w": 600, "h": 337, "resize": "fit" }, "large": { "w": 1024, "h": 576, "resize": "fit" } } } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "possibly_sensitive_appealable": false, "lang": "en" } ================================================ FILE: src/test/resources/twitter/rest/statuses/update.json ================================================ { "created_at": "Wed Sep 30 16:34:55 +0000 2015", "id": 649261149893074944, "id_str": "649261149893074944", "text": "This is a test", "source": "\u003ca href=\"http:\/\/danielasfregola.com\/\" rel=\"nofollow\"\u003escala-twitter-tutorial\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 132, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 187, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [] }, "extended_tweet": { "full_text": "This is a full_text test", "display_text_range": [ 13, 125 ], "entities": { "hashtags": [], "media": [], "urls": [], "user_mentions": [] } }, "favorited": false, "retweeted": false, "lang": "en" } ================================================ FILE: src/test/resources/twitter/rest/statuses/user_timeline.json ================================================ [ { "created_at": "Sat Sep 19 11:57:22 +0000 2015", "id": 645205037325680640, "id_str": "645205037325680640", "text": "RT @BFil85: Hassle-free case class mapping with my #Scala AutoMapper! https:\/\/t.co\/XhvYuO20xm", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 129, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 185, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Thu Sep 17 17:29:03 +0000 2015", "id": 644563728940302336, "id_str": "644563728940302336", "text": "Hassle-free case class mapping with my #Scala AutoMapper! https:\/\/t.co\/XhvYuO20xm", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 161225991, "id_str": "161225991", "name": "Bruno Filippone", "screen_name": "BFil85", "location": "London, United Kingdom", "description": "Software Engineer @OVOEnergy - Working with Scala \/ Akka \/ Spray \/ AngularJS", "url": "http:\/\/t.co\/V7x3oO9RvM", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/V7x3oO9RvM", "expanded_url": "http:\/\/b-fil.com", "display_url": "b-fil.com", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 287, "friends_count": 623, "listed_count": 11, "created_at": "Wed Jun 30 08:54:05 +0000 2010", "favourites_count": 0, "utc_offset": 3600, "time_zone": "London", "geo_enabled": false, "verified": false, "statuses_count": 314, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "131516", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme14\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme14\/bg.gif", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/467051314992541696\/PRg0HD3A_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/467051314992541696\/PRg0HD3A_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/161225991\/1416776910", "profile_link_color": "363672", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "000000", "profile_text_color": "000000", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 2, "favorite_count": 1, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 39, 45 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/XhvYuO20xm", "expanded_url": "https:\/\/github.com\/bfil\/scala-automapper", "display_url": "github.com\/bfil\/scala-aut\u2026", "indices": [ 58, 81 ] } ] }, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 2, "favorite_count": 0, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 51, 57 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "BFil85", "name": "Bruno Filippone", "id": 161225991, "id_str": "161225991", "indices": [ 3, 10 ] } ], "urls": [ { "url": "https:\/\/t.co\/XhvYuO20xm", "expanded_url": "https:\/\/github.com\/bfil\/scala-automapper", "display_url": "github.com\/bfil\/scala-aut\u2026", "indices": [ 70, 93 ] } ] }, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Sat Sep 19 11:16:14 +0000 2015", "id": 645194684411846656, "id_str": "645194684411846656", "text": "RT @BoldRadius: Exploring the Collections API in Scala\n\nWatch the video: http:\/\/t.co\/BLqDHutq4F #scala", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 129, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 185, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Fri Sep 18 18:11:29 +0000 2015", "id": 644936798498648067, "id_str": "644936798498648067", "text": "Exploring the Collections API in Scala\n\nWatch the video: http:\/\/t.co\/BLqDHutq4F #scala", "source": "\u003ca href=\"http:\/\/www.hubspot.com\/\" rel=\"nofollow\"\u003eHubSpot\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 431984720, "id_str": "431984720", "name": "BoldRadius Solutions", "screen_name": "BoldRadius", "location": "San Francisco | Ottawa", "description": "BoldRadius is an expert consulting, training & software development firm, specializing in the Typesafe Reactive Platform: #Scala, #Akka, #PlayFramework & #Spark", "url": "http:\/\/t.co\/oCDcGzSfvA", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/oCDcGzSfvA", "expanded_url": "http:\/\/www.boldradius.com", "display_url": "boldradius.com", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 759, "friends_count": 681, "listed_count": 51, "created_at": "Thu Dec 08 22:24:52 +0000 2011", "favourites_count": 1119, "utc_offset": -10800, "time_zone": "Atlantic Time (Canada)", "geo_enabled": true, "verified": false, "statuses_count": 3681, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "232130", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/546542000\/TindrTwitterBG.jpg", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/546542000\/TindrTwitterBG.jpg", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/446507388300849152\/1MTOg3Up_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/446507388300849152\/1MTOg3Up_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/431984720\/1427130287", "profile_link_color": "208096", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 4, "favorite_count": 5, "entities": { "hashtags": [ { "text": "scala", "indices": [ 80, 86 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/BLqDHutq4F", "expanded_url": "http:\/\/bldrd.us\/1NFftyW", "display_url": "bldrd.us\/1NFftyW", "indices": [ 57, 79 ] } ] }, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 4, "favorite_count": 0, "entities": { "hashtags": [ { "text": "scala", "indices": [ 96, 102 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "BoldRadius", "name": "BoldRadius Solutions", "id": 431984720, "id_str": "431984720", "indices": [ 3, 14 ] } ], "urls": [ { "url": "http:\/\/t.co\/BLqDHutq4F", "expanded_url": "http:\/\/bldrd.us\/1NFftyW", "display_url": "bldrd.us\/1NFftyW", "indices": [ 73, 95 ] } ] }, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Sat Sep 19 07:44:25 +0000 2015", "id": 645141378830307328, "id_str": "645141378830307328", "text": "RT @typesafe: We co-wrote a blog with @noootsab: \"#Scala and #Spark Notebook: The Next Gen Data Science Toolkit\" | http:\/\/t.co\/DPnc2SvVKm", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 129, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 185, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Fri Sep 18 11:15:58 +0000 2015", "id": 644832228913119232, "id_str": "644832228913119232", "text": "We co-wrote a blog with @noootsab: \"#Scala and #Spark Notebook: The Next Gen Data Science Toolkit\" | http:\/\/t.co\/DPnc2SvVKm", "source": "\u003ca href=\"http:\/\/bufferapp.com\" rel=\"nofollow\"\u003eBuffer\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 16602164, "id_str": "16602164", "name": "Typesafe", "screen_name": "typesafe", "location": "", "description": "Typesafe Reactive Platform is a production-grade JVM runtime & toolset for building Reactive Systems. Be successful: http:\/\/t.co\/o1Bt6dQtgH", "url": "http:\/\/t.co\/bzGTwCmOGg", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/bzGTwCmOGg", "expanded_url": "http:\/\/typesafe.com", "display_url": "typesafe.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [ { "url": "http:\/\/t.co\/o1Bt6dQtgH", "expanded_url": "http:\/\/www.typesafe.com\/company\/contact", "display_url": "typesafe.com\/company\/contact", "indices": [ 117, 139 ] } ] } }, "protected": false, "followers_count": 22854, "friends_count": 180, "listed_count": 838, "created_at": "Sun Oct 05 14:50:41 +0000 2008", "favourites_count": 876, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": false, "verified": false, "statuses_count": 3587, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "53CCEC", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/526790424048828416\/b9QDtyl7_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/526790424048828416\/b9QDtyl7_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/16602164\/1422404674", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 27, "favorite_count": 34, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 36, 42 ] }, { "text": "Spark", "indices": [ 47, 53 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "noootsab", "name": "a\u2115dy \u2119etrella", "id": 20847695, "id_str": "20847695", "indices": [ 24, 33 ] } ], "urls": [ { "url": "http:\/\/t.co\/DPnc2SvVKm", "expanded_url": "http:\/\/bit.ly\/1imnufV", "display_url": "bit.ly\/1imnufV", "indices": [ 101, 123 ] } ] }, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 27, "favorite_count": 0, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 50, 56 ] }, { "text": "Spark", "indices": [ 61, 67 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "typesafe", "name": "Typesafe", "id": 16602164, "id_str": "16602164", "indices": [ 3, 12 ] }, { "screen_name": "noootsab", "name": "a\u2115dy \u2119etrella", "id": 20847695, "id_str": "20847695", "indices": [ 38, 47 ] } ], "urls": [ { "url": "http:\/\/t.co\/DPnc2SvVKm", "expanded_url": "http:\/\/bit.ly\/1imnufV", "display_url": "bit.ly\/1imnufV", "indices": [ 115, 137 ] } ] }, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Thu Sep 17 17:19:24 +0000 2015", "id": 644561300547313664, "id_str": "644561300547313664", "text": "RT @hintjens: Ten rules for good API design: http:\/\/t.co\/2SKu2nNN1X", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 129, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 185, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Thu Sep 17 10:45:19 +0000 2015", "id": 644462128162828289, "id_str": "644462128162828289", "text": "Ten rules for good API design: http:\/\/t.co\/2SKu2nNN1X", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 24012073, "id_str": "24012073", "name": "Pieter Hintjens", "screen_name": "hintjens", "location": "Brussels, Belgium", "description": "All I want to do is make software fun again", "url": "http:\/\/t.co\/RcDIMrOuGM", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/RcDIMrOuGM", "expanded_url": "http:\/\/hintjens.com", "display_url": "hintjens.com", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 3770, "friends_count": 341, "listed_count": 193, "created_at": "Thu Mar 12 19:20:47 +0000 2009", "favourites_count": 79, "utc_offset": 7200, "time_zone": "Brussels", "geo_enabled": false, "verified": false, "statuses_count": 12407, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "CCCCFF", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/718129238\/40febb204cde062020c21612fb3f9ec6.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/718129238\/40febb204cde062020c21612fb3f9ec6.png", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/533539938747179008\/BoeAWxjB_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/533539938747179008\/BoeAWxjB_normal.jpeg", "profile_link_color": "009999", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 128, "favorite_count": 160, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/2SKu2nNN1X", "expanded_url": "http:\/\/hintjens.com\/blog:94", "display_url": "hintjens.com\/blog:94", "indices": [ 31, 53 ] } ] }, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 128, "favorite_count": 0, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "hintjens", "name": "Pieter Hintjens", "id": 24012073, "id_str": "24012073", "indices": [ 3, 12 ] } ], "urls": [ { "url": "http:\/\/t.co\/2SKu2nNN1X", "expanded_url": "http:\/\/hintjens.com\/blog:94", "display_url": "hintjens.com\/blog:94", "indices": [ 45, 67 ] } ] }, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Tue Sep 08 12:11:00 +0000 2015", "id": 641222199026798593, "id_str": "641222199026798593", "text": "RT @marcobonzanini: Getting Started with MongoDB and Python http:\/\/t.co\/FMhTy4u5Ec #python #MongoDB #pymongo #nosql", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 129, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 185, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Mon Sep 07 17:58:59 +0000 2015", "id": 640947384504197121, "id_str": "640947384504197121", "text": "Getting Started with MongoDB and Python http:\/\/t.co\/FMhTy4u5Ec #python #MongoDB #pymongo #nosql", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 19018614, "id_str": "19018614", "name": "Marco Bonzanini", "screen_name": "marcobonzanini", "location": "London, United Kingdom", "description": "Data Scientist - Information Retrieval, NLP, Text Analytics, Machine Learning, everything Python. PhD from @QMUL", "url": "http:\/\/t.co\/34uCLCPVkH", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/34uCLCPVkH", "expanded_url": "http:\/\/marcobonzanini.com", "display_url": "marcobonzanini.com", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 231, "friends_count": 202, "listed_count": 33, "created_at": "Thu Jan 15 11:28:04 +0000 2009", "favourites_count": 3, "utc_offset": 3600, "time_zone": "London", "geo_enabled": false, "verified": false, "statuses_count": 165, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "709397", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_link_color": "FF3300", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 1, "favorite_count": 1, "entities": { "hashtags": [ { "text": "python", "indices": [ 63, 70 ] }, { "text": "MongoDB", "indices": [ 71, 79 ] }, { "text": "pymongo", "indices": [ 80, 88 ] }, { "text": "nosql", "indices": [ 89, 95 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/FMhTy4u5Ec", "expanded_url": "http:\/\/wp.me\/p5y8RO-30", "display_url": "wp.me\/p5y8RO-30", "indices": [ 40, 62 ] } ] }, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 1, "favorite_count": 0, "entities": { "hashtags": [ { "text": "python", "indices": [ 83, 90 ] }, { "text": "MongoDB", "indices": [ 91, 99 ] }, { "text": "pymongo", "indices": [ 100, 108 ] }, { "text": "nosql", "indices": [ 109, 115 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "marcobonzanini", "name": "Marco Bonzanini", "id": 19018614, "id_str": "19018614", "indices": [ 3, 18 ] } ], "urls": [ { "url": "http:\/\/t.co\/FMhTy4u5Ec", "expanded_url": "http:\/\/wp.me\/p5y8RO-30", "display_url": "wp.me\/p5y8RO-30", "indices": [ 60, 82 ] } ] }, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Fri Sep 04 17:36:39 +0000 2015", "id": 639854600724590592, "id_str": "639854600724590592", "text": "RT @akkateam: #Akka 2.4.0-RC2 Released \u2026 http:\/\/t.co\/pJUqUzlRD3", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 129, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 185, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Fri Sep 04 15:08:52 +0000 2015", "id": 639817408832794624, "id_str": "639817408832794624", "text": "#Akka 2.4.0-RC2 Released \u2026 http:\/\/t.co\/pJUqUzlRD3", "source": "\u003ca href=\"http:\/\/www.tumblr.com\/\" rel=\"nofollow\"\u003eTumblr\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 440686069, "id_str": "440686069", "name": "Akka Team", "screen_name": "akkateam", "location": "", "description": "Akka Team - News about the Akka project", "url": "http:\/\/t.co\/Z56SglxFTj", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/Z56SglxFTj", "expanded_url": "http:\/\/akka.io", "display_url": "akka.io", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 7489, "friends_count": 0, "listed_count": 288, "created_at": "Mon Dec 19 09:01:02 +0000 2011", "favourites_count": 26, "utc_offset": null, "time_zone": null, "geo_enabled": false, "verified": false, "statuses_count": 1053, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "000000", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/527005258891792384\/bxLhidly_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/527005258891792384\/bxLhidly_normal.png", "profile_link_color": "1897C2", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "000000", "profile_text_color": "000000", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 29, "favorite_count": 13, "entities": { "hashtags": [ { "text": "Akka", "indices": [ 0, 5 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/pJUqUzlRD3", "expanded_url": "http:\/\/tmblr.co\/ZlHOLw1tXSL_q", "display_url": "tmblr.co\/ZlHOLw1tXSL_q", "indices": [ 27, 49 ] } ] }, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 29, "favorite_count": 0, "entities": { "hashtags": [ { "text": "Akka", "indices": [ 14, 19 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "akkateam", "name": "Akka Team", "id": 440686069, "id_str": "440686069", "indices": [ 3, 12 ] } ], "urls": [ { "url": "http:\/\/t.co\/pJUqUzlRD3", "expanded_url": "http:\/\/tmblr.co\/ZlHOLw1tXSL_q", "display_url": "tmblr.co\/ZlHOLw1tXSL_q", "indices": [ 41, 63 ] } ] }, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Tue Sep 01 06:47:36 +0000 2015", "id": 638604100184223745, "id_str": "638604100184223745", "text": "RT @Evanfchan: New blog post: Dockerizing your #Scala apps with sbt-docker #docker http:\/\/t.co\/BBOiKtE3Ji", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 129, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 185, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Tue Sep 01 05:22:28 +0000 2015", "id": 638582675171741696, "id_str": "638582675171741696", "text": "New blog post: Dockerizing your #Scala apps with sbt-docker #docker http:\/\/t.co\/BBOiKtE3Ji", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 824776921, "id_str": "824776921", "name": "Evan Chan", "screen_name": "Evanfchan", "location": "USA", "description": "Big data & distributed systems hacker. datastax #cassandra MVP. \nfather, follower of Jesus, swing dancer, ramen-fan, big #athletics fan", "url": "http:\/\/t.co\/Ru1nyo5KJW", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/Ru1nyo5KJW", "expanded_url": "http:\/\/velvia.github.io", "display_url": "velvia.github.io", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 780, "friends_count": 175, "listed_count": 80, "created_at": "Sat Sep 15 07:43:47 +0000 2012", "favourites_count": 36, "utc_offset": -25200, "time_zone": "Arizona", "geo_enabled": false, "verified": false, "statuses_count": 5181, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/538571806265708544\/5A_SJG8a_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/538571806265708544\/5A_SJG8a_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/824776921\/1429427764", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 17, "favorite_count": 27, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 32, 38 ] }, { "text": "docker", "indices": [ 61, 68 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/BBOiKtE3Ji", "expanded_url": "http:\/\/velvia.github.io\/Docker-Scala-Sbt\/", "display_url": "velvia.github.io\/Docker-Scala-S\u2026", "indices": [ 70, 92 ] } ] }, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 17, "favorite_count": 0, "entities": { "hashtags": [ { "text": "Scala", "indices": [ 47, 53 ] }, { "text": "docker", "indices": [ 76, 83 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "Evanfchan", "name": "Evan Chan", "id": 824776921, "id_str": "824776921", "indices": [ 3, 13 ] } ], "urls": [ { "url": "http:\/\/t.co\/BBOiKtE3Ji", "expanded_url": "http:\/\/velvia.github.io\/Docker-Scala-Sbt\/", "display_url": "velvia.github.io\/Docker-Scala-S\u2026", "indices": [ 85, 107 ] } ] }, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Tue Sep 01 06:17:21 +0000 2015", "id": 638596486834601985, "id_str": "638596486834601985", "text": "RT @marcobonzanini: A Brief Introduction to Text Summarisation http:\/\/t.co\/6zgINQjPUH #TextAnalytics #TextMining #NLP", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 129, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 185, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Mon Aug 31 17:53:41 +0000 2015", "id": 638409334519676930, "id_str": "638409334519676930", "text": "A Brief Introduction to Text Summarisation http:\/\/t.co\/6zgINQjPUH #TextAnalytics #TextMining #NLP", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 19018614, "id_str": "19018614", "name": "Marco Bonzanini", "screen_name": "marcobonzanini", "location": "London, United Kingdom", "description": "Data Scientist - Information Retrieval, NLP, Text Analytics, Machine Learning, everything Python. PhD from @QMUL", "url": "http:\/\/t.co\/34uCLCPVkH", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/34uCLCPVkH", "expanded_url": "http:\/\/marcobonzanini.com", "display_url": "marcobonzanini.com", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 231, "friends_count": 202, "listed_count": 33, "created_at": "Thu Jan 15 11:28:04 +0000 2009", "favourites_count": 3, "utc_offset": 3600, "time_zone": "London", "geo_enabled": false, "verified": false, "statuses_count": 165, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "709397", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_link_color": "FF3300", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 3, "favorite_count": 4, "entities": { "hashtags": [ { "text": "TextAnalytics", "indices": [ 66, 80 ] }, { "text": "TextMining", "indices": [ 81, 92 ] }, { "text": "NLP", "indices": [ 93, 97 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/6zgINQjPUH", "expanded_url": "http:\/\/wp.me\/p5y8RO-2V", "display_url": "wp.me\/p5y8RO-2V", "indices": [ 43, 65 ] } ] }, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 3, "favorite_count": 0, "entities": { "hashtags": [ { "text": "TextAnalytics", "indices": [ 86, 100 ] }, { "text": "TextMining", "indices": [ 101, 112 ] }, { "text": "NLP", "indices": [ 113, 117 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "marcobonzanini", "name": "Marco Bonzanini", "id": 19018614, "id_str": "19018614", "indices": [ 3, 18 ] } ], "urls": [ { "url": "http:\/\/t.co\/6zgINQjPUH", "expanded_url": "http:\/\/wp.me\/p5y8RO-2V", "display_url": "wp.me\/p5y8RO-2V", "indices": [ 63, 85 ] } ] }, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Fri Aug 21 22:58:14 +0000 2015", "id": 634862102180700160, "id_str": "634862102180700160", "text": "RT @typesafe: How Italy's largest bank went #Reactive with #Typesafe and #Scala #Akka #Play #Spark | http:\/\/t.co\/yUPgIhxD93 http:\/\/t.co\/6OO\u2026", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 129, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 185, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Thu Aug 20 10:33:26 +0000 2015", "id": 634312275638267904, "id_str": "634312275638267904", "text": "How Italy's largest bank went #Reactive with #Typesafe and #Scala #Akka #Play #Spark | http:\/\/t.co\/yUPgIhxD93 http:\/\/t.co\/6OOYZfryYU", "source": "\u003ca href=\"http:\/\/bufferapp.com\" rel=\"nofollow\"\u003eBuffer\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 16602164, "id_str": "16602164", "name": "Typesafe", "screen_name": "typesafe", "location": "", "description": "Typesafe Reactive Platform is a production-grade JVM runtime & toolset for building Reactive Systems. Be successful: http:\/\/t.co\/o1Bt6dQtgH", "url": "http:\/\/t.co\/bzGTwCmOGg", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/bzGTwCmOGg", "expanded_url": "http:\/\/typesafe.com", "display_url": "typesafe.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [ { "url": "http:\/\/t.co\/o1Bt6dQtgH", "expanded_url": "http:\/\/www.typesafe.com\/company\/contact", "display_url": "typesafe.com\/company\/contact", "indices": [ 117, 139 ] } ] } }, "protected": false, "followers_count": 22854, "friends_count": 180, "listed_count": 838, "created_at": "Sun Oct 05 14:50:41 +0000 2008", "favourites_count": 876, "utc_offset": -25200, "time_zone": "Pacific Time (US & Canada)", "geo_enabled": false, "verified": false, "statuses_count": 3587, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "53CCEC", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/526790424048828416\/b9QDtyl7_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/526790424048828416\/b9QDtyl7_normal.png", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/16602164\/1422404674", "profile_link_color": "0084B4", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 34, "favorite_count": 31, "entities": { "hashtags": [ { "text": "Reactive", "indices": [ 30, 39 ] }, { "text": "Typesafe", "indices": [ 45, 54 ] }, { "text": "Scala", "indices": [ 59, 65 ] }, { "text": "Akka", "indices": [ 66, 71 ] }, { "text": "Play", "indices": [ 72, 77 ] }, { "text": "Spark", "indices": [ 78, 84 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/yUPgIhxD93", "expanded_url": "http:\/\/bit.ly\/1TV6fnc", "display_url": "bit.ly\/1TV6fnc", "indices": [ 87, 109 ] } ], "media": [ { "id": 634312275592151041, "id_str": "634312275592151041", "indices": [ 110, 132 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CM2Hp2dXAAExnLF.png", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CM2Hp2dXAAExnLF.png", "url": "http:\/\/t.co\/6OOYZfryYU", "display_url": "pic.twitter.com\/6OOYZfryYU", "expanded_url": "http:\/\/twitter.com\/typesafe\/status\/634312275638267904\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 600, "h": 161, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 91, "resize": "fit" }, "large": { "w": 800, "h": 215, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 634312275592151041, "id_str": "634312275592151041", "indices": [ 110, 132 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CM2Hp2dXAAExnLF.png", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CM2Hp2dXAAExnLF.png", "url": "http:\/\/t.co\/6OOYZfryYU", "display_url": "pic.twitter.com\/6OOYZfryYU", "expanded_url": "http:\/\/twitter.com\/typesafe\/status\/634312275638267904\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 600, "h": 161, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 91, "resize": "fit" }, "large": { "w": 800, "h": 215, "resize": "fit" } } } ] }, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 34, "favorite_count": 0, "entities": { "hashtags": [ { "text": "Reactive", "indices": [ 44, 53 ] }, { "text": "Typesafe", "indices": [ 59, 68 ] }, { "text": "Scala", "indices": [ 73, 79 ] }, { "text": "Akka", "indices": [ 80, 85 ] }, { "text": "Play", "indices": [ 86, 91 ] }, { "text": "Spark", "indices": [ 92, 98 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "typesafe", "name": "Typesafe", "id": 16602164, "id_str": "16602164", "indices": [ 3, 12 ] } ], "urls": [ { "url": "http:\/\/t.co\/yUPgIhxD93", "expanded_url": "http:\/\/bit.ly\/1TV6fnc", "display_url": "bit.ly\/1TV6fnc", "indices": [ 101, 123 ] } ], "media": [ { "id": 634312275592151041, "id_str": "634312275592151041", "indices": [ 124, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CM2Hp2dXAAExnLF.png", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CM2Hp2dXAAExnLF.png", "url": "http:\/\/t.co\/6OOYZfryYU", "display_url": "pic.twitter.com\/6OOYZfryYU", "expanded_url": "http:\/\/twitter.com\/typesafe\/status\/634312275638267904\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 600, "h": 161, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 91, "resize": "fit" }, "large": { "w": 800, "h": 215, "resize": "fit" } }, "source_status_id": 634312275638267904, "source_status_id_str": "634312275638267904", "source_user_id": 16602164, "source_user_id_str": "16602164" } ] }, "extended_entities": { "media": [ { "id": 634312275592151041, "id_str": "634312275592151041", "indices": [ 124, 140 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CM2Hp2dXAAExnLF.png", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CM2Hp2dXAAExnLF.png", "url": "http:\/\/t.co\/6OOYZfryYU", "display_url": "pic.twitter.com\/6OOYZfryYU", "expanded_url": "http:\/\/twitter.com\/typesafe\/status\/634312275638267904\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 600, "h": 161, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "small": { "w": 340, "h": 91, "resize": "fit" }, "large": { "w": 800, "h": 215, "resize": "fit" } }, "source_status_id": 634312275638267904, "source_status_id_str": "634312275638267904", "source_user_id": 16602164, "source_user_id_str": "16602164" } ] }, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, { "created_at": "Wed Aug 19 06:34:17 +0000 2015", "id": 633889705755586560, "id_str": "633889705755586560", "text": "RT @marcobonzanini: Building a search-as-you-type feature with #Elasticsearch, #AngularJS and #Python #Flask (Part 2: front-en\u2026 http:\/\/t.co\u2026", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/android\" rel=\"nofollow\"\u003eTwitter for Android\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 129, "friends_count": 93, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 185, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Tue Aug 18 18:53:52 +0000 2015", "id": 633713439085621248, "id_str": "633713439085621248", "text": "Building a search-as-you-type feature with #Elasticsearch, #AngularJS and #Python #Flask (Part 2: front-en\u2026 http:\/\/t.co\/IoLYJHHcAO", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 19018614, "id_str": "19018614", "name": "Marco Bonzanini", "screen_name": "marcobonzanini", "location": "London, United Kingdom", "description": "Data Scientist - Information Retrieval, NLP, Text Analytics, Machine Learning, everything Python. PhD from @QMUL", "url": "http:\/\/t.co\/34uCLCPVkH", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/34uCLCPVkH", "expanded_url": "http:\/\/marcobonzanini.com", "display_url": "marcobonzanini.com", "indices": [ 0, 22 ] } ] }, "description": {"urls": []} }, "protected": false, "followers_count": 231, "friends_count": 202, "listed_count": 33, "created_at": "Thu Jan 15 11:28:04 +0000 2009", "favourites_count": 3, "utc_offset": 3600, "time_zone": "London", "geo_enabled": false, "verified": false, "statuses_count": 165, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "709397", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_link_color": "FF3300", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 7, "favorite_count": 12, "entities": { "hashtags": [ { "text": "Elasticsearch", "indices": [ 43, 57 ] }, { "text": "AngularJS", "indices": [ 59, 69 ] }, { "text": "Python", "indices": [ 74, 81 ] }, { "text": "Flask", "indices": [ 82, 88 ] } ], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/IoLYJHHcAO", "expanded_url": "http:\/\/wp.me\/p5y8RO-2Q", "display_url": "wp.me\/p5y8RO-2Q", "indices": [ 108, 130 ] } ] }, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 7, "favorite_count": 0, "entities": { "hashtags": [ { "text": "Elasticsearch", "indices": [ 63, 77 ] }, { "text": "AngularJS", "indices": [ 79, 89 ] }, { "text": "Python", "indices": [ 94, 101 ] }, { "text": "Flask", "indices": [ 102, 108 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "marcobonzanini", "name": "Marco Bonzanini", "id": 19018614, "id_str": "19018614", "indices": [ 3, 18 ] } ], "urls": [ { "url": "http:\/\/t.co\/IoLYJHHcAO", "expanded_url": "http:\/\/wp.me\/p5y8RO-2Q", "display_url": "wp.me\/p5y8RO-2Q", "indices": [ 139, 140 ] } ] }, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en" } ] ================================================ FILE: src/test/resources/twitter/rest/suggestions/categories.json ================================================ [ { "size": 15, "slug": "sports", "name": "Sports" }, { "size": 13, "slug": "television", "name": "Television" }, { "size": 15, "slug": "music", "name": "Music" }, { "size": 15, "slug": "fashion", "name": "Fashion" }, { "size": 14, "slug": "entertainment", "name": "Entertainment" }, { "size": 12, "slug": "books", "name": "Books" }, { "size": 15, "slug": "gaming", "name": "Gaming" }, { "size": 9, "slug": "family", "name": "Family" }, { "size": 15, "slug": "food-drink", "name": "Food & Drink" }, { "size": 15, "slug": "funny", "name": "Funny" }, { "size": 10, "slug": "business", "name": "Business" }, { "size": 14, "slug": "government", "name": "Government" }, { "size": 18, "slug": "news", "name": "News" } ] ================================================ FILE: src/test/resources/twitter/rest/suggestions/slug_suggestions.json ================================================ { "name": "Twitter", "slug": "twitter", "size": 20, "users": [ { "name": "Twitter Sverige", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_background_tile": false, "created_at": "Mon Oct 31 23:10:57 +0000 2011", "profile_image_url": "http://a0.twimg.com/profile_images/2284174853/63g4ld4sm6yh4sssy7wy_normal.png", "location": "Sweden", "profile_link_color": "0084B4", "follow_request_sent": false, "is_translator": false, "id_str": "402357141", "default_profile": true, "url": "https://twitter.com/about/translation", "favourites_count": 0, "contributors_enabled": true, "utc_offset": 3600, "id": 402357141, "profile_image_url_https": "https://si0.twimg.com/profile_images/2284174853/63g4ld4sm6yh4sssy7wy_normal.png", "listed_count": 43, "profile_use_background_image": true, "profile_text_color": "333333", "protected": false, "lang": "sv", "followers_count": 55446, "geo_enabled": false, "time_zone": "Stockholm", "notifications": false, "verified": false, "profile_background_image_url_https": "https://si0.twimg.com/images/themes/theme1/bg.png", "profile_background_color": "C0DEED", "description": "Community-konto för Twitter i Sverige. Vi håller er uppdaterade kring vad som händer på Twitter i Sverige.", "profile_background_image_url": "http://a0.twimg.com/images/themes/theme1/bg.png", "friends_count": 260, "statuses_count": 62, "default_profile_image": false, "show_all_inline_media": false, "screen_name": "twitter_se", "following": false }, { "name": "Twitter Suomi", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_background_tile": false, "created_at": "Mon Oct 31 23:05:34 +0000 2011", "profile_image_url": "http://a0.twimg.com/profile_images/2284174783/cwp44h4tg1mkl90cta0p_normal.png", "location": "Finland", "profile_link_color": "0084B4", "follow_request_sent": false, "is_translator": false, "id_str": "402354593", "default_profile": true, "url": "https://twitter.com/about/translation", "favourites_count": 5, "contributors_enabled": true, "utc_offset": 7200, "id": 402354593, "profile_image_url_https": "https://si0.twimg.com/profile_images/2284174783/cwp44h4tg1mkl90cta0p_normal.png", "listed_count": 49, "profile_use_background_image": true, "profile_text_color": "333333", "protected": false, "lang": "fi", "followers_count": 64440, "geo_enabled": false, "time_zone": "Helsinki", "notifications": false, "verified": false, "profile_background_image_url_https": "https://si0.twimg.com/images/themes/theme1/bg.png", "profile_background_color": "C0DEED", "description": "Twitterin suomalainen yhteisötili. Ylläpitäjinä käännösmoderaattorit @Zedinc, @SuihinOkko, @Delzun ja @DiamonDie.", "profile_background_image_url": "http://a0.twimg.com/images/themes/theme1/bg.png", "friends_count": 31, "statuses_count": 83, "default_profile_image": false, "show_all_inline_media": false, "screen_name": "twitter_fi", "following": false }, { "name": "Twitter Government", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_background_tile": false, "created_at": "Sat Dec 04 23:27:01 +0000 2010", "profile_image_url": "http://a0.twimg.com/profile_images/2284291316/xu1u3i11ugj03en53ujr_normal.png", "location": "Washington, DC", "profile_link_color": "0084B4", "follow_request_sent": false, "is_translator": false, "id_str": "222953824", "default_profile": false, "url": "http://twitter.com", "favourites_count": 6, "contributors_enabled": true, "utc_offset": -18000, "id": 222953824, "profile_image_url_https": "https://si0.twimg.com/profile_images/2284291316/xu1u3i11ugj03en53ujr_normal.png", "listed_count": 888, "profile_use_background_image": true, "profile_text_color": "333333", "protected": false, "lang": "en", "followers_count": 149418, "geo_enabled": true, "time_zone": "Eastern Time (US & Canada)", "notifications": false, "verified": true, "profile_background_image_url_https": "https://si0.twimg.com/profile_background_images/378138859/townhallbg.jpg", "profile_background_color": "C0DEED", "description": "Updates from the Twitter Government & Politics team, tracking creative & effective uses of Twitter for civic engagement. RTs & examples≠political endorsements.", "profile_background_image_url": "http://a0.twimg.com/profile_background_images/378138859/townhallbg.jpg", "friends_count": 0, "statuses_count": 338, "default_profile_image": false, "show_all_inline_media": false, "screen_name": "gov", "following": true } ] } ================================================ FILE: src/test/resources/twitter/rest/suggestions/suggestions_members.json ================================================ [ { "name": "Total Frat Move", "profile_sidebar_fill_color": "DDEEF6", "profile_background_tile": true, "profile_sidebar_border_color": "C0DEED", "profile_image_url": "http://a0.twimg.com/profile_images/1678357868/tfm-social-icon_normal.png", "location": "", "created_at": "Sat May 15 11:28:50 +0000 2010", "follow_request_sent": false, "id_str": "144130505", "profile_link_color": "0084B4", "is_translator": false, "default_profile": false, "favourites_count": 2, "contributors_enabled": false, "url": "http://totalfratmove.com", "profile_image_url_https": "https://si0.twimg.com/profile_images/1678357868/tfm-social-icon_normal.png", "utc_offset": -21600, "id": 144130505, "profile_use_background_image": true, "listed_count": 1167, "profile_text_color": "333333", "lang": "en", "followers_count": 459357, "protected": false, "profile_background_image_url_https": "https://si0.twimg.com/profile_background_images/157156573/sailboat-background-02.png", "geo_enabled": false, "description": "", "profile_background_color": "F2E8BA", "verified": true, "notifications": false, "time_zone": "Central Time (US & Canada)", "statuses_count": 7065, "status": { "coordinates": null, "created_at": "Fri Aug 24 19:05:26 +0000 2012", "favorited": false, "truncated": false, "id_str": "239075966431932418", "retweeted_status": { "coordinates": null, "created_at": "Fri Aug 24 19:05:06 +0000 2012", "favorited": false, "truncated": false, "id_str": "239075883053367297", "in_reply_to_user_id_str": null, "text": "You don't want to miss this week's Fail Friday. It includes a picture of a Pike in a porno: http://t.co/TypZqAe6", "contributors": null, "retweet_count": 15, "id": 239075883053367297, "in_reply_to_status_id_str": null, "geo": null, "retweeted": false, "possibly_sensitive": false, "in_reply_to_user_id": null, "place": null, "source": "HootSuite", "in_reply_to_screen_name": null, "possibly_sensitive_editable": true, "in_reply_to_status_id": null }, "in_reply_to_user_id_str": null, "text": "RT @TFMintern: You don't want to miss this week's Fail Friday. It includes a picture of a Pike in a porno: http://t.co/TypZqAe6", "contributors": null, "retweet_count": 15, "id": 239075966431932418, "in_reply_to_status_id_str": null, "geo": null, "retweeted": false, "possibly_sensitive": false, "in_reply_to_user_id": null, "place": null, "source": "HootSuite", "in_reply_to_screen_name": null, "possibly_sensitive_editable": true, "in_reply_to_status_id": null }, "profile_background_image_url": "http://a0.twimg.com/profile_background_images/157156573/sailboat-background-02.png", "default_profile_image": false, "friends_count": 1670, "screen_name": "totalfratmove", "following": false, "show_all_inline_media": true } ] ================================================ FILE: src/test/resources/twitter/rest/trends/available_locations.json ================================================ [ { "name": "Worldwide", "placeType": { "code": 19, "name": "Supername" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1", "parentid": 0, "country": "", "woeid": 1, "countryCode": null }, { "name": "Winnipeg", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2972", "parentid": 23424775, "country": "Canada", "woeid": 2972, "countryCode": "CA" }, { "name": "Ottawa", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/3369", "parentid": 23424775, "country": "Canada", "woeid": 3369, "countryCode": "CA" }, { "name": "Quebec", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/3444", "parentid": 23424775, "country": "Canada", "woeid": 3444, "countryCode": "CA" }, { "name": "Montreal", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/3534", "parentid": 23424775, "country": "Canada", "woeid": 3534, "countryCode": "CA" }, { "name": "Toronto", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/4118", "parentid": 23424775, "country": "Canada", "woeid": 4118, "countryCode": "CA" }, { "name": "Edmonton", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/8676", "parentid": 23424775, "country": "Canada", "woeid": 8676, "countryCode": "CA" }, { "name": "Calgary", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/8775", "parentid": 23424775, "country": "Canada", "woeid": 8775, "countryCode": "CA" }, { "name": "Vancouver", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/9807", "parentid": 23424775, "country": "Canada", "woeid": 9807, "countryCode": "CA" }, { "name": "Birmingham", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/12723", "parentid": 23424975, "country": "United Kingdom", "woeid": 12723, "countryCode": "GB" }, { "name": "Blackpool", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/12903", "parentid": 23424975, "country": "United Kingdom", "woeid": 12903, "countryCode": "GB" }, { "name": "Bournemouth", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/13383", "parentid": 23424975, "country": "United Kingdom", "woeid": 13383, "countryCode": "GB" }, { "name": "Brighton", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/13911", "parentid": 23424975, "country": "United Kingdom", "woeid": 13911, "countryCode": "GB" }, { "name": "Bristol", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/13963", "parentid": 23424975, "country": "United Kingdom", "woeid": 13963, "countryCode": "GB" }, { "name": "Cardiff", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/15127", "parentid": 23424975, "country": "United Kingdom", "woeid": 15127, "countryCode": "GB" }, { "name": "Coventry", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/17044", "parentid": 23424975, "country": "United Kingdom", "woeid": 17044, "countryCode": "GB" }, { "name": "Derby", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/18114", "parentid": 23424975, "country": "United Kingdom", "woeid": 18114, "countryCode": "GB" }, { "name": "Edinburgh", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/19344", "parentid": 23424975, "country": "United Kingdom", "woeid": 19344, "countryCode": "GB" }, { "name": "Glasgow", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/21125", "parentid": 23424975, "country": "United Kingdom", "woeid": 21125, "countryCode": "GB" }, { "name": "Hull", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/25211", "parentid": 23424975, "country": "United Kingdom", "woeid": 25211, "countryCode": "GB" }, { "name": "Leeds", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/26042", "parentid": 23424975, "country": "United Kingdom", "woeid": 26042, "countryCode": "GB" }, { "name": "Leicester", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/26062", "parentid": 23424975, "country": "United Kingdom", "woeid": 26062, "countryCode": "GB" }, { "name": "Liverpool", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/26734", "parentid": 23424975, "country": "United Kingdom", "woeid": 26734, "countryCode": "GB" }, { "name": "Manchester", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/28218", "parentid": 23424975, "country": "United Kingdom", "woeid": 28218, "countryCode": "GB" }, { "name": "Middlesbrough", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/28869", "parentid": 23424975, "country": "United Kingdom", "woeid": 28869, "countryCode": "GB" }, { "name": "Newcastle", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/30079", "parentid": 23424975, "country": "United Kingdom", "woeid": 30079, "countryCode": "GB" }, { "name": "Nottingham", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/30720", "parentid": 23424975, "country": "United Kingdom", "woeid": 30720, "countryCode": "GB" }, { "name": "Plymouth", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/32185", "parentid": 23424975, "country": "United Kingdom", "woeid": 32185, "countryCode": "GB" }, { "name": "Portsmouth", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/32452", "parentid": 23424975, "country": "United Kingdom", "woeid": 32452, "countryCode": "GB" }, { "name": "Preston", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/32566", "parentid": 23424975, "country": "United Kingdom", "woeid": 32566, "countryCode": "GB" }, { "name": "Sheffield", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/34503", "parentid": 23424975, "country": "United Kingdom", "woeid": 34503, "countryCode": "GB" }, { "name": "Stoke-on-Trent", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/36240", "parentid": 23424975, "country": "United Kingdom", "woeid": 36240, "countryCode": "GB" }, { "name": "Swansea", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/36758", "parentid": 23424975, "country": "United Kingdom", "woeid": 36758, "countryCode": "GB" }, { "name": "London", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/44418", "parentid": 23424975, "country": "United Kingdom", "woeid": 44418, "countryCode": "GB" }, { "name": "Belfast", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/44544", "parentid": 23424975, "country": "United Kingdom", "woeid": 44544, "countryCode": "GB" }, { "name": "Santo Domingo", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/76456", "parentid": 23424800, "country": "Dominican Republic", "woeid": 76456, "countryCode": "DO" }, { "name": "Guatemala City", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/83123", "parentid": 23424834, "country": "Guatemala", "woeid": 83123, "countryCode": "GT" }, { "name": "Acapulco", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/110978", "parentid": 23424900, "country": "Mexico", "woeid": 110978, "countryCode": "MX" }, { "name": "Aguascalientes", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/111579", "parentid": 23424900, "country": "Mexico", "woeid": 111579, "countryCode": "MX" }, { "name": "Chihuahua", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/115958", "parentid": 23424900, "country": "Mexico", "woeid": 115958, "countryCode": "MX" }, { "name": "Mexico City", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/116545", "parentid": 23424900, "country": "Mexico", "woeid": 116545, "countryCode": "MX" }, { "name": "Ciudad Juarez", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/116556", "parentid": 23424900, "country": "Mexico", "woeid": 116556, "countryCode": "MX" }, { "name": "Nezahualc\u00F3yotl", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/116564", "parentid": 23424900, "country": "Mexico", "woeid": 116564, "countryCode": "MX" }, { "name": "Culiac\u00E1n", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/117994", "parentid": 23424900, "country": "Mexico", "woeid": 117994, "countryCode": "MX" }, { "name": "Ecatepec de Morelos", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/118466", "parentid": 23424900, "country": "Mexico", "woeid": 118466, "countryCode": "MX" }, { "name": "Guadalajara", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/124162", "parentid": 23424900, "country": "Mexico", "woeid": 124162, "countryCode": "MX" }, { "name": "Hermosillo", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/124785", "parentid": 23424900, "country": "Mexico", "woeid": 124785, "countryCode": "MX" }, { "name": "Le\u00F3n", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/131068", "parentid": 23424900, "country": "Mexico", "woeid": 131068, "countryCode": "MX" }, { "name": "M\u00E9rida", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/133327", "parentid": 23424900, "country": "Mexico", "woeid": 133327, "countryCode": "MX" }, { "name": "Mexicali", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/133475", "parentid": 23424900, "country": "Mexico", "woeid": 133475, "countryCode": "MX" }, { "name": "Monterrey", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/134047", "parentid": 23424900, "country": "Mexico", "woeid": 134047, "countryCode": "MX" }, { "name": "Morelia", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/134091", "parentid": 23424900, "country": "Mexico", "woeid": 134091, "countryCode": "MX" }, { "name": "Naucalpan de Ju\u00E1rez", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/134395", "parentid": 23424900, "country": "Mexico", "woeid": 134395, "countryCode": "MX" }, { "name": "Puebla", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/137612", "parentid": 23424900, "country": "Mexico", "woeid": 137612, "countryCode": "MX" }, { "name": "Quer\u00E9taro", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/138045", "parentid": 23424900, "country": "Mexico", "woeid": 138045, "countryCode": "MX" }, { "name": "Saltillo", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/141272", "parentid": 23424900, "country": "Mexico", "woeid": 141272, "countryCode": "MX" }, { "name": "San Luis Potos\u00ED", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/144265", "parentid": 23424900, "country": "Mexico", "woeid": 144265, "countryCode": "MX" }, { "name": "Tijuana", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/149361", "parentid": 23424900, "country": "Mexico", "woeid": 149361, "countryCode": "MX" }, { "name": "Toluca", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/149769", "parentid": 23424900, "country": "Mexico", "woeid": 149769, "countryCode": "MX" }, { "name": "Zapopan", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/151582", "parentid": 23424900, "country": "Mexico", "woeid": 151582, "countryCode": "MX" }, { "name": "Mendoza", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/332471", "parentid": 23424747, "country": "Argentina", "woeid": 332471, "countryCode": "AR" }, { "name": "Santiago", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/349859", "parentid": 23424782, "country": "Chile", "woeid": 349859, "countryCode": "CL" }, { "name": "Concepcion", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/349860", "parentid": 23424782, "country": "Chile", "woeid": 349860, "countryCode": "CL" }, { "name": "Valparaiso", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/349861", "parentid": 23424782, "country": "Chile", "woeid": 349861, "countryCode": "CL" }, { "name": "Bogot\u00E1", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/368148", "parentid": 23424787, "country": "Colombia", "woeid": 368148, "countryCode": "CO" }, { "name": "Cali", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/368149", "parentid": 23424787, "country": "Colombia", "woeid": 368149, "countryCode": "CO" }, { "name": "Medell\u00EDn", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/368150", "parentid": 23424787, "country": "Colombia", "woeid": 368150, "countryCode": "CO" }, { "name": "Barranquilla", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/368151", "parentid": 23424787, "country": "Colombia", "woeid": 368151, "countryCode": "CO" }, { "name": "Quito", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/375732", "parentid": 23424801, "country": "Ecuador", "woeid": 375732, "countryCode": "EC" }, { "name": "Guayaquil", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/375733", "parentid": 23424801, "country": "Ecuador", "woeid": 375733, "countryCode": "EC" }, { "name": "Caracas", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/395269", "parentid": 23424982, "country": "Venezuela", "woeid": 395269, "countryCode": "VE" }, { "name": "Maracaibo", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/395270", "parentid": 23424982, "country": "Venezuela", "woeid": 395270, "countryCode": "VE" }, { "name": "Maracay", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/395271", "parentid": 23424982, "country": "Venezuela", "woeid": 395271, "countryCode": "VE" }, { "name": "Valencia", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/395272", "parentid": 23424982, "country": "Venezuela", "woeid": 395272, "countryCode": "VE" }, { "name": "Barcelona", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/395273", "parentid": 23424982, "country": "Venezuela", "woeid": 395273, "countryCode": "VE" }, { "name": "Ciudad Guayana", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/395275", "parentid": 23424982, "country": "Venezuela", "woeid": 395275, "countryCode": "VE" }, { "name": "Turmero", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/395277", "parentid": 23424982, "country": "Venezuela", "woeid": 395277, "countryCode": "VE" }, { "name": "Lima", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/418440", "parentid": 23424919, "country": "Peru", "woeid": 418440, "countryCode": "PE" }, { "name": "Bras\u00EDlia", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455819", "parentid": 23424768, "country": "Brazil", "woeid": 455819, "countryCode": "BR" }, { "name": "Bel\u00E9m", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455820", "parentid": 23424768, "country": "Brazil", "woeid": 455820, "countryCode": "BR" }, { "name": "Belo Horizonte", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455821", "parentid": 23424768, "country": "Brazil", "woeid": 455821, "countryCode": "BR" }, { "name": "Curitiba", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455822", "parentid": 23424768, "country": "Brazil", "woeid": 455822, "countryCode": "BR" }, { "name": "Porto Alegre", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455823", "parentid": 23424768, "country": "Brazil", "woeid": 455823, "countryCode": "BR" }, { "name": "Recife", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455824", "parentid": 23424768, "country": "Brazil", "woeid": 455824, "countryCode": "BR" }, { "name": "Rio de Janeiro", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455825", "parentid": 23424768, "country": "Brazil", "woeid": 455825, "countryCode": "BR" }, { "name": "Salvador", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455826", "parentid": 23424768, "country": "Brazil", "woeid": 455826, "countryCode": "BR" }, { "name": "S\u00E3o Paulo", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455827", "parentid": 23424768, "country": "Brazil", "woeid": 455827, "countryCode": "BR" }, { "name": "Campinas", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455828", "parentid": 23424768, "country": "Brazil", "woeid": 455828, "countryCode": "BR" }, { "name": "Fortaleza", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455830", "parentid": 23424768, "country": "Brazil", "woeid": 455830, "countryCode": "BR" }, { "name": "Goi\u00E2nia", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455831", "parentid": 23424768, "country": "Brazil", "woeid": 455831, "countryCode": "BR" }, { "name": "Manaus", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455833", "parentid": 23424768, "country": "Brazil", "woeid": 455833, "countryCode": "BR" }, { "name": "S\u00E3o Lu\u00EDs", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455834", "parentid": 23424768, "country": "Brazil", "woeid": 455834, "countryCode": "BR" }, { "name": "Guarulhos", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455867", "parentid": 23424768, "country": "Brazil", "woeid": 455867, "countryCode": "BR" }, { "name": "C\u00F3rdoba", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/466861", "parentid": 23424747, "country": "Argentina", "woeid": 466861, "countryCode": "AR" }, { "name": "Rosario", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/466862", "parentid": 23424747, "country": "Argentina", "woeid": 466862, "countryCode": "AR" }, { "name": "Barquisimeto", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/468382", "parentid": 23424982, "country": "Venezuela", "woeid": 468382, "countryCode": "VE" }, { "name": "Matur\u00EDn", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/468384", "parentid": 23424982, "country": "Venezuela", "woeid": 468384, "countryCode": "VE" }, { "name": "Buenos Aires", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/468739", "parentid": 23424747, "country": "Argentina", "woeid": 468739, "countryCode": "AR" }, { "name": "Gda\u0144sk", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/493417", "parentid": 23424923, "country": "Poland", "woeid": 493417, "countryCode": "PL" }, { "name": "Krak\u00F3w", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/502075", "parentid": 23424923, "country": "Poland", "woeid": 502075, "countryCode": "PL" }, { "name": "Lodz", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/505120", "parentid": 23424923, "country": "Poland", "woeid": 505120, "countryCode": "PL" }, { "name": "Pozna\u0144", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/514048", "parentid": 23424923, "country": "Poland", "woeid": 514048, "countryCode": "PL" }, { "name": "Warsaw", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/523920", "parentid": 23424923, "country": "Poland", "woeid": 523920, "countryCode": "PL" }, { "name": "Wroclaw", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/526363", "parentid": 23424923, "country": "Poland", "woeid": 526363, "countryCode": "PL" }, { "name": "Vienna", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/551801", "parentid": 23424750, "country": "Austria", "woeid": 551801, "countryCode": "AT" }, { "name": "Cork", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/560472", "parentid": 23424803, "country": "Ireland", "woeid": 560472, "countryCode": "IE" }, { "name": "Dublin", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/560743", "parentid": 23424803, "country": "Ireland", "woeid": 560743, "countryCode": "IE" }, { "name": "Galway", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/560912", "parentid": 23424803, "country": "Ireland", "woeid": 560912, "countryCode": "IE" }, { "name": "Bordeaux", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/580778", "parentid": 23424819, "country": "France", "woeid": 580778, "countryCode": "FR" }, { "name": "Lille", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/608105", "parentid": 23424819, "country": "France", "woeid": 608105, "countryCode": "FR" }, { "name": "Lyon", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/609125", "parentid": 23424819, "country": "France", "woeid": 609125, "countryCode": "FR" }, { "name": "Marseille", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/610264", "parentid": 23424819, "country": "France", "woeid": 610264, "countryCode": "FR" }, { "name": "Montpellier", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/612977", "parentid": 23424819, "country": "France", "woeid": 612977, "countryCode": "FR" }, { "name": "Nantes", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/613858", "parentid": 23424819, "country": "France", "woeid": 613858, "countryCode": "FR" }, { "name": "Paris", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/615702", "parentid": 23424819, "country": "France", "woeid": 615702, "countryCode": "FR" }, { "name": "Rennes", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/619163", "parentid": 23424819, "country": "France", "woeid": 619163, "countryCode": "FR" }, { "name": "Strasbourg", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/627791", "parentid": 23424819, "country": "France", "woeid": 627791, "countryCode": "FR" }, { "name": "Toulouse", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/628886", "parentid": 23424819, "country": "France", "woeid": 628886, "countryCode": "FR" }, { "name": "Berlin", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/638242", "parentid": 23424829, "country": "Germany", "woeid": 638242, "countryCode": "DE" }, { "name": "Bremen", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/641142", "parentid": 23424829, "country": "Germany", "woeid": 641142, "countryCode": "DE" }, { "name": "Dortmund", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/645458", "parentid": 23424829, "country": "Germany", "woeid": 645458, "countryCode": "DE" }, { "name": "Dresden", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/645686", "parentid": 23424829, "country": "Germany", "woeid": 645686, "countryCode": "DE" }, { "name": "Dusseldorf", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/646099", "parentid": 23424829, "country": "Germany", "woeid": 646099, "countryCode": "DE" }, { "name": "Essen", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/648820", "parentid": 23424829, "country": "Germany", "woeid": 648820, "countryCode": "DE" }, { "name": "Frankfurt", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/650272", "parentid": 23424829, "country": "Germany", "woeid": 650272, "countryCode": "DE" }, { "name": "Hamburg", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/656958", "parentid": 23424829, "country": "Germany", "woeid": 656958, "countryCode": "DE" }, { "name": "Cologne", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/667931", "parentid": 23424829, "country": "Germany", "woeid": 667931, "countryCode": "DE" }, { "name": "Leipzig", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/671072", "parentid": 23424829, "country": "Germany", "woeid": 671072, "countryCode": "DE" }, { "name": "Munich", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/676757", "parentid": 23424829, "country": "Germany", "woeid": 676757, "countryCode": "DE" }, { "name": "Stuttgart", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/698064", "parentid": 23424829, "country": "Germany", "woeid": 698064, "countryCode": "DE" }, { "name": "Bologna", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/711080", "parentid": 23424853, "country": "Italy", "woeid": 711080, "countryCode": "IT" }, { "name": "Genoa", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/716085", "parentid": 23424853, "country": "Italy", "woeid": 716085, "countryCode": "IT" }, { "name": "Milan", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/718345", "parentid": 23424853, "country": "Italy", "woeid": 718345, "countryCode": "IT" }, { "name": "Naples", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/719258", "parentid": 23424853, "country": "Italy", "woeid": 719258, "countryCode": "IT" }, { "name": "Palermo", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/719846", "parentid": 23424853, "country": "Italy", "woeid": 719846, "countryCode": "IT" }, { "name": "Rome", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/721943", "parentid": 23424853, "country": "Italy", "woeid": 721943, "countryCode": "IT" }, { "name": "Turin", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/725003", "parentid": 23424853, "country": "Italy", "woeid": 725003, "countryCode": "IT" }, { "name": "Den Haag", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/726874", "parentid": 23424909, "country": "Netherlands", "woeid": 726874, "countryCode": "NL" }, { "name": "Amsterdam", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/727232", "parentid": 23424909, "country": "Netherlands", "woeid": 727232, "countryCode": "NL" }, { "name": "Rotterdam", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/733075", "parentid": 23424909, "country": "Netherlands", "woeid": 733075, "countryCode": "NL" }, { "name": "Utrecht", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/734047", "parentid": 23424909, "country": "Netherlands", "woeid": 734047, "countryCode": "NL" }, { "name": "Barcelona", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/753692", "parentid": 23424950, "country": "Spain", "woeid": 753692, "countryCode": "ES" }, { "name": "Bilbao", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/754542", "parentid": 23424950, "country": "Spain", "woeid": 754542, "countryCode": "ES" }, { "name": "Las Palmas", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/764814", "parentid": 23424950, "country": "Spain", "woeid": 764814, "countryCode": "ES" }, { "name": "Madrid", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/766273", "parentid": 23424950, "country": "Spain", "woeid": 766273, "countryCode": "ES" }, { "name": "Malaga", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/766356", "parentid": 23424950, "country": "Spain", "woeid": 766356, "countryCode": "ES" }, { "name": "Murcia", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/768026", "parentid": 23424950, "country": "Spain", "woeid": 768026, "countryCode": "ES" }, { "name": "Palma", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/769293", "parentid": 23424950, "country": "Spain", "woeid": 769293, "countryCode": "ES" }, { "name": "Seville", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/774508", "parentid": 23424950, "country": "Spain", "woeid": 774508, "countryCode": "ES" }, { "name": "Valencia", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/776688", "parentid": 23424950, "country": "Spain", "woeid": 776688, "countryCode": "ES" }, { "name": "Zaragoza", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/779063", "parentid": 23424950, "country": "Spain", "woeid": 779063, "countryCode": "ES" }, { "name": "Geneva", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/782538", "parentid": 23424957, "country": "Switzerland", "woeid": 782538, "countryCode": "CH" }, { "name": "Lausanne", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/783058", "parentid": 23424957, "country": "Switzerland", "woeid": 783058, "countryCode": "CH" }, { "name": "Zurich", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/784794", "parentid": 23424957, "country": "Switzerland", "woeid": 784794, "countryCode": "CH" }, { "name": "Brest", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/824382", "parentid": 23424765, "country": "Belarus", "woeid": 824382, "countryCode": "BY" }, { "name": "Grodno", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/825848", "parentid": 23424765, "country": "Belarus", "woeid": 825848, "countryCode": "BY" }, { "name": "Gomel", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/825978", "parentid": 23424765, "country": "Belarus", "woeid": 825978, "countryCode": "BY" }, { "name": "Minsk", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/834463", "parentid": 23424765, "country": "Belarus", "woeid": 834463, "countryCode": "BY" }, { "name": "Riga", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/854823", "parentid": 23424874, "country": "Latvia", "woeid": 854823, "countryCode": "LV" }, { "name": "Bergen", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/857105", "parentid": 23424910, "country": "Norway", "woeid": 857105, "countryCode": "NO" }, { "name": "Oslo", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/862592", "parentid": 23424910, "country": "Norway", "woeid": 862592, "countryCode": "NO" }, { "name": "Gothenburg", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/890869", "parentid": 23424954, "country": "Sweden", "woeid": 890869, "countryCode": "SE" }, { "name": "Stockholm", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/906057", "parentid": 23424954, "country": "Sweden", "woeid": 906057, "countryCode": "SE" }, { "name": "Dnipropetrovsk", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/918981", "parentid": 23424976, "country": "Ukraine", "woeid": 918981, "countryCode": "UA" }, { "name": "Donetsk", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/919163", "parentid": 23424976, "country": "Ukraine", "woeid": 919163, "countryCode": "UA" }, { "name": "Kharkiv", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/922137", "parentid": 23424976, "country": "Ukraine", "woeid": 922137, "countryCode": "UA" }, { "name": "Kyiv", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/924938", "parentid": 23424976, "country": "Ukraine", "woeid": 924938, "countryCode": "UA" }, { "name": "Lviv", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/924943", "parentid": 23424976, "country": "Ukraine", "woeid": 924943, "countryCode": "UA" }, { "name": "Odesa", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/929398", "parentid": 23424976, "country": "Ukraine", "woeid": 929398, "countryCode": "UA" }, { "name": "Zaporozhye", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/939628", "parentid": 23424976, "country": "Ukraine", "woeid": 939628, "countryCode": "UA" }, { "name": "Athens", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/946738", "parentid": 23424833, "country": "Greece", "woeid": 946738, "countryCode": "GR" }, { "name": "Thessaloniki", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/963291", "parentid": 23424833, "country": "Greece", "woeid": 963291, "countryCode": "GR" }, { "name": "Bekasi", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1030077", "parentid": 23424846, "country": "Indonesia", "woeid": 1030077, "countryCode": "ID" }, { "name": "Depok", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1032539", "parentid": 23424846, "country": "Indonesia", "woeid": 1032539, "countryCode": "ID" }, { "name": "Pekanbaru", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1040779", "parentid": 23424846, "country": "Indonesia", "woeid": 1040779, "countryCode": "ID" }, { "name": "Surabaya", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1044316", "parentid": 23424846, "country": "Indonesia", "woeid": 1044316, "countryCode": "ID" }, { "name": "Makassar", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1046138", "parentid": 23424846, "country": "Indonesia", "woeid": 1046138, "countryCode": "ID" }, { "name": "Bandung", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1047180", "parentid": 23424846, "country": "Indonesia", "woeid": 1047180, "countryCode": "ID" }, { "name": "Jakarta", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1047378", "parentid": 23424846, "country": "Indonesia", "woeid": 1047378, "countryCode": "ID" }, { "name": "Medan", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1047908", "parentid": 23424846, "country": "Indonesia", "woeid": 1047908, "countryCode": "ID" }, { "name": "Palembang", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1048059", "parentid": 23424846, "country": "Indonesia", "woeid": 1048059, "countryCode": "ID" }, { "name": "Semarang", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1048324", "parentid": 23424846, "country": "Indonesia", "woeid": 1048324, "countryCode": "ID" }, { "name": "Tangerang", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1048536", "parentid": 23424846, "country": "Indonesia", "woeid": 1048536, "countryCode": "ID" }, { "name": "Singapore", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1062617", "parentid": 23424948, "country": "Singapore", "woeid": 1062617, "countryCode": "SG" }, { "name": "Perth", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1098081", "parentid": 23424748, "country": "Australia", "woeid": 1098081, "countryCode": "AU" }, { "name": "Adelaide", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1099805", "parentid": 23424748, "country": "Australia", "woeid": 1099805, "countryCode": "AU" }, { "name": "Brisbane", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1100661", "parentid": 23424748, "country": "Australia", "woeid": 1100661, "countryCode": "AU" }, { "name": "Canberra", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1100968", "parentid": 23424748, "country": "Australia", "woeid": 1100968, "countryCode": "AU" }, { "name": "Darwin", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1101597", "parentid": 23424748, "country": "Australia", "woeid": 1101597, "countryCode": "AU" }, { "name": "Melbourne", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1103816", "parentid": 23424748, "country": "Australia", "woeid": 1103816, "countryCode": "AU" }, { "name": "Sydney", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1105779", "parentid": 23424748, "country": "Australia", "woeid": 1105779, "countryCode": "AU" }, { "name": "Kitakyushu", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1110809", "parentid": 23424856, "country": "Japan", "woeid": 1110809, "countryCode": "JP" }, { "name": "Saitama", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1116753", "parentid": 23424856, "country": "Japan", "woeid": 1116753, "countryCode": "JP" }, { "name": "Chiba", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1117034", "parentid": 23424856, "country": "Japan", "woeid": 1117034, "countryCode": "JP" }, { "name": "Fukuoka", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1117099", "parentid": 23424856, "country": "Japan", "woeid": 1117099, "countryCode": "JP" }, { "name": "Hamamatsu", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1117155", "parentid": 23424856, "country": "Japan", "woeid": 1117155, "countryCode": "JP" }, { "name": "Hiroshima", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1117227", "parentid": 23424856, "country": "Japan", "woeid": 1117227, "countryCode": "JP" }, { "name": "Kawasaki", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1117502", "parentid": 23424856, "country": "Japan", "woeid": 1117502, "countryCode": "JP" }, { "name": "Kobe", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1117545", "parentid": 23424856, "country": "Japan", "woeid": 1117545, "countryCode": "JP" }, { "name": "Kumamoto", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1117605", "parentid": 23424856, "country": "Japan", "woeid": 1117605, "countryCode": "JP" }, { "name": "Nagoya", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1117817", "parentid": 23424856, "country": "Japan", "woeid": 1117817, "countryCode": "JP" }, { "name": "Niigata", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1117881", "parentid": 23424856, "country": "Japan", "woeid": 1117881, "countryCode": "JP" }, { "name": "Sagamihara", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1118072", "parentid": 23424856, "country": "Japan", "woeid": 1118072, "countryCode": "JP" }, { "name": "Sapporo", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1118108", "parentid": 23424856, "country": "Japan", "woeid": 1118108, "countryCode": "JP" }, { "name": "Sendai", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1118129", "parentid": 23424856, "country": "Japan", "woeid": 1118129, "countryCode": "JP" }, { "name": "Takamatsu", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1118285", "parentid": 23424856, "country": "Japan", "woeid": 1118285, "countryCode": "JP" }, { "name": "Tokyo", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1118370", "parentid": 23424856, "country": "Japan", "woeid": 1118370, "countryCode": "JP" }, { "name": "Yokohama", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1118550", "parentid": 23424856, "country": "Japan", "woeid": 1118550, "countryCode": "JP" }, { "name": "Goyang", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1130853", "parentid": 23424868, "country": "Korea", "woeid": 1130853, "countryCode": "KR" }, { "name": "Yongin", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132094", "parentid": 23424868, "country": "Korea", "woeid": 1132094, "countryCode": "KR" }, { "name": "Ansan", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132444", "parentid": 23424868, "country": "Korea", "woeid": 1132444, "countryCode": "KR" }, { "name": "Bucheon", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132445", "parentid": 23424868, "country": "Korea", "woeid": 1132445, "countryCode": "KR" }, { "name": "Busan", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132447", "parentid": 23424868, "country": "Korea", "woeid": 1132447, "countryCode": "KR" }, { "name": "Changwon", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132449", "parentid": 23424868, "country": "Korea", "woeid": 1132449, "countryCode": "KR" }, { "name": "Daegu", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132466", "parentid": 23424868, "country": "Korea", "woeid": 1132466, "countryCode": "KR" }, { "name": "Gwangju", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132481", "parentid": 23424868, "country": "Korea", "woeid": 1132481, "countryCode": "KR" }, { "name": "Incheon", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132496", "parentid": 23424868, "country": "Korea", "woeid": 1132496, "countryCode": "KR" }, { "name": "Seongnam", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132559", "parentid": 23424868, "country": "Korea", "woeid": 1132559, "countryCode": "KR" }, { "name": "Suwon", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132567", "parentid": 23424868, "country": "Korea", "woeid": 1132567, "countryCode": "KR" }, { "name": "Ulsan", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132578", "parentid": 23424868, "country": "Korea", "woeid": 1132578, "countryCode": "KR" }, { "name": "Seoul", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132599", "parentid": 23424868, "country": "Korea", "woeid": 1132599, "countryCode": "KR" }, { "name": "Kajang", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1141268", "parentid": 23424901, "country": "Malaysia", "woeid": 1141268, "countryCode": "MY" }, { "name": "Ipoh", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1154679", "parentid": 23424901, "country": "Malaysia", "woeid": 1154679, "countryCode": "MY" }, { "name": "Johor Bahru", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1154698", "parentid": 23424901, "country": "Malaysia", "woeid": 1154698, "countryCode": "MY" }, { "name": "Klang", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1154726", "parentid": 23424901, "country": "Malaysia", "woeid": 1154726, "countryCode": "MY" }, { "name": "Kuala Lumpur", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1154781", "parentid": 23424901, "country": "Malaysia", "woeid": 1154781, "countryCode": "MY" }, { "name": "Calocan", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1167715", "parentid": 23424934, "country": "Philippines", "woeid": 1167715, "countryCode": "PH" }, { "name": "Makati", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1180689", "parentid": 23424934, "country": "Philippines", "woeid": 1180689, "countryCode": "PH" }, { "name": "Pasig", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1187115", "parentid": 23424934, "country": "Philippines", "woeid": 1187115, "countryCode": "PH" }, { "name": "Taguig", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1195098", "parentid": 23424934, "country": "Philippines", "woeid": 1195098, "countryCode": "PH" }, { "name": "Antipolo", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1198785", "parentid": 23424934, "country": "Philippines", "woeid": 1198785, "countryCode": "PH" }, { "name": "Cagayan de Oro", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1199002", "parentid": 23424934, "country": "Philippines", "woeid": 1199002, "countryCode": "PH" }, { "name": "Cebu City", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1199079", "parentid": 23424934, "country": "Philippines", "woeid": 1199079, "countryCode": "PH" }, { "name": "Davao City", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1199136", "parentid": 23424934, "country": "Philippines", "woeid": 1199136, "countryCode": "PH" }, { "name": "Manila", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1199477", "parentid": 23424934, "country": "Philippines", "woeid": 1199477, "countryCode": "PH" }, { "name": "Quezon City", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1199682", "parentid": 23424934, "country": "Philippines", "woeid": 1199682, "countryCode": "PH" }, { "name": "Zamboanga City", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1199980", "parentid": 23424934, "country": "Philippines", "woeid": 1199980, "countryCode": "PH" }, { "name": "Bangkok", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1225448", "parentid": 23424960, "country": "Thailand", "woeid": 1225448, "countryCode": "TH" }, { "name": "Hanoi", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1236594", "parentid": 23424984, "country": "Vietnam", "woeid": 1236594, "countryCode": "VN" }, { "name": "Hai Phong", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1236690", "parentid": 23424984, "country": "Vietnam", "woeid": 1236690, "countryCode": "VN" }, { "name": "Can Tho", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1252351", "parentid": 23424984, "country": "Vietnam", "woeid": 1252351, "countryCode": "VN" }, { "name": "Da Nang", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1252376", "parentid": 23424984, "country": "Vietnam", "woeid": 1252376, "countryCode": "VN" }, { "name": "Ho Chi Minh City", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1252431", "parentid": 23424984, "country": "Vietnam", "woeid": 1252431, "countryCode": "VN" }, { "name": "Algiers", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1253079", "parentid": 23424740, "country": "Algeria", "woeid": 1253079, "countryCode": "DZ" }, { "name": "Accra", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1326075", "parentid": 23424824, "country": "Ghana", "woeid": 1326075, "countryCode": "GH" }, { "name": "Kumasi", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1330595", "parentid": 23424824, "country": "Ghana", "woeid": 1330595, "countryCode": "GH" }, { "name": "Benin City", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1387660", "parentid": 23424908, "country": "Nigeria", "woeid": 1387660, "countryCode": "NG" }, { "name": "Ibadan", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1393672", "parentid": 23424908, "country": "Nigeria", "woeid": 1393672, "countryCode": "NG" }, { "name": "Kaduna", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1396439", "parentid": 23424908, "country": "Nigeria", "woeid": 1396439, "countryCode": "NG" }, { "name": "Kano", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1396803", "parentid": 23424908, "country": "Nigeria", "woeid": 1396803, "countryCode": "NG" }, { "name": "Lagos", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1398823", "parentid": 23424908, "country": "Nigeria", "woeid": 1398823, "countryCode": "NG" }, { "name": "Port Harcourt", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1404447", "parentid": 23424908, "country": "Nigeria", "woeid": 1404447, "countryCode": "NG" }, { "name": "Giza", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1521643", "parentid": 23424802, "country": "Egypt", "woeid": 1521643, "countryCode": "EG" }, { "name": "Cairo", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1521894", "parentid": 23424802, "country": "Egypt", "woeid": 1521894, "countryCode": "EG" }, { "name": "Alexandria", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1522006", "parentid": 23424802, "country": "Egypt", "woeid": 1522006, "countryCode": "EG" }, { "name": "Mombasa", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1528335", "parentid": 23424863, "country": "Kenya", "woeid": 1528335, "countryCode": "KE" }, { "name": "Nairobi", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1528488", "parentid": 23424863, "country": "Kenya", "woeid": 1528488, "countryCode": "KE" }, { "name": "Durban", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1580913", "parentid": 23424942, "country": "South Africa", "woeid": 1580913, "countryCode": "ZA" }, { "name": "Johannesburg", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1582504", "parentid": 23424942, "country": "South Africa", "woeid": 1582504, "countryCode": "ZA" }, { "name": "Port Elizabeth", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1586614", "parentid": 23424942, "country": "South Africa", "woeid": 1586614, "countryCode": "ZA" }, { "name": "Pretoria", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1586638", "parentid": 23424942, "country": "South Africa", "woeid": 1586638, "countryCode": "ZA" }, { "name": "Soweto", "placeType": { "code": 22, "name": "Unknown" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1587677", "parentid": 23424942, "country": "South Africa", "woeid": 1587677, "countryCode": "ZA" }, { "name": "Cape Town", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1591691", "parentid": 23424942, "country": "South Africa", "woeid": 1591691, "countryCode": "ZA" }, { "name": "Medina", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1937801", "parentid": 23424938, "country": "Saudi Arabia", "woeid": 1937801, "countryCode": "SA" }, { "name": "Dammam", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1939574", "parentid": 23424938, "country": "Saudi Arabia", "woeid": 1939574, "countryCode": "SA" }, { "name": "Riyadh", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1939753", "parentid": 23424938, "country": "Saudi Arabia", "woeid": 1939753, "countryCode": "SA" }, { "name": "Jeddah", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1939873", "parentid": 23424938, "country": "Saudi Arabia", "woeid": 1939873, "countryCode": "SA" }, { "name": "Mecca", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1939897", "parentid": 23424938, "country": "Saudi Arabia", "woeid": 1939897, "countryCode": "SA" }, { "name": "Sharjah", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1940119", "parentid": 23424738, "country": "United Arab Emirates", "woeid": 1940119, "countryCode": "AE" }, { "name": "Abu Dhabi", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1940330", "parentid": 23424738, "country": "United Arab Emirates", "woeid": 1940330, "countryCode": "AE" }, { "name": "Dubai", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1940345", "parentid": 23424738, "country": "United Arab Emirates", "woeid": 1940345, "countryCode": "AE" }, { "name": "Haifa", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1967449", "parentid": 23424852, "country": "Israel", "woeid": 1967449, "countryCode": "IL" }, { "name": "Tel Aviv", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1968212", "parentid": 23424852, "country": "Israel", "woeid": 1968212, "countryCode": "IL" }, { "name": "Jerusalem", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1968222", "parentid": 23424852, "country": "Israel", "woeid": 1968222, "countryCode": "IL" }, { "name": "Amman", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1968902", "parentid": 23424860, "country": "Jordan", "woeid": 1968902, "countryCode": "JO" }, { "name": "Chelyabinsk", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1997422", "parentid": 23424936, "country": "Russia", "woeid": 1997422, "countryCode": "RU" }, { "name": "Khabarovsk", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2018708", "parentid": 23424936, "country": "Russia", "woeid": 2018708, "countryCode": "RU" }, { "name": "Krasnodar", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2028717", "parentid": 23424936, "country": "Russia", "woeid": 2028717, "countryCode": "RU" }, { "name": "Krasnoyarsk", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2029043", "parentid": 23424936, "country": "Russia", "woeid": 2029043, "countryCode": "RU" }, { "name": "Samara", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2077746", "parentid": 23424936, "country": "Russia", "woeid": 2077746, "countryCode": "RU" }, { "name": "Voronezh", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2108210", "parentid": 23424936, "country": "Russia", "woeid": 2108210, "countryCode": "RU" }, { "name": "Yekaterinburg", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2112237", "parentid": 23424936, "country": "Russia", "woeid": 2112237, "countryCode": "RU" }, { "name": "Irkutsk", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2121040", "parentid": 23424936, "country": "Russia", "woeid": 2121040, "countryCode": "RU" }, { "name": "Kazan", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2121267", "parentid": 23424936, "country": "Russia", "woeid": 2121267, "countryCode": "RU" }, { "name": "Moscow", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2122265", "parentid": 23424936, "country": "Russia", "woeid": 2122265, "countryCode": "RU" }, { "name": "Nizhny Novgorod", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2122471", "parentid": 23424936, "country": "Russia", "woeid": 2122471, "countryCode": "RU" }, { "name": "Novosibirsk", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2122541", "parentid": 23424936, "country": "Russia", "woeid": 2122541, "countryCode": "RU" }, { "name": "Omsk", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2122641", "parentid": 23424936, "country": "Russia", "woeid": 2122641, "countryCode": "RU" }, { "name": "Perm", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2122814", "parentid": 23424936, "country": "Russia", "woeid": 2122814, "countryCode": "RU" }, { "name": "Rostov-on-Don", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2123177", "parentid": 23424936, "country": "Russia", "woeid": 2123177, "countryCode": "RU" }, { "name": "Saint Petersburg", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2123260", "parentid": 23424936, "country": "Russia", "woeid": 2123260, "countryCode": "RU" }, { "name": "Ufa", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2124045", "parentid": 23424936, "country": "Russia", "woeid": 2124045, "countryCode": "RU" }, { "name": "Vladivostok", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2124288", "parentid": 23424936, "country": "Russia", "woeid": 2124288, "countryCode": "RU" }, { "name": "Volgograd", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2124298", "parentid": 23424936, "country": "Russia", "woeid": 2124298, "countryCode": "RU" }, { "name": "Karachi", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2211096", "parentid": 23424922, "country": "Pakistan", "woeid": 2211096, "countryCode": "PK" }, { "name": "Lahore", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2211177", "parentid": 23424922, "country": "Pakistan", "woeid": 2211177, "countryCode": "PK" }, { "name": "Multan", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2211269", "parentid": 23424922, "country": "Pakistan", "woeid": 2211269, "countryCode": "PK" }, { "name": "Rawalpindi", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2211387", "parentid": 23424922, "country": "Pakistan", "woeid": 2211387, "countryCode": "PK" }, { "name": "Faisalabad", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2211574", "parentid": 23424922, "country": "Pakistan", "woeid": 2211574, "countryCode": "PK" }, { "name": "Muscat", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2268284", "parentid": 23424898, "country": "Oman", "woeid": 2268284, "countryCode": "OM" }, { "name": "Nagpur", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2282863", "parentid": 23424848, "country": "India", "woeid": 2282863, "countryCode": "IN" }, { "name": "Lucknow", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295377", "parentid": 23424848, "country": "India", "woeid": 2295377, "countryCode": "IN" }, { "name": "Kanpur", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295378", "parentid": 23424848, "country": "India", "woeid": 2295378, "countryCode": "IN" }, { "name": "Patna", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295381", "parentid": 23424848, "country": "India", "woeid": 2295381, "countryCode": "IN" }, { "name": "Ranchi", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295383", "parentid": 23424848, "country": "India", "woeid": 2295383, "countryCode": "IN" }, { "name": "Kolkata", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295386", "parentid": 23424848, "country": "India", "woeid": 2295386, "countryCode": "IN" }, { "name": "Srinagar", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295387", "parentid": 23424848, "country": "India", "woeid": 2295387, "countryCode": "IN" }, { "name": "Amritsar", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295388", "parentid": 23424848, "country": "India", "woeid": 2295388, "countryCode": "IN" }, { "name": "Jaipur", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295401", "parentid": 23424848, "country": "India", "woeid": 2295401, "countryCode": "IN" }, { "name": "Ahmedabad", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295402", "parentid": 23424848, "country": "India", "woeid": 2295402, "countryCode": "IN" }, { "name": "Rajkot", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295404", "parentid": 23424848, "country": "India", "woeid": 2295404, "countryCode": "IN" }, { "name": "Surat", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295405", "parentid": 23424848, "country": "India", "woeid": 2295405, "countryCode": "IN" }, { "name": "Bhopal", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295407", "parentid": 23424848, "country": "India", "woeid": 2295407, "countryCode": "IN" }, { "name": "Indore", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295408", "parentid": 23424848, "country": "India", "woeid": 2295408, "countryCode": "IN" }, { "name": "Thane", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295410", "parentid": 23424848, "country": "India", "woeid": 2295410, "countryCode": "IN" }, { "name": "Mumbai", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295411", "parentid": 23424848, "country": "India", "woeid": 2295411, "countryCode": "IN" }, { "name": "Pune", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295412", "parentid": 23424848, "country": "India", "woeid": 2295412, "countryCode": "IN" }, { "name": "Hyderabad", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295414", "parentid": 23424848, "country": "India", "woeid": 2295414, "countryCode": "IN" }, { "name": "Bangalore", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295420", "parentid": 23424848, "country": "India", "woeid": 2295420, "countryCode": "IN" }, { "name": "Chennai", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295424", "parentid": 23424848, "country": "India", "woeid": 2295424, "countryCode": "IN" }, { "name": "Mersin", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2323778", "parentid": 23424969, "country": "Turkey", "woeid": 2323778, "countryCode": "TR" }, { "name": "Adana", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2343678", "parentid": 23424969, "country": "Turkey", "woeid": 2343678, "countryCode": "TR" }, { "name": "Ankara", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2343732", "parentid": 23424969, "country": "Turkey", "woeid": 2343732, "countryCode": "TR" }, { "name": "Antalya", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2343733", "parentid": 23424969, "country": "Turkey", "woeid": 2343733, "countryCode": "TR" }, { "name": "Bursa", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2343843", "parentid": 23424969, "country": "Turkey", "woeid": 2343843, "countryCode": "TR" }, { "name": "Diyarbak\u0131r", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2343932", "parentid": 23424969, "country": "Turkey", "woeid": 2343932, "countryCode": "TR" }, { "name": "Eski\u015Fehir", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2343980", "parentid": 23424969, "country": "Turkey", "woeid": 2343980, "countryCode": "TR" }, { "name": "Gaziantep", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2343999", "parentid": 23424969, "country": "Turkey", "woeid": 2343999, "countryCode": "TR" }, { "name": "Istanbul", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2344116", "parentid": 23424969, "country": "Turkey", "woeid": 2344116, "countryCode": "TR" }, { "name": "Izmir", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2344117", "parentid": 23424969, "country": "Turkey", "woeid": 2344117, "countryCode": "TR" }, { "name": "Kayseri", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2344174", "parentid": 23424969, "country": "Turkey", "woeid": 2344174, "countryCode": "TR" }, { "name": "Konya", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2344210", "parentid": 23424969, "country": "Turkey", "woeid": 2344210, "countryCode": "TR" }, { "name": "Okinawa", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2345896", "parentid": 23424856, "country": "Japan", "woeid": 2345896, "countryCode": "JP" }, { "name": "Daejeon", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2345975", "parentid": 23424868, "country": "Korea", "woeid": 2345975, "countryCode": "KR" }, { "name": "Auckland", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2348079", "parentid": 23424916, "country": "New Zealand", "woeid": 2348079, "countryCode": "NZ" }, { "name": "Albuquerque", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2352824", "parentid": 23424977, "country": "United States", "woeid": 2352824, "countryCode": "US" }, { "name": "Atlanta", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2357024", "parentid": 23424977, "country": "United States", "woeid": 2357024, "countryCode": "US" }, { "name": "Austin", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2357536", "parentid": 23424977, "country": "United States", "woeid": 2357536, "countryCode": "US" }, { "name": "Baltimore", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2358820", "parentid": 23424977, "country": "United States", "woeid": 2358820, "countryCode": "US" }, { "name": "Baton Rouge", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2359991", "parentid": 23424977, "country": "United States", "woeid": 2359991, "countryCode": "US" }, { "name": "Birmingham", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2364559", "parentid": 23424977, "country": "United States", "woeid": 2364559, "countryCode": "US" }, { "name": "Boston", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2367105", "parentid": 23424977, "country": "United States", "woeid": 2367105, "countryCode": "US" }, { "name": "Charlotte", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2378426", "parentid": 23424977, "country": "United States", "woeid": 2378426, "countryCode": "US" }, { "name": "Chicago", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2379574", "parentid": 23424977, "country": "United States", "woeid": 2379574, "countryCode": "US" }, { "name": "Cincinnati", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2380358", "parentid": 23424977, "country": "United States", "woeid": 2380358, "countryCode": "US" }, { "name": "Cleveland", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2381475", "parentid": 23424977, "country": "United States", "woeid": 2381475, "countryCode": "US" }, { "name": "Colorado Springs", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2383489", "parentid": 23424977, "country": "United States", "woeid": 2383489, "countryCode": "US" }, { "name": "Columbus", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2383660", "parentid": 23424977, "country": "United States", "woeid": 2383660, "countryCode": "US" }, { "name": "Dallas-Ft. Worth", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2388929", "parentid": 23424977, "country": "United States", "woeid": 2388929, "countryCode": "US" }, { "name": "Denver", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2391279", "parentid": 23424977, "country": "United States", "woeid": 2391279, "countryCode": "US" }, { "name": "Detroit", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2391585", "parentid": 23424977, "country": "United States", "woeid": 2391585, "countryCode": "US" }, { "name": "El Paso", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2397816", "parentid": 23424977, "country": "United States", "woeid": 2397816, "countryCode": "US" }, { "name": "Fresno", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2407517", "parentid": 23424977, "country": "United States", "woeid": 2407517, "countryCode": "US" }, { "name": "Greensboro", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2414469", "parentid": 23424977, "country": "United States", "woeid": 2414469, "countryCode": "US" }, { "name": "Harrisburg", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2418046", "parentid": 23424977, "country": "United States", "woeid": 2418046, "countryCode": "US" }, { "name": "Honolulu", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2423945", "parentid": 23424977, "country": "United States", "woeid": 2423945, "countryCode": "US" }, { "name": "Houston", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2424766", "parentid": 23424977, "country": "United States", "woeid": 2424766, "countryCode": "US" }, { "name": "Indianapolis", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2427032", "parentid": 23424977, "country": "United States", "woeid": 2427032, "countryCode": "US" }, { "name": "Jackson", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2428184", "parentid": 23424977, "country": "United States", "woeid": 2428184, "countryCode": "US" }, { "name": "Jacksonville", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2428344", "parentid": 23424977, "country": "United States", "woeid": 2428344, "countryCode": "US" }, { "name": "Kansas City", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2430683", "parentid": 23424977, "country": "United States", "woeid": 2430683, "countryCode": "US" }, { "name": "Las Vegas", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2436704", "parentid": 23424977, "country": "United States", "woeid": 2436704, "countryCode": "US" }, { "name": "Long Beach", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2441472", "parentid": 23424977, "country": "United States", "woeid": 2441472, "countryCode": "US" }, { "name": "Los Angeles", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2442047", "parentid": 23424977, "country": "United States", "woeid": 2442047, "countryCode": "US" }, { "name": "Louisville", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2442327", "parentid": 23424977, "country": "United States", "woeid": 2442327, "countryCode": "US" }, { "name": "Memphis", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2449323", "parentid": 23424977, "country": "United States", "woeid": 2449323, "countryCode": "US" }, { "name": "Mesa", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2449808", "parentid": 23424977, "country": "United States", "woeid": 2449808, "countryCode": "US" }, { "name": "Miami", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2450022", "parentid": 23424977, "country": "United States", "woeid": 2450022, "countryCode": "US" }, { "name": "Milwaukee", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2451822", "parentid": 23424977, "country": "United States", "woeid": 2451822, "countryCode": "US" }, { "name": "Minneapolis", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2452078", "parentid": 23424977, "country": "United States", "woeid": 2452078, "countryCode": "US" }, { "name": "Nashville", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2457170", "parentid": 23424977, "country": "United States", "woeid": 2457170, "countryCode": "US" }, { "name": "New Haven", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2458410", "parentid": 23424977, "country": "United States", "woeid": 2458410, "countryCode": "US" }, { "name": "New Orleans", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2458833", "parentid": 23424977, "country": "United States", "woeid": 2458833, "countryCode": "US" }, { "name": "New York", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2459115", "parentid": 23424977, "country": "United States", "woeid": 2459115, "countryCode": "US" }, { "name": "Norfolk", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2460389", "parentid": 23424977, "country": "United States", "woeid": 2460389, "countryCode": "US" }, { "name": "Oklahoma City", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2464592", "parentid": 23424977, "country": "United States", "woeid": 2464592, "countryCode": "US" }, { "name": "Omaha", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2465512", "parentid": 23424977, "country": "United States", "woeid": 2465512, "countryCode": "US" }, { "name": "Orlando", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2466256", "parentid": 23424977, "country": "United States", "woeid": 2466256, "countryCode": "US" }, { "name": "Philadelphia", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2471217", "parentid": 23424977, "country": "United States", "woeid": 2471217, "countryCode": "US" }, { "name": "Phoenix", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2471390", "parentid": 23424977, "country": "United States", "woeid": 2471390, "countryCode": "US" }, { "name": "Pittsburgh", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2473224", "parentid": 23424977, "country": "United States", "woeid": 2473224, "countryCode": "US" }, { "name": "Portland", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2475687", "parentid": 23424977, "country": "United States", "woeid": 2475687, "countryCode": "US" }, { "name": "Providence", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2477058", "parentid": 23424977, "country": "United States", "woeid": 2477058, "countryCode": "US" }, { "name": "Raleigh", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2478307", "parentid": 23424977, "country": "United States", "woeid": 2478307, "countryCode": "US" }, { "name": "Richmond", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2480894", "parentid": 23424977, "country": "United States", "woeid": 2480894, "countryCode": "US" }, { "name": "Sacramento", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2486340", "parentid": 23424977, "country": "United States", "woeid": 2486340, "countryCode": "US" }, { "name": "St. Louis", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2486982", "parentid": 23424977, "country": "United States", "woeid": 2486982, "countryCode": "US" }, { "name": "Salt Lake City", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2487610", "parentid": 23424977, "country": "United States", "woeid": 2487610, "countryCode": "US" }, { "name": "San Antonio", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2487796", "parentid": 23424977, "country": "United States", "woeid": 2487796, "countryCode": "US" }, { "name": "San Diego", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2487889", "parentid": 23424977, "country": "United States", "woeid": 2487889, "countryCode": "US" }, { "name": "San Francisco", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2487956", "parentid": 23424977, "country": "United States", "woeid": 2487956, "countryCode": "US" }, { "name": "San Jose", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2488042", "parentid": 23424977, "country": "United States", "woeid": 2488042, "countryCode": "US" }, { "name": "Seattle", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2490383", "parentid": 23424977, "country": "United States", "woeid": 2490383, "countryCode": "US" }, { "name": "Tallahassee", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2503713", "parentid": 23424977, "country": "United States", "woeid": 2503713, "countryCode": "US" }, { "name": "Tampa", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2503863", "parentid": 23424977, "country": "United States", "woeid": 2503863, "countryCode": "US" }, { "name": "Tucson", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2508428", "parentid": 23424977, "country": "United States", "woeid": 2508428, "countryCode": "US" }, { "name": "Virginia Beach", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2512636", "parentid": 23424977, "country": "United States", "woeid": 2512636, "countryCode": "US" }, { "name": "Washington", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2514815", "parentid": 23424977, "country": "United States", "woeid": 2514815, "countryCode": "US" }, { "name": "Osaka", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/15015370", "parentid": 23424856, "country": "Japan", "woeid": 15015370, "countryCode": "JP" }, { "name": "Kyoto", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/15015372", "parentid": 23424856, "country": "Japan", "woeid": 15015372, "countryCode": "JP" }, { "name": "Delhi", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/20070458", "parentid": 23424848, "country": "India", "woeid": 20070458, "countryCode": "IN" }, { "name": "United Arab Emirates", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424738", "parentid": 1, "country": "United Arab Emirates", "woeid": 23424738, "countryCode": "AE" }, { "name": "Algeria", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424740", "parentid": 1, "country": "Algeria", "woeid": 23424740, "countryCode": "DZ" }, { "name": "Argentina", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424747", "parentid": 1, "country": "Argentina", "woeid": 23424747, "countryCode": "AR" }, { "name": "Australia", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424748", "parentid": 1, "country": "Australia", "woeid": 23424748, "countryCode": "AU" }, { "name": "Austria", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424750", "parentid": 1, "country": "Austria", "woeid": 23424750, "countryCode": "AT" }, { "name": "Bahrain", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424753", "parentid": 1, "country": "Bahrain", "woeid": 23424753, "countryCode": "BH" }, { "name": "Belgium", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424757", "parentid": 1, "country": "Belgium", "woeid": 23424757, "countryCode": "BE" }, { "name": "Belarus", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424765", "parentid": 1, "country": "Belarus", "woeid": 23424765, "countryCode": "BY" }, { "name": "Brazil", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424768", "parentid": 1, "country": "Brazil", "woeid": 23424768, "countryCode": "BR" }, { "name": "Canada", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424775", "parentid": 1, "country": "Canada", "woeid": 23424775, "countryCode": "CA" }, { "name": "Chile", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424782", "parentid": 1, "country": "Chile", "woeid": 23424782, "countryCode": "CL" }, { "name": "Colombia", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424787", "parentid": 1, "country": "Colombia", "woeid": 23424787, "countryCode": "CO" }, { "name": "Denmark", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424796", "parentid": 1, "country": "Denmark", "woeid": 23424796, "countryCode": "DK" }, { "name": "Dominican Republic", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424800", "parentid": 1, "country": "Dominican Republic", "woeid": 23424800, "countryCode": "DO" }, { "name": "Ecuador", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424801", "parentid": 1, "country": "Ecuador", "woeid": 23424801, "countryCode": "EC" }, { "name": "Egypt", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424802", "parentid": 1, "country": "Egypt", "woeid": 23424802, "countryCode": "EG" }, { "name": "Ireland", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424803", "parentid": 1, "country": "Ireland", "woeid": 23424803, "countryCode": "IE" }, { "name": "France", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424819", "parentid": 1, "country": "France", "woeid": 23424819, "countryCode": "FR" }, { "name": "Ghana", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424824", "parentid": 1, "country": "Ghana", "woeid": 23424824, "countryCode": "GH" }, { "name": "Germany", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424829", "parentid": 1, "country": "Germany", "woeid": 23424829, "countryCode": "DE" }, { "name": "Greece", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424833", "parentid": 1, "country": "Greece", "woeid": 23424833, "countryCode": "GR" }, { "name": "Guatemala", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424834", "parentid": 1, "country": "Guatemala", "woeid": 23424834, "countryCode": "GT" }, { "name": "Indonesia", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424846", "parentid": 1, "country": "Indonesia", "woeid": 23424846, "countryCode": "ID" }, { "name": "India", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424848", "parentid": 1, "country": "India", "woeid": 23424848, "countryCode": "IN" }, { "name": "Israel", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424852", "parentid": 1, "country": "Israel", "woeid": 23424852, "countryCode": "IL" }, { "name": "Italy", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424853", "parentid": 1, "country": "Italy", "woeid": 23424853, "countryCode": "IT" }, { "name": "Japan", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424856", "parentid": 1, "country": "Japan", "woeid": 23424856, "countryCode": "JP" }, { "name": "Jordan", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424860", "parentid": 1, "country": "Jordan", "woeid": 23424860, "countryCode": "JO" }, { "name": "Kenya", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424863", "parentid": 1, "country": "Kenya", "woeid": 23424863, "countryCode": "KE" }, { "name": "Korea", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424868", "parentid": 1, "country": "Korea", "woeid": 23424868, "countryCode": "KR" }, { "name": "Kuwait", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424870", "parentid": 1, "country": "Kuwait", "woeid": 23424870, "countryCode": "KW" }, { "name": "Lebanon", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424873", "parentid": 1, "country": "Lebanon", "woeid": 23424873, "countryCode": "LB" }, { "name": "Latvia", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424874", "parentid": 1, "country": "Latvia", "woeid": 23424874, "countryCode": "LV" }, { "name": "Oman", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424898", "parentid": 1, "country": "Oman", "woeid": 23424898, "countryCode": "OM" }, { "name": "Mexico", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424900", "parentid": 1, "country": "Mexico", "woeid": 23424900, "countryCode": "MX" }, { "name": "Malaysia", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424901", "parentid": 1, "country": "Malaysia", "woeid": 23424901, "countryCode": "MY" }, { "name": "Nigeria", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424908", "parentid": 1, "country": "Nigeria", "woeid": 23424908, "countryCode": "NG" }, { "name": "Netherlands", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424909", "parentid": 1, "country": "Netherlands", "woeid": 23424909, "countryCode": "NL" }, { "name": "Norway", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424910", "parentid": 1, "country": "Norway", "woeid": 23424910, "countryCode": "NO" }, { "name": "New Zealand", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424916", "parentid": 1, "country": "New Zealand", "woeid": 23424916, "countryCode": "NZ" }, { "name": "Peru", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424919", "parentid": 1, "country": "Peru", "woeid": 23424919, "countryCode": "PE" }, { "name": "Pakistan", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424922", "parentid": 1, "country": "Pakistan", "woeid": 23424922, "countryCode": "PK" }, { "name": "Poland", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424923", "parentid": 1, "country": "Poland", "woeid": 23424923, "countryCode": "PL" }, { "name": "Panama", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424924", "parentid": 1, "country": "Panama", "woeid": 23424924, "countryCode": "PA" }, { "name": "Portugal", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424925", "parentid": 1, "country": "Portugal", "woeid": 23424925, "countryCode": "PT" }, { "name": "Qatar", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424930", "parentid": 1, "country": "Qatar", "woeid": 23424930, "countryCode": "QA" }, { "name": "Philippines", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424934", "parentid": 1, "country": "Philippines", "woeid": 23424934, "countryCode": "PH" }, { "name": "Puerto Rico", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424935", "parentid": 1, "country": "Puerto Rico", "woeid": 23424935, "countryCode": "PR" }, { "name": "Russia", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424936", "parentid": 1, "country": "Russia", "woeid": 23424936, "countryCode": "RU" }, { "name": "Saudi Arabia", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424938", "parentid": 1, "country": "Saudi Arabia", "woeid": 23424938, "countryCode": "SA" }, { "name": "South Africa", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424942", "parentid": 1, "country": "South Africa", "woeid": 23424942, "countryCode": "ZA" }, { "name": "Singapore", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424948", "parentid": 1, "country": "Singapore", "woeid": 23424948, "countryCode": "SG" }, { "name": "Spain", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424950", "parentid": 1, "country": "Spain", "woeid": 23424950, "countryCode": "ES" }, { "name": "Sweden", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424954", "parentid": 1, "country": "Sweden", "woeid": 23424954, "countryCode": "SE" }, { "name": "Switzerland", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424957", "parentid": 1, "country": "Switzerland", "woeid": 23424957, "countryCode": "CH" }, { "name": "Thailand", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424960", "parentid": 1, "country": "Thailand", "woeid": 23424960, "countryCode": "TH" }, { "name": "Turkey", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424969", "parentid": 1, "country": "Turkey", "woeid": 23424969, "countryCode": "TR" }, { "name": "United Kingdom", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424975", "parentid": 1, "country": "United Kingdom", "woeid": 23424975, "countryCode": "GB" }, { "name": "Ukraine", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424976", "parentid": 1, "country": "Ukraine", "woeid": 23424976, "countryCode": "UA" }, { "name": "United States", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424977", "parentid": 1, "country": "United States", "woeid": 23424977, "countryCode": "US" }, { "name": "Venezuela", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424982", "parentid": 1, "country": "Venezuela", "woeid": 23424982, "countryCode": "VE" }, { "name": "Vietnam", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424984", "parentid": 1, "country": "Vietnam", "woeid": 23424984, "countryCode": "VN" }, { "name": "Petaling", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/56013632", "parentid": 23424901, "country": "Malaysia", "woeid": 56013632, "countryCode": "MY" }, { "name": "Hulu Langat", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/56013645", "parentid": 23424901, "country": "Malaysia", "woeid": 56013645, "countryCode": "MY" }, { "name": "Ahsa", "placeType": { "code": 9, "name": "Unknown" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/56120136", "parentid": 23424938, "country": "Saudi Arabia", "woeid": 56120136, "countryCode": "SA" }, { "name": "Okayama", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/90036018", "parentid": 23424856, "country": "Japan", "woeid": 90036018, "countryCode": "JP" } ] ================================================ FILE: src/test/resources/twitter/rest/trends/closest_locations.json ================================================ [ { "name": "Worldwide", "placeType": { "code": 19, "name": "Supername" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1", "parentid": 0, "country": "", "woeid": 1, "countryCode": null }, { "name": "Winnipeg", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2972", "parentid": 23424775, "country": "Canada", "woeid": 2972, "countryCode": "CA" }, { "name": "Ottawa", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/3369", "parentid": 23424775, "country": "Canada", "woeid": 3369, "countryCode": "CA" }, { "name": "Quebec", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/3444", "parentid": 23424775, "country": "Canada", "woeid": 3444, "countryCode": "CA" }, { "name": "Montreal", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/3534", "parentid": 23424775, "country": "Canada", "woeid": 3534, "countryCode": "CA" }, { "name": "Toronto", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/4118", "parentid": 23424775, "country": "Canada", "woeid": 4118, "countryCode": "CA" }, { "name": "Edmonton", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/8676", "parentid": 23424775, "country": "Canada", "woeid": 8676, "countryCode": "CA" }, { "name": "Calgary", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/8775", "parentid": 23424775, "country": "Canada", "woeid": 8775, "countryCode": "CA" }, { "name": "Vancouver", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/9807", "parentid": 23424775, "country": "Canada", "woeid": 9807, "countryCode": "CA" }, { "name": "Birmingham", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/12723", "parentid": 23424975, "country": "United Kingdom", "woeid": 12723, "countryCode": "GB" }, { "name": "Blackpool", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/12903", "parentid": 23424975, "country": "United Kingdom", "woeid": 12903, "countryCode": "GB" }, { "name": "Bournemouth", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/13383", "parentid": 23424975, "country": "United Kingdom", "woeid": 13383, "countryCode": "GB" }, { "name": "Brighton", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/13911", "parentid": 23424975, "country": "United Kingdom", "woeid": 13911, "countryCode": "GB" }, { "name": "Bristol", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/13963", "parentid": 23424975, "country": "United Kingdom", "woeid": 13963, "countryCode": "GB" }, { "name": "Cardiff", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/15127", "parentid": 23424975, "country": "United Kingdom", "woeid": 15127, "countryCode": "GB" }, { "name": "Coventry", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/17044", "parentid": 23424975, "country": "United Kingdom", "woeid": 17044, "countryCode": "GB" }, { "name": "Derby", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/18114", "parentid": 23424975, "country": "United Kingdom", "woeid": 18114, "countryCode": "GB" }, { "name": "Edinburgh", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/19344", "parentid": 23424975, "country": "United Kingdom", "woeid": 19344, "countryCode": "GB" }, { "name": "Glasgow", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/21125", "parentid": 23424975, "country": "United Kingdom", "woeid": 21125, "countryCode": "GB" }, { "name": "Hull", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/25211", "parentid": 23424975, "country": "United Kingdom", "woeid": 25211, "countryCode": "GB" }, { "name": "Leeds", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/26042", "parentid": 23424975, "country": "United Kingdom", "woeid": 26042, "countryCode": "GB" }, { "name": "Leicester", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/26062", "parentid": 23424975, "country": "United Kingdom", "woeid": 26062, "countryCode": "GB" }, { "name": "Liverpool", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/26734", "parentid": 23424975, "country": "United Kingdom", "woeid": 26734, "countryCode": "GB" }, { "name": "Manchester", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/28218", "parentid": 23424975, "country": "United Kingdom", "woeid": 28218, "countryCode": "GB" }, { "name": "Middlesbrough", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/28869", "parentid": 23424975, "country": "United Kingdom", "woeid": 28869, "countryCode": "GB" }, { "name": "Newcastle", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/30079", "parentid": 23424975, "country": "United Kingdom", "woeid": 30079, "countryCode": "GB" }, { "name": "Nottingham", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/30720", "parentid": 23424975, "country": "United Kingdom", "woeid": 30720, "countryCode": "GB" }, { "name": "Plymouth", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/32185", "parentid": 23424975, "country": "United Kingdom", "woeid": 32185, "countryCode": "GB" }, { "name": "Portsmouth", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/32452", "parentid": 23424975, "country": "United Kingdom", "woeid": 32452, "countryCode": "GB" }, { "name": "Preston", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/32566", "parentid": 23424975, "country": "United Kingdom", "woeid": 32566, "countryCode": "GB" }, { "name": "Sheffield", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/34503", "parentid": 23424975, "country": "United Kingdom", "woeid": 34503, "countryCode": "GB" }, { "name": "Stoke-on-Trent", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/36240", "parentid": 23424975, "country": "United Kingdom", "woeid": 36240, "countryCode": "GB" }, { "name": "Swansea", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/36758", "parentid": 23424975, "country": "United Kingdom", "woeid": 36758, "countryCode": "GB" }, { "name": "London", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/44418", "parentid": 23424975, "country": "United Kingdom", "woeid": 44418, "countryCode": "GB" }, { "name": "Belfast", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/44544", "parentid": 23424975, "country": "United Kingdom", "woeid": 44544, "countryCode": "GB" }, { "name": "Santo Domingo", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/76456", "parentid": 23424800, "country": "Dominican Republic", "woeid": 76456, "countryCode": "DO" }, { "name": "Guatemala City", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/83123", "parentid": 23424834, "country": "Guatemala", "woeid": 83123, "countryCode": "GT" }, { "name": "Acapulco", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/110978", "parentid": 23424900, "country": "Mexico", "woeid": 110978, "countryCode": "MX" }, { "name": "Aguascalientes", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/111579", "parentid": 23424900, "country": "Mexico", "woeid": 111579, "countryCode": "MX" }, { "name": "Chihuahua", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/115958", "parentid": 23424900, "country": "Mexico", "woeid": 115958, "countryCode": "MX" }, { "name": "Mexico City", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/116545", "parentid": 23424900, "country": "Mexico", "woeid": 116545, "countryCode": "MX" }, { "name": "Ciudad Juarez", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/116556", "parentid": 23424900, "country": "Mexico", "woeid": 116556, "countryCode": "MX" }, { "name": "Nezahualc\u00F3yotl", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/116564", "parentid": 23424900, "country": "Mexico", "woeid": 116564, "countryCode": "MX" }, { "name": "Culiac\u00E1n", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/117994", "parentid": 23424900, "country": "Mexico", "woeid": 117994, "countryCode": "MX" }, { "name": "Ecatepec de Morelos", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/118466", "parentid": 23424900, "country": "Mexico", "woeid": 118466, "countryCode": "MX" }, { "name": "Guadalajara", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/124162", "parentid": 23424900, "country": "Mexico", "woeid": 124162, "countryCode": "MX" }, { "name": "Hermosillo", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/124785", "parentid": 23424900, "country": "Mexico", "woeid": 124785, "countryCode": "MX" }, { "name": "Le\u00F3n", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/131068", "parentid": 23424900, "country": "Mexico", "woeid": 131068, "countryCode": "MX" }, { "name": "M\u00E9rida", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/133327", "parentid": 23424900, "country": "Mexico", "woeid": 133327, "countryCode": "MX" }, { "name": "Mexicali", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/133475", "parentid": 23424900, "country": "Mexico", "woeid": 133475, "countryCode": "MX" }, { "name": "Monterrey", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/134047", "parentid": 23424900, "country": "Mexico", "woeid": 134047, "countryCode": "MX" }, { "name": "Morelia", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/134091", "parentid": 23424900, "country": "Mexico", "woeid": 134091, "countryCode": "MX" }, { "name": "Naucalpan de Ju\u00E1rez", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/134395", "parentid": 23424900, "country": "Mexico", "woeid": 134395, "countryCode": "MX" }, { "name": "Puebla", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/137612", "parentid": 23424900, "country": "Mexico", "woeid": 137612, "countryCode": "MX" }, { "name": "Quer\u00E9taro", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/138045", "parentid": 23424900, "country": "Mexico", "woeid": 138045, "countryCode": "MX" }, { "name": "Saltillo", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/141272", "parentid": 23424900, "country": "Mexico", "woeid": 141272, "countryCode": "MX" }, { "name": "San Luis Potos\u00ED", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/144265", "parentid": 23424900, "country": "Mexico", "woeid": 144265, "countryCode": "MX" }, { "name": "Tijuana", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/149361", "parentid": 23424900, "country": "Mexico", "woeid": 149361, "countryCode": "MX" }, { "name": "Toluca", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/149769", "parentid": 23424900, "country": "Mexico", "woeid": 149769, "countryCode": "MX" }, { "name": "Zapopan", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/151582", "parentid": 23424900, "country": "Mexico", "woeid": 151582, "countryCode": "MX" }, { "name": "Mendoza", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/332471", "parentid": 23424747, "country": "Argentina", "woeid": 332471, "countryCode": "AR" }, { "name": "Santiago", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/349859", "parentid": 23424782, "country": "Chile", "woeid": 349859, "countryCode": "CL" }, { "name": "Concepcion", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/349860", "parentid": 23424782, "country": "Chile", "woeid": 349860, "countryCode": "CL" }, { "name": "Valparaiso", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/349861", "parentid": 23424782, "country": "Chile", "woeid": 349861, "countryCode": "CL" }, { "name": "Bogot\u00E1", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/368148", "parentid": 23424787, "country": "Colombia", "woeid": 368148, "countryCode": "CO" }, { "name": "Cali", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/368149", "parentid": 23424787, "country": "Colombia", "woeid": 368149, "countryCode": "CO" }, { "name": "Medell\u00EDn", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/368150", "parentid": 23424787, "country": "Colombia", "woeid": 368150, "countryCode": "CO" }, { "name": "Barranquilla", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/368151", "parentid": 23424787, "country": "Colombia", "woeid": 368151, "countryCode": "CO" }, { "name": "Quito", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/375732", "parentid": 23424801, "country": "Ecuador", "woeid": 375732, "countryCode": "EC" }, { "name": "Guayaquil", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/375733", "parentid": 23424801, "country": "Ecuador", "woeid": 375733, "countryCode": "EC" }, { "name": "Caracas", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/395269", "parentid": 23424982, "country": "Venezuela", "woeid": 395269, "countryCode": "VE" }, { "name": "Maracaibo", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/395270", "parentid": 23424982, "country": "Venezuela", "woeid": 395270, "countryCode": "VE" }, { "name": "Maracay", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/395271", "parentid": 23424982, "country": "Venezuela", "woeid": 395271, "countryCode": "VE" }, { "name": "Valencia", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/395272", "parentid": 23424982, "country": "Venezuela", "woeid": 395272, "countryCode": "VE" }, { "name": "Barcelona", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/395273", "parentid": 23424982, "country": "Venezuela", "woeid": 395273, "countryCode": "VE" }, { "name": "Ciudad Guayana", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/395275", "parentid": 23424982, "country": "Venezuela", "woeid": 395275, "countryCode": "VE" }, { "name": "Turmero", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/395277", "parentid": 23424982, "country": "Venezuela", "woeid": 395277, "countryCode": "VE" }, { "name": "Lima", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/418440", "parentid": 23424919, "country": "Peru", "woeid": 418440, "countryCode": "PE" }, { "name": "Bras\u00EDlia", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455819", "parentid": 23424768, "country": "Brazil", "woeid": 455819, "countryCode": "BR" }, { "name": "Bel\u00E9m", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455820", "parentid": 23424768, "country": "Brazil", "woeid": 455820, "countryCode": "BR" }, { "name": "Belo Horizonte", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455821", "parentid": 23424768, "country": "Brazil", "woeid": 455821, "countryCode": "BR" }, { "name": "Curitiba", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455822", "parentid": 23424768, "country": "Brazil", "woeid": 455822, "countryCode": "BR" }, { "name": "Porto Alegre", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455823", "parentid": 23424768, "country": "Brazil", "woeid": 455823, "countryCode": "BR" }, { "name": "Recife", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455824", "parentid": 23424768, "country": "Brazil", "woeid": 455824, "countryCode": "BR" }, { "name": "Rio de Janeiro", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455825", "parentid": 23424768, "country": "Brazil", "woeid": 455825, "countryCode": "BR" }, { "name": "Salvador", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455826", "parentid": 23424768, "country": "Brazil", "woeid": 455826, "countryCode": "BR" }, { "name": "S\u00E3o Paulo", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455827", "parentid": 23424768, "country": "Brazil", "woeid": 455827, "countryCode": "BR" }, { "name": "Campinas", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455828", "parentid": 23424768, "country": "Brazil", "woeid": 455828, "countryCode": "BR" }, { "name": "Fortaleza", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455830", "parentid": 23424768, "country": "Brazil", "woeid": 455830, "countryCode": "BR" }, { "name": "Goi\u00E2nia", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455831", "parentid": 23424768, "country": "Brazil", "woeid": 455831, "countryCode": "BR" }, { "name": "Manaus", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455833", "parentid": 23424768, "country": "Brazil", "woeid": 455833, "countryCode": "BR" }, { "name": "S\u00E3o Lu\u00EDs", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455834", "parentid": 23424768, "country": "Brazil", "woeid": 455834, "countryCode": "BR" }, { "name": "Guarulhos", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/455867", "parentid": 23424768, "country": "Brazil", "woeid": 455867, "countryCode": "BR" }, { "name": "C\u00F3rdoba", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/466861", "parentid": 23424747, "country": "Argentina", "woeid": 466861, "countryCode": "AR" }, { "name": "Rosario", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/466862", "parentid": 23424747, "country": "Argentina", "woeid": 466862, "countryCode": "AR" }, { "name": "Barquisimeto", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/468382", "parentid": 23424982, "country": "Venezuela", "woeid": 468382, "countryCode": "VE" }, { "name": "Matur\u00EDn", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/468384", "parentid": 23424982, "country": "Venezuela", "woeid": 468384, "countryCode": "VE" }, { "name": "Buenos Aires", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/468739", "parentid": 23424747, "country": "Argentina", "woeid": 468739, "countryCode": "AR" }, { "name": "Gda\u0144sk", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/493417", "parentid": 23424923, "country": "Poland", "woeid": 493417, "countryCode": "PL" }, { "name": "Krak\u00F3w", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/502075", "parentid": 23424923, "country": "Poland", "woeid": 502075, "countryCode": "PL" }, { "name": "Lodz", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/505120", "parentid": 23424923, "country": "Poland", "woeid": 505120, "countryCode": "PL" }, { "name": "Pozna\u0144", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/514048", "parentid": 23424923, "country": "Poland", "woeid": 514048, "countryCode": "PL" }, { "name": "Warsaw", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/523920", "parentid": 23424923, "country": "Poland", "woeid": 523920, "countryCode": "PL" }, { "name": "Wroclaw", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/526363", "parentid": 23424923, "country": "Poland", "woeid": 526363, "countryCode": "PL" }, { "name": "Vienna", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/551801", "parentid": 23424750, "country": "Austria", "woeid": 551801, "countryCode": "AT" }, { "name": "Cork", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/560472", "parentid": 23424803, "country": "Ireland", "woeid": 560472, "countryCode": "IE" }, { "name": "Dublin", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/560743", "parentid": 23424803, "country": "Ireland", "woeid": 560743, "countryCode": "IE" }, { "name": "Galway", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/560912", "parentid": 23424803, "country": "Ireland", "woeid": 560912, "countryCode": "IE" }, { "name": "Bordeaux", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/580778", "parentid": 23424819, "country": "France", "woeid": 580778, "countryCode": "FR" }, { "name": "Lille", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/608105", "parentid": 23424819, "country": "France", "woeid": 608105, "countryCode": "FR" }, { "name": "Lyon", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/609125", "parentid": 23424819, "country": "France", "woeid": 609125, "countryCode": "FR" }, { "name": "Marseille", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/610264", "parentid": 23424819, "country": "France", "woeid": 610264, "countryCode": "FR" }, { "name": "Montpellier", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/612977", "parentid": 23424819, "country": "France", "woeid": 612977, "countryCode": "FR" }, { "name": "Nantes", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/613858", "parentid": 23424819, "country": "France", "woeid": 613858, "countryCode": "FR" }, { "name": "Paris", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/615702", "parentid": 23424819, "country": "France", "woeid": 615702, "countryCode": "FR" }, { "name": "Rennes", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/619163", "parentid": 23424819, "country": "France", "woeid": 619163, "countryCode": "FR" }, { "name": "Strasbourg", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/627791", "parentid": 23424819, "country": "France", "woeid": 627791, "countryCode": "FR" }, { "name": "Toulouse", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/628886", "parentid": 23424819, "country": "France", "woeid": 628886, "countryCode": "FR" }, { "name": "Berlin", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/638242", "parentid": 23424829, "country": "Germany", "woeid": 638242, "countryCode": "DE" }, { "name": "Bremen", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/641142", "parentid": 23424829, "country": "Germany", "woeid": 641142, "countryCode": "DE" }, { "name": "Dortmund", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/645458", "parentid": 23424829, "country": "Germany", "woeid": 645458, "countryCode": "DE" }, { "name": "Dresden", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/645686", "parentid": 23424829, "country": "Germany", "woeid": 645686, "countryCode": "DE" }, { "name": "Dusseldorf", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/646099", "parentid": 23424829, "country": "Germany", "woeid": 646099, "countryCode": "DE" }, { "name": "Essen", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/648820", "parentid": 23424829, "country": "Germany", "woeid": 648820, "countryCode": "DE" }, { "name": "Frankfurt", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/650272", "parentid": 23424829, "country": "Germany", "woeid": 650272, "countryCode": "DE" }, { "name": "Hamburg", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/656958", "parentid": 23424829, "country": "Germany", "woeid": 656958, "countryCode": "DE" }, { "name": "Cologne", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/667931", "parentid": 23424829, "country": "Germany", "woeid": 667931, "countryCode": "DE" }, { "name": "Leipzig", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/671072", "parentid": 23424829, "country": "Germany", "woeid": 671072, "countryCode": "DE" }, { "name": "Munich", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/676757", "parentid": 23424829, "country": "Germany", "woeid": 676757, "countryCode": "DE" }, { "name": "Stuttgart", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/698064", "parentid": 23424829, "country": "Germany", "woeid": 698064, "countryCode": "DE" }, { "name": "Bologna", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/711080", "parentid": 23424853, "country": "Italy", "woeid": 711080, "countryCode": "IT" }, { "name": "Genoa", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/716085", "parentid": 23424853, "country": "Italy", "woeid": 716085, "countryCode": "IT" }, { "name": "Milan", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/718345", "parentid": 23424853, "country": "Italy", "woeid": 718345, "countryCode": "IT" }, { "name": "Naples", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/719258", "parentid": 23424853, "country": "Italy", "woeid": 719258, "countryCode": "IT" }, { "name": "Palermo", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/719846", "parentid": 23424853, "country": "Italy", "woeid": 719846, "countryCode": "IT" }, { "name": "Rome", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/721943", "parentid": 23424853, "country": "Italy", "woeid": 721943, "countryCode": "IT" }, { "name": "Turin", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/725003", "parentid": 23424853, "country": "Italy", "woeid": 725003, "countryCode": "IT" }, { "name": "Den Haag", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/726874", "parentid": 23424909, "country": "Netherlands", "woeid": 726874, "countryCode": "NL" }, { "name": "Amsterdam", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/727232", "parentid": 23424909, "country": "Netherlands", "woeid": 727232, "countryCode": "NL" }, { "name": "Rotterdam", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/733075", "parentid": 23424909, "country": "Netherlands", "woeid": 733075, "countryCode": "NL" }, { "name": "Utrecht", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/734047", "parentid": 23424909, "country": "Netherlands", "woeid": 734047, "countryCode": "NL" }, { "name": "Barcelona", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/753692", "parentid": 23424950, "country": "Spain", "woeid": 753692, "countryCode": "ES" }, { "name": "Bilbao", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/754542", "parentid": 23424950, "country": "Spain", "woeid": 754542, "countryCode": "ES" }, { "name": "Las Palmas", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/764814", "parentid": 23424950, "country": "Spain", "woeid": 764814, "countryCode": "ES" }, { "name": "Madrid", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/766273", "parentid": 23424950, "country": "Spain", "woeid": 766273, "countryCode": "ES" }, { "name": "Malaga", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/766356", "parentid": 23424950, "country": "Spain", "woeid": 766356, "countryCode": "ES" }, { "name": "Murcia", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/768026", "parentid": 23424950, "country": "Spain", "woeid": 768026, "countryCode": "ES" }, { "name": "Palma", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/769293", "parentid": 23424950, "country": "Spain", "woeid": 769293, "countryCode": "ES" }, { "name": "Seville", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/774508", "parentid": 23424950, "country": "Spain", "woeid": 774508, "countryCode": "ES" }, { "name": "Valencia", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/776688", "parentid": 23424950, "country": "Spain", "woeid": 776688, "countryCode": "ES" }, { "name": "Zaragoza", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/779063", "parentid": 23424950, "country": "Spain", "woeid": 779063, "countryCode": "ES" }, { "name": "Geneva", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/782538", "parentid": 23424957, "country": "Switzerland", "woeid": 782538, "countryCode": "CH" }, { "name": "Lausanne", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/783058", "parentid": 23424957, "country": "Switzerland", "woeid": 783058, "countryCode": "CH" }, { "name": "Zurich", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/784794", "parentid": 23424957, "country": "Switzerland", "woeid": 784794, "countryCode": "CH" }, { "name": "Brest", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/824382", "parentid": 23424765, "country": "Belarus", "woeid": 824382, "countryCode": "BY" }, { "name": "Grodno", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/825848", "parentid": 23424765, "country": "Belarus", "woeid": 825848, "countryCode": "BY" }, { "name": "Gomel", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/825978", "parentid": 23424765, "country": "Belarus", "woeid": 825978, "countryCode": "BY" }, { "name": "Minsk", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/834463", "parentid": 23424765, "country": "Belarus", "woeid": 834463, "countryCode": "BY" }, { "name": "Riga", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/854823", "parentid": 23424874, "country": "Latvia", "woeid": 854823, "countryCode": "LV" }, { "name": "Bergen", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/857105", "parentid": 23424910, "country": "Norway", "woeid": 857105, "countryCode": "NO" }, { "name": "Oslo", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/862592", "parentid": 23424910, "country": "Norway", "woeid": 862592, "countryCode": "NO" }, { "name": "Gothenburg", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/890869", "parentid": 23424954, "country": "Sweden", "woeid": 890869, "countryCode": "SE" }, { "name": "Stockholm", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/906057", "parentid": 23424954, "country": "Sweden", "woeid": 906057, "countryCode": "SE" }, { "name": "Dnipropetrovsk", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/918981", "parentid": 23424976, "country": "Ukraine", "woeid": 918981, "countryCode": "UA" }, { "name": "Donetsk", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/919163", "parentid": 23424976, "country": "Ukraine", "woeid": 919163, "countryCode": "UA" }, { "name": "Kharkiv", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/922137", "parentid": 23424976, "country": "Ukraine", "woeid": 922137, "countryCode": "UA" }, { "name": "Kyiv", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/924938", "parentid": 23424976, "country": "Ukraine", "woeid": 924938, "countryCode": "UA" }, { "name": "Lviv", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/924943", "parentid": 23424976, "country": "Ukraine", "woeid": 924943, "countryCode": "UA" }, { "name": "Odesa", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/929398", "parentid": 23424976, "country": "Ukraine", "woeid": 929398, "countryCode": "UA" }, { "name": "Zaporozhye", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/939628", "parentid": 23424976, "country": "Ukraine", "woeid": 939628, "countryCode": "UA" }, { "name": "Athens", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/946738", "parentid": 23424833, "country": "Greece", "woeid": 946738, "countryCode": "GR" }, { "name": "Thessaloniki", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/963291", "parentid": 23424833, "country": "Greece", "woeid": 963291, "countryCode": "GR" }, { "name": "Bekasi", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1030077", "parentid": 23424846, "country": "Indonesia", "woeid": 1030077, "countryCode": "ID" }, { "name": "Depok", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1032539", "parentid": 23424846, "country": "Indonesia", "woeid": 1032539, "countryCode": "ID" }, { "name": "Pekanbaru", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1040779", "parentid": 23424846, "country": "Indonesia", "woeid": 1040779, "countryCode": "ID" }, { "name": "Surabaya", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1044316", "parentid": 23424846, "country": "Indonesia", "woeid": 1044316, "countryCode": "ID" }, { "name": "Makassar", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1046138", "parentid": 23424846, "country": "Indonesia", "woeid": 1046138, "countryCode": "ID" }, { "name": "Bandung", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1047180", "parentid": 23424846, "country": "Indonesia", "woeid": 1047180, "countryCode": "ID" }, { "name": "Jakarta", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1047378", "parentid": 23424846, "country": "Indonesia", "woeid": 1047378, "countryCode": "ID" }, { "name": "Medan", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1047908", "parentid": 23424846, "country": "Indonesia", "woeid": 1047908, "countryCode": "ID" }, { "name": "Palembang", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1048059", "parentid": 23424846, "country": "Indonesia", "woeid": 1048059, "countryCode": "ID" }, { "name": "Semarang", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1048324", "parentid": 23424846, "country": "Indonesia", "woeid": 1048324, "countryCode": "ID" }, { "name": "Tangerang", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1048536", "parentid": 23424846, "country": "Indonesia", "woeid": 1048536, "countryCode": "ID" }, { "name": "Singapore", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1062617", "parentid": 23424948, "country": "Singapore", "woeid": 1062617, "countryCode": "SG" }, { "name": "Perth", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1098081", "parentid": 23424748, "country": "Australia", "woeid": 1098081, "countryCode": "AU" }, { "name": "Adelaide", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1099805", "parentid": 23424748, "country": "Australia", "woeid": 1099805, "countryCode": "AU" }, { "name": "Brisbane", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1100661", "parentid": 23424748, "country": "Australia", "woeid": 1100661, "countryCode": "AU" }, { "name": "Canberra", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1100968", "parentid": 23424748, "country": "Australia", "woeid": 1100968, "countryCode": "AU" }, { "name": "Darwin", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1101597", "parentid": 23424748, "country": "Australia", "woeid": 1101597, "countryCode": "AU" }, { "name": "Melbourne", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1103816", "parentid": 23424748, "country": "Australia", "woeid": 1103816, "countryCode": "AU" }, { "name": "Sydney", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1105779", "parentid": 23424748, "country": "Australia", "woeid": 1105779, "countryCode": "AU" }, { "name": "Kitakyushu", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1110809", "parentid": 23424856, "country": "Japan", "woeid": 1110809, "countryCode": "JP" }, { "name": "Saitama", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1116753", "parentid": 23424856, "country": "Japan", "woeid": 1116753, "countryCode": "JP" }, { "name": "Chiba", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1117034", "parentid": 23424856, "country": "Japan", "woeid": 1117034, "countryCode": "JP" }, { "name": "Fukuoka", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1117099", "parentid": 23424856, "country": "Japan", "woeid": 1117099, "countryCode": "JP" }, { "name": "Hamamatsu", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1117155", "parentid": 23424856, "country": "Japan", "woeid": 1117155, "countryCode": "JP" }, { "name": "Hiroshima", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1117227", "parentid": 23424856, "country": "Japan", "woeid": 1117227, "countryCode": "JP" }, { "name": "Kawasaki", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1117502", "parentid": 23424856, "country": "Japan", "woeid": 1117502, "countryCode": "JP" }, { "name": "Kobe", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1117545", "parentid": 23424856, "country": "Japan", "woeid": 1117545, "countryCode": "JP" }, { "name": "Kumamoto", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1117605", "parentid": 23424856, "country": "Japan", "woeid": 1117605, "countryCode": "JP" }, { "name": "Nagoya", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1117817", "parentid": 23424856, "country": "Japan", "woeid": 1117817, "countryCode": "JP" }, { "name": "Niigata", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1117881", "parentid": 23424856, "country": "Japan", "woeid": 1117881, "countryCode": "JP" }, { "name": "Sagamihara", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1118072", "parentid": 23424856, "country": "Japan", "woeid": 1118072, "countryCode": "JP" }, { "name": "Sapporo", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1118108", "parentid": 23424856, "country": "Japan", "woeid": 1118108, "countryCode": "JP" }, { "name": "Sendai", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1118129", "parentid": 23424856, "country": "Japan", "woeid": 1118129, "countryCode": "JP" }, { "name": "Takamatsu", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1118285", "parentid": 23424856, "country": "Japan", "woeid": 1118285, "countryCode": "JP" }, { "name": "Tokyo", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1118370", "parentid": 23424856, "country": "Japan", "woeid": 1118370, "countryCode": "JP" }, { "name": "Yokohama", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1118550", "parentid": 23424856, "country": "Japan", "woeid": 1118550, "countryCode": "JP" }, { "name": "Goyang", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1130853", "parentid": 23424868, "country": "Korea", "woeid": 1130853, "countryCode": "KR" }, { "name": "Yongin", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132094", "parentid": 23424868, "country": "Korea", "woeid": 1132094, "countryCode": "KR" }, { "name": "Ansan", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132444", "parentid": 23424868, "country": "Korea", "woeid": 1132444, "countryCode": "KR" }, { "name": "Bucheon", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132445", "parentid": 23424868, "country": "Korea", "woeid": 1132445, "countryCode": "KR" }, { "name": "Busan", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132447", "parentid": 23424868, "country": "Korea", "woeid": 1132447, "countryCode": "KR" }, { "name": "Changwon", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132449", "parentid": 23424868, "country": "Korea", "woeid": 1132449, "countryCode": "KR" }, { "name": "Daegu", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132466", "parentid": 23424868, "country": "Korea", "woeid": 1132466, "countryCode": "KR" }, { "name": "Gwangju", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132481", "parentid": 23424868, "country": "Korea", "woeid": 1132481, "countryCode": "KR" }, { "name": "Incheon", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132496", "parentid": 23424868, "country": "Korea", "woeid": 1132496, "countryCode": "KR" }, { "name": "Seongnam", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132559", "parentid": 23424868, "country": "Korea", "woeid": 1132559, "countryCode": "KR" }, { "name": "Suwon", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132567", "parentid": 23424868, "country": "Korea", "woeid": 1132567, "countryCode": "KR" }, { "name": "Ulsan", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132578", "parentid": 23424868, "country": "Korea", "woeid": 1132578, "countryCode": "KR" }, { "name": "Seoul", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1132599", "parentid": 23424868, "country": "Korea", "woeid": 1132599, "countryCode": "KR" }, { "name": "Kajang", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1141268", "parentid": 23424901, "country": "Malaysia", "woeid": 1141268, "countryCode": "MY" }, { "name": "Ipoh", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1154679", "parentid": 23424901, "country": "Malaysia", "woeid": 1154679, "countryCode": "MY" }, { "name": "Johor Bahru", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1154698", "parentid": 23424901, "country": "Malaysia", "woeid": 1154698, "countryCode": "MY" }, { "name": "Klang", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1154726", "parentid": 23424901, "country": "Malaysia", "woeid": 1154726, "countryCode": "MY" }, { "name": "Kuala Lumpur", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1154781", "parentid": 23424901, "country": "Malaysia", "woeid": 1154781, "countryCode": "MY" }, { "name": "Calocan", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1167715", "parentid": 23424934, "country": "Philippines", "woeid": 1167715, "countryCode": "PH" }, { "name": "Makati", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1180689", "parentid": 23424934, "country": "Philippines", "woeid": 1180689, "countryCode": "PH" }, { "name": "Pasig", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1187115", "parentid": 23424934, "country": "Philippines", "woeid": 1187115, "countryCode": "PH" }, { "name": "Taguig", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1195098", "parentid": 23424934, "country": "Philippines", "woeid": 1195098, "countryCode": "PH" }, { "name": "Antipolo", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1198785", "parentid": 23424934, "country": "Philippines", "woeid": 1198785, "countryCode": "PH" }, { "name": "Cagayan de Oro", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1199002", "parentid": 23424934, "country": "Philippines", "woeid": 1199002, "countryCode": "PH" }, { "name": "Cebu City", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1199079", "parentid": 23424934, "country": "Philippines", "woeid": 1199079, "countryCode": "PH" }, { "name": "Davao City", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1199136", "parentid": 23424934, "country": "Philippines", "woeid": 1199136, "countryCode": "PH" }, { "name": "Manila", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1199477", "parentid": 23424934, "country": "Philippines", "woeid": 1199477, "countryCode": "PH" }, { "name": "Quezon City", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1199682", "parentid": 23424934, "country": "Philippines", "woeid": 1199682, "countryCode": "PH" }, { "name": "Zamboanga City", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1199980", "parentid": 23424934, "country": "Philippines", "woeid": 1199980, "countryCode": "PH" }, { "name": "Bangkok", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1225448", "parentid": 23424960, "country": "Thailand", "woeid": 1225448, "countryCode": "TH" }, { "name": "Hanoi", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1236594", "parentid": 23424984, "country": "Vietnam", "woeid": 1236594, "countryCode": "VN" }, { "name": "Hai Phong", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1236690", "parentid": 23424984, "country": "Vietnam", "woeid": 1236690, "countryCode": "VN" }, { "name": "Can Tho", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1252351", "parentid": 23424984, "country": "Vietnam", "woeid": 1252351, "countryCode": "VN" }, { "name": "Da Nang", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1252376", "parentid": 23424984, "country": "Vietnam", "woeid": 1252376, "countryCode": "VN" }, { "name": "Ho Chi Minh City", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1252431", "parentid": 23424984, "country": "Vietnam", "woeid": 1252431, "countryCode": "VN" }, { "name": "Algiers", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1253079", "parentid": 23424740, "country": "Algeria", "woeid": 1253079, "countryCode": "DZ" }, { "name": "Accra", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1326075", "parentid": 23424824, "country": "Ghana", "woeid": 1326075, "countryCode": "GH" }, { "name": "Kumasi", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1330595", "parentid": 23424824, "country": "Ghana", "woeid": 1330595, "countryCode": "GH" }, { "name": "Benin City", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1387660", "parentid": 23424908, "country": "Nigeria", "woeid": 1387660, "countryCode": "NG" }, { "name": "Ibadan", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1393672", "parentid": 23424908, "country": "Nigeria", "woeid": 1393672, "countryCode": "NG" }, { "name": "Kaduna", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1396439", "parentid": 23424908, "country": "Nigeria", "woeid": 1396439, "countryCode": "NG" }, { "name": "Kano", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1396803", "parentid": 23424908, "country": "Nigeria", "woeid": 1396803, "countryCode": "NG" }, { "name": "Lagos", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1398823", "parentid": 23424908, "country": "Nigeria", "woeid": 1398823, "countryCode": "NG" }, { "name": "Port Harcourt", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1404447", "parentid": 23424908, "country": "Nigeria", "woeid": 1404447, "countryCode": "NG" }, { "name": "Giza", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1521643", "parentid": 23424802, "country": "Egypt", "woeid": 1521643, "countryCode": "EG" }, { "name": "Cairo", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1521894", "parentid": 23424802, "country": "Egypt", "woeid": 1521894, "countryCode": "EG" }, { "name": "Alexandria", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1522006", "parentid": 23424802, "country": "Egypt", "woeid": 1522006, "countryCode": "EG" }, { "name": "Mombasa", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1528335", "parentid": 23424863, "country": "Kenya", "woeid": 1528335, "countryCode": "KE" }, { "name": "Nairobi", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1528488", "parentid": 23424863, "country": "Kenya", "woeid": 1528488, "countryCode": "KE" }, { "name": "Durban", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1580913", "parentid": 23424942, "country": "South Africa", "woeid": 1580913, "countryCode": "ZA" }, { "name": "Johannesburg", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1582504", "parentid": 23424942, "country": "South Africa", "woeid": 1582504, "countryCode": "ZA" }, { "name": "Port Elizabeth", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1586614", "parentid": 23424942, "country": "South Africa", "woeid": 1586614, "countryCode": "ZA" }, { "name": "Pretoria", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1586638", "parentid": 23424942, "country": "South Africa", "woeid": 1586638, "countryCode": "ZA" }, { "name": "Soweto", "placeType": { "code": 22, "name": "Unknown" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1587677", "parentid": 23424942, "country": "South Africa", "woeid": 1587677, "countryCode": "ZA" }, { "name": "Cape Town", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1591691", "parentid": 23424942, "country": "South Africa", "woeid": 1591691, "countryCode": "ZA" }, { "name": "Medina", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1937801", "parentid": 23424938, "country": "Saudi Arabia", "woeid": 1937801, "countryCode": "SA" }, { "name": "Dammam", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1939574", "parentid": 23424938, "country": "Saudi Arabia", "woeid": 1939574, "countryCode": "SA" }, { "name": "Riyadh", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1939753", "parentid": 23424938, "country": "Saudi Arabia", "woeid": 1939753, "countryCode": "SA" }, { "name": "Jeddah", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1939873", "parentid": 23424938, "country": "Saudi Arabia", "woeid": 1939873, "countryCode": "SA" }, { "name": "Mecca", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1939897", "parentid": 23424938, "country": "Saudi Arabia", "woeid": 1939897, "countryCode": "SA" }, { "name": "Sharjah", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1940119", "parentid": 23424738, "country": "United Arab Emirates", "woeid": 1940119, "countryCode": "AE" }, { "name": "Abu Dhabi", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1940330", "parentid": 23424738, "country": "United Arab Emirates", "woeid": 1940330, "countryCode": "AE" }, { "name": "Dubai", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1940345", "parentid": 23424738, "country": "United Arab Emirates", "woeid": 1940345, "countryCode": "AE" }, { "name": "Haifa", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1967449", "parentid": 23424852, "country": "Israel", "woeid": 1967449, "countryCode": "IL" }, { "name": "Tel Aviv", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1968212", "parentid": 23424852, "country": "Israel", "woeid": 1968212, "countryCode": "IL" }, { "name": "Jerusalem", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1968222", "parentid": 23424852, "country": "Israel", "woeid": 1968222, "countryCode": "IL" }, { "name": "Amman", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1968902", "parentid": 23424860, "country": "Jordan", "woeid": 1968902, "countryCode": "JO" }, { "name": "Chelyabinsk", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/1997422", "parentid": 23424936, "country": "Russia", "woeid": 1997422, "countryCode": "RU" }, { "name": "Khabarovsk", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2018708", "parentid": 23424936, "country": "Russia", "woeid": 2018708, "countryCode": "RU" }, { "name": "Krasnodar", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2028717", "parentid": 23424936, "country": "Russia", "woeid": 2028717, "countryCode": "RU" }, { "name": "Krasnoyarsk", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2029043", "parentid": 23424936, "country": "Russia", "woeid": 2029043, "countryCode": "RU" }, { "name": "Samara", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2077746", "parentid": 23424936, "country": "Russia", "woeid": 2077746, "countryCode": "RU" }, { "name": "Voronezh", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2108210", "parentid": 23424936, "country": "Russia", "woeid": 2108210, "countryCode": "RU" }, { "name": "Yekaterinburg", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2112237", "parentid": 23424936, "country": "Russia", "woeid": 2112237, "countryCode": "RU" }, { "name": "Irkutsk", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2121040", "parentid": 23424936, "country": "Russia", "woeid": 2121040, "countryCode": "RU" }, { "name": "Kazan", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2121267", "parentid": 23424936, "country": "Russia", "woeid": 2121267, "countryCode": "RU" }, { "name": "Moscow", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2122265", "parentid": 23424936, "country": "Russia", "woeid": 2122265, "countryCode": "RU" }, { "name": "Nizhny Novgorod", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2122471", "parentid": 23424936, "country": "Russia", "woeid": 2122471, "countryCode": "RU" }, { "name": "Novosibirsk", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2122541", "parentid": 23424936, "country": "Russia", "woeid": 2122541, "countryCode": "RU" }, { "name": "Omsk", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2122641", "parentid": 23424936, "country": "Russia", "woeid": 2122641, "countryCode": "RU" }, { "name": "Perm", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2122814", "parentid": 23424936, "country": "Russia", "woeid": 2122814, "countryCode": "RU" }, { "name": "Rostov-on-Don", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2123177", "parentid": 23424936, "country": "Russia", "woeid": 2123177, "countryCode": "RU" }, { "name": "Saint Petersburg", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2123260", "parentid": 23424936, "country": "Russia", "woeid": 2123260, "countryCode": "RU" }, { "name": "Ufa", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2124045", "parentid": 23424936, "country": "Russia", "woeid": 2124045, "countryCode": "RU" }, { "name": "Vladivostok", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2124288", "parentid": 23424936, "country": "Russia", "woeid": 2124288, "countryCode": "RU" }, { "name": "Volgograd", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2124298", "parentid": 23424936, "country": "Russia", "woeid": 2124298, "countryCode": "RU" }, { "name": "Karachi", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2211096", "parentid": 23424922, "country": "Pakistan", "woeid": 2211096, "countryCode": "PK" }, { "name": "Lahore", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2211177", "parentid": 23424922, "country": "Pakistan", "woeid": 2211177, "countryCode": "PK" }, { "name": "Multan", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2211269", "parentid": 23424922, "country": "Pakistan", "woeid": 2211269, "countryCode": "PK" }, { "name": "Rawalpindi", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2211387", "parentid": 23424922, "country": "Pakistan", "woeid": 2211387, "countryCode": "PK" }, { "name": "Faisalabad", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2211574", "parentid": 23424922, "country": "Pakistan", "woeid": 2211574, "countryCode": "PK" }, { "name": "Muscat", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2268284", "parentid": 23424898, "country": "Oman", "woeid": 2268284, "countryCode": "OM" }, { "name": "Nagpur", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2282863", "parentid": 23424848, "country": "India", "woeid": 2282863, "countryCode": "IN" }, { "name": "Lucknow", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295377", "parentid": 23424848, "country": "India", "woeid": 2295377, "countryCode": "IN" }, { "name": "Kanpur", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295378", "parentid": 23424848, "country": "India", "woeid": 2295378, "countryCode": "IN" }, { "name": "Patna", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295381", "parentid": 23424848, "country": "India", "woeid": 2295381, "countryCode": "IN" }, { "name": "Ranchi", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295383", "parentid": 23424848, "country": "India", "woeid": 2295383, "countryCode": "IN" }, { "name": "Kolkata", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295386", "parentid": 23424848, "country": "India", "woeid": 2295386, "countryCode": "IN" }, { "name": "Srinagar", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295387", "parentid": 23424848, "country": "India", "woeid": 2295387, "countryCode": "IN" }, { "name": "Amritsar", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295388", "parentid": 23424848, "country": "India", "woeid": 2295388, "countryCode": "IN" }, { "name": "Jaipur", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295401", "parentid": 23424848, "country": "India", "woeid": 2295401, "countryCode": "IN" }, { "name": "Ahmedabad", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295402", "parentid": 23424848, "country": "India", "woeid": 2295402, "countryCode": "IN" }, { "name": "Rajkot", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295404", "parentid": 23424848, "country": "India", "woeid": 2295404, "countryCode": "IN" }, { "name": "Surat", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295405", "parentid": 23424848, "country": "India", "woeid": 2295405, "countryCode": "IN" }, { "name": "Bhopal", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295407", "parentid": 23424848, "country": "India", "woeid": 2295407, "countryCode": "IN" }, { "name": "Indore", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295408", "parentid": 23424848, "country": "India", "woeid": 2295408, "countryCode": "IN" }, { "name": "Thane", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295410", "parentid": 23424848, "country": "India", "woeid": 2295410, "countryCode": "IN" }, { "name": "Mumbai", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295411", "parentid": 23424848, "country": "India", "woeid": 2295411, "countryCode": "IN" }, { "name": "Pune", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295412", "parentid": 23424848, "country": "India", "woeid": 2295412, "countryCode": "IN" }, { "name": "Hyderabad", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295414", "parentid": 23424848, "country": "India", "woeid": 2295414, "countryCode": "IN" }, { "name": "Bangalore", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295420", "parentid": 23424848, "country": "India", "woeid": 2295420, "countryCode": "IN" }, { "name": "Chennai", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2295424", "parentid": 23424848, "country": "India", "woeid": 2295424, "countryCode": "IN" }, { "name": "Mersin", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2323778", "parentid": 23424969, "country": "Turkey", "woeid": 2323778, "countryCode": "TR" }, { "name": "Adana", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2343678", "parentid": 23424969, "country": "Turkey", "woeid": 2343678, "countryCode": "TR" }, { "name": "Ankara", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2343732", "parentid": 23424969, "country": "Turkey", "woeid": 2343732, "countryCode": "TR" }, { "name": "Antalya", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2343733", "parentid": 23424969, "country": "Turkey", "woeid": 2343733, "countryCode": "TR" }, { "name": "Bursa", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2343843", "parentid": 23424969, "country": "Turkey", "woeid": 2343843, "countryCode": "TR" }, { "name": "Diyarbak\u0131r", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2343932", "parentid": 23424969, "country": "Turkey", "woeid": 2343932, "countryCode": "TR" }, { "name": "Eski\u015Fehir", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2343980", "parentid": 23424969, "country": "Turkey", "woeid": 2343980, "countryCode": "TR" }, { "name": "Gaziantep", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2343999", "parentid": 23424969, "country": "Turkey", "woeid": 2343999, "countryCode": "TR" }, { "name": "Istanbul", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2344116", "parentid": 23424969, "country": "Turkey", "woeid": 2344116, "countryCode": "TR" }, { "name": "Izmir", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2344117", "parentid": 23424969, "country": "Turkey", "woeid": 2344117, "countryCode": "TR" }, { "name": "Kayseri", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2344174", "parentid": 23424969, "country": "Turkey", "woeid": 2344174, "countryCode": "TR" }, { "name": "Konya", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2344210", "parentid": 23424969, "country": "Turkey", "woeid": 2344210, "countryCode": "TR" }, { "name": "Okinawa", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2345896", "parentid": 23424856, "country": "Japan", "woeid": 2345896, "countryCode": "JP" }, { "name": "Daejeon", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2345975", "parentid": 23424868, "country": "Korea", "woeid": 2345975, "countryCode": "KR" }, { "name": "Auckland", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2348079", "parentid": 23424916, "country": "New Zealand", "woeid": 2348079, "countryCode": "NZ" }, { "name": "Albuquerque", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2352824", "parentid": 23424977, "country": "United States", "woeid": 2352824, "countryCode": "US" }, { "name": "Atlanta", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2357024", "parentid": 23424977, "country": "United States", "woeid": 2357024, "countryCode": "US" }, { "name": "Austin", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2357536", "parentid": 23424977, "country": "United States", "woeid": 2357536, "countryCode": "US" }, { "name": "Baltimore", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2358820", "parentid": 23424977, "country": "United States", "woeid": 2358820, "countryCode": "US" }, { "name": "Baton Rouge", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2359991", "parentid": 23424977, "country": "United States", "woeid": 2359991, "countryCode": "US" }, { "name": "Birmingham", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2364559", "parentid": 23424977, "country": "United States", "woeid": 2364559, "countryCode": "US" }, { "name": "Boston", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2367105", "parentid": 23424977, "country": "United States", "woeid": 2367105, "countryCode": "US" }, { "name": "Charlotte", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2378426", "parentid": 23424977, "country": "United States", "woeid": 2378426, "countryCode": "US" }, { "name": "Chicago", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2379574", "parentid": 23424977, "country": "United States", "woeid": 2379574, "countryCode": "US" }, { "name": "Cincinnati", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2380358", "parentid": 23424977, "country": "United States", "woeid": 2380358, "countryCode": "US" }, { "name": "Cleveland", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2381475", "parentid": 23424977, "country": "United States", "woeid": 2381475, "countryCode": "US" }, { "name": "Colorado Springs", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2383489", "parentid": 23424977, "country": "United States", "woeid": 2383489, "countryCode": "US" }, { "name": "Columbus", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2383660", "parentid": 23424977, "country": "United States", "woeid": 2383660, "countryCode": "US" }, { "name": "Dallas-Ft. Worth", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2388929", "parentid": 23424977, "country": "United States", "woeid": 2388929, "countryCode": "US" }, { "name": "Denver", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2391279", "parentid": 23424977, "country": "United States", "woeid": 2391279, "countryCode": "US" }, { "name": "Detroit", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2391585", "parentid": 23424977, "country": "United States", "woeid": 2391585, "countryCode": "US" }, { "name": "El Paso", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2397816", "parentid": 23424977, "country": "United States", "woeid": 2397816, "countryCode": "US" }, { "name": "Fresno", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2407517", "parentid": 23424977, "country": "United States", "woeid": 2407517, "countryCode": "US" }, { "name": "Greensboro", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2414469", "parentid": 23424977, "country": "United States", "woeid": 2414469, "countryCode": "US" }, { "name": "Harrisburg", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2418046", "parentid": 23424977, "country": "United States", "woeid": 2418046, "countryCode": "US" }, { "name": "Honolulu", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2423945", "parentid": 23424977, "country": "United States", "woeid": 2423945, "countryCode": "US" }, { "name": "Houston", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2424766", "parentid": 23424977, "country": "United States", "woeid": 2424766, "countryCode": "US" }, { "name": "Indianapolis", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2427032", "parentid": 23424977, "country": "United States", "woeid": 2427032, "countryCode": "US" }, { "name": "Jackson", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2428184", "parentid": 23424977, "country": "United States", "woeid": 2428184, "countryCode": "US" }, { "name": "Jacksonville", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2428344", "parentid": 23424977, "country": "United States", "woeid": 2428344, "countryCode": "US" }, { "name": "Kansas City", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2430683", "parentid": 23424977, "country": "United States", "woeid": 2430683, "countryCode": "US" }, { "name": "Las Vegas", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2436704", "parentid": 23424977, "country": "United States", "woeid": 2436704, "countryCode": "US" }, { "name": "Long Beach", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2441472", "parentid": 23424977, "country": "United States", "woeid": 2441472, "countryCode": "US" }, { "name": "Los Angeles", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2442047", "parentid": 23424977, "country": "United States", "woeid": 2442047, "countryCode": "US" }, { "name": "Louisville", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2442327", "parentid": 23424977, "country": "United States", "woeid": 2442327, "countryCode": "US" }, { "name": "Memphis", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2449323", "parentid": 23424977, "country": "United States", "woeid": 2449323, "countryCode": "US" }, { "name": "Mesa", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2449808", "parentid": 23424977, "country": "United States", "woeid": 2449808, "countryCode": "US" }, { "name": "Miami", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2450022", "parentid": 23424977, "country": "United States", "woeid": 2450022, "countryCode": "US" }, { "name": "Milwaukee", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2451822", "parentid": 23424977, "country": "United States", "woeid": 2451822, "countryCode": "US" }, { "name": "Minneapolis", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2452078", "parentid": 23424977, "country": "United States", "woeid": 2452078, "countryCode": "US" }, { "name": "Nashville", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2457170", "parentid": 23424977, "country": "United States", "woeid": 2457170, "countryCode": "US" }, { "name": "New Haven", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2458410", "parentid": 23424977, "country": "United States", "woeid": 2458410, "countryCode": "US" }, { "name": "New Orleans", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2458833", "parentid": 23424977, "country": "United States", "woeid": 2458833, "countryCode": "US" }, { "name": "New York", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2459115", "parentid": 23424977, "country": "United States", "woeid": 2459115, "countryCode": "US" }, { "name": "Norfolk", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2460389", "parentid": 23424977, "country": "United States", "woeid": 2460389, "countryCode": "US" }, { "name": "Oklahoma City", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2464592", "parentid": 23424977, "country": "United States", "woeid": 2464592, "countryCode": "US" }, { "name": "Omaha", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2465512", "parentid": 23424977, "country": "United States", "woeid": 2465512, "countryCode": "US" }, { "name": "Orlando", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2466256", "parentid": 23424977, "country": "United States", "woeid": 2466256, "countryCode": "US" }, { "name": "Philadelphia", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2471217", "parentid": 23424977, "country": "United States", "woeid": 2471217, "countryCode": "US" }, { "name": "Phoenix", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2471390", "parentid": 23424977, "country": "United States", "woeid": 2471390, "countryCode": "US" }, { "name": "Pittsburgh", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2473224", "parentid": 23424977, "country": "United States", "woeid": 2473224, "countryCode": "US" }, { "name": "Portland", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2475687", "parentid": 23424977, "country": "United States", "woeid": 2475687, "countryCode": "US" }, { "name": "Providence", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2477058", "parentid": 23424977, "country": "United States", "woeid": 2477058, "countryCode": "US" }, { "name": "Raleigh", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2478307", "parentid": 23424977, "country": "United States", "woeid": 2478307, "countryCode": "US" }, { "name": "Richmond", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2480894", "parentid": 23424977, "country": "United States", "woeid": 2480894, "countryCode": "US" }, { "name": "Sacramento", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2486340", "parentid": 23424977, "country": "United States", "woeid": 2486340, "countryCode": "US" }, { "name": "St. Louis", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2486982", "parentid": 23424977, "country": "United States", "woeid": 2486982, "countryCode": "US" }, { "name": "Salt Lake City", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2487610", "parentid": 23424977, "country": "United States", "woeid": 2487610, "countryCode": "US" }, { "name": "San Antonio", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2487796", "parentid": 23424977, "country": "United States", "woeid": 2487796, "countryCode": "US" }, { "name": "San Diego", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2487889", "parentid": 23424977, "country": "United States", "woeid": 2487889, "countryCode": "US" }, { "name": "San Francisco", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2487956", "parentid": 23424977, "country": "United States", "woeid": 2487956, "countryCode": "US" }, { "name": "San Jose", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2488042", "parentid": 23424977, "country": "United States", "woeid": 2488042, "countryCode": "US" }, { "name": "Seattle", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2490383", "parentid": 23424977, "country": "United States", "woeid": 2490383, "countryCode": "US" }, { "name": "Tallahassee", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2503713", "parentid": 23424977, "country": "United States", "woeid": 2503713, "countryCode": "US" }, { "name": "Tampa", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2503863", "parentid": 23424977, "country": "United States", "woeid": 2503863, "countryCode": "US" }, { "name": "Tucson", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2508428", "parentid": 23424977, "country": "United States", "woeid": 2508428, "countryCode": "US" }, { "name": "Virginia Beach", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2512636", "parentid": 23424977, "country": "United States", "woeid": 2512636, "countryCode": "US" }, { "name": "Washington", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/2514815", "parentid": 23424977, "country": "United States", "woeid": 2514815, "countryCode": "US" }, { "name": "Osaka", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/15015370", "parentid": 23424856, "country": "Japan", "woeid": 15015370, "countryCode": "JP" }, { "name": "Kyoto", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/15015372", "parentid": 23424856, "country": "Japan", "woeid": 15015372, "countryCode": "JP" }, { "name": "Delhi", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/20070458", "parentid": 23424848, "country": "India", "woeid": 20070458, "countryCode": "IN" }, { "name": "United Arab Emirates", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424738", "parentid": 1, "country": "United Arab Emirates", "woeid": 23424738, "countryCode": "AE" }, { "name": "Algeria", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424740", "parentid": 1, "country": "Algeria", "woeid": 23424740, "countryCode": "DZ" }, { "name": "Argentina", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424747", "parentid": 1, "country": "Argentina", "woeid": 23424747, "countryCode": "AR" }, { "name": "Australia", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424748", "parentid": 1, "country": "Australia", "woeid": 23424748, "countryCode": "AU" }, { "name": "Austria", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424750", "parentid": 1, "country": "Austria", "woeid": 23424750, "countryCode": "AT" }, { "name": "Bahrain", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424753", "parentid": 1, "country": "Bahrain", "woeid": 23424753, "countryCode": "BH" }, { "name": "Belgium", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424757", "parentid": 1, "country": "Belgium", "woeid": 23424757, "countryCode": "BE" }, { "name": "Belarus", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424765", "parentid": 1, "country": "Belarus", "woeid": 23424765, "countryCode": "BY" }, { "name": "Brazil", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424768", "parentid": 1, "country": "Brazil", "woeid": 23424768, "countryCode": "BR" }, { "name": "Canada", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424775", "parentid": 1, "country": "Canada", "woeid": 23424775, "countryCode": "CA" }, { "name": "Chile", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424782", "parentid": 1, "country": "Chile", "woeid": 23424782, "countryCode": "CL" }, { "name": "Colombia", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424787", "parentid": 1, "country": "Colombia", "woeid": 23424787, "countryCode": "CO" }, { "name": "Denmark", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424796", "parentid": 1, "country": "Denmark", "woeid": 23424796, "countryCode": "DK" }, { "name": "Dominican Republic", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424800", "parentid": 1, "country": "Dominican Republic", "woeid": 23424800, "countryCode": "DO" }, { "name": "Ecuador", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424801", "parentid": 1, "country": "Ecuador", "woeid": 23424801, "countryCode": "EC" }, { "name": "Egypt", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424802", "parentid": 1, "country": "Egypt", "woeid": 23424802, "countryCode": "EG" }, { "name": "Ireland", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424803", "parentid": 1, "country": "Ireland", "woeid": 23424803, "countryCode": "IE" }, { "name": "France", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424819", "parentid": 1, "country": "France", "woeid": 23424819, "countryCode": "FR" }, { "name": "Ghana", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424824", "parentid": 1, "country": "Ghana", "woeid": 23424824, "countryCode": "GH" }, { "name": "Germany", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424829", "parentid": 1, "country": "Germany", "woeid": 23424829, "countryCode": "DE" }, { "name": "Greece", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424833", "parentid": 1, "country": "Greece", "woeid": 23424833, "countryCode": "GR" }, { "name": "Guatemala", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424834", "parentid": 1, "country": "Guatemala", "woeid": 23424834, "countryCode": "GT" }, { "name": "Indonesia", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424846", "parentid": 1, "country": "Indonesia", "woeid": 23424846, "countryCode": "ID" }, { "name": "India", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424848", "parentid": 1, "country": "India", "woeid": 23424848, "countryCode": "IN" }, { "name": "Israel", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424852", "parentid": 1, "country": "Israel", "woeid": 23424852, "countryCode": "IL" }, { "name": "Italy", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424853", "parentid": 1, "country": "Italy", "woeid": 23424853, "countryCode": "IT" }, { "name": "Japan", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424856", "parentid": 1, "country": "Japan", "woeid": 23424856, "countryCode": "JP" }, { "name": "Jordan", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424860", "parentid": 1, "country": "Jordan", "woeid": 23424860, "countryCode": "JO" }, { "name": "Kenya", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424863", "parentid": 1, "country": "Kenya", "woeid": 23424863, "countryCode": "KE" }, { "name": "Korea", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424868", "parentid": 1, "country": "Korea", "woeid": 23424868, "countryCode": "KR" }, { "name": "Kuwait", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424870", "parentid": 1, "country": "Kuwait", "woeid": 23424870, "countryCode": "KW" }, { "name": "Lebanon", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424873", "parentid": 1, "country": "Lebanon", "woeid": 23424873, "countryCode": "LB" }, { "name": "Latvia", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424874", "parentid": 1, "country": "Latvia", "woeid": 23424874, "countryCode": "LV" }, { "name": "Oman", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424898", "parentid": 1, "country": "Oman", "woeid": 23424898, "countryCode": "OM" }, { "name": "Mexico", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424900", "parentid": 1, "country": "Mexico", "woeid": 23424900, "countryCode": "MX" }, { "name": "Malaysia", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424901", "parentid": 1, "country": "Malaysia", "woeid": 23424901, "countryCode": "MY" }, { "name": "Nigeria", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424908", "parentid": 1, "country": "Nigeria", "woeid": 23424908, "countryCode": "NG" }, { "name": "Netherlands", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424909", "parentid": 1, "country": "Netherlands", "woeid": 23424909, "countryCode": "NL" }, { "name": "Norway", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424910", "parentid": 1, "country": "Norway", "woeid": 23424910, "countryCode": "NO" }, { "name": "New Zealand", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424916", "parentid": 1, "country": "New Zealand", "woeid": 23424916, "countryCode": "NZ" }, { "name": "Peru", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424919", "parentid": 1, "country": "Peru", "woeid": 23424919, "countryCode": "PE" }, { "name": "Pakistan", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424922", "parentid": 1, "country": "Pakistan", "woeid": 23424922, "countryCode": "PK" }, { "name": "Poland", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424923", "parentid": 1, "country": "Poland", "woeid": 23424923, "countryCode": "PL" }, { "name": "Panama", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424924", "parentid": 1, "country": "Panama", "woeid": 23424924, "countryCode": "PA" }, { "name": "Portugal", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424925", "parentid": 1, "country": "Portugal", "woeid": 23424925, "countryCode": "PT" }, { "name": "Qatar", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424930", "parentid": 1, "country": "Qatar", "woeid": 23424930, "countryCode": "QA" }, { "name": "Philippines", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424934", "parentid": 1, "country": "Philippines", "woeid": 23424934, "countryCode": "PH" }, { "name": "Puerto Rico", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424935", "parentid": 1, "country": "Puerto Rico", "woeid": 23424935, "countryCode": "PR" }, { "name": "Russia", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424936", "parentid": 1, "country": "Russia", "woeid": 23424936, "countryCode": "RU" }, { "name": "Saudi Arabia", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424938", "parentid": 1, "country": "Saudi Arabia", "woeid": 23424938, "countryCode": "SA" }, { "name": "South Africa", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424942", "parentid": 1, "country": "South Africa", "woeid": 23424942, "countryCode": "ZA" }, { "name": "Singapore", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424948", "parentid": 1, "country": "Singapore", "woeid": 23424948, "countryCode": "SG" }, { "name": "Spain", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424950", "parentid": 1, "country": "Spain", "woeid": 23424950, "countryCode": "ES" }, { "name": "Sweden", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424954", "parentid": 1, "country": "Sweden", "woeid": 23424954, "countryCode": "SE" }, { "name": "Switzerland", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424957", "parentid": 1, "country": "Switzerland", "woeid": 23424957, "countryCode": "CH" }, { "name": "Thailand", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424960", "parentid": 1, "country": "Thailand", "woeid": 23424960, "countryCode": "TH" }, { "name": "Turkey", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424969", "parentid": 1, "country": "Turkey", "woeid": 23424969, "countryCode": "TR" }, { "name": "United Kingdom", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424975", "parentid": 1, "country": "United Kingdom", "woeid": 23424975, "countryCode": "GB" }, { "name": "Ukraine", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424976", "parentid": 1, "country": "Ukraine", "woeid": 23424976, "countryCode": "UA" }, { "name": "United States", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424977", "parentid": 1, "country": "United States", "woeid": 23424977, "countryCode": "US" }, { "name": "Venezuela", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424982", "parentid": 1, "country": "Venezuela", "woeid": 23424982, "countryCode": "VE" }, { "name": "Vietnam", "placeType": { "code": 12, "name": "Country" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/23424984", "parentid": 1, "country": "Vietnam", "woeid": 23424984, "countryCode": "VN" }, { "name": "Petaling", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/56013632", "parentid": 23424901, "country": "Malaysia", "woeid": 56013632, "countryCode": "MY" }, { "name": "Hulu Langat", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/56013645", "parentid": 23424901, "country": "Malaysia", "woeid": 56013645, "countryCode": "MY" }, { "name": "Ahsa", "placeType": { "code": 9, "name": "Unknown" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/56120136", "parentid": 23424938, "country": "Saudi Arabia", "woeid": 56120136, "countryCode": "SA" }, { "name": "Okayama", "placeType": { "code": 7, "name": "Town" }, "url": "http:\/\/where.yahooapis.com\/v1\/place\/90036018", "parentid": 23424856, "country": "Japan", "woeid": 90036018, "countryCode": "JP" } ] ================================================ FILE: src/test/resources/twitter/rest/trends/trends.json ================================================ [ { "trends": [ { "name": "#vamospumas", "query": "%23vamospumas", "url": "http:\/\/twitter.com\/search?q=%23vamospumas", "promoted_content": null,, "tweet_volume":26634 }, { "name": "#EMABiggesrFans1D", "query": "%23EMABiggesrFans1D", "url": "http:\/\/twitter.com\/search?q=%23EMABiggesrFans1D", "promoted_content": null, "tweet_volume":26633 }, { "name": "#PersibDay", "query": "%23PersibDay", "url": "http:\/\/twitter.com\/search?q=%23PersibDay", "promoted_content": null, "tweet_volume":null }, { "name": "#\u307F\u306A\u3055\u3093\u5C0F\u4E2D\u9AD8\u306E\u30AF\u30E9\u30D6\u306F\u4F55\u3067\u3057\u305F\u304B", "query": "%23%E3%81%BF%E3%81%AA%E3%81%95%E3%82%93%E5%B0%8F%E4%B8%AD%E9%AB%98%E3%81%AE%E3%82%AF%E3%83%A9%E3%83%96%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%97%E3%81%9F%E3%81%8B", "url": "http:\/\/twitter.com\/search?q=%23%E3%81%BF%E3%81%AA%E3%81%95%E3%82%93%E5%B0%8F%E4%B8%AD%E9%AB%98%E3%81%AE%E3%82%AF%E3%83%A9%E3%83%96%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%97%E3%81%9F%E3%81%8B", "promoted_content": null, "tweet_volume":null }, { "name": "PurposeJustinBieber", "query": "PurposeJustinBieber", "url": "http:\/\/twitter.com\/search?q=PurposeJustinBieber", "promoted_content": null, "tweet_volume":null }, { "name": "Irlanda", "query": "Irlanda", "url": "http:\/\/twitter.com\/search?q=Irlanda", "promoted_content": null, "tweet_volume":null }, { "name": "#\u0633\u0627\u062D\u0643\u064A_\u0644\u0644\u0627\u062D\u0641\u0627\u062F_\u0628\u0627\u0646\u064A_\u0639\u0627\u0635\u0631\u062A", "query": "%23%D8%B3%D8%A7%D8%AD%D9%83%D9%8A_%D9%84%D9%84%D8%A7%D8%AD%D9%81%D8%A7%D8%AF_%D8%A8%D8%A7%D9%86%D9%8A_%D8%B9%D8%A7%D8%B5%D8%B1%D8%AA", "url": "http:\/\/twitter.com\/search?q=%23%D8%B3%D8%A7%D8%AD%D9%83%D9%8A_%D9%84%D9%84%D8%A7%D8%AD%D9%81%D8%A7%D8%AF_%D8%A8%D8%A7%D9%86%D9%8A_%D8%B9%D8%A7%D8%B5%D8%B1%D8%AA", "promoted_content": null, "tweet_volume":26632 }, { "name": "Griezmann", "query": "Griezmann", "url": "http:\/\/twitter.com\/search?q=Griezmann", "promoted_content": null, "tweet_volume":null }, { "name": "abraham mateo - old school", "query": "%22abraham+mateo+-+old+school%22", "url": "http:\/\/twitter.com\/search?q=%22abraham+mateo+-+old+school%22", "promoted_content": null, "tweet_volume":null }, { "name": "nico sanchez", "query": "%22nico+sanchez%22", "url": "http:\/\/twitter.com\/search?q=%22nico+sanchez%22", "promoted_content": null, "tweet_volume":26631 } ], "as_of": "2015-10-18T14:26:53Z", "created_at": "2015-10-18T14:25:04Z", "locations": [ { "name": "Worldwide", "woeid": 1 } ] } ] ================================================ FILE: src/test/resources/twitter/rest/users/empty-user-profile-url.json ================================================ { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "profile_location": null, "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "", "profile_image_url_https": "", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "translator_type": "regular" } ================================================ FILE: src/test/resources/twitter/rest/users/profile_banner.json ================================================ { "sizes": { "ipad": { "h": 313, "w": 626, "url": "https://pbs.twimg.com/profile_banners/6253282/1347394302/ipad" }, "ipad_retina": { "h": 626, "w": 1252, "url": "https://pbs.twimg.com/profile_banners/6253282/1347394302/ipad_retina" }, "web": { "h": 260, "w": 520, "url": "https://pbs.twimg.com/profile_banners/6253282/1347394302/web" }, "web_retina": { "h": 520, "w": 1040, "url": "https://pbs.twimg.com/profile_banners/6253282/1347394302/web_retina" }, "mobile": { "h": 160, "w": 320, "url": "https://pbs.twimg.com/profile_banners/6253282/1347394302/mobile" }, "mobile_retina": { "h": 320, "w": 640, "url": "https://pbs.twimg.com/profile_banners/6253282/1347394302/mobile_retina" }, "300x100": { "h": 100, "w": 300, "url": "https://pbs.twimg.com/profile_banners/6253282/1347394302/300x100" }, "600x200": { "h": 200, "w": 600, "url": "https://pbs.twimg.com/profile_banners/6253282/1347394302/600x200" }, "1500x500": { "h": 500, "w": 1500, "url": "https://pbs.twimg.com/profile_banners/6253282/1347394302/1500x500" } } } ================================================ FILE: src/test/resources/twitter/rest/users/user.json ================================================ { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "profile_location": null, "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false, "translator_type": "regular" } ================================================ FILE: src/test/resources/twitter/rest/users/users.json ================================================ [ { "id": 19018614, "id_str": "19018614", "name": "Marco Bonzanini", "screen_name": "marcobonzanini", "location": "London, United Kingdom", "description": "Data Scientist - Information Retrieval, NLP, Text Analytics, Machine Learning, everything Python. PhD from @QMUL", "url": "http:\/\/t.co\/34uCLCPVkH", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/34uCLCPVkH", "expanded_url": "http:\/\/marcobonzanini.com", "display_url": "marcobonzanini.com", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 243, "friends_count": 206, "listed_count": 33, "created_at": "Thu Jan 15 11:28:04 +0000 2009", "favourites_count": 3, "utc_offset": 3600, "time_zone": "London", "geo_enabled": false, "verified": false, "statuses_count": 171, "lang": "en", "status": { "created_at": "Tue Oct 06 20:17:44 +0000 2015", "id": 651491549889626112, "id_str": "651491549889626112", "text": "@miguelmalvarez nice one as usual", "source": "\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": 651445856802074625, "in_reply_to_status_id_str": "651445856802074625", "in_reply_to_user_id": 97880420, "in_reply_to_user_id_str": "97880420", "in_reply_to_screen_name": "miguelmalvarez", "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 1, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "miguelmalvarez", "name": "Miguel Martinez", "id": 97880420, "id_str": "97880420", "indices": [ 0, 15 ] } ], "urls": [] }, "favorited": false, "retweeted": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "709397", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1436932130\/marco-ir_normal.jpg", "profile_link_color": "FF3300", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, { "id": 17765013, "id_str": "17765013", "name": "Martin Odersky", "screen_name": "odersky", "location": "Switzerland", "description": "lead designer of Scala", "url": "http:\/\/t.co\/eLC2ehOVXJ", "entities": { "url": { "urls": [ { "url": "http:\/\/t.co\/eLC2ehOVXJ", "expanded_url": "http:\/\/lamp.epfl.ch\/~odersky", "display_url": "lamp.epfl.ch\/~odersky", "indices": [ 0, 22 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 34414, "friends_count": 148, "listed_count": 1418, "created_at": "Sun Nov 30 22:56:21 +0000 2008", "favourites_count": 13, "utc_offset": 7200, "time_zone": "Bern", "geo_enabled": false, "verified": false, "statuses_count": 730, "lang": "en", "status": { "created_at": "Fri Oct 09 18:36:26 +0000 2015", "id": 652553222977138689, "id_str": "652553222977138689", "text": "RT @larsr_h: Slides from my talk \"What Haskell can learn from Scala\" at #haskellx https:\/\/t.co\/smC9KvzZqd \u2013 mistakes are mine, not @milessa\u2026", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Fri Oct 09 13:30:11 +0000 2015", "id": 652476152070586369, "id_str": "652476152070586369", "text": "Slides from my talk \"What Haskell can learn from Scala\" at #haskellx https:\/\/t.co\/smC9KvzZqd \u2013 mistakes are mine, not @milessabin's :-)", "source": "\u003ca href=\"https:\/\/about.twitter.com\/products\/tweetdeck\" rel=\"nofollow\"\u003eTweetDeck\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 35, "favorite_count": 92, "entities": { "hashtags": [ { "text": "haskellx", "indices": [ 59, 68 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "milessabin", "name": "Miles Sabin", "id": 29444566, "id_str": "29444566", "indices": [ 118, 129 ] } ], "urls": [ { "url": "https:\/\/t.co\/smC9KvzZqd", "expanded_url": "https:\/\/speakerdeck.com\/larsrh\/what-haskell-can-learn-from-scala", "display_url": "speakerdeck.com\/larsrh\/what-ha\u2026", "indices": [ 69, 92 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "retweet_count": 35, "favorite_count": 0, "entities": { "hashtags": [ { "text": "haskellx", "indices": [ 72, 81 ] } ], "symbols": [], "user_mentions": [ { "screen_name": "larsr_h", "name": "Lars Hupel", "id": 548301113, "id_str": "548301113", "indices": [ 3, 11 ] }, { "screen_name": "milessabin", "name": "Miles Sabin", "id": 29444566, "id_str": "29444566", "indices": [ 131, 140 ] } ], "urls": [ { "url": "https:\/\/t.co\/smC9KvzZqd", "expanded_url": "https:\/\/speakerdeck.com\/larsrh\/what-haskell-can-learn-from-scala", "display_url": "speakerdeck.com\/larsrh\/what-ha\u2026", "indices": [ 82, 105 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/673909115\/Martin_normal.JPG", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/673909115\/Martin_normal.JPG", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false } ] ================================================ FILE: src/test/resources/twitter/rest/v2/tweets/tweet.json ================================================ { "data": { "id": "2310484964373377688", "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", "attachments": { "media_keys": [ "13_9995568729608410852", "14_0381608460867506993", "7_1422932273641500672", "3_1422208929984139264" ], "poll_ids": [ "0419198663175162881" ] }, "author_id": "6338724728067829004", "context_annotations": [ { "domain": { "id": "10", "name": "Person", "description": "Vestibulum pellentesque sed justo ac lacinia" }, "entity": { "id": "5233852574321016658", "name": "Phasellus Eu", "description": "Phasellus Eu" } }, { "domain": { "id": "54", "name": "Musician", "description": "Nullam imperdiet lectus metus" }, "entity": { "id": "6836362243680041612", "name": "Phasellus Eu", "description": "Phasellus Eu" } } ], "conversation_id": "0471114572504780656", "created_at": "2020-05-15T16:03:42.000Z", "entities": { "annotations": [ { "start": 144, "end": 150, "probability": 0.626, "type": "Product", "normalized_text": "Twitter" } ], "cashtags": [ { "start": 41, "end": 44, "tag": "GE" } ], "urls": [ { "start": 257, "end": 280, "url": "https://t.co/sodales", "expanded_url": "https://www.google.com/sodales", "display_url": "example.google.com/sodales", "images": [ { "url": "https://www.google.com/sodales", "width": 1200, "height": 630 }, { "url": "https://www.google.com/sodales", "width": 150, "height": 150 } ], "status": 200, "title": "Ut eros tellus, rhoncus maximus lacus a, dictum rhoncus libero", "description": "Sed efficitur ultrices elit sed volutpat. Cras nibh turpis, accumsan sed ultricies eget, egestas in libero. Suspendisse potenti. Nullam in posuere metus. Sed ut fringilla tortor", "unwound_url": "https://www.google.com/sodales" } ], "mentions": [ { "start": 105, "end": 121, "username": "SuspendisseAtNunc", "id": "2894469526322928935" }, { "start": 125, "end": 138, "username": "SuspendisseAtNuncPosuere", "id": "6279687081065223918" } ], "hashtags": [ { "start": 47, "end": 60, "tag": "SuspendisseAtNunc" }, { "start": 171, "end": 194, "tag": "SuspendisseNunc" } ] }, "geo": { "coordinates": { "type": "Point", "coordinates": [ 40.74118764, -73.9998279 ] }, "place_id": "0fc2bbe1f995b733" }, "in_reply_to_user_id": "1600750904601052113", "lang": "en", "non_public_metrics": { "user_profile_clicks": 0, "impression_count": 29, "url_link_clicks": 12 }, "organic_metrics": { "retweet_count": 0, "url_link_clicks": 12, "reply_count": 0, "like_count": 1, "user_profile_clicks": 0, "impression_count": 29 }, "possibly_sensitive": true, "promoted_metrics": { "impression_count": 29, "url_link_clicks": 12, "user_profile_clicks": 0, "retweet_count": 0, "reply_count": 0, "like_count": 1 }, "public_metrics": { "retweet_count": 0, "reply_count": 0, "like_count": 1, "quote_count": 0 }, "referenced_tweets": [ { "type": "retweeted", "id": "4653693971459419590" } ], "reply_settings": "everyone", "source": "Twitter for iPhone" }, "includes": { "users": [ { "id": "3955854555026519618", "name": "AliquamOrciEros", "username": "aliquamorcieros" }, { "id": "6747736441958634428", "name": "Suspendisse At Nunc", "username": "suspendisseatnunc" } ], "tweets": [ { "id": "6304480225832455363", "text": "Donec feugiat elit tellus, a ultrices elit sodales facilisis." } ], "media": [ { "height": 1280, "media_key": "7_8340593532515834174", "type": "photo" }, { "preview_image_url": "https://pbs.twimg.com/ext_tw_video_thumb/1422932273641500672/pu/img/kjOa5XKoU_UViWar.jpg", "public_metrics": { "view_count": 1162 }, "non_public_metrics": { "playback_0_count": 1561, "playback_100_count": 116, "playback_25_count": 559, "playback_50_count": 305, "playback_75_count": 183 }, "organic_metrics": { "playback_0_count": 1561, "playback_100_count": 116, "playback_25_count": 559, "playback_50_count": 305, "playback_75_count": 183, "view_count": 629 }, "promoted_metrics": { "playback_0_count": 259, "playback_100_count": 15, "playback_25_count": 113, "playback_50_count": 57, "playback_75_count": 25, "view_count": 124 }, "height": 450, "width": 720, "media_key": "7_1422932273641500672", "duration_ms": 70500, "type": "video" }, { "url": "https://pbs.twimg.com/media/E7yzfJQX0AAw-u8.jpg", "height": 720, "width": 1280, "media_key": "3_1422208929984139264", "type": "animated_gif" } ], "places": [ { "full_name": "Seattle", "id": "123", "contained_within": ["987"], "geo": { "type": "Feature", "geometry": { "type": "Point", "coordinates": [ 47.6062, -122.3321 ] }, "properties": { "name": "Seattle" } } }, { "full_name": "London, the capital and largest city of England and the United Kingdom", "id": "456", "country": "England", "country_code": 44, "name": "London", "place_type": "city" } ], "polls": [ { "id": "123", "options": [ { "position": 1, "label": "Option A", "votes": 795 }, { "position": 2, "label": "Option B", "votes": 800 } ], "duration_minutes": 1440, "voting_status": "closed" }, { "id": "123", "options": [], "end_datetime": "2019-11-28T20:26:41.000Z" } ] }, "errors": [ { "detail": "Some generic error", "field": "archaeology", "parameter": "bones", "resource_id": "123", "resource_type": "tibula", "title": "One strange error", "value": "123" }, { "detail": "Some other generic error", "parameter": "login", "resource_id": "123", "resource_type": "unknown", "section": "zero", "title": "Another strange error", "type": "hidden" } ] } ================================================ FILE: src/test/resources/twitter/rest/v2/tweets/tweets.json ================================================ { "data": [ { "id": "2310484964373377688", "text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", "attachments": { "media_keys": [ "13_9995568729608410852", "14_0381608460867506993", "7_1422932273641500672", "3_1422208929984139264" ], "poll_ids": [ "0419198663175162881" ] }, "author_id": "6338724728067829004", "context_annotations": [ { "domain": { "id": "10", "name": "Person", "description": "Vestibulum pellentesque sed justo ac lacinia" }, "entity": { "id": "5233852574321016658", "name": "Phasellus Eu", "description": "Phasellus Eu" } }, { "domain": { "id": "54", "name": "Musician", "description": "Nullam imperdiet lectus metus" }, "entity": { "id": "6836362243680041612", "name": "Phasellus Eu", "description": "Phasellus Eu" } } ], "conversation_id": "0471114572504780656", "created_at": "2020-05-15T16:03:42.000Z", "entities": { "annotations": [ { "start": 144, "end": 150, "probability": 0.626, "type": "Product", "normalized_text": "Twitter" } ], "cashtags": [ { "start": 41, "end": 44, "tag": "GE" } ], "urls": [ { "start": 257, "end": 280, "url": "https://t.co/sodales", "expanded_url": "https://www.google.com/sodales", "display_url": "example.google.com/sodales", "images": [ { "url": "https://www.google.com/sodales", "width": 1200, "height": 630 }, { "url": "https://www.google.com/sodales", "width": 150, "height": 150 } ], "status": 200, "title": "Ut eros tellus, rhoncus maximus lacus a, dictum rhoncus libero", "description": "Sed efficitur ultrices elit sed volutpat. Cras nibh turpis, accumsan sed ultricies eget, egestas in libero. Suspendisse potenti. Nullam in posuere metus. Sed ut fringilla tortor", "unwound_url": "https://www.google.com/sodales" } ], "mentions": [ { "start": 105, "end": 121, "username": "SuspendisseAtNunc", "id": "2894469526322928935" }, { "start": 125, "end": 138, "username": "SuspendisseAtNuncPosuere", "id": "6279687081065223918" } ], "hashtags": [ { "start": 47, "end": 60, "tag": "SuspendisseAtNunc" }, { "start": 171, "end": 194, "tag": "SuspendisseNunc" } ] }, "geo": { "coordinates": { "type": "Point", "coordinates": [ 40.74118764, -73.9998279 ] }, "place_id": "0fc2bbe1f995b733" }, "in_reply_to_user_id": "1600750904601052113", "lang": "en", "non_public_metrics": { "user_profile_clicks": 0, "impression_count": 29, "url_link_clicks": 12 }, "organic_metrics": { "retweet_count": 0, "url_link_clicks": 12, "reply_count": 0, "like_count": 1, "user_profile_clicks": 0, "impression_count": 29 }, "possibly_sensitive": true, "promoted_metrics": { "impression_count": 29, "url_link_clicks": 12, "user_profile_clicks": 0, "retweet_count": 0, "reply_count": 0, "like_count": 1 }, "public_metrics": { "retweet_count": 0, "reply_count": 0, "like_count": 1, "quote_count": 0 }, "referenced_tweets": [ { "type": "retweeted", "id": "4653693971459419590" } ], "reply_settings": "everyone", "source": "Twitter for iPhone" } ], "meta": { "oldest_id": "1356759580211109999", "newest_id": "1410697282811569999", "result_count": 7, "next_token": "123" }, "includes": { "users": [ { "id": "3955854555026519618", "name": "AliquamOrciEros", "username": "aliquamorcieros" }, { "id": "6747736441958634428", "name": "Suspendisse At Nunc", "username": "suspendisseatnunc" } ], "tweets": [ { "id": "6304480225832455363", "text": "Donec feugiat elit tellus, a ultrices elit sodales facilisis." } ], "media": [ { "height": 1280, "media_key": "7_8340593532515834174", "type": "photo" }, { "preview_image_url": "https://pbs.twimg.com/ext_tw_video_thumb/1422932273641500672/pu/img/kjOa5XKoU_UViWar.jpg", "public_metrics": { "view_count": 1162 }, "non_public_metrics": { "playback_0_count": 1561, "playback_100_count": 116, "playback_25_count": 559, "playback_50_count": 305, "playback_75_count": 183 }, "organic_metrics": { "playback_0_count": 1561, "playback_100_count": 116, "playback_25_count": 559, "playback_50_count": 305, "playback_75_count": 183, "view_count": 629 }, "promoted_metrics": { "playback_0_count": 259, "playback_100_count": 15, "playback_25_count": 113, "playback_50_count": 57, "playback_75_count": 25, "view_count": 124 }, "height": 450, "width": 720, "media_key": "7_1422932273641500672", "duration_ms": 70500, "type": "video" }, { "url": "https://pbs.twimg.com/media/E7yzfJQX0AAw-u8.jpg", "height": 720, "width": 1280, "media_key": "3_1422208929984139264", "type": "animated_gif" } ], "places": [ { "full_name": "Seattle", "id": "123", "contained_within": ["987"], "geo": { "type": "Feature", "geometry": { "type": "Point", "coordinates": [ 47.6062, -122.3321 ] }, "properties": { "name": "Seattle" } } }, { "full_name": "London, the capital and largest city of England and the United Kingdom", "id": "456", "country": "England", "country_code": 44, "name": "London", "place_type": "city" } ], "polls": [ { "id": "123", "options": [ { "position": 1, "label": "Option A", "votes": 795 }, { "position": 2, "label": "Option B", "votes": 800 } ], "duration_minutes": 1440, "voting_status": "closed" }, { "id": "123", "options": [], "end_datetime": "2019-11-28T20:26:41.000Z" } ] }, "errors": [ { "detail": "Some generic error", "field": "archaeology", "parameter": "bones", "resource_id": "123", "resource_type": "tibula", "title": "One strange error", "value": "123" }, { "detail": "Some other generic error", "parameter": "login", "resource_id": "123", "resource_type": "unknown", "section": "zero", "title": "Another strange error", "type": "hidden" } ] } ================================================ FILE: src/test/resources/twitter/rest/v2/users/user.json ================================================ { "data": { "id": "6338724728067829004", "name": "Shippy the Squirrel", "username": "shippy", "created_at": "2020-05-15T16:03:42.000Z", "protected": false, "location": "Seattle", "url": "https://www.google.com/sodales", "description": "Sed efficitur ultrices elit sed volutpat.", "verified": true, "entities": { "url": { "urls": [ { "start": 257, "end": 280, "url": "https://t.co/sodales", "expanded_url": "https://www.google.com/sodales", "display_url": "example.google.com/sodales" } ] }, "description": { "urls": [ { "start": 257, "end": 280, "url": "https://t.co/sodales", "expanded_url": "https://www.google.com/sodales", "display_url": "example.google.com/sodales" } ], "mentions": [ { "start": 105, "end": 121, "username": "SuspendisseAtNunc" }, { "start": 125, "end": 138, "username": "SuspendisseAtNuncPosuere" } ], "hashtags": [ { "start": 47, "end": 60, "tag": "SuspendisseAtNunc" }, { "start": 171, "end": 194, "tag": "SuspendisseNunc" } ], "cashtags": [ { "start": 41, "end": 44, "tag": "GE" } ] } }, "profile_image_url": "https://www.google.com/sodales.adri", "public_metrics": { "followers_count": 501796, "following_count": 306, "tweet_count": 6655, "listed_count": 1433 }, "pinned_tweet_id": "2894469526322928935" }, "includes": { "users": [ { "id": "3955854555026519618", "name": "AliquamOrciEros", "username": "aliquamorcieros" }, { "id": "6747736441958634428", "name": "Suspendisse At Nunc", "username": "suspendisseatnunc" } ], "tweets": [ { "id": "6304480225832455363", "text": "Donec feugiat elit tellus, a ultrices elit sodales facilisis." } ] }, "errors": [ { "detail": "Some generic error", "field": "archaeology", "parameter": "bones", "resource_id": "123", "resource_type": "tibula", "title": "One strange error", "value": "123" }, { "detail": "Some other generic error", "parameter": "login", "resource_id": "123", "resource_type": "unknown", "section": "zero", "title": "Another strange error", "type": "hidden" } ] } ================================================ FILE: src/test/resources/twitter/rest/v2/users/users.json ================================================ { "data": [{ "id": "6338724728067829004", "name": "Shippy the Squirrel", "username": "shippy", "created_at": "2020-05-15T16:03:42.000Z", "protected": false, "location": "Seattle", "url": "https://www.google.com/sodales", "description": "Sed efficitur ultrices elit sed volutpat.", "verified": true, "entities": { "url": { "urls": [ { "start": 257, "end": 280, "url": "https://t.co/sodales", "expanded_url": "https://www.google.com/sodales", "display_url": "example.google.com/sodales" } ] }, "description": { "urls": [ { "start": 257, "end": 280, "url": "https://t.co/sodales", "expanded_url": "https://www.google.com/sodales", "display_url": "example.google.com/sodales" } ], "mentions": [ { "start": 105, "end": 121, "username": "SuspendisseAtNunc" }, { "start": 125, "end": 138, "username": "SuspendisseAtNuncPosuere" } ], "hashtags": [ { "start": 47, "end": 60, "tag": "SuspendisseAtNunc" }, { "start": 171, "end": 194, "tag": "SuspendisseNunc" } ], "cashtags": [ { "start": 41, "end": 44, "tag": "GE" } ] } }, "profile_image_url": "https://www.google.com/sodales.adri", "public_metrics": { "followers_count": 501796, "following_count": 306, "tweet_count": 6655, "listed_count": 1433 }, "pinned_tweet_id": "2894469526322928935" }], "includes": { "users": [ { "id": "3955854555026519618", "name": "AliquamOrciEros", "username": "aliquamorcieros" }, { "id": "6747736441958634428", "name": "Suspendisse At Nunc", "username": "suspendisseatnunc" } ], "tweets": [ { "id": "6304480225832455363", "text": "Donec feugiat elit tellus, a ultrices elit sodales facilisis." } ] }, "errors": [ { "detail": "Some generic error", "field": "archaeology", "parameter": "bones", "resource_id": "123", "resource_type": "tibula", "title": "One strange error", "value": "123" }, { "detail": "Some other generic error", "parameter": "login", "resource_id": "123", "resource_type": "unknown", "section": "zero", "title": "Another strange error", "type": "hidden" } ] } ================================================ FILE: src/test/resources/twitter/streaming/common/disconnect_messages.json ================================================ {"disconnect":{"code": 4,"stream_name":"my-stream-name","reason":"something-went-wrong"}} {"disconnect":{"code": 2,"stream_name":"","reason":""}} ================================================ FILE: src/test/resources/twitter/streaming/common/limit_notices.json ================================================ {"limit": {"track": 1234}} {"limit": {"track": 5678}} ================================================ FILE: src/test/resources/twitter/streaming/common/location_deletion_notices.json ================================================ {"scrub_geo":{"user_id":14090452,"user_id_str":"14090452","up_to_status_id":23260136625,"up_to_status_id_str":"23260136625"}} {"scrub_geo":{"user_id":14090453,"user_id_str":"14090453","up_to_status_id":23260136626,"up_to_status_id_str":"23260136626"}} ================================================ FILE: src/test/resources/twitter/streaming/common/status_deletion_notices.json ================================================ {"delete":{"status":{"id":303747490128207873,"id_str":"303747490128207873","user_id":74558989,"user_id_str":"74558989"}}} {"delete":{"status":{"id":303747490128207874,"id_str":"303747490128207874","user_id":74558990,"user_id_str":"74558990"}}} ================================================ FILE: src/test/resources/twitter/streaming/common/status_withheld_notices.json ================================================ {"status_withheld":{"id":1234567890,"user_id":123456,"withheld_in_countries":["DE", "AR"]}} {"status_withheld":{"id":1234567891,"user_id":123457,"withheld_in_countries":["IT"]}} ================================================ FILE: src/test/resources/twitter/streaming/common/tweets.json ================================================ {"contributors":[],"coordinates":[],"created_at":"Sun Oct 25 10:13:30 +0000 2015","entities":{"hashtags":[{"text":"Scala","indices":[19,25]},{"text":"Java","indices":[99,104]}],"media":[],"urls":[{"url":"https://t.co/SqcXLNyx3H","expanded_url":"http://buff.ly/1G1SVXJ","display_url":"buff.ly/1G1SVXJ","indices":[73,96]}],"user_mentions":[{"id":2600538973,"id_str":"2600538973","indices":[3,16],"name":"Scala Academy","screen_name":"ScalaAcademy"}]},"favorite_count":0,"favorited":false,"id":658224858933927940,"id_str":"658224858933927940","is_quote_status":false,"lang":"en","possibly_sensitive":false,"scopes":{},"retweet_count":1,"retweeted":false,"retweeted_status":{"contributors":[],"coordinates":[],"created_at":"Sun Oct 25 07:47:01 +0000 2015","entities":{"hashtags":[{"text":"Scala","indices":[1,7]},{"text":"Java","indices":[81,86]}],"media":[],"urls":[{"url":"https://t.co/SqcXLNyx3H","expanded_url":"http://buff.ly/1G1SVXJ","display_url":"buff.ly/1G1SVXJ","indices":[55,78]}],"user_mentions":[]},"favorite_count":0,"favorited":false,"id":658187995024109569,"id_str":"658187995024109569","is_quote_status":false,"lang":"en","possibly_sensitive":false,"scopes":{},"retweet_count":1,"retweeted":false,"source":"Buffer","text":"\u201c#Scala: Arrays are not (that much of) a special case\u201d https://t.co/SqcXLNyx3H | #Java","truncated":false,"user":{"blocked_by":false,"blocking":false,"contributors_enabled":false,"created_at":"Wed Jul 02 22:51:01 +0100 2014","default_profile":true,"default_profile_image":false,"description":"Live Interactive Scala Training Online!\ninfo@scalaacademy.com","entities":{"hashtags":[],"media":[],"url":{"urls":[{"url":"http://t.co/EopXLzpmhB","expanded_url":"http://www.scala-academy.com/","display_url":"scala-academy.com","indices":[0,22]}]},"urls":[],"user_mentions":[],"description":{"urls":[]}},"favourites_count":103,"follow_request_sent":false,"following":false,"followers_count":143,"friends_count":190,"geo_enabled":false,"has_extended_profile":false,"id":2600538973,"id_str":"2600538973","is_translation_enabled":false,"is_translator":false,"lang":"en","listed_count":22,"location":"","muting":false,"name":"Scala Academy","notifications":false,"profile_background_color":"C0DEED","profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png","profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png","profile_background_tile":false,"profile_banner_url":"https://pbs.twimg.com/profile_banners/2600538973/1443610793","profile_image_url":"http://pbs.twimg.com/profile_images/489702099534352384/JYeeaPg4_normal.png","profile_image_url_https":"https://pbs.twimg.com/profile_images/489702099534352384/JYeeaPg4_normal.png","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"protected":false,"screen_name":"ScalaAcademy","show_all_inline_media":false,"statuses_count":429,"url":"http://t.co/EopXLzpmhB","verified":false},"withheld_copyright":false,"withheld_in_countries":[],"metadata":{"iso_language_code":"en","result_type":"recent"}},"source":"final one kk","text":"RT @ScalaAcademy: \u201c#Scala: Arrays are not (that much of) a special case\u201d https://t.co/SqcXLNyx3H | #Java","truncated":false,"user":{"blocked_by":false,"blocking":false,"contributors_enabled":false,"created_at":"Thu Dec 25 02:07:45 +0000 2014","default_profile":false,"default_profile_image":false,"description":"Hey, I retweet #Java related tweets. Follow us and maybe you'll learn something new! Questions/concerns? Contact @jdf221 or @Jordanb844","entities":{"hashtags":[],"media":[],"urls":[],"user_mentions":[],"description":{"urls":[]}},"favourites_count":62453,"follow_request_sent":false,"following":false,"followers_count":2883,"friends_count":19,"geo_enabled":false,"has_extended_profile":false,"id":2942356560,"id_str":"2942356560","is_translation_enabled":false,"is_translator":false,"lang":"en","listed_count":2757,"location":"","muting":false,"name":"Java","notifications":false,"profile_background_color":"022330","profile_background_image_url":"http://abs.twimg.com/images/themes/theme15/bg.png","profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme15/bg.png","profile_background_tile":false,"profile_image_url":"http://pbs.twimg.com/profile_images/547942714675712000/Kr9dDPXJ_normal.png","profile_image_url_https":"https://pbs.twimg.com/profile_images/547942714675712000/Kr9dDPXJ_normal.png","profile_link_color":"0084B4","profile_sidebar_border_color":"A8C7F7","profile_sidebar_fill_color":"C0DFEC","profile_text_color":"333333","profile_use_background_image":true,"protected":false,"screen_name":"retweetjava","show_all_inline_media":false,"statuses_count":167794,"verified":false},"withheld_copyright":false,"withheld_in_countries":[],"metadata":{"iso_language_code":"en","result_type":"recent"}} {"contributors":[],"coordinates":[],"created_at":"Sun Oct 25 10:12:20 +0000 2015","entities":{"hashtags":[{"text":"LambdaWorld","indices":[22,34]},{"text":"fp","indices":[48,51]},{"text":"java","indices":[53,58]},{"text":"scala","indices":[60,66]},{"text":"manningbooks","indices":[132,140]}],"media":[],"urls":[{"url":"https://t.co/OdkWpwUDeg","expanded_url":"http://manning.com","display_url":"manning.com","indices":[108,131]}],"user_mentions":[{"id":24914741,"id_str":"24914741","indices":[3,16],"name":"Manning Publications","screen_name":"ManningBooks"}]},"favorite_count":0,"favorited":false,"id":658224567039717376,"id_str":"658224567039717376","is_quote_status":false,"lang":"en","possibly_sensitive":false,"scopes":{},"retweet_count":1,"retweeted":false,"retweeted_status":{"contributors":[],"coordinates":[],"created_at":"Sun Oct 25 10:00:10 +0000 2015","entities":{"hashtags":[{"text":"LambdaWorld","indices":[4,16]},{"text":"fp","indices":[30,33]},{"text":"java","indices":[35,40]},{"text":"scala","indices":[42,48]},{"text":"manningbooks","indices":[114,127]}],"media":[],"urls":[{"url":"https://t.co/OdkWpwUDeg","expanded_url":"http://manning.com","display_url":"manning.com","indices":[90,113]}],"user_mentions":[]},"favorite_count":1,"favorited":false,"id":658221505948442625,"id_str":"658221505948442625","is_quote_status":false,"lang":"en","possibly_sensitive":false,"scopes":{},"retweet_count":1,"retweeted":false,"source":"TweetDeck","text":"Hey #LambdaWorld! Save 39% on #fp, #java, #scala, and other books with code ctwlambdaw at https://t.co/OdkWpwUDeg #manningbooks","truncated":false,"user":{"blocked_by":false,"blocking":false,"contributors_enabled":false,"created_at":"Tue Mar 17 17:13:25 +0000 2009","default_profile":false,"default_profile_image":false,"description":"Follow Manning Publications on Twitter and get exclusive discounts, product announcements, author news, and great content.","entities":{"hashtags":[],"media":[],"url":{"urls":[{"url":"http://t.co/hoWlwoEP88","expanded_url":"http://www.manning.com","display_url":"manning.com","indices":[0,22]}]},"urls":[],"user_mentions":[],"description":{"urls":[]}},"favourites_count":1596,"follow_request_sent":false,"following":true,"followers_count":13036,"friends_count":882,"geo_enabled":true,"has_extended_profile":false,"id":24914741,"id_str":"24914741","is_translation_enabled":false,"is_translator":false,"lang":"en","listed_count":1114,"location":"Shelter Island, United States","muting":false,"name":"Manning Publications","notifications":false,"profile_background_color":"ACDED6","profile_background_image_url":"http://abs.twimg.com/images/themes/theme18/bg.gif","profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme18/bg.gif","profile_background_tile":false,"profile_image_url":"http://pbs.twimg.com/profile_images/386363365/uglyguy_normal.jpg","profile_image_url_https":"https://pbs.twimg.com/profile_images/386363365/uglyguy_normal.jpg","profile_link_color":"038543","profile_sidebar_border_color":"EEEEEE","profile_sidebar_fill_color":"F6F6F6","profile_text_color":"333333","profile_use_background_image":true,"protected":false,"screen_name":"ManningBooks","show_all_inline_media":false,"statuses_count":20053,"time_zone":"Eastern Time (US & Canada)","url":"http://t.co/hoWlwoEP88","utc_offset":-14400,"verified":false},"withheld_copyright":false,"withheld_in_countries":[],"metadata":{"iso_language_code":"en","result_type":"recent"}},"source":"Twitter for iPhone","text":"RT @ManningBooks: Hey #LambdaWorld! Save 39% on #fp, #java, #scala, and other books with code ctwlambdaw at https://t.co/OdkWpwUDeg #mannin\u2026","truncated":false,"user":{"blocked_by":false,"blocking":false,"contributors_enabled":false,"created_at":"Mon May 26 12:34:34 +0100 2008","default_profile":false,"default_profile_image":false,"description":"Software Developer for 35 years currently involved in Java/Java EE, Apache Camel, Service Mix, ActiveMQ, Blueprint","entities":{"hashtags":[],"media":[],"urls":[],"user_mentions":[],"description":{"urls":[]}},"favourites_count":26276,"follow_request_sent":false,"following":false,"followers_count":844,"friends_count":2003,"geo_enabled":false,"has_extended_profile":false,"id":14908048,"id_str":"14908048","is_translation_enabled":false,"is_translator":false,"lang":"en","listed_count":208,"location":"...over an Irish rainbow","muting":false,"name":"Sr.Software Engineer","notifications":false,"profile_background_color":"ACDED6","profile_background_image_url":"http://abs.twimg.com/images/themes/theme18/bg.gif","profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme18/bg.gif","profile_background_tile":false,"profile_image_url":"http://pbs.twimg.com/profile_images/3229442079/800b5f79bd5ad9c586ce5c2de8dadbed_normal.jpeg","profile_image_url_https":"https://pbs.twimg.com/profile_images/3229442079/800b5f79bd5ad9c586ce5c2de8dadbed_normal.jpeg","profile_link_color":"038544","profile_sidebar_border_color":"EEEEEE","profile_sidebar_fill_color":"F6F6F6","profile_text_color":"333333","profile_use_background_image":true,"protected":false,"screen_name":"dmkavanagh","show_all_inline_media":false,"statuses_count":22244,"time_zone":"Eastern Time (US & Canada)","utc_offset":-14400,"verified":false},"withheld_copyright":false,"withheld_in_countries":[],"metadata":{"iso_language_code":"en","result_type":"recent"}} {"contributors":[],"coordinates":[],"created_at":"Sun Oct 25 10:11:06 +0000 2015","entities":{"hashtags":[{"text":"sthlm","indices":[66,72]},{"text":"grotesco","indices":[73,82]},{"text":"scala","indices":[83,89]}],"media":[],"urls":[],"user_mentions":[{"id":360092133,"id_str":"360092133","indices":[3,14],"name":"Joakim Karlsson","screen_name":"inoxcrom66"}]},"favorite_count":0,"favorited":false,"id":658224254136266752,"id_str":"658224254136266752","is_quote_status":false,"lang":"sv","possibly_sensitive":false,"scopes":{},"retweet_count":1,"retweeted":false,"retweeted_status":{"contributors":[],"coordinates":[],"created_at":"Sat Sep 26 21:21:30 +0100 2015","entities":{"hashtags":[{"text":"sthlm","indices":[50,56]},{"text":"grotesco","indices":[57,66]},{"text":"scala","indices":[67,73]}],"media":[],"urls":[],"user_mentions":[]},"favorite_count":2,"favorited":false,"id":647868621352513537,"id_str":"647868621352513537","is_quote_status":false,"lang":"sv","possibly_sensitive":false,"scopes":{},"retweet_count":1,"retweeted":false,"source":"Twitter for iPhone","text":"Grotesco på scala är lätt det roligaste jag sett! #sthlm #grotesco #scala","truncated":false,"user":{"blocked_by":false,"blocking":false,"contributors_enabled":false,"created_at":"Mon Aug 22 18:34:27 +0100 2011","default_profile":true,"default_profile_image":false,"description":"Arbetar som coach inom skolans värld där jag främst utför kartläggningar, rådgiver samt modellhandleder där högre måluppfyllelse samt inkludering är målen!","entities":{"hashtags":[],"media":[],"urls":[],"user_mentions":[],"description":{"urls":[]}},"favourites_count":1188,"follow_request_sent":false,"following":false,"followers_count":474,"friends_count":1018,"geo_enabled":true,"has_extended_profile":false,"id":360092133,"id_str":"360092133","is_translation_enabled":false,"is_translator":false,"lang":"en","listed_count":7,"location":"Sweden","muting":false,"name":"Joakim Karlsson","notifications":false,"profile_background_color":"C0DEED","profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png","profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png","profile_background_tile":false,"profile_image_url":"http://pbs.twimg.com/profile_images/3028538656/0744f020227938a4513fb65931279954_normal.png","profile_image_url_https":"https://pbs.twimg.com/profile_images/3028538656/0744f020227938a4513fb65931279954_normal.png","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"protected":false,"screen_name":"inoxcrom66","show_all_inline_media":false,"statuses_count":5360,"verified":false},"withheld_copyright":false,"withheld_in_countries":[],"metadata":{"iso_language_code":"sv","result_type":"recent"}},"source":"Twitter Web Client","text":"RT @inoxcrom66: Grotesco på scala är lätt det roligaste jag sett! #sthlm #grotesco #scala","truncated":false,"user":{"blocked_by":false,"blocking":false,"contributors_enabled":false,"created_at":"Wed Sep 24 10:52:42 +0100 2014","default_profile":true,"default_profile_image":false,"description":"Specialpedagogik,Diktberoende, Lärarförbundet, Forskning ,utveckling, Nyfiken ,Helhetssyn ,Musik gäller i alla lägen..Orden är mina egna.Gått med 2014","entities":{"hashtags":[],"media":[],"urls":[],"user_mentions":[],"description":{"urls":[]}},"favourites_count":193,"follow_request_sent":false,"following":false,"followers_count":746,"friends_count":2019,"geo_enabled":false,"has_extended_profile":false,"id":2829569412,"id_str":"2829569412","is_translation_enabled":false,"is_translator":false,"lang":"sv","listed_count":15,"location":"Stockholm ","muting":false,"name":"Lena Ahlstedt","notifications":false,"profile_background_color":"C0DEED","profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png","profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png","profile_background_tile":false,"profile_image_url":"http://pbs.twimg.com/profile_images/516293991663284224/PfpToqSG_normal.jpeg","profile_image_url_https":"https://pbs.twimg.com/profile_images/516293991663284224/PfpToqSG_normal.jpeg","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"protected":false,"screen_name":"AhlstedtLena","show_all_inline_media":false,"statuses_count":2284,"verified":false},"withheld_copyright":false,"withheld_in_countries":[],"metadata":{"iso_language_code":"sv","result_type":"recent"}} {"contributors":[],"coordinates":[],"created_at":"Sun Oct 25 10:10:07 +0000 2015","entities":{"hashtags":[{"text":"pezzo","indices":[18,24]},{"text":"scala","indices":[28,34]}],"media":[],"urls":[],"user_mentions":[{"id":847497841,"id_str":"847497841","indices":[0,8],"name":"#ercica","screen_name":"PiLu975"}]},"favorite_count":1,"favorited":false,"id":658224007532146689,"id_str":"658224007532146689","in_reply_to_screen_name":"PiLu975","in_reply_to_status_id":658223568560484352,"in_reply_to_status_id_str":"658223568560484352","in_reply_to_user_id":847497841,"in_reply_to_user_id_str":"847497841","is_quote_status":false,"lang":"und","possibly_sensitive":false,"scopes":{},"retweet_count":0,"retweeted":false,"source":"Twitter for Android","text":"@PiLu975 massí,un #pezzo,na #scala,fai tu..","truncated":false,"user":{"blocked_by":false,"blocking":false,"contributors_enabled":false,"created_at":"Wed Aug 13 23:11:29 +0100 2014","default_profile":false,"default_profile_image":false,"description":"BIONICO","entities":{"hashtags":[],"media":[],"urls":[],"user_mentions":[],"description":{"urls":[]}},"favourites_count":40902,"follow_request_sent":false,"following":false,"followers_count":999,"friends_count":536,"geo_enabled":false,"has_extended_profile":false,"id":2742164776,"id_str":"2742164776","is_translation_enabled":false,"is_translator":false,"lang":"it","listed_count":15,"location":"STOCAZZO ","muting":false,"name":"➡IO,ROBIROBOT➡","notifications":false,"profile_background_color":"000000","profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png","profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png","profile_background_tile":false,"profile_banner_url":"https://pbs.twimg.com/profile_banners/2742164776/1420286493","profile_image_url":"http://pbs.twimg.com/profile_images/581585418942038016/pWGN3SUe_normal.jpg","profile_image_url_https":"https://pbs.twimg.com/profile_images/581585418942038016/pWGN3SUe_normal.jpg","profile_link_color":"DD2E44","profile_sidebar_border_color":"000000","profile_sidebar_fill_color":"000000","profile_text_color":"000000","profile_use_background_image":false,"protected":false,"screen_name":"robirobot74","show_all_inline_media":false,"statuses_count":34209,"time_zone":"Ljubljana","utc_offset":3600,"verified":false},"withheld_copyright":false,"withheld_in_countries":[],"metadata":{"iso_language_code":"und","result_type":"recent"}} {"contributors":[],"coordinates":[],"created_at":"Sun Oct 25 10:04:18 +0000 2015","entities":{"hashtags":[{"text":"Slick","indices":[16,22]},{"text":"ensime","indices":[66,73]},{"text":"scala","indices":[118,124]}],"media":[],"urls":[{"url":"https://t.co/ixPHEeFYpL","expanded_url":"https://github.com/ensime/ensime-server/pull/1119","display_url":"github.com/ensime/ensime-\u2026","indices":[82,105]}],"user_mentions":[{"id":315265842,"id_str":"315265842","indices":[3,9],"name":"Christopher Vogt","screen_name":"cvogt"},{"id":6526632,"id_str":"6526632","indices":[109,116],"name":"Sam Halliday","screen_name":"fommil"}]},"favorite_count":0,"favorited":false,"id":658222545196437504,"id_str":"658222545196437504","is_quote_status":false,"lang":"en","possibly_sensitive":false,"scopes":{},"retweet_count":7,"retweeted":false,"retweeted_status":{"contributors":[],"coordinates":[],"created_at":"Sun Oct 25 01:55:18 +0000 2015","entities":{"hashtags":[{"text":"Slick","indices":[5,11]},{"text":"ensime","indices":[55,62]},{"text":"scala","indices":[107,113]}],"media":[],"urls":[{"url":"https://t.co/ixPHEeFYpL","expanded_url":"https://github.com/ensime/ensime-server/pull/1119","display_url":"github.com/ensime/ensime-\u2026","indices":[71,94]}],"user_mentions":[{"id":6526632,"id_str":"6526632","indices":[98,105],"name":"Sam Halliday","screen_name":"fommil"}]},"favorite_count":10,"favorited":false,"id":658099484866564097,"id_str":"658099484866564097","is_quote_status":false,"lang":"en","possibly_sensitive":false,"scopes":{},"retweet_count":7,"retweeted":false,"source":"TweetDeck","text":"Need #Slick 2 -> 3 migration example? Just upgraded #ensime-server. https://t.co/ixPHEeFYpL cc @fommil #scala","truncated":false,"user":{"blocked_by":false,"blocking":false,"contributors_enabled":false,"created_at":"Sat Jun 11 16:42:41 +0100 2011","default_profile":false,"default_profile_image":false,"description":"Software Engineer at @xdotai / Scala Slick developer","entities":{"hashtags":[],"media":[],"url":{"urls":[{"url":"https://t.co/iOgSCN2TH8","expanded_url":"https://github.com/cvogt/compossible","display_url":"github.com/cvogt/compossi\u2026","indices":[0,23]}]},"urls":[],"user_mentions":[],"description":{"urls":[]}},"favourites_count":105,"follow_request_sent":false,"following":false,"followers_count":748,"friends_count":40,"geo_enabled":false,"has_extended_profile":false,"id":315265842,"id_str":"315265842","is_translation_enabled":false,"is_translator":false,"lang":"en","listed_count":27,"location":"NYC","muting":false,"name":"Christopher Vogt","notifications":false,"profile_background_color":"000000","profile_background_image_url":"http://abs.twimg.com/images/themes/theme14/bg.gif","profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme14/bg.gif","profile_background_tile":false,"profile_image_url":"http://pbs.twimg.com/profile_images/542684298621358080/sTwaAI0k_normal.jpeg","profile_image_url_https":"https://pbs.twimg.com/profile_images/542684298621358080/sTwaAI0k_normal.jpeg","profile_link_color":"3B94D9","profile_sidebar_border_color":"000000","profile_sidebar_fill_color":"000000","profile_text_color":"000000","profile_use_background_image":false,"protected":false,"screen_name":"cvogt","show_all_inline_media":false,"statuses_count":681,"time_zone":"Berlin","url":"https://t.co/iOgSCN2TH8","utc_offset":3600,"verified":false},"withheld_copyright":false,"withheld_in_countries":[],"metadata":{"iso_language_code":"en","result_type":"recent"}},"source":"Twitter for Android","text":"RT @cvogt: Need #Slick 2 -> 3 migration example? Just upgraded #ensime-server. https://t.co/ixPHEeFYpL cc @fommil #scala","truncated":false,"user":{"blocked_by":false,"blocking":false,"contributors_enabled":false,"created_at":"Sat Jun 02 18:54:55 +0100 2007","default_profile":true,"default_profile_image":false,"description":"Scala, Java, Big Data, R&D, Mathematics, Leadership","entities":{"hashtags":[],"media":[],"url":{"urls":[{"url":"http://t.co/cuoDY9MRMI","expanded_url":"http://github.com/fommil","display_url":"github.com/fommil","indices":[0,22]}]},"urls":[],"user_mentions":[],"description":{"urls":[]}},"favourites_count":2199,"follow_request_sent":false,"following":false,"followers_count":504,"friends_count":186,"geo_enabled":true,"has_extended_profile":false,"id":6526632,"id_str":"6526632","is_translation_enabled":false,"is_translator":false,"lang":"en","listed_count":44,"location":"London","muting":false,"name":"Sam Halliday","notifications":false,"profile_background_color":"C0DEED","profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png","profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png","profile_background_tile":false,"profile_banner_url":"https://pbs.twimg.com/profile_banners/6526632/1363946877","profile_image_url":"http://pbs.twimg.com/profile_images/494912315976736768/x9VVsrs2_normal.jpeg","profile_image_url_https":"https://pbs.twimg.com/profile_images/494912315976736768/x9VVsrs2_normal.jpeg","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"protected":false,"screen_name":"fommil","show_all_inline_media":false,"statuses_count":1840,"time_zone":"Europe/London","url":"http://t.co/cuoDY9MRMI","utc_offset":0,"verified":false},"withheld_copyright":false,"withheld_in_countries":[],"metadata":{"iso_language_code":"en","result_type":"recent"}} ================================================ FILE: src/test/resources/twitter/streaming/common/user_withheld_notices.json ================================================ {"user_withheld":{"id":123456,"withheld_in_countries":["DE","AR"]}} {"user_withheld":{"id":123457,"withheld_in_countries":["IT"]}} ================================================ FILE: src/test/resources/twitter/streaming/common/warning_messages.json ================================================ {"warning":{"code":"FALLING_BEHIND","message":"Your connection is falling behind and messages are being queued for delivery to you. Your queue is now over 60% full. You will be disconnected when the queue is full.", "percent_full": 60}} ================================================ FILE: src/test/resources/twitter/streaming/site/control_messages.json ================================================ {"control":{"control_uri":"/1.1/site/c/01_225167_334389048B872A533002B34D73F8C29FD09EFC50"}} ================================================ FILE: src/test/resources/twitter/streaming/site/user_envelop_direct_message.json ================================================ { "for_user": 1000, "message": { "id": 542081720715980800, "id_str": "542081720715980800", "text": "fflatorre uses TrueTwit validation. To validate click here: http:\/\/t.co\/aldtQxlbCb", "sender": { "id": 535354329, "id_str": "535354329", "name": "Francesco la Torre", "screen_name": "AllegroJazzz", "location": "", "description": "", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 20, "friends_count": 157, "listed_count": 6, "created_at": "Sat Mar 24 11:46:38 +0000 2012", "favourites_count": 28, "utc_offset": 3600, "time_zone": "London", "geo_enabled": false, "verified": false, "statuses_count": 22, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "709397", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1944949620\/facebook-che-jpg_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1944949620\/facebook-che-jpg_normal.jpg", "profile_link_color": "4C71BD", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "sender_id": 535354329, "sender_id_str": "535354329", "sender_screen_name": "AllegroJazzz", "recipient": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 133, "friends_count": 95, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 189, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "recipient_id": 2911461333, "recipient_id_str": "2911461333", "recipient_screen_name": "DanielaSfregola", "created_at": "Mon Dec 08 22:22:08 +0000 2014", "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/aldtQxlbCb", "expanded_url": "http:\/\/truetwit.com\/vy328523129", "display_url": "truetwit.com\/vy328523129", "indices": [ 60, 82 ] } ] } } } ================================================ FILE: src/test/resources/twitter/streaming/site/user_envelop_direct_message_stringified.json ================================================ { "for_user": "1000", "message": { "id": 542081720715980800, "id_str": "542081720715980800", "text": "fflatorre uses TrueTwit validation. To validate click here: http:\/\/t.co\/aldtQxlbCb", "sender": { "id": 535354329, "id_str": "535354329", "name": "Francesco la Torre", "screen_name": "AllegroJazzz", "location": "", "description": "", "url": null, "entities": { "description": { "urls": [] } }, "protected": false, "followers_count": 20, "friends_count": 157, "listed_count": 6, "created_at": "Sat Mar 24 11:46:38 +0000 2012", "favourites_count": 28, "utc_offset": 3600, "time_zone": "London", "geo_enabled": false, "verified": false, "statuses_count": 22, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "709397", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/1944949620\/facebook-che-jpg_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/1944949620\/facebook-che-jpg_normal.jpg", "profile_link_color": "4C71BD", "profile_sidebar_border_color": "86A4A6", "profile_sidebar_fill_color": "A0C5C7", "profile_text_color": "333333", "profile_use_background_image": false, "has_extended_profile": false, "default_profile": false, "default_profile_image": false, "following": true, "follow_request_sent": false, "notifications": false }, "sender_id": 535354329, "sender_id_str": "535354329", "sender_screen_name": "AllegroJazzz", "recipient": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 133, "friends_count": 95, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 189, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "recipient_id": 2911461333, "recipient_id_str": "2911461333", "recipient_screen_name": "DanielaSfregola", "created_at": "Mon Dec 08 22:22:08 +0000 2014", "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "http:\/\/t.co\/aldtQxlbCb", "expanded_url": "http:\/\/truetwit.com\/vy328523129", "display_url": "truetwit.com\/vy328523129", "indices": [ 60, 82 ] } ] } } } ================================================ FILE: src/test/resources/twitter/streaming/site/user_envelop_simple_event.json ================================================ { "for_user": 42, "message": { "created_at": "Sun Oct 25 10:13:30 +0000 2015", "event": "user_update", "source": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "target": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } } } ================================================ FILE: src/test/resources/twitter/streaming/site/user_envelop_simple_event_stringified.json ================================================ { "for_user": "42", "message": { "created_at": "Sun Oct 25 10:13:30 +0000 2015", "event": "user_update", "source": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "target": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false } } } ================================================ FILE: src/test/resources/twitter/streaming/site/user_envelop_tweet.json ================================================ { "for_user": 1888, "message": { "contributors": [], "coordinates": [], "created_at": "Sun Oct 25 10:13:30 +0000 2015", "entities": { "hashtags": [ { "text": "Scala", "indices": [ 19, 25 ] }, { "text": "Java", "indices": [ 99, 104 ] } ], "media": [], "urls": [ { "url": "https://t.co/SqcXLNyx3H", "expanded_url": "http://buff.ly/1G1SVXJ", "display_url": "buff.ly/1G1SVXJ", "indices": [ 73, 96 ] } ], "user_mentions": [ { "id": 2600538973, "id_str": "2600538973", "indices": [ 3, 16 ], "name": "Scala Academy", "screen_name": "ScalaAcademy" } ] }, "favorite_count": 0, "favorited": false, "id": 658224858933927940, "id_str": "658224858933927940", "is_quote_status": false, "lang": "en", "possibly_sensitive": false, "scopes": {}, "retweet_count": 1, "retweeted": false, "retweeted_status": { "contributors": [], "coordinates": [], "created_at": "Sun Oct 25 07:47:01 +0000 2015", "entities": { "hashtags": [ { "text": "Scala", "indices": [ 1, 7 ] }, { "text": "Java", "indices": [ 81, 86 ] } ], "media": [], "urls": [ { "url": "https://t.co/SqcXLNyx3H", "expanded_url": "http://buff.ly/1G1SVXJ", "display_url": "buff.ly/1G1SVXJ", "indices": [ 55, 78 ] } ], "user_mentions": [] }, "favorite_count": 0, "favorited": false, "id": 658187995024109569, "id_str": "658187995024109569", "is_quote_status": false, "lang": "en", "possibly_sensitive": false, "scopes": {}, "retweet_count": 1, "retweeted": false, "source": "Buffer", "text": "\u201c#Scala: Arrays are not (that much of) a special case\u201d https://t.co/SqcXLNyx3H | #Java", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Wed Jul 02 22:51:01 +0100 2014", "default_profile": true, "default_profile_image": false, "description": "Live Interactive Scala Training Online!\ninfo@scalaacademy.com", "entities": { "hashtags": [], "media": [], "url": { "urls": [ { "url": "http://t.co/EopXLzpmhB", "expanded_url": "http://www.scala-academy.com/", "display_url": "scala-academy.com", "indices": [ 0, 22 ] } ] }, "urls": [], "user_mentions": [], "description": { "urls": [] } }, "favourites_count": 103, "follow_request_sent": false, "following": false, "followers_count": 143, "friends_count": 190, "geo_enabled": false, "has_extended_profile": false, "id": 2600538973, "id_str": "2600538973", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 22, "location": "", "muting": false, "name": "Scala Academy", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_banner_url": "https://pbs.twimg.com/profile_banners/2600538973/1443610793", "profile_image_url": "http://pbs.twimg.com/profile_images/489702099534352384/JYeeaPg4_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/489702099534352384/JYeeaPg4_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "ScalaAcademy", "show_all_inline_media": false, "statuses_count": 429, "url": "http://t.co/EopXLzpmhB", "verified": false }, "withheld_copyright": false, "withheld_in_countries": [], "metadata": { "iso_language_code": "en", "result_type": "recent" } }, "source": "final one kk", "text": "RT @ScalaAcademy: \u201c#Scala: Arrays are not (that much of) a special case\u201d https://t.co/SqcXLNyx3H | #Java", "truncated": false, "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Thu Dec 25 02:07:45 +0000 2014", "default_profile": false, "default_profile_image": false, "description": "Hey, I retweet #Java related tweets. Follow us and maybe you'll learn something new! Questions/concerns? Contact @jdf221 or @Jordanb844", "entities": { "hashtags": [], "media": [], "urls": [], "user_mentions": [], "description": { "urls": [] } }, "favourites_count": 62453, "follow_request_sent": false, "following": false, "followers_count": 2883, "friends_count": 19, "geo_enabled": false, "has_extended_profile": false, "id": 2942356560, "id_str": "2942356560", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 2757, "location": "", "muting": false, "name": "Java", "notifications": false, "profile_background_color": "022330", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme15/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme15/bg.png", "profile_background_tile": false, "profile_image_url": "http://pbs.twimg.com/profile_images/547942714675712000/Kr9dDPXJ_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/547942714675712000/Kr9dDPXJ_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "A8C7F7", "profile_sidebar_fill_color": "C0DFEC", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "retweetjava", "show_all_inline_media": false, "statuses_count": 167794, "verified": false }, "withheld_copyright": false, "withheld_in_countries": [], "metadata": { "iso_language_code": "en", "result_type": "recent" } } } ================================================ FILE: src/test/resources/twitter/streaming/site/user_envelop_tweet_event.json ================================================ { "for_user": 42, "message": { "created_at": "Sun Oct 25 10:13:30 +0000 2015", "event": "favorite", "target": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "source": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "target_object": { "created_at": "Mon Sep 26 20:25:28 +0000 2016", "id": 780503578079297536, "id_str": "780503578079297536", "text": "RT @MatthewBogart: Um\u2026 at least I know I\u2019ll never hear songs like that one I liked again. https:\/\/t.co\/KvnRtXL9QX", "truncated": false, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "MatthewBogart", "name": "Matthew Bogart", "id": 13458372, "id_str": "13458372", "indices": [ 3, 17 ] } ], "urls": [], "media": [ { "id": 780422806433517568, "id_str": "780422806433517568", "indices": [ 90, 113 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "url": "https:\/\/t.co\/KvnRtXL9QX", "display_url": "pic.twitter.com\/KvnRtXL9QX", "expanded_url": "https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 900, "h": 1200, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1152, "h": 1536, "resize": "fit" }, "small": { "w": 510, "h": 680, "resize": "fit" } }, "source_status_id": 780422808518086656, "source_status_id_str": "780422808518086656", "source_user_id": 13458372, "source_user_id_str": "13458372" } ] }, "extended_entities": { "media": [ { "id": 780422806433517568, "id_str": "780422806433517568", "indices": [ 90, 113 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "url": "https:\/\/t.co\/KvnRtXL9QX", "display_url": "pic.twitter.com\/KvnRtXL9QX", "expanded_url": "https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 900, "h": 1200, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1152, "h": 1536, "resize": "fit" }, "small": { "w": 510, "h": 680, "resize": "fit" } }, "source_status_id": 780422808518086656, "source_status_id_str": "780422808518086656", "source_user_id": 13458372, "source_user_id_str": "13458372" } ] }, "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e", "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 786491, "id_str": "786491", "name": "andy piper \/ pipes", "screen_name": "andypiper", "location": "Kingston upon Thames, London", "url": "https:\/\/www.justgiving.com\/fundraising\/Debbie-Piper18", "description": "I'm on the @TwitterDev team, supporting and listening to developers working on the Twitter platform. Code, community, and respect. #HeForShe \u2328\ufe0f \ud83c\udf08 \ud83d\ude47", "protected": false, "followers_count": 13799, "friends_count": 3791, "listed_count": 822, "created_at": "Wed Feb 21 15:14:48 +0000 2007", "favourites_count": 71158, "utc_offset": 3600, "time_zone": "London", "geo_enabled": true, "verified": false, "statuses_count": 92485, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "ACDEEE", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/758942034195390464\/JKfZFVIM_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/758942034195390464\/JKfZFVIM_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/786491\/1468424285", "profile_link_color": "6EA8E6", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "F6F6F6", "profile_text_color": "333333", "profile_use_background_image": true, "default_profile": false, "default_profile_image": false, "following": null, "follow_request_sent": null, "notifications": null }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Mon Sep 26 15:04:31 +0000 2016", "id": 780422808518086656, "id_str": "780422808518086656", "text": "Um\u2026 at least I know I\u2019ll never hear songs like that one I liked again. https:\/\/t.co\/KvnRtXL9QX", "truncated": false, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [], "media": [ { "id": 780422806433517568, "id_str": "780422806433517568", "indices": [ 71, 94 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "url": "https:\/\/t.co\/KvnRtXL9QX", "display_url": "pic.twitter.com\/KvnRtXL9QX", "expanded_url": "https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 900, "h": 1200, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1152, "h": 1536, "resize": "fit" }, "small": { "w": 510, "h": 680, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 780422806433517568, "id_str": "780422806433517568", "indices": [ 71, 94 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "url": "https:\/\/t.co\/KvnRtXL9QX", "display_url": "pic.twitter.com\/KvnRtXL9QX", "expanded_url": "https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 900, "h": 1200, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1152, "h": 1536, "resize": "fit" }, "small": { "w": 510, "h": 680, "resize": "fit" } } } ] }, "source": "\u003ca href=\"http:\/\/www.apple.com\/\" rel=\"nofollow\"\u003eOS X\u003c\/a\u003e", "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 13458372, "id_str": "13458372", "name": "Matthew Bogart", "screen_name": "MatthewBogart", "location": "Portland Oregon", "url": "http:\/\/matthewbogart.net", "description": "Cartoonist guy. I drew THE CHAIRS' HIATUS and OH' IT'S THE END OF THE WORLD", "protected": false, "followers_count": 689, "friends_count": 351, "listed_count": 44, "created_at": "Thu Feb 14 03:47:34 +0000 2008", "favourites_count": 10226, "utc_offset": -28800, "time_zone": "Alaska", "geo_enabled": true, "verified": false, "statuses_count": 13250, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "000000", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/166478868\/logoball_wallpaper.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/166478868\/logoball_wallpaper.png", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/573278419980431361\/JFqhQ3FU_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/573278419980431361\/JFqhQ3FU_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/13458372\/1442687405", "profile_link_color": "FF5454", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "DAECF4", "profile_text_color": "663B12", "profile_use_background_image": false, "default_profile": false, "default_profile_image": false, "following": null, "follow_request_sent": null, "notifications": null }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" } } } ================================================ FILE: src/test/resources/twitter/streaming/site/user_envelop_tweet_event_stringified.json ================================================ { "for_user": "42", "message": { "created_at": "Sun Oct 25 10:13:30 +0000 2015", "event": "favorite", "target": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "source": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "target_object": { "created_at": "Mon Sep 26 20:25:28 +0000 2016", "id": 780503578079297536, "id_str": "780503578079297536", "text": "RT @MatthewBogart: Um\u2026 at least I know I\u2019ll never hear songs like that one I liked again. https:\/\/t.co\/KvnRtXL9QX", "truncated": false, "entities": { "hashtags": [], "symbols": [], "user_mentions": [ { "screen_name": "MatthewBogart", "name": "Matthew Bogart", "id": 13458372, "id_str": "13458372", "indices": [ 3, 17 ] } ], "urls": [], "media": [ { "id": 780422806433517568, "id_str": "780422806433517568", "indices": [ 90, 113 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "url": "https:\/\/t.co\/KvnRtXL9QX", "display_url": "pic.twitter.com\/KvnRtXL9QX", "expanded_url": "https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 900, "h": 1200, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1152, "h": 1536, "resize": "fit" }, "small": { "w": 510, "h": 680, "resize": "fit" } }, "source_status_id": 780422808518086656, "source_status_id_str": "780422808518086656", "source_user_id": 13458372, "source_user_id_str": "13458372" } ] }, "extended_entities": { "media": [ { "id": 780422806433517568, "id_str": "780422806433517568", "indices": [ 90, 113 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "url": "https:\/\/t.co\/KvnRtXL9QX", "display_url": "pic.twitter.com\/KvnRtXL9QX", "expanded_url": "https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 900, "h": 1200, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1152, "h": 1536, "resize": "fit" }, "small": { "w": 510, "h": 680, "resize": "fit" } }, "source_status_id": 780422808518086656, "source_status_id_str": "780422808518086656", "source_user_id": 13458372, "source_user_id_str": "13458372" } ] }, "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e", "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 786491, "id_str": "786491", "name": "andy piper \/ pipes", "screen_name": "andypiper", "location": "Kingston upon Thames, London", "url": "https:\/\/www.justgiving.com\/fundraising\/Debbie-Piper18", "description": "I'm on the @TwitterDev team, supporting and listening to developers working on the Twitter platform. Code, community, and respect. #HeForShe \u2328\ufe0f \ud83c\udf08 \ud83d\ude47", "protected": false, "followers_count": 13799, "friends_count": 3791, "listed_count": 822, "created_at": "Wed Feb 21 15:14:48 +0000 2007", "favourites_count": 71158, "utc_offset": 3600, "time_zone": "London", "geo_enabled": true, "verified": false, "statuses_count": 92485, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "ACDEEE", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/758942034195390464\/JKfZFVIM_normal.jpg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/758942034195390464\/JKfZFVIM_normal.jpg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/786491\/1468424285", "profile_link_color": "6EA8E6", "profile_sidebar_border_color": "FFFFFF", "profile_sidebar_fill_color": "F6F6F6", "profile_text_color": "333333", "profile_use_background_image": true, "default_profile": false, "default_profile_image": false, "following": null, "follow_request_sent": null, "notifications": null }, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweeted_status": { "created_at": "Mon Sep 26 15:04:31 +0000 2016", "id": 780422808518086656, "id_str": "780422808518086656", "text": "Um\u2026 at least I know I\u2019ll never hear songs like that one I liked again. https:\/\/t.co\/KvnRtXL9QX", "truncated": false, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [], "media": [ { "id": 780422806433517568, "id_str": "780422806433517568", "indices": [ 71, 94 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "url": "https:\/\/t.co\/KvnRtXL9QX", "display_url": "pic.twitter.com\/KvnRtXL9QX", "expanded_url": "https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 900, "h": 1200, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1152, "h": 1536, "resize": "fit" }, "small": { "w": 510, "h": 680, "resize": "fit" } } } ] }, "extended_entities": { "media": [ { "id": 780422806433517568, "id_str": "780422806433517568", "indices": [ 71, 94 ], "media_url": "http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "media_url_https": "https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg", "url": "https:\/\/t.co\/KvnRtXL9QX", "display_url": "pic.twitter.com\/KvnRtXL9QX", "expanded_url": "https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1", "type": "photo", "sizes": { "medium": { "w": 900, "h": 1200, "resize": "fit" }, "thumb": { "w": 150, "h": 150, "resize": "crop" }, "large": { "w": 1152, "h": 1536, "resize": "fit" }, "small": { "w": 510, "h": 680, "resize": "fit" } } } ] }, "source": "\u003ca href=\"http:\/\/www.apple.com\/\" rel=\"nofollow\"\u003eOS X\u003c\/a\u003e", "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 13458372, "id_str": "13458372", "name": "Matthew Bogart", "screen_name": "MatthewBogart", "location": "Portland Oregon", "url": "http:\/\/matthewbogart.net", "description": "Cartoonist guy. I drew THE CHAIRS' HIATUS and OH' IT'S THE END OF THE WORLD", "protected": false, "followers_count": 689, "friends_count": 351, "listed_count": 44, "created_at": "Thu Feb 14 03:47:34 +0000 2008", "favourites_count": 10226, "utc_offset": -28800, "time_zone": "Alaska", "geo_enabled": true, "verified": false, "statuses_count": 13250, "lang": "en", "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "000000", "profile_background_image_url": "http:\/\/pbs.twimg.com\/profile_background_images\/166478868\/logoball_wallpaper.png", "profile_background_image_url_https": "https:\/\/pbs.twimg.com\/profile_background_images\/166478868\/logoball_wallpaper.png", "profile_background_tile": true, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/573278419980431361\/JFqhQ3FU_normal.jpeg", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/573278419980431361\/JFqhQ3FU_normal.jpeg", "profile_banner_url": "https:\/\/pbs.twimg.com\/profile_banners\/13458372\/1442687405", "profile_link_color": "FF5454", "profile_sidebar_border_color": "000000", "profile_sidebar_fill_color": "DAECF4", "profile_text_color": "663B12", "profile_use_background_image": false, "default_profile": false, "default_profile_image": false, "following": null, "follow_request_sent": null, "notifications": null }, "geo": null, "coordinates": null, "place": null, "contributors": null, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "is_quote_status": false, "retweet_count": 0, "favorite_count": 0, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" } } } ================================================ FILE: src/test/resources/twitter/streaming/site/user_envelop_tweet_stringified.json ================================================ { "for_user": "42", "message": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" } } ================================================ FILE: src/test/resources/twitter/streaming/site/user_envelop_twitter_list_event.json ================================================ { "for_user": 1000, "message": { "created_at": "Sun Oct 25 10:13:30 +0000 2015", "event": "list_created", "target": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "source": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "target_object": { "created_at": "Wed Oct 14 07:29:51 +0100 2015", "description": "a nice description", "following": false, "full_name": "@DanielaSfregola/my-list", "id": 222669735, "id_str": "222669735", "name": "my-list", "subscriber_count": 0, "uri": "/DanielaSfregola/lists/my-list", "member_count": 0, "mode": "private", "slug": "my-list", "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "entities": { "hashtags": [], "media": [], "url": { "urls": [ { "indices": [ 0, 23 ], "url": "https://t.co/0FKNGVnRwX", "display_url": "danielasfregola.com", "expanded_url": "https://www.danielasfregola.com/" } ] }, "urls": [], "user_mentions": [], "description": { "urls": [] } }, "favourites_count": 69, "follow_request_sent": false, "following": false, "followers_count": 133, "friends_count": 98, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "statuses_count": 192, "url": "https://t.co/0FKNGVnRwX", "verified": false } } } } ================================================ FILE: src/test/resources/twitter/streaming/site/user_envelop_twitter_list_event_stringified.json ================================================ { "for_user": "1000", "message": { "created_at": "Sun Oct 25 10:13:30 +0000 2015", "event": "list_created", "target": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "source": { "id": 2911461333, "id_str": "2911461333", "name": "Daniela Sfregola", "screen_name": "DanielaSfregola", "location": "London, United Kingdom", "description": "Java \/ Scala Team Leader working at @OVOEnergy", "url": "https:\/\/t.co\/0FKNGVnRwX", "entities": { "url": { "urls": [ { "url": "https:\/\/t.co\/0FKNGVnRwX", "expanded_url": "https:\/\/www.danielasfregola.com\/", "display_url": "danielasfregola.com", "indices": [ 0, 23 ] } ] }, "description": { "urls": [] } }, "protected": false, "followers_count": 134, "friends_count": 98, "listed_count": 13, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "favourites_count": 68, "utc_offset": null, "time_zone": null, "geo_enabled": true, "verified": false, "statuses_count": 191, "lang": "en", "status": { "created_at": "Tue Oct 06 18:52:40 +0000 2015", "id": 651470141381865473, "id_str": "651470141381865473", "text": "Thinking of Apache Spark in Terms of Legos | MapR https:\/\/t.co\/whZl0cBx05", "source": "\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter Web Client\u003c\/a\u003e", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "geo": null, "coordinates": null, "place": null, "contributors": null, "retweet_count": 0, "favorite_count": 2, "entities": { "hashtags": [], "symbols": [], "user_mentions": [], "urls": [ { "url": "https:\/\/t.co\/whZl0cBx05", "expanded_url": "https:\/\/www.mapr.com\/blog\/thinking-apache-spark-terms-legos#.VhQYdfWIPyp.twitter", "display_url": "mapr.com\/blog\/thinking-\u2026", "indices": [ 50, 73 ] } ] }, "favorited": false, "retweeted": false, "possibly_sensitive": false, "lang": "en" }, "contributors_enabled": false, "is_translator": false, "is_translation_enabled": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_image_url_https": "https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png", "profile_background_tile": false, "profile_image_url": "http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_image_url_https": "https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "has_extended_profile": false, "default_profile": true, "default_profile_image": false, "following": false, "follow_request_sent": false, "notifications": false }, "target_object": { "created_at": "Wed Oct 14 07:29:51 +0100 2015", "description": "a nice description", "following": false, "full_name": "@DanielaSfregola/my-list", "id": 222669735, "id_str": "222669735", "name": "my-list", "subscriber_count": 0, "uri": "/DanielaSfregola/lists/my-list", "member_count": 0, "mode": "private", "slug": "my-list", "user": { "blocked_by": false, "blocking": false, "contributors_enabled": false, "created_at": "Mon Dec 08 20:00:20 +0000 2014", "default_profile": true, "default_profile_image": false, "description": "Java / Scala Team Leader working at @OVOEnergy", "entities": { "hashtags": [], "media": [], "url": { "urls": [ { "indices": [ 0, 23 ], "url": "https://t.co/0FKNGVnRwX", "display_url": "danielasfregola.com", "expanded_url": "https://www.danielasfregola.com/" } ] }, "urls": [], "user_mentions": [], "description": { "urls": [] } }, "favourites_count": 69, "follow_request_sent": false, "following": false, "followers_count": 133, "friends_count": 98, "geo_enabled": true, "has_extended_profile": false, "id": 2911461333, "id_str": "2911461333", "is_translation_enabled": false, "is_translator": false, "lang": "en", "listed_count": 13, "location": "London, United Kingdom", "muting": false, "name": "Daniela Sfregola", "notifications": false, "profile_background_color": "C0DEED", "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png", "profile_background_tile": false, "profile_image_url": "http://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_image_url_https": "https://pbs.twimg.com/profile_images/546106156582588416/26fHSIFf_normal.png", "profile_link_color": "0084B4", "profile_sidebar_border_color": "C0DEED", "profile_sidebar_fill_color": "DDEEF6", "profile_text_color": "333333", "profile_use_background_image": true, "protected": false, "screen_name": "DanielaSfregola", "show_all_inline_media": false, "statuses_count": 192, "url": "https://t.co/0FKNGVnRwX", "verified": false } } } } ================================================ FILE: src/test/resources/twitter/streaming/site/user_envelop_warning_message.json ================================================ { "for_user": 42, "message": { "warning": { "code": "FALLING_BEHIND", "message": "Your connection is falling behind and messages are being queued for delivery to you. Your queue is now over 60% full. You will be disconnected when the queue is full.", "percent_full": 60 } } } ================================================ FILE: src/test/resources/twitter/streaming/site/user_envelop_warning_message_stringified.json ================================================ { "for_user": "42", "message": { "warning": { "code": "FALLING_BEHIND", "message": "Your connection is falling behind and messages are being queued for delivery to you. Your queue is now over 60% full. You will be disconnected when the queue is full.", "percent_full": 60 } } } ================================================ FILE: src/test/resources/twitter/streaming/site/user_envelops_friends_list.json ================================================ {"for_user":1888,"message":{"friends": [0, 1, 2, 3, 4]}} ================================================ FILE: src/test/resources/twitter/streaming/site/user_envelops_friends_list_stringified.json ================================================ {"for_user":"1888","message":{"friends": [0, 1, 2, 3, 4]}} ================================================ FILE: src/test/resources/twitter/streaming/user/direct_messages.json ================================================ {"id":542081720715980800,"id_str":"542081720715980800","text":"fflatorre uses TrueTwit validation. To validate click here: http:\/\/t.co\/aldtQxlbCb","sender":{"id":535354329,"id_str":"535354329","name":"Francesco la Torre","screen_name":"AllegroJazzz","location":"","description":"","url":null,"entities":{"description":{"urls":[]}},"protected":false,"followers_count":20,"friends_count":157,"listed_count":6,"created_at":"Sat Mar 24 11:46:38 +0000 2012","favourites_count":28,"utc_offset":3600,"time_zone":"London","geo_enabled":false,"verified":false,"statuses_count":22,"lang":"en","contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"709397","profile_background_image_url":"http:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif","profile_background_image_url_https":"https:\/\/abs.twimg.com\/images\/themes\/theme6\/bg.gif","profile_background_tile":false,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/1944949620\/facebook-che-jpg_normal.jpg","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/1944949620\/facebook-che-jpg_normal.jpg","profile_link_color":"4C71BD","profile_sidebar_border_color":"86A4A6","profile_sidebar_fill_color":"A0C5C7","profile_text_color":"333333","profile_use_background_image":false,"has_extended_profile":false,"default_profile":false,"default_profile_image":false,"following":true,"follow_request_sent":false,"notifications":false},"sender_id":535354329,"sender_id_str":"535354329","sender_screen_name":"AllegroJazzz","recipient":{"id":2911461333,"id_str":"2911461333","name":"Daniela Sfregola","screen_name":"DanielaSfregola","location":"London, United Kingdom","description":"Java \/ Scala Team Leader working at @OVOEnergy","url":"https:\/\/t.co\/0FKNGVnRwX","entities":{"url":{"urls":[{"url":"https:\/\/t.co\/0FKNGVnRwX","expanded_url":"https:\/\/www.danielasfregola.com\/","display_url":"danielasfregola.com","indices":[0,23]}]},"description":{"urls":[]}},"protected":false,"followers_count":133,"friends_count":95,"listed_count":13,"created_at":"Mon Dec 08 20:00:20 +0000 2014","favourites_count":68,"utc_offset":null,"time_zone":null,"geo_enabled":true,"verified":false,"statuses_count":189,"lang":"en","contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"has_extended_profile":false,"default_profile":true,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false},"recipient_id":2911461333,"recipient_id_str":"2911461333","recipient_screen_name":"DanielaSfregola","created_at":"Mon Dec 08 22:22:08 +0000 2014","entities":{"hashtags":[],"symbols":[],"user_mentions":[],"urls":[{"url":"http:\/\/t.co\/aldtQxlbCb","expanded_url":"http:\/\/truetwit.com\/vy328523129","display_url":"truetwit.com\/vy328523129","indices":[60,82]}]}} ================================================ FILE: src/test/resources/twitter/streaming/user/events.json ================================================ {"event":"favorited_retweet","created_at":"Mon Sep 26 20:33:07 +0000 2016","source":{"id":2911461333,"id_str":"2911461333","name":"Daniela Sfregola","screen_name":"DanielaSfregola","location":"London, United Kingdom","url":"https:\/\/www.danielasfregola.com","description":"Blogger, Tech Leader at PayTouch","protected":false,"followers_count":301,"friends_count":194,"listed_count":23,"created_at":"Mon Dec 08 20:00:20 +0000 2014","favourites_count":102,"utc_offset":null,"time_zone":null,"geo_enabled":true,"verified":false,"statuses_count":425,"lang":"en","contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"target":{"id":786491,"id_str":"786491","name":"andy piper \/ pipes","screen_name":"andypiper","location":"Kingston upon Thames, London","url":"https:\/\/www.justgiving.com\/fundraising\/Debbie-Piper18","description":"I'm on the @TwitterDev team, supporting and listening to developers working on the Twitter platform. Code, community, and respect. #HeForShe \u2328\ufe0f \ud83c\udf08 \ud83d\ude47","protected":false,"followers_count":13799,"friends_count":3791,"listed_count":822,"created_at":"Wed Feb 21 15:14:48 +0000 2007","favourites_count":71158,"utc_offset":3600,"time_zone":"London","geo_enabled":true,"verified":false,"statuses_count":92485,"lang":"en","contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"ACDEEE","profile_background_image_url":"http:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif","profile_background_image_url_https":"https:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif","profile_background_tile":false,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/758942034195390464\/JKfZFVIM_normal.jpg","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/758942034195390464\/JKfZFVIM_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/786491\/1468424285","profile_link_color":"6EA8E6","profile_sidebar_border_color":"FFFFFF","profile_sidebar_fill_color":"F6F6F6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"target_object":{"created_at":"Mon Sep 26 20:25:28 +0000 2016","id":780503578079297536,"id_str":"780503578079297536","text":"RT @MatthewBogart: Um\u2026 at least I know I\u2019ll never hear songs like that one I liked again. https:\/\/t.co\/KvnRtXL9QX","truncated":false,"entities":{"hashtags":[],"symbols":[],"user_mentions":[{"screen_name":"MatthewBogart","name":"Matthew Bogart","id":13458372,"id_str":"13458372","indices":[3,17]}],"urls":[],"media":[{"id":780422806433517568,"id_str":"780422806433517568","indices":[90,113],"media_url":"http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg","media_url_https":"https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg","url":"https:\/\/t.co\/KvnRtXL9QX","display_url":"pic.twitter.com\/KvnRtXL9QX","expanded_url":"https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1","type":"photo","sizes":{"medium":{"w":900,"h":1200,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"large":{"w":1152,"h":1536,"resize":"fit"},"small":{"w":510,"h":680,"resize":"fit"}},"source_status_id":780422808518086656,"source_status_id_str":"780422808518086656","source_user_id":13458372,"source_user_id_str":"13458372"}]},"extended_entities":{"media":[{"id":780422806433517568,"id_str":"780422806433517568","indices":[90,113],"media_url":"http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg","media_url_https":"https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg","url":"https:\/\/t.co\/KvnRtXL9QX","display_url":"pic.twitter.com\/KvnRtXL9QX","expanded_url":"https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1","type":"photo","sizes":{"medium":{"w":900,"h":1200,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"large":{"w":1152,"h":1536,"resize":"fit"},"small":{"w":510,"h":680,"resize":"fit"}},"source_status_id":780422808518086656,"source_status_id_str":"780422808518086656","source_user_id":13458372,"source_user_id_str":"13458372"}]},"source":"\u003ca href=\"http:\/\/twitter.com\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":786491,"id_str":"786491","name":"andy piper \/ pipes","screen_name":"andypiper","location":"Kingston upon Thames, London","url":"https:\/\/www.justgiving.com\/fundraising\/Debbie-Piper18","description":"I'm on the @TwitterDev team, supporting and listening to developers working on the Twitter platform. Code, community, and respect. #HeForShe \u2328\ufe0f \ud83c\udf08 \ud83d\ude47","protected":false,"followers_count":13799,"friends_count":3791,"listed_count":822,"created_at":"Wed Feb 21 15:14:48 +0000 2007","favourites_count":71158,"utc_offset":3600,"time_zone":"London","geo_enabled":true,"verified":false,"statuses_count":92485,"lang":"en","contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"ACDEEE","profile_background_image_url":"http:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif","profile_background_image_url_https":"https:\/\/abs.twimg.com\/images\/themes\/theme18\/bg.gif","profile_background_tile":false,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/758942034195390464\/JKfZFVIM_normal.jpg","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/758942034195390464\/JKfZFVIM_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/786491\/1468424285","profile_link_color":"6EA8E6","profile_sidebar_border_color":"FFFFFF","profile_sidebar_fill_color":"F6F6F6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"retweeted_status":{"created_at":"Mon Sep 26 15:04:31 +0000 2016","id":780422808518086656,"id_str":"780422808518086656","text":"Um\u2026 at least I know I\u2019ll never hear songs like that one I liked again. https:\/\/t.co\/KvnRtXL9QX","truncated":false,"entities":{"hashtags":[],"symbols":[],"user_mentions":[],"urls":[],"media":[{"id":780422806433517568,"id_str":"780422806433517568","indices":[71,94],"media_url":"http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg","media_url_https":"https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg","url":"https:\/\/t.co\/KvnRtXL9QX","display_url":"pic.twitter.com\/KvnRtXL9QX","expanded_url":"https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1","type":"photo","sizes":{"medium":{"w":900,"h":1200,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"large":{"w":1152,"h":1536,"resize":"fit"},"small":{"w":510,"h":680,"resize":"fit"}}}]},"extended_entities":{"media":[{"id":780422806433517568,"id_str":"780422806433517568","indices":[71,94],"media_url":"http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg","media_url_https":"https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg","url":"https:\/\/t.co\/KvnRtXL9QX","display_url":"pic.twitter.com\/KvnRtXL9QX","expanded_url":"https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1","type":"photo","sizes":{"medium":{"w":900,"h":1200,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"large":{"w":1152,"h":1536,"resize":"fit"},"small":{"w":510,"h":680,"resize":"fit"}}}]},"source":"\u003ca href=\"http:\/\/www.apple.com\/\" rel=\"nofollow\"\u003eOS X\u003c\/a\u003e","in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":13458372,"id_str":"13458372","name":"Matthew Bogart","screen_name":"MatthewBogart","location":"Portland Oregon","url":"http:\/\/matthewbogart.net","description":"Cartoonist guy. I drew THE CHAIRS' HIATUS and OH' IT'S THE END OF THE WORLD","protected":false,"followers_count":689,"friends_count":351,"listed_count":44,"created_at":"Thu Feb 14 03:47:34 +0000 2008","favourites_count":10226,"utc_offset":-28800,"time_zone":"Alaska","geo_enabled":true,"verified":false,"statuses_count":13250,"lang":"en","contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"000000","profile_background_image_url":"http:\/\/pbs.twimg.com\/profile_background_images\/166478868\/logoball_wallpaper.png","profile_background_image_url_https":"https:\/\/pbs.twimg.com\/profile_background_images\/166478868\/logoball_wallpaper.png","profile_background_tile":true,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/573278419980431361\/JFqhQ3FU_normal.jpeg","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/573278419980431361\/JFqhQ3FU_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/13458372\/1442687405","profile_link_color":"FF5454","profile_sidebar_border_color":"000000","profile_sidebar_fill_color":"DAECF4","profile_text_color":"663B12","profile_use_background_image":false,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"is_quote_status":false,"retweet_count":0,"favorite_count":0,"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"en"},"is_quote_status":false,"retweet_count":0,"favorite_count":0,"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"en"}} {"event":"unfavorite","created_at":"Mon Sep 26 20:40:35 +0000 2016","source":{"id":2911461333,"id_str":"2911461333","name":"Daniela Sfregola","screen_name":"DanielaSfregola","location":"London, United Kingdom","url":"https:\/\/www.danielasfregola.com","description":"Blogger, Tech Leader at PayTouch","protected":false,"followers_count":301,"friends_count":194,"listed_count":23,"created_at":"Mon Dec 08 20:00:20 +0000 2014","favourites_count":101,"utc_offset":null,"time_zone":null,"geo_enabled":true,"verified":false,"statuses_count":425,"lang":"en","contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_image_url_https":"https:\/\/abs.twimg.com\/images\/themes\/theme1\/bg.png","profile_background_tile":false,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/546106156582588416\/26fHSIFf_normal.png","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":true,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"target":{"id":13458372,"id_str":"13458372","name":"Matthew Bogart","screen_name":"MatthewBogart","location":"Portland Oregon","url":"http:\/\/matthewbogart.net","description":"Cartoonist guy. I drew THE CHAIRS' HIATUS and OH' IT'S THE END OF THE WORLD","protected":false,"followers_count":689,"friends_count":351,"listed_count":44,"created_at":"Thu Feb 14 03:47:34 +0000 2008","favourites_count":10226,"utc_offset":-28800,"time_zone":"Alaska","geo_enabled":true,"verified":false,"statuses_count":13250,"lang":"en","contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"000000","profile_background_image_url":"http:\/\/pbs.twimg.com\/profile_background_images\/166478868\/logoball_wallpaper.png","profile_background_image_url_https":"https:\/\/pbs.twimg.com\/profile_background_images\/166478868\/logoball_wallpaper.png","profile_background_tile":true,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/573278419980431361\/JFqhQ3FU_normal.jpeg","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/573278419980431361\/JFqhQ3FU_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/13458372\/1442687405","profile_link_color":"FF5454","profile_sidebar_border_color":"000000","profile_sidebar_fill_color":"DAECF4","profile_text_color":"663B12","profile_use_background_image":false,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"target_object":{"created_at":"Mon Sep 26 15:04:31 +0000 2016","id":780422808518086656,"id_str":"780422808518086656","text":"Um\u2026 at least I know I\u2019ll never hear songs like that one I liked again. https:\/\/t.co\/KvnRtXL9QX","truncated":false,"entities":{"hashtags":[],"symbols":[],"user_mentions":[],"urls":[],"media":[{"id":780422806433517568,"id_str":"780422806433517568","indices":[71,94],"media_url":"http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg","media_url_https":"https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg","url":"https:\/\/t.co\/KvnRtXL9QX","display_url":"pic.twitter.com\/KvnRtXL9QX","expanded_url":"https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1","type":"photo","sizes":{"medium":{"w":900,"h":1200,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"large":{"w":1152,"h":1536,"resize":"fit"},"small":{"w":510,"h":680,"resize":"fit"}}}]},"extended_entities":{"media":[{"id":780422806433517568,"id_str":"780422806433517568","indices":[71,94],"media_url":"http:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg","media_url_https":"https:\/\/pbs.twimg.com\/media\/CtSeaFgVUAApfJG.jpg","url":"https:\/\/t.co\/KvnRtXL9QX","display_url":"pic.twitter.com\/KvnRtXL9QX","expanded_url":"https:\/\/twitter.com\/MatthewBogart\/status\/780422808518086656\/photo\/1","type":"photo","sizes":{"medium":{"w":900,"h":1200,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"large":{"w":1152,"h":1536,"resize":"fit"},"small":{"w":510,"h":680,"resize":"fit"}}}]},"source":"\u003ca href=\"http:\/\/www.apple.com\/\" rel=\"nofollow\"\u003eOS X\u003c\/a\u003e","in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":13458372,"id_str":"13458372","name":"Matthew Bogart","screen_name":"MatthewBogart","location":"Portland Oregon","url":"http:\/\/matthewbogart.net","description":"Cartoonist guy. I drew THE CHAIRS' HIATUS and OH' IT'S THE END OF THE WORLD","protected":false,"followers_count":689,"friends_count":351,"listed_count":44,"created_at":"Thu Feb 14 03:47:34 +0000 2008","favourites_count":10226,"utc_offset":-28800,"time_zone":"Alaska","geo_enabled":true,"verified":false,"statuses_count":13250,"lang":"en","contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"000000","profile_background_image_url":"http:\/\/pbs.twimg.com\/profile_background_images\/166478868\/logoball_wallpaper.png","profile_background_image_url_https":"https:\/\/pbs.twimg.com\/profile_background_images\/166478868\/logoball_wallpaper.png","profile_background_tile":true,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/573278419980431361\/JFqhQ3FU_normal.jpeg","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/573278419980431361\/JFqhQ3FU_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/13458372\/1442687405","profile_link_color":"FF5454","profile_sidebar_border_color":"000000","profile_sidebar_fill_color":"DAECF4","profile_text_color":"663B12","profile_use_background_image":false,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":null,"coordinates":null,"place":null,"contributors":null,"is_quote_status":false,"retweet_count":171,"favorite_count":335,"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"en"}} ================================================ FILE: src/test/resources/twitter/streaming/user/friends_lists.json ================================================ {"friends":[0,1,2,3,4]} ================================================ FILE: src/test/resources/twitter/streaming/user/friends_lists_stringified.json ================================================ {"friends":["0","1","2","3","4"]} ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/entities/DeserializationRoundtripSpec.scala ================================================ package com.danielasfregola.twitter4s.entities import com.danielasfregola.twitter4s.helpers.{FixturesSupport, JsonDiffSupport} import org.json4s.native.Serialization.writePretty import org.json4s.native.{JsonParser, Serialization} import org.json4s.{JNothing, JValue} import org.specs2.matcher.{Expectable, Matcher} import org.specs2.mutable.Specification import org.specs2.specification.core.Fragment import scala.reflect._ class DeserializationRoundtripSpec extends Specification with FixturesSupport with JsonDiffSupport { "JSON deserialization" should { def roundtripTest[T <: AnyRef: Manifest](jsonFile: String): Fragment = { val className = classTag[T].runtimeClass.getSimpleName s"round-trip successfully for $className in $jsonFile" in { val originalJson = load(jsonFile) val deserializedEntity = Serialization.read[T](originalJson) val serializedJson = Serialization.writePretty[T](deserializedEntity) originalJson must beASubsetOfJson(serializedJson) } } roundtripTest[User]("/twitter/rest/users/user.json") } def beASubsetOfJson(otherJson: String): Matcher[String] = new Matcher[String] { def apply[S <: String](t: Expectable[S]) = { val alpha: JValue = JsonParser.parse(t.value) val beta: JValue = JsonParser.parse(otherJson) jsonDiff(alpha, beta) match { case diff @ JsonDiff(JNothing, _, JNothing) => success(s"""${t.value} |is a subset of |$otherJson |${renderDiff(diff)} """.stripMargin, t) case diff => failure(s"""${t.value} |is not a subset of |$otherJson |${renderDiff(diff)} """.stripMargin, t) } } private def renderDiff(diff: JsonDiff) = { val changed = diff.changed.toOption.map { c => s"""Changed: |${writePretty(c)} """.stripMargin } val deleted = diff.deleted.toOption.map { d => s"""Deleted: |${writePretty(d)} """.stripMargin } val added = diff.added.toOption.map { a => s"""Added: |${writePretty(a)} """.stripMargin } (changed ++ deleted ++ added).mkString } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/entities/ProfileImageSpec.scala ================================================ package com.danielasfregola.twitter4s.entities import com.danielasfregola.twitter4s.helpers.FixturesSupport import org.json4s.native.Serialization import org.specs2.mutable.Specification class ProfileImageSpec extends Specification with FixturesSupport { "ProfileImage" should { "generate 4 type of image sizes from the original picture url string" in { val profile = ProfileImage("test_size.ext") profile.default === "test.ext" profile.mini === "test_mini.ext" profile.normal === "test_normal.ext" profile.bigger === "test_bigger.ext" } "deserialized as None if empty profile image url is provided" in { val originalJson = load("/twitter/rest/users/empty-user-profile-url.json") val user = Serialization.read[User](originalJson) user.profile_image_url_https must beEmpty user.profile_image_url_https must beEmpty } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/entities/RateLimitSpec.scala ================================================ package com.danielasfregola.twitter4s.entities import java.text.SimpleDateFormat import java.util.Locale import akka.http.scaladsl.model.headers.RawHeader import com.danielasfregola.twitter4s.exceptions.TwitterException import org.specs2.mutable.Specification class RateLimitSpec extends Specification { "RateLimit" should { "be created from http headers" in { val headers = Seq(RawHeader("x-rate-limit-limit", "15"), RawHeader("x-rate-limit-remaining", "14"), RawHeader("x-rate-limit-reset", "1445181993")) val rateLimit = RateLimit(headers) val expectedInstant = { val dateFormatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss ZZZZ yyyy", Locale.ENGLISH) dateFormatter.parse("Sun Oct 18 15:26:33 +0000 2015").toInstant } rateLimit.limit === 15 rateLimit.remaining === 14 rateLimit.reset === expectedInstant } "throw exception if no rate http headers found" in { RateLimit(Seq.empty) should throwA[TwitterException] } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/entities/SerializationRoundtripSpec.scala ================================================ package com.danielasfregola.twitter4s.entities import java.time.Instant import com.danielasfregola.randomdatagenerator.RandomDataGenerator import com.danielasfregola.twitter4s.http.serializers.JsonSupport import org.json4s.native.Serialization import org.scalacheck.Gen.alphaChar import org.scalacheck.{Arbitrary, Gen} import org.specs2.mutable.Specification import org.specs2.specification.core.Fragment import scala.reflect._ class SerializationRoundtripSpec extends Specification with RandomDataGenerator with JsonSupport { "JSON serialization" should { def roundtripTest[T <: AnyRef: Manifest: Arbitrary]: Fragment = { val className = classTag[T].runtimeClass.getSimpleName s"round-trip successfully for $className" in { val randomEntity = random[T] val serializedJson = Serialization.write[T](randomEntity) val deserializedEntity = Serialization.read[T](serializedJson) deserializedEntity === randomEntity } } roundtripTest[User] } // We serialize dates to second precision implicit val arbitraryDate: Arbitrary[Instant] = Arbitrary { for { timeInSeconds: Long <- Gen.chooseNum(1142899200L, 1512442349L) } yield Instant.ofEpochSecond(timeInSeconds) } implicit val arbitraryProfileImage: Arbitrary[ProfileImage] = Arbitrary { for { prefix: String <- Gen.nonEmptyListOf(alphaChar).map(_.mkString) suffix: String <- Gen.oneOf("_mini", "_normal", "_bigger", "") } yield ProfileImage(s"${prefix}_$suffix.jpg") } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/helpers/AwaitableFuture.scala ================================================ package com.danielasfregola.twitter4s.helpers import scala.concurrent.duration.{DurationInt, FiniteDuration} import scala.concurrent.{Await, Future} trait AwaitableFuture { implicit class AwaitableFuture[T](f: Future[T]) { def await(implicit duration: FiniteDuration = 20 seconds) = Await.result(f, duration) } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/helpers/ClientSpec.scala ================================================ package com.danielasfregola.twitter4s.helpers import java.util.UUID import akka.actor.ActorSystem import akka.http.scaladsl.model._ import akka.pattern.ask import akka.stream.{KillSwitches, Materializer, SharedKillSwitch} import akka.util.Timeout import akka.util.Timeout.durationToTimeout import com.danielasfregola.twitter4s.entities.streaming.StreamingMessage import com.danielasfregola.twitter4s.http.clients.authentication.AuthenticationClient import com.danielasfregola.twitter4s.http.clients.rest.RestClient import com.danielasfregola.twitter4s.http.clients.streaming.StreamingClient import scala.concurrent.Future import scala.concurrent.duration.DurationInt trait ClientSpec extends Spec { abstract class AuthenticationClientSpecContext extends RequestDSL with SpecContext { protected val authenticationClient = new AuthenticationClient(consumerToken) { override def sendAndReceive[T](request: HttpRequest, f: HttpResponse => Future[T])( implicit system: ActorSystem, materializer: Materializer): Future[T] = { implicit val ec = materializer.executionContext implicit val timeout: Timeout = DurationInt(20) seconds val requestStartTime = System.currentTimeMillis val responseR: Future[HttpResponse] = (transport.ref ? request).map(_.asInstanceOf[HttpResponse]) for { response <- responseR t <- unmarshal[T](requestStartTime, f)(request, response, materializer) } yield t } } } abstract class RestClientSpecContext extends RequestDSL with SpecContext { protected val restClient = new RestClient(consumerToken, accessToken) { override def sendAndReceive[T](request: HttpRequest, f: HttpResponse => Future[T])( implicit system: ActorSystem, materializer: Materializer): Future[T] = { implicit val ec = materializer.executionContext implicit val timeout: Timeout = DurationInt(20) seconds val requestStartTime = System.currentTimeMillis val responseR: Future[HttpResponse] = (transport.ref ? request).map(_.asInstanceOf[HttpResponse]) for { response <- responseR t <- unmarshal[T](requestStartTime, f)(request, response, materializer) } yield t } } } abstract class StreamingClientSpecContext extends RequestDSL with SpecContext { def dummyProcessing: PartialFunction[StreamingMessage, Unit] = { case _ => } val killSwitch = KillSwitches.shared(s"test-twitter4s-${UUID.randomUUID}") protected val streamingClient = new StreamingClient(consumerToken, accessToken) { override def processStreamRequest[T <: StreamingMessage: Manifest]( request: HttpRequest )( f: PartialFunction[T, Unit], errorHandler: PartialFunction[Throwable, Unit] )( implicit system: ActorSystem, materializer: Materializer ): Future[SharedKillSwitch] = { implicit val ec = materializer.executionContext implicit val timeout: Timeout = DurationInt(20) seconds val responseR: Future[HttpResponse] = (transport.ref ? request).map(_.asInstanceOf[HttpResponse]) for { response <- responseR _ <- Future.successful(processBody(response, killSwitch)(f)(manifest[T], request, materializer)) } yield killSwitch } } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/helpers/FixturesSupport.scala ================================================ package com.danielasfregola.twitter4s.helpers import com.danielasfregola.twitter4s.http.serializers.JsonSupport import org.json4s.native.Serialization import scala.io.{Codec, Source} trait FixturesSupport extends JsonSupport { def load(resourcePath: String): String = Source.fromURL(getClass.getResource(resourcePath))(Codec.UTF8).mkString def loadJsonAs[T: Manifest](resourcePath: String): T = readJsonAs[T](load(resourcePath)) def readJsonAs[T: Manifest](json: String): T = Serialization.read[T](json) def printAsJson[T <: AnyRef](value: T): Unit = println(Serialization.writePretty(value)) } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/helpers/JsonDiffSupport.scala ================================================ package com.danielasfregola.twitter4s.helpers import java.time.Instant import com.danielasfregola.twitter4s.http.serializers.JsonSupport import org.json4s.JsonAST._ import org.json4s.{JField, JNothing, JObject} /** * This is a copy of [[org.json4s.Diff]], with modifications to make it * treat equivalent dates in different timezones as equal, and empty arrays * as equal to nulls. */ trait JsonDiffSupport { this: JsonSupport => /** A difference between two JSONs (j1 diff j2). * * @param changed what has changed from j1 to j2 * @param added what has been added to j2 * @param deleted what has been deleted from j1 */ case class JsonDiff(changed: JValue, added: JValue, deleted: JValue) { private[helpers] def toField(name: String): JsonDiff = { def applyTo(x: JValue) = x match { case JNothing => JNothing case _ => JObject((name, x)) } JsonDiff(applyTo(changed), applyTo(added), applyTo(deleted)) } } def jsonDiff(val1: JValue, val2: JValue): JsonDiff = (val1, val2) match { case (x, y) if x == y => JsonDiff(JNothing, JNothing, JNothing) case (JObject(xs), JObject(ys)) => diffFields(xs, ys) // treat empty collections as equal to nulls case (JArray(Nil), JNothing | JNull) | (JNothing | JNull, JArray(Nil)) => JsonDiff(JNothing, JNothing, JNothing) case (JArray(xs), JArray(ys)) => diffVals(xs, ys) // unlike diff of JArrays, order of elements is ignored in diff of JSets case (JSet(x), JSet(y)) if JSet(x) != JSet(y) => JsonDiff(JNothing, JSet(y).difference(JSet(x)), JSet(x).difference(JSet(y))) case (JInt(x), JInt(y)) if x != y => JsonDiff(JInt(y), JNothing, JNothing) case (JDouble(x), JDouble(y)) if x != y => JsonDiff(JDouble(y), JNothing, JNothing) case (JDecimal(x), JDecimal(y)) if x != y => JsonDiff(JDecimal(y), JNothing, JNothing) // if two strings can be parsed as dates, check equality for the dates case (JDate(x), JDate(y)) if x == y => JsonDiff(JNothing, JNothing, JNothing) case (JString(x), JString(y)) if x != y => JsonDiff(JString(y), JNothing, JNothing) case (JBool(x), JBool(y)) if x != y => JsonDiff(JBool(y), JNothing, JNothing) case (JNothing, x) => JsonDiff(JNothing, x, JNothing) case (x, JNothing) => JsonDiff(JNothing, JNothing, x) case (x, y) => JsonDiff(y, JNothing, JNothing) } private def diffFields(vs1: List[JField], vs2: List[JField]) = { def diffRec(xleft: List[JField], yleft: List[JField]): JsonDiff = xleft match { case Nil => JsonDiff(JNothing, if (yleft.isEmpty) JNothing else JObject(yleft), JNothing) case x :: xs => yleft find (_._1 == x._1) match { case Some(y) => val JsonDiff(c1, a1, d1) = jsonDiff(x._2, y._2).toField(y._1) val JsonDiff(c2, a2, d2) = diffRec(xs, yleft filterNot (_ == y)) JsonDiff(c1 merge c2, a1 merge a2, d1 merge d2) case None => val JsonDiff(c, a, d) = diffRec(xs, yleft) JsonDiff(c, a, JObject(x :: Nil) merge d) } } diffRec(vs1, vs2) } private def diffVals(vs1: List[JValue], vs2: List[JValue]) = { def diffRec(xleft: List[JValue], yleft: List[JValue]): JsonDiff = (xleft, yleft) match { case (xs, Nil) => JsonDiff(JNothing, JNothing, if (xs.isEmpty) JNothing else JArray(xs)) case (Nil, ys) => JsonDiff(JNothing, if (ys.isEmpty) JNothing else JArray(ys), JNothing) case (x :: xs, y :: ys) => val JsonDiff(c1, a1, d1) = jsonDiff(x, y) val JsonDiff(c2, a2, d2) = diffRec(xs, ys) JsonDiff(c1 ++ c2, a1 ++ a2, d1 ++ d2) } diffRec(vs1, vs2) } private object JDate { def unapply(js: JString): Option[Instant] = json4sFormats.dateFormat.parse(js.s).map(_.toInstant) } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/helpers/RequestDSL.scala ================================================ package com.danielasfregola.twitter4s.helpers import java.text.SimpleDateFormat import java.util.Locale import akka.http.scaladsl.model._ import akka.http.scaladsl.model.headers.RawHeader import akka.testkit.TestProbe import com.danielasfregola.twitter4s.entities.RateLimit import org.specs2.specification.AfterEach import scala.concurrent.duration._ import scala.concurrent.{Await, Future} abstract class RequestDSL extends TestActorSystem with FixturesSupport with AfterEach { def after = system.terminate private val timeout = 10 seconds val headers = List(RawHeader("x-rate-limit-limit", "15"), RawHeader("x-rate-limit-remaining", "14"), RawHeader("x-rate-limit-reset", "1445181993")) val rateLimit = { val dateFormatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss ZZZZ yyyy", Locale.ENGLISH) val resetDate = dateFormatter.parse("Sun Oct 18 15:26:33 +0000 2015").toInstant new RateLimit(limit = 15, remaining = 14, reset = resetDate) } protected val transport = TestProbe() def when[T](future: Future[T]): RequestMatcher[T] = new RequestMatcher(future) class RequestMatcher[T](future: Future[T]) { protected def responder = new Responder(future) def expectRequest(req: HttpRequest): Responder[T] = { transport.expectMsg(timeout, req) responder } def expectRequest(fn: HttpRequest => Unit) = { transport.expectMsgPF(timeout) { case req: HttpRequest => fn(req) } responder } } class Responder[T](future: Future[T]) { def respondWith(response: HttpResponse): Await[T] = { transport.reply(response) new Await(future) } def respondWith(resourcePath: String): Await[T] = respondWith(HttpResponse(StatusCodes.OK, entity = HttpEntity(MediaTypes.`application/json`, load(resourcePath)))) def respondWithRated(resourcePath: String): Await[T] = respondWith( HttpResponse(StatusCodes.OK, headers = headers, entity = HttpEntity(MediaTypes.`application/json`, load(resourcePath)))) def respondWithOk: Await[Unit] = { val response = HttpResponse(StatusCodes.OK, entity = HttpEntity(MediaTypes.`application/json`, """{"code": "OK"}""")) transport.reply(response) new Await(Future.successful((): Unit)) } def respondWithNoContent: Await[Unit] = { val response = HttpResponse(StatusCodes.NoContent) transport.reply(response) new Await(Future.successful((): Unit)) } } class Await[T](future: Future[T]) { private[helpers] val underlyingFuture = future def await(implicit duration: FiniteDuration = 20 seconds) = Await.result(future, duration) } implicit def awaitToReqMatcher[T](await: Await[T]) = new RequestMatcher(await.underlyingFuture) } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/helpers/Spec.scala ================================================ package com.danielasfregola.twitter4s.helpers import akka.http.scaladsl.model.{HttpCharsets, MediaTypes} import com.danielasfregola.twitter4s.entities.{AccessToken, ConsumerToken} import com.danielasfregola.twitter4s.util.UriHelpers import org.specs2.matcher.Scope import org.specs2.mutable.SpecificationLike trait Spec extends SpecificationLike with UriHelpers { val `application/x-www-form-urlencoded` = MediaTypes.`application/x-www-form-urlencoded` val `text/plain` = MediaTypes.`text/plain` withCharset HttpCharsets.`UTF-8` trait SpecContext extends FixturesSupport with AwaitableFuture with Scope { val consumerToken = ConsumerToken("consumer-key", "consumer-secret") val accessToken = AccessToken("access-key", "access-secret") } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/helpers/TestActorSystem.scala ================================================ package com.danielasfregola.twitter4s.helpers import akka.actor.ActorSystem import akka.stream.ActorMaterializer abstract class TestActorSystem { implicit val system = TestSystem.system implicit val materializer = ActorMaterializer() } object TestSystem { lazy val system = ActorSystem("test-system") } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/helpers/TestExecutionContext.scala ================================================ package com.danielasfregola.twitter4s.helpers trait TestExecutionContext { implicit val executionContext = scala.concurrent.ExecutionContext.Implicits.global } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/authentication/oauth/TwitterOAuthClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.authentication.oauth import akka.http.scaladsl.model.HttpMethods import com.danielasfregola.twitter4s.entities.AccessToken import com.danielasfregola.twitter4s.entities.authentication.{OAuthAccessToken, OAuthRequestToken, RequestToken} import com.danielasfregola.twitter4s.entities.enums.AccessType import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterOAuthClientSpec extends ClientSpec { class TwitterOAuthClientSpecContext extends AuthenticationClientSpecContext with TwitterOAuthClient { val token = RequestToken("my-oauth-token", "my-oauth-secret") } "Twitter OAuth Client" should { "request a oauth request token with static callback" in new TwitterOAuthClientSpecContext { val result: OAuthRequestToken = when(requestToken()) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/oauth/request_token" request.uri.rawQueryString === None } .respondWith("/twitter/authentication/request_token.txt") .await val expectedResult = OAuthRequestToken(token = RequestToken(key = "Z6eEdO8MOmk394WozF5oKyuAv855l4Mlqo7hhlSLik", secret = "Kd75W4OQfb2oJTV0vzGzeXftVAwgMnEK9MumzYcM"), oauth_callback_confirmed = true) result === expectedResult } "request a oauth request token with dynamic callback and access type" in new TwitterOAuthClientSpecContext { val result: OAuthRequestToken = when(requestToken(Some("http://my.callback"), Some(AccessType.Read))) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/oauth/request_token" request.uri.rawQueryString === Some("x_auth_access_type=read") } .respondWith("/twitter/authentication/request_token.txt") .await val expectedResult = OAuthRequestToken(token = RequestToken(key = "Z6eEdO8MOmk394WozF5oKyuAv855l4Mlqo7hhlSLik", secret = "Kd75W4OQfb2oJTV0vzGzeXftVAwgMnEK9MumzYcM"), oauth_callback_confirmed = true) result === expectedResult } "generate an authentication url" in new TwitterOAuthClientSpecContext { val url: String = authenticateUrl(token = token, force_login = true, screen_name = Some("DanielaSfregola")) val params = "oauth_token=my-oauth-token&force_login=true&screen_name=DanielaSfregola" url === s"https://api.twitter.com/oauth/authenticate?$params" } "generate an authorization url" in new TwitterOAuthClientSpecContext { val url: String = authorizeUrl(token = token, force_login = true, screen_name = Some("DanielaSfregola")) val params = "oauth_token=my-oauth-token&force_login=true&screen_name=DanielaSfregola" url === s"https://api.twitter.com/oauth/authorize?$params" } "request an access token for x_auth authentication" in new TwitterOAuthClientSpecContext { val result: OAuthAccessToken = when(accessToken("twitterapi", "my-secret-password")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/oauth/access_token" request.uri.rawQueryString === Some( "x_auth_mode=client_auth&x_auth_password=my-secret-password&x_auth_username=twitterapi") } .respondWith("/twitter/authentication/access_token.txt") .await val expectedResult = OAuthAccessToken( accessToken = AccessToken(key = "6253282-eWudHldSbIaelX7swmsiHImEL4KinwaGloHANdrY", secret = "2EEfA6BG3ly3sR3RjE0IBSnlQu4ZrUzPiYKmrkVU"), user_id = 6253282, screen_name = "twitterapi" ) result === expectedResult } "request an access token for oauth authentication" in new TwitterOAuthClientSpecContext { val result: OAuthAccessToken = when(accessToken(token = token, oauth_verifier = "my-token-verifier")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/oauth/access_token" request.uri.rawQueryString === Some("oauth_token=my-oauth-token&oauth_verifier=my-token-verifier") } .respondWith("/twitter/authentication/access_token.txt") .await val expectedResult = OAuthAccessToken( accessToken = AccessToken(key = "6253282-eWudHldSbIaelX7swmsiHImEL4KinwaGloHANdrY", secret = "2EEfA6BG3ly3sR3RjE0IBSnlQu4ZrUzPiYKmrkVU"), user_id = 6253282, screen_name = "twitterapi" ) result.accessToken === expectedResult.accessToken result.user_id === expectedResult.user_id result.screen_name === expectedResult.screen_name result === expectedResult } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/RestClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest import akka.http.scaladsl.model.{ContentTypes, HttpResponse, StatusCodes} import com.danielasfregola.twitter4s.exceptions.{Errors, TwitterError, TwitterException} import com.danielasfregola.twitter4s.helpers.ClientSpec import scala.concurrent.Future class RestClientSpec extends ClientSpec { class ClientSpecContext extends RestClientSpecContext { import restClient._ def exampleRequest(): Future[Unit] = Get("an-example-request", ContentTypes.`application/json`).respondAs[Unit] } "Rest Client" should { "throw twitter exception to twitter rejection" in new ClientSpecContext { val response = { val entity = """{"errors":[{"message":"Sorry, that page does not exist","code":34}]}""" HttpResponse(StatusCodes.NotFound, entity = entity) } val result = when(exampleRequest).expectRequest(identity(_)).respondWith(response) val expectedTwitterException = TwitterException(code = StatusCodes.NotFound, errors = Errors(TwitterError("Sorry, that page does not exist", 34))) result.await should throwAn(expectedTwitterException) } "throw twitter exception to generic failure http response" in new ClientSpecContext { val body = "Something bad happened" val response = HttpResponse(StatusCodes.RequestTimeout, entity = body) val result = when(exampleRequest).expectRequest(identity(_)).respondWith(response) val expectedTwitterException = TwitterException(code = StatusCodes.RequestTimeout, errors = Errors(body)) result.await should throwAn(expectedTwitterException) } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/account/TwitterAccountClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.account import akka.http.scaladsl.model._ import com.danielasfregola.twitter4s.entities.enums.{ContributorType, Hour, TimeZone} import com.danielasfregola.twitter4s.entities.{ProfileUpdate, RatedData, Settings, User} import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterAccountClientSpec extends ClientSpec { class TwitterAccountClientSpecContext extends RestClientSpecContext with TwitterAccountClient "Twitter Account Client" should { "retrieve account settings" in new TwitterAccountClientSpecContext { val result: RatedData[Settings] = when(settings) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/account/settings.json" } .respondWithRated("/twitter/rest/account/settings.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Settings]("/fixtures/rest/account/settings.json") } "verify credentials" in new TwitterAccountClientSpecContext { val result: RatedData[User] = when(verifyCredentials(include_email = true)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/account/verify_credentials.json" } .respondWithRated("/twitter/rest/account/user.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[User]("/fixtures/rest/account/user.json") } "update account settings" in new TwitterAccountClientSpecContext { val result: Settings = when( updateSettings( allow_contributor_request = Some(ContributorType.All), sleep_time_enabled = Some(true), start_sleep_time = Some(Hour.TEN_PM), end_sleep_time = Some(Hour.SIX_AM), time_zone = Some(TimeZone.Europe_London) )) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/account/settings.json" request.entity === HttpEntity( `application/x-www-form-urlencoded`, "allow_contributor_request=all&end_sleep_time=06&sleep_time_enabled=true&start_sleep_time=22&time_zone=Europe%2FLondon" ) } .respondWith("/twitter/rest/account/settings.json") .await result === loadJsonAs[Settings]("/fixtures/rest/account/settings.json") } "update a profile name" in new TwitterAccountClientSpecContext { val result: User = when(updateProfileName("Daniela Sfregola")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/account/update_profile.json" request.entity === HttpEntity(`application/x-www-form-urlencoded`, "include_entities=true&name=Daniela%20Sfregola&skip_status=false") } .respondWith("/twitter/rest/account/user.json") .await result === loadJsonAs[User]("/fixtures/rest/account/user.json") } "update a profile url" in new TwitterAccountClientSpecContext { val result: User = when(updateProfileUrl("http://danielasfregola.com")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/account/update_profile.json" request.entity === HttpEntity(`application/x-www-form-urlencoded`, "include_entities=true&skip_status=false&url=http%3A%2F%2Fdanielasfregola.com") } .respondWith("/twitter/rest/account/user.json") .await result === loadJsonAs[User]("/fixtures/rest/account/user.json") } "update a profile description" in new TwitterAccountClientSpecContext { val result: User = when(updateProfileDescription("Nice description here")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/account/update_profile.json" request.entity === HttpEntity(`application/x-www-form-urlencoded`, "description=Nice%20description%20here&include_entities=true&skip_status=false") } .respondWith("/twitter/rest/account/user.json") .await result === loadJsonAs[User]("/fixtures/rest/account/user.json") } "update a profile location" in new TwitterAccountClientSpecContext { val result: User = when(updateProfileLocation("London, UK")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/account/update_profile.json" request.entity === HttpEntity(`application/x-www-form-urlencoded`, "include_entities=true&location=London%2C%20UK&skip_status=false") } .respondWith("/twitter/rest/account/user.json") .await result === loadJsonAs[User]("/fixtures/rest/account/user.json") } "update a profile link color" in new TwitterAccountClientSpecContext { val result: User = when(updateProfileLinkColor("0000FF")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/account/update_profile.json" request.entity === HttpEntity(`application/x-www-form-urlencoded`, "include_entities=true&profile_link_color=0000FF&skip_status=false") } .respondWith("/twitter/rest/account/user.json") .await result === loadJsonAs[User]("/fixtures/rest/account/user.json") } "update a profile" in new TwitterAccountClientSpecContext { val profile = ProfileUpdate(url = Some("http://danielasfregola.com")) val result: User = when(updateProfile(profile)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/account/update_profile.json" request.entity === HttpEntity(`application/x-www-form-urlencoded`, "include_entities=true&skip_status=false&url=http%3A%2F%2Fdanielasfregola.com") } .respondWith("/twitter/rest/account/user.json") .await result === loadJsonAs[User]("/fixtures/rest/account/user.json") } "remove a profile banner" in new TwitterAccountClientSpecContext { val result: Unit = when(removeProfileBanner) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/account/remove_profile_banner.json" } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/accountactivity/TwitterAccountActivityClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.accountactivity import akka.http.scaladsl.model._ import com.danielasfregola.twitter4s.entities.Webhook import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterAccountActivityClientSpec extends ClientSpec { class TwitterAccountClientSpecContext extends RestClientSpecContext with TwitterAccountActivityClient "Twitter Account Activity Client" should { "register webhook" in new TwitterAccountClientSpecContext { val result: Webhook = when(registerWebhook(env_name = "test", url = "https://danielasfregola.com/webhook")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/account_activity/all/test/webhooks.json" request.uri.rawQueryString === Some("url=https%3A%2F%2Fdanielasfregola.com%2Fwebhook") } .respondWith("/twitter/rest/accountactivity/webhook.json") .await result === loadJsonAs[Webhook]("/fixtures/rest/accountactivity/webhook.json") } "remove webhook" in new TwitterAccountClientSpecContext { val result: Unit = when(removeWebhook(env_name = "test", webhookId = "1234567890123456789")) .expectRequest { request => request.method === HttpMethods.DELETE request.uri.endpoint === "https://api.twitter.com/1.1/account_activity/all/test/webhooks/1234567890123456789.json" } .respondWithNoContent .await result.isInstanceOf[Unit] should beTrue } "reenable webhook" in new TwitterAccountClientSpecContext { val result: Unit = when(reenableWebhook(env_name = "test", webhookId = "1234567890123456789")) .expectRequest { request => request.method === HttpMethods.PUT request.uri.endpoint === "https://api.twitter.com/1.1/account_activity/all/test/webhooks/1234567890123456789.json" } .respondWithNoContent .await result.isInstanceOf[Unit] should beTrue } "subscribe context user to all events" in new TwitterAccountClientSpecContext { val result: Unit = when(subscribeAll(env_name = "test")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/account_activity/all/test/subscriptions.json" } .respondWithNoContent .await result.isInstanceOf[Unit] should beTrue } "unsubscribe context user to all events" in new TwitterAccountClientSpecContext { val result: Unit = when(unsubscribeAll(env_name = "test")) .expectRequest { request => request.method === HttpMethods.DELETE request.uri.endpoint === "https://api.twitter.com/1.1/account_activity/all/test/subscriptions.json" } .respondWithNoContent .await result.isInstanceOf[Unit] should beTrue } "determine if user is subscribed" in new TwitterAccountClientSpecContext { val result: Unit = when(isUserSubscribed(env_name = "test")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/account_activity/all/test/subscriptions.json" } .respondWithNoContent .await result.isInstanceOf[Unit] should beTrue } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/application/TwitterApplicationClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.application import akka.http.scaladsl.model.HttpMethods import com.danielasfregola.twitter4s.entities.enums.Resource import com.danielasfregola.twitter4s.entities.{RateLimits, RatedData} import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterApplicationClientSpec extends ClientSpec { class TwitterApplicationClientSpecContext extends RestClientSpecContext with TwitterApplicationClient "Twitter Application Client" should { "get application rate limits for some resources" in new TwitterApplicationClientSpecContext { val result: RatedData[RateLimits] = when(rateLimits(Resource.Account, Resource.Statuses)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/application/rate_limit_status.json" request.uri.rawQueryString === Some("resources=account%2Cstatuses") } .respondWithRated("/twitter/rest/application/rate_limits.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[RateLimits]("/fixtures/rest/application/rate_limits.json") } "get application rate limits for all the resources" in new TwitterApplicationClientSpecContext { val result: RatedData[RateLimits] = when(rateLimits()) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/application/rate_limit_status.json" request.uri.rawQueryString === None } .respondWithRated("/twitter/rest/application/rate_limits.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[RateLimits]("/fixtures/rest/application/rate_limits.json") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/blocks/TwitterBlockClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.blocks import akka.http.scaladsl.model.HttpMethods import com.danielasfregola.twitter4s.entities._ import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterBlockClientSpec extends ClientSpec { class TwitterBlockClientSpecContext extends RestClientSpecContext with TwitterBlockClient "Twitter Block Client" should { "get blocked users" in new TwitterBlockClientSpecContext { val result: RatedData[Users] = when(blockedUsers()) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/blocks/list.json" } .respondWithRated("/twitter/rest/blocks/blocked_users.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Users]("/fixtures/rest/blocks/blocked_users.json") } "get blocked user ids" in new TwitterBlockClientSpecContext { val result: RatedData[UserIds] = when(blockedUserIds()) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/blocks/ids.json" request.uri.rawQueryString === Some("cursor=-1&stringify_ids=false") } .respondWithRated("/twitter/rest/blocks/ids.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[UserIds]("/fixtures/rest/blocks/ids.json") } "get blocked user stringified ids" in new TwitterBlockClientSpecContext { val result: RatedData[UserStringifiedIds] = when(blockedUserStringifiedIds()) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/blocks/ids.json" request.uri.rawQueryString === Some("cursor=-1&stringify_ids=true") } .respondWithRated("/twitter/rest/blocks/stringified_ids.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[UserStringifiedIds]("/fixtures/rest/blocks/stringified_ids.json") } "block user" in new TwitterBlockClientSpecContext { val result: User = when(blockUser("marcobonzanini")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/blocks/create.json" request.uri.rawQueryString === Some("include_entities=true&screen_name=marcobonzanini&skip_status=false") } .respondWith("/twitter/rest/blocks/user.json") .await result === loadJsonAs[User]("/fixtures/rest/blocks/user.json") } "block user by user id" in new TwitterBlockClientSpecContext { val result: User = when(blockUserId(19018614L)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/blocks/create.json" request.uri.rawQueryString === Some("include_entities=true&skip_status=false&user_id=19018614") } .respondWith("/twitter/rest/blocks/user.json") .await result === loadJsonAs[User]("/fixtures/rest/blocks/user.json") } "unblock user" in new TwitterBlockClientSpecContext { val result: User = when(unblockUser("marcobonzanini")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/blocks/destroy.json" request.uri.rawQueryString === Some("include_entities=true&screen_name=marcobonzanini&skip_status=false") } .respondWith("/twitter/rest/blocks/user.json") .await result === loadJsonAs[User]("/fixtures/rest/blocks/user.json") } "unblock user by user id" in new TwitterBlockClientSpecContext { val result: User = when(unblockUserId(19018614L)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/blocks/destroy.json" request.uri.rawQueryString === Some("include_entities=true&skip_status=false&user_id=19018614") } .respondWith("/twitter/rest/blocks/user.json") .await result === loadJsonAs[User]("/fixtures/rest/blocks/user.json") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/directmessages/TwitterDirectMessageClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.directmessages import akka.http.scaladsl.model.{ContentType, HttpMethods, MediaTypes} import com.danielasfregola.twitter4s.entities._ import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterDirectMessageClientSpec extends ClientSpec { class TwitterDirectMessageClientSpecContext extends RestClientSpecContext with TwitterDirectMessageClient "Twitter Direct Message Client" should { "retrieve a specific direct message" in new TwitterDirectMessageClientSpecContext { val result: RatedData[DirectMessage] = when(directMessage(649298254383980547L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/direct_messages/show.json" request.uri.rawQueryString === Some("id=649298254383980547") } .respondWithRated("/twitter/rest/directmessages/show.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[DirectMessage]("/fixtures/rest/directmessages/show.json") } "get sent direct messages" in new TwitterDirectMessageClientSpecContext { val result: RatedData[Seq[DirectMessage]] = when(sentDirectMessages(count = 10)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/direct_messages/sent.json" request.uri.rawQueryString === Some("count=10&include_entities=true&page=-1") } .respondWithRated("/twitter/rest/directmessages/sent.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[DirectMessage]]("/fixtures/rest/directmessages/sent.json") } "get received direct messages" in new TwitterDirectMessageClientSpecContext { val result: RatedData[Seq[DirectMessage]] = when(receivedDirectMessages(count = 10)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/direct_messages.json" request.uri.rawQueryString === Some("count=10&include_entities=true&skip_status=false") } .respondWithRated("/twitter/rest/directmessages/received.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[DirectMessage]]("/fixtures/rest/directmessages/received.json") } "destroy a direct message" in new TwitterDirectMessageClientSpecContext { val result: DirectMessage = when(deleteDirectMessage(649298254383980547L)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/direct_messages/destroy.json" request.uri.rawQueryString === Some("id=649298254383980547&include_entities=true") } .respondWith("/twitter/rest/directmessages/destroy.json") .await result === loadJsonAs[DirectMessage]("/fixtures/rest/directmessages/destroy.json") } "create a direct message by user_id" in new TwitterDirectMessageClientSpecContext { val text = "FUNZIONAAAAAAAAAA :D" val result: DirectMessage = when(createDirectMessage(2911461333L, text)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/direct_messages/new.json" request.uri.rawQueryString === Some("text=FUNZIONAAAAAAAAAA%20%3AD&user_id=2911461333") } .respondWith("/twitter/rest/directmessages/new.json") .await result === loadJsonAs[DirectMessage]("/fixtures/rest/directmessages/new.json") } "create a direct message by screen_name" in new TwitterDirectMessageClientSpecContext { val text = "FUNZIONAAAAAAAAAA :D" val result: DirectMessage = when(createDirectMessage("marcobonzanini", text)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/direct_messages/new.json" request.uri.rawQueryString === Some("screen_name=marcobonzanini&text=FUNZIONAAAAAAAAAA%20%3AD") } .respondWith("/twitter/rest/directmessages/new.json") .await result === loadJsonAs[DirectMessage]("/fixtures/rest/directmessages/new.json") } "get list of direct message events" in new TwitterDirectMessageClientSpecContext { val result: DirectMessageEventList = when(eventsList(count = 1, Some("MTA0NDkxMzE5OTMyMDA0MzUyNw"))) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/direct_messages/events/list.json" request.uri.rawQueryString === Some("count=1&next_cursor=MTA0NDkxMzE5OTMyMDA0MzUyNw") } .respondWith("/twitter/rest/directmessages/list.json") .await result === loadJsonAs[DirectMessageEventList]("/fixtures/rest/directmessages/list.json") } "get direct message event" in new TwitterDirectMessageClientSpecContext { val result: Event = when(directMessageEvent("1044927409530647812")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/direct_messages/events/show.json" request.uri.rawQueryString === Some("id=1044927409530647812") } .respondWith("/twitter/rest/directmessages/event.json") .await result === loadJsonAs[Event]("/fixtures/rest/directmessages/event.json") } "create a direct message event" in new TwitterDirectMessageClientSpecContext { val text = "New test message" val result: Event = when(createDirectMessageEvent(2911461333L, text)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/direct_messages/events/new.json" request.entity.getContentType() === ContentType(MediaTypes.`application/json`) } .respondWith("/twitter/rest/directmessages/event.json") .await result === loadJsonAs[Event]("/fixtures/rest/directmessages/event.json") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/favorites/TwitterFavoriteClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.favorites import akka.http.scaladsl.model.HttpMethods import com.danielasfregola.twitter4s.entities.{RatedData, Tweet} import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterFavoriteClientSpec extends ClientSpec { class TwitterFavoriteClientSpecContext extends RestClientSpecContext with TwitterFavoriteClient "Twitter Favorite Client" should { "get favorites" in new TwitterFavoriteClientSpecContext { val result: RatedData[Seq[Tweet]] = when(favoriteStatusesForUser("DanielaSfregola")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/favorites/list.json" request.uri.rawQueryString === Some("count=20&include_entities=true&screen_name=DanielaSfregola") } .respondWithRated("/twitter/rest/favorites/favorites.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[Tweet]]("/fixtures/rest/favorites/favorites.json") } "get favorites per user id" in new TwitterFavoriteClientSpecContext { val result: RatedData[Seq[Tweet]] = when(favoriteStatusesForUserId(19018614)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/favorites/list.json" request.uri.rawQueryString === Some("count=20&include_entities=true&user_id=19018614") } .respondWithRated("/twitter/rest/favorites/favorites.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[Tweet]]("/fixtures/rest/favorites/favorites.json") } "favorite a tweet" in new TwitterFavoriteClientSpecContext { val result: Tweet = when(favoriteStatus(243138128959913986L)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/favorites/create.json" request.uri.rawQueryString === Some("id=243138128959913986&include_entities=true") } .respondWith("/twitter/rest/favorites/favorite.json") .await result === loadJsonAs[Tweet]("/fixtures/rest/favorites/favorite.json") } "unfavorite a tweet" in new TwitterFavoriteClientSpecContext { val result: Tweet = when(unfavoriteStatus(243138128959913986L)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/favorites/destroy.json" request.uri.rawQueryString === Some("id=243138128959913986&include_entities=true") } .respondWith("/twitter/rest/favorites/unfavorite.json") .await result === loadJsonAs[Tweet]("/fixtures/rest/favorites/unfavorite.json") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/followers/TwitterFollowerClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.followers import akka.http.scaladsl.model.HttpMethods import com.danielasfregola.twitter4s.entities.{RatedData, UserIds, UserStringifiedIds, Users} import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterFollowerClientSpec extends ClientSpec { class TwitterFollowerClientSpecContext extends RestClientSpecContext with TwitterFollowerClient "Twitter Follower Client" should { "get followers ids of a specific user by id" in new TwitterFollowerClientSpecContext { val result: RatedData[UserIds] = when(followerIdsForUserId(2911461333L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/followers/ids.json" request.uri.rawQueryString === Some("count=5000&cursor=-1&stringify_ids=false&user_id=2911461333") } .respondWithRated("/twitter/rest/followers/followers_ids.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[UserIds]("/fixtures/rest/followers/followers_ids.json") } "get followers ids of a specific user by name" in new TwitterFollowerClientSpecContext { val result: RatedData[UserIds] = when(followerIdsForUser("DanielaSfregola")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/followers/ids.json" request.uri.rawQueryString === Some("count=5000&cursor=-1&screen_name=DanielaSfregola&stringify_ids=false") } .respondWithRated("/twitter/rest/followers/followers_ids.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[UserIds]("/fixtures/rest/followers/followers_ids.json") } "get followers stringified ids of a specific user by id" in new TwitterFollowerClientSpecContext { val result: RatedData[UserStringifiedIds] = when(followerStringifiedIdsForUserId(2911461333L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/followers/ids.json" request.uri.rawQueryString === Some("count=5000&cursor=-1&stringify_ids=true&user_id=2911461333") } .respondWithRated("/twitter/rest/followers/followers_ids_stringified.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[UserStringifiedIds]("/fixtures/rest/followers/followers_ids_stringified.json") } "get followers stringified ids of a specific user by name" in new TwitterFollowerClientSpecContext { val result: RatedData[UserStringifiedIds] = when(followersStringifiedIdsForUser("DanielaSfregola")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/followers/ids.json" request.uri.rawQueryString === Some("count=5000&cursor=-1&screen_name=DanielaSfregola&stringify_ids=true") } .respondWithRated("/twitter/rest/followers/followers_ids_stringified.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[UserStringifiedIds]("/fixtures/rest/followers/followers_ids_stringified.json") } "get followers of a specific user" in new TwitterFollowerClientSpecContext { val result: RatedData[Users] = when(followersForUser("DanielaSfregola")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/followers/list.json" request.uri.rawQueryString === Some( "count=20&cursor=-1&include_user_entities=true&screen_name=DanielaSfregola&skip_status=false") } .respondWithRated("/twitter/rest/followers/followers.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Users]("/fixtures/rest/followers/followers.json") } "get followers of a specific user by user id" in new TwitterFollowerClientSpecContext { val result: RatedData[Users] = when(followersForUserId(2911461333L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/followers/list.json" request.uri.rawQueryString === Some( "count=20&cursor=-1&include_user_entities=true&skip_status=false&user_id=2911461333") } .respondWithRated("/twitter/rest/followers/followers.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Users]("/fixtures/rest/followers/followers.json") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/friends/TwitterFriendClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.friends import akka.http.scaladsl.model.HttpMethods import com.danielasfregola.twitter4s.entities.{RatedData, UserIds, UserStringifiedIds, Users} import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterFriendClientSpec extends ClientSpec { class TwitterFriendClientSpecContext extends RestClientSpecContext with TwitterFriendClient "Twitter Friend Client" should { "get friends ids of a specific user by id" in new TwitterFriendClientSpecContext { val result: RatedData[UserIds] = when(friendIdsForUserId(2911461333L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/friends/ids.json" request.uri.rawQueryString === Some("count=5000&cursor=-1&stringify_ids=false&user_id=2911461333") } .respondWithRated("/twitter/rest/friends/friends_ids.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[UserIds]("/fixtures/rest/friends/friends_ids.json") } "get friends ids of a specific user by name" in new TwitterFriendClientSpecContext { val result: RatedData[UserIds] = when(friendIdsForUser("DanielaSfregola")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/friends/ids.json" request.uri.rawQueryString === Some("count=5000&cursor=-1&screen_name=DanielaSfregola&stringify_ids=false") } .respondWithRated("/twitter/rest/friends/friends_ids.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[UserIds]("/fixtures/rest/friends/friends_ids.json") } "get friends stringified ids of a specific user by id" in new TwitterFriendClientSpecContext { val result: RatedData[UserStringifiedIds] = when(friendStringifiedIdsForUserId(2911461333L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/friends/ids.json" request.uri.rawQueryString === Some("count=5000&cursor=-1&stringify_ids=true&user_id=2911461333") } .respondWithRated("/twitter/rest/friends/friends_ids_stringified.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[UserStringifiedIds]("/fixtures/rest/friends/friends_ids_stringified.json") } "get friends stringified ids of a specific user by name" in new TwitterFriendClientSpecContext { val result: RatedData[UserStringifiedIds] = when(friendStringifiedIdsForUser("DanielaSfregola")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/friends/ids.json" request.uri.rawQueryString === Some("count=5000&cursor=-1&screen_name=DanielaSfregola&stringify_ids=true") } .respondWithRated("/twitter/rest/friends/friends_ids_stringified.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[UserStringifiedIds]("/fixtures/rest/friends/friends_ids_stringified.json") } "get friends of a user" in new TwitterFriendClientSpecContext { val result: RatedData[Users] = when(friendsForUser("DanielaSfregola", count = 10)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/friends/list.json" request.uri.rawQueryString === Some( "count=10&cursor=-1&include_user_entities=true&screen_name=DanielaSfregola&skip_status=false") } .respondWithRated("/twitter/rest/friends/users.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Users]("/fixtures/rest/friends/users.json") } "get friends of a user by user id" in new TwitterFriendClientSpecContext { val result: RatedData[Users] = when(friendsForUserId(2911461333L, count = 10)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/friends/list.json" request.uri.rawQueryString === Some( "count=10&cursor=-1&include_user_entities=true&skip_status=false&user_id=2911461333") } .respondWithRated("/twitter/rest/friends/users.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Users]("/fixtures/rest/friends/users.json") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/friendships/TwitterFriendshipClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.friendships import akka.http.scaladsl.model.HttpMethods import com.danielasfregola.twitter4s.entities._ import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterFriendshipClientSpec extends ClientSpec { class TwitterFriendshipClientSpecContext extends RestClientSpecContext with TwitterFriendshipClient "Twitter Friendship Client" should { "get all blocked users" in new TwitterFriendshipClientSpecContext { val result: RatedData[Seq[Long]] = when(noRetweetsUserIds) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/friendships/no_retweets/ids.json" request.uri.rawQueryString === Some("stringify_ids=false") } .respondWithRated("/twitter/rest/friendships/blocked_users.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[Long]]("/fixtures/rest/friendships/blocked_users.json") } "get all blocked users stringified" in new TwitterFriendshipClientSpecContext { val result: RatedData[Seq[String]] = when(noRetweetsUserStringifiedIds) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/friendships/no_retweets/ids.json" request.uri.rawQueryString === Some("stringify_ids=true") } .respondWithRated("/twitter/rest/friendships/blocked_users_stringified.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[String]]("/fixtures/rest/friendships/blocked_users_stringified.json") } "get incoming friendships" in new TwitterFriendshipClientSpecContext { val result: RatedData[UserIds] = when(incomingFriendshipIds()) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/friendships/incoming.json" request.uri.rawQueryString === Some("cursor=-1&stringify_ids=false") } .respondWithRated("/twitter/rest/friendships/incoming_friendships_ids.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[UserIds]("/fixtures/rest/friendships/incoming_friendships_ids.json") } "get incoming friendships stringified" in new TwitterFriendshipClientSpecContext { val result: RatedData[UserStringifiedIds] = when(incomingFriendshipStringifiedIds()) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/friendships/incoming.json" request.uri.rawQueryString === Some("cursor=-1&stringify_ids=true") } .respondWithRated("/twitter/rest/friendships/incoming_friendships_ids_stringified.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[UserStringifiedIds]( "/fixtures/rest/friendships/incoming_friendships_ids_stringified.json") } "get outgoing friendships" in new TwitterFriendshipClientSpecContext { val result: RatedData[UserIds] = when(outgoingFriendshipIds()) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/friendships/outgoing.json" request.uri.rawQueryString === Some("cursor=-1&stringify_ids=false") } .respondWithRated("/twitter/rest/friendships/outgoing_friendships_ids.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[UserIds]("/fixtures/rest/friendships/outgoing_friendships_ids.json") } "get outgoing friendships stringified" in new TwitterFriendshipClientSpecContext { val result: RatedData[UserStringifiedIds] = when(outgoingFriendshipStringifiedIds()) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/friendships/outgoing.json" request.uri.rawQueryString === Some("cursor=-1&stringify_ids=true") } .respondWithRated("/twitter/rest/friendships/outgoing_friendships_ids_stringified.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[UserStringifiedIds]( "/fixtures/rest/friendships/outgoing_friendships_ids_stringified.json") } "follow a user" in new TwitterFriendshipClientSpecContext { val result: User = when(followUser("marcobonzanini")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/friendships/create.json" request.uri.rawQueryString === Some("follow=true&screen_name=marcobonzanini") } .respondWith("/twitter/rest/friendships/follow.json") .await result === loadJsonAs[User]("/fixtures/rest/friendships/follow.json") } "follow a user by user id" in new TwitterFriendshipClientSpecContext { val result: User = when(followUserId(19018614L)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/friendships/create.json" request.uri.rawQueryString === Some("follow=true&user_id=19018614") } .respondWith("/twitter/rest/friendships/follow.json") .await result === loadJsonAs[User]("/fixtures/rest/friendships/follow.json") } "unfollow a user" in new TwitterFriendshipClientSpecContext { val result: User = when(unfollowUser("marcobonzanini")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/friendships/destroy.json" request.uri.rawQueryString === Some("screen_name=marcobonzanini") } .respondWith("/twitter/rest/friendships/unfollow.json") .await result === loadJsonAs[User]("/fixtures/rest/friendships/unfollow.json") } "unfollow a user by user id" in new TwitterFriendshipClientSpecContext { val result: User = when(unfollowUserId(19018614L)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/friendships/destroy.json" request.uri.rawQueryString === Some("user_id=19018614") } .respondWith("/twitter/rest/friendships/unfollow.json") .await result === loadJsonAs[User]("/fixtures/rest/friendships/unfollow.json") } "enable retweets notifications for a user" in new TwitterFriendshipClientSpecContext { val result: Relationship = when(enableRetweetsNotificationsForUser("marcobonzanini")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/friendships/update.json" request.uri.rawQueryString === Some("retweets=true&screen_name=marcobonzanini") } .respondWith("/twitter/rest/friendships/update.json") .await result === loadJsonAs[Relationship]("/fixtures/rest/friendships/update.json") } "enable retweets notifications for a user by user id" in new TwitterFriendshipClientSpecContext { val result: Relationship = when(enableRetweetsNotificationsForUserId(19018614L)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/friendships/update.json" request.uri.rawQueryString === Some("retweets=true&user_id=19018614") } .respondWith("/twitter/rest/friendships/update.json") .await result === loadJsonAs[Relationship]("/fixtures/rest/friendships/update.json") } "disable retweets notifications for a user" in new TwitterFriendshipClientSpecContext { val result: Relationship = when(disableRetweetsNotificationsForUser("marcobonzanini")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/friendships/update.json" request.uri.rawQueryString === Some("retweets=false&screen_name=marcobonzanini") } .respondWith("/twitter/rest/friendships/update.json") .await result === loadJsonAs[Relationship]("/fixtures/rest/friendships/update.json") } "disable retweets notifications for a user by user id" in new TwitterFriendshipClientSpecContext { val result: Relationship = when(disableRetweetsNotificationsForUserId(19018614L)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/friendships/update.json" request.uri.rawQueryString === Some("retweets=false&user_id=19018614") } .respondWith("/twitter/rest/friendships/update.json") .await result === loadJsonAs[Relationship]("/fixtures/rest/friendships/update.json") } "enable device notifications for a user" in new TwitterFriendshipClientSpecContext { val result: Relationship = when(enableDeviceNotificationsForUser("marcobonzanini")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/friendships/update.json" request.uri.rawQueryString === Some("device=true&screen_name=marcobonzanini") } .respondWith("/twitter/rest/friendships/update.json") .await result === loadJsonAs[Relationship]("/fixtures/rest/friendships/update.json") } "enable device notifications for a user by user id" in new TwitterFriendshipClientSpecContext { val result: Relationship = when(enableDeviceNotificationsForUserId(19018614L)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/friendships/update.json" request.uri.rawQueryString === Some("device=true&user_id=19018614") } .respondWith("/twitter/rest/friendships/update.json") .await result === loadJsonAs[Relationship]("/fixtures/rest/friendships/update.json") } "disable device notifications for a user" in new TwitterFriendshipClientSpecContext { val result: Relationship = when(disableDeviceNotificationsForUser("marcobonzanini")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/friendships/update.json" request.uri.rawQueryString === Some("device=false&screen_name=marcobonzanini") } .respondWith("/twitter/rest/friendships/update.json") .await result === loadJsonAs[Relationship]("/fixtures/rest/friendships/update.json") } "disable device notifications for a user by user id" in new TwitterFriendshipClientSpecContext { val result: Relationship = when(disableDeviceNotificationsForUserId(19018614L)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/friendships/update.json" request.uri.rawQueryString === Some("device=false&user_id=19018614") } .respondWith("/twitter/rest/friendships/update.json") .await result === loadJsonAs[Relationship]("/fixtures/rest/friendships/update.json") } "get a relationship by ids" in new TwitterFriendshipClientSpecContext { val result: RatedData[Relationship] = when(relationshipBetweenUserIds(2911461333L, 19018614L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/friendships/show.json" request.uri.rawQueryString === Some("source_id=2911461333&target_id=19018614") } .respondWithRated("/twitter/rest/friendships/relationship.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Relationship]("/fixtures/rest/friendships/relationship.json") } "get a relationship by screen names" in new TwitterFriendshipClientSpecContext { val result: RatedData[Relationship] = when(relationshipBetweenUsers("DanielaSfregola", "marcobonzanini")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/friendships/show.json" request.uri.rawQueryString === Some("source_screen_name=DanielaSfregola&target_screen_name=marcobonzanini") } .respondWithRated("/twitter/rest/friendships/relationship.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Relationship]("/fixtures/rest/friendships/relationship.json") } "get relationships with a list of users" in new TwitterFriendshipClientSpecContext { val result: RatedData[Seq[LookupRelationship]] = when(relationshipsWithUsers("marcobonzanini", "odersky")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/friendships/lookup.json" request.uri.rawQueryString === Some("screen_name=marcobonzanini%2Codersky") } .respondWithRated("/twitter/rest/friendships/relationships.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[LookupRelationship]]("/fixtures/rest/friendships/relationships.json") } "reject request if no ids have been provided for the lookup" in new TwitterFriendshipClientSpecContext { relationshipsWithUsers() must throwA[IllegalArgumentException]( "requirement failed: please, provide at least one screen name") } "get relationships with a list of users by user id" in new TwitterFriendshipClientSpecContext { val result: RatedData[Seq[LookupRelationship]] = when(relationshipsWithUserIds(2911461333L, 2911461334L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/friendships/lookup.json" request.uri.rawQueryString === Some("user_id=2911461333%2C2911461334") } .respondWithRated("/twitter/rest/friendships/relationships.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[LookupRelationship]]("/fixtures/rest/friendships/relationships.json") } "reject request if no ids have been provided for the lookup" in new TwitterFriendshipClientSpecContext { relationshipsWithUserIds() must throwA[IllegalArgumentException]( "requirement failed: please, provide at least one user id") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/geo/TwitterGeoClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.geo import akka.http.scaladsl.model.HttpMethods import com.danielasfregola.twitter4s.entities.{GeoPlace, GeoSearch, RatedData} import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterGeoClientSpec extends ClientSpec { class TwitterGeoClientSpecContext extends RestClientSpecContext with TwitterGeoClient "Twitter Geo Client" should { "get a geo place by id" in new TwitterGeoClientSpecContext { val placeId = "df51dec6f4ee2b2c" val result: RatedData[GeoPlace] = when(geoPlace(placeId)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/1.1/geo/id/$placeId.json" } .respondWithRated("/twitter/rest/geo/geo_place.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[GeoPlace]("/fixtures/rest/geo/geo_place.json") } "perform a reverse geocode search" in new TwitterGeoClientSpecContext { val result: RatedData[GeoSearch] = when(reverseGeocode(-122.42284884, 37.76893497)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/1.1/geo/reverse_geocode.json" request.uri.rawQueryString === Some("accuracy=0m&granularity=neighborhood&lat=-122.42284884&long=37.76893497") } .respondWithRated("/twitter/rest/geo/reverse_geocode.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[GeoSearch]("/fixtures/rest/geo/reverse_geocode.json") } "search a geo place" in new TwitterGeoClientSpecContext { val result: RatedData[GeoSearch] = when(searchGeoPlace("Creazzo")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/1.1/geo/search.json" request.uri.rawQueryString === Some("query=Creazzo") } .respondWithRated("/twitter/rest/geo/search.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[GeoSearch]("/fixtures/rest/geo/search.json") } "perform an advanced search of a geo place" in new TwitterGeoClientSpecContext { val result: RatedData[GeoSearch] = when(advancedSearchGeoPlace(query = Some("Creazzo"), street_address = Some("Via Giotto 20"))) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/1.1/geo/search.json" request.uri.rawQueryString === Some("attribute:street_address=Via%20Giotto%2020&query=Creazzo") } .respondWithRated("/twitter/rest/geo/advanced_search.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[GeoSearch]("/fixtures/rest/geo/advanced_search.json") } "reject advanced search if no latitude or longitude or ip or query have been provided" in new TwitterGeoClientSpecContext { val msg = "requirement failed: please, provide at least one of the following: 'latitude', 'longitude', 'query', 'ip'" advancedSearchGeoPlace(street_address = Some("Via Giotto 20")) must throwA[IllegalArgumentException](msg) } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/help/TwitterHelpClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.help import akka.http.scaladsl.model.HttpMethods import com.danielasfregola.twitter4s.entities._ import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterHelpClientSpec extends ClientSpec { class TwitterHelpClientSpecContext extends RestClientSpecContext with TwitterHelpClient "Twitter Help Client" should { "get twitter configuration" in new TwitterHelpClientSpecContext { val result: RatedData[Configuration] = when(configuration()) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/help/configuration.json" } .respondWithRated("/twitter/rest/help/configuration.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Configuration]("/fixtures/rest/help/configuration.json") } "get supported languages" in new TwitterHelpClientSpecContext { val result: RatedData[Seq[LanguageDetails]] = when(supportedLanguages()) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/help/languages.json" } .respondWithRated("/twitter/rest/help/languages.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[LanguageDetails]]("/fixtures/rest/help/languages.json") } "get twitter privacy policy" in new TwitterHelpClientSpecContext { val result: RatedData[PrivacyPolicy] = when(privacyPolicy()) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/help/privacy.json" } .respondWithRated("/twitter/rest/help/privacy.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[PrivacyPolicy]("/fixtures/rest/help/privacy.json") } "get twitter terms of service" in new TwitterHelpClientSpecContext { val result: RatedData[TermsOfService] = when(termsOfService()) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/help/tos.json" } .respondWithRated("/twitter/rest/help/tos.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[TermsOfService]("/fixtures/rest/help/tos.json") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/lists/TwitterListClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.lists import akka.http.scaladsl.model.HttpMethods import com.danielasfregola.twitter4s.entities._ import com.danielasfregola.twitter4s.entities.enums.Mode import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterListClientSpec extends ClientSpec { class TwitterListClientSpecContext extends RestClientSpecContext with TwitterListClient "Twitter List Client" should { "get lists for a user" in new TwitterListClientSpecContext { val result: RatedData[Seq[TwitterList]] = when(listsForUser("DanielaSfregola")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/list.json" request.uri.rawQueryString === Some("reverse=false&screen_name=DanielaSfregola") } .respondWithRated("/twitter/rest/lists/lists.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[TwitterList]]("/fixtures/rest/lists/lists.json") } "get lists for a user by id" in new TwitterListClientSpecContext { val result: RatedData[Seq[TwitterList]] = when(listsForUserId(2911461333L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/list.json" request.uri.rawQueryString === Some("reverse=false&user_id=2911461333") } .respondWithRated("/twitter/rest/lists/lists.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[TwitterList]]("/fixtures/rest/lists/lists.json") } "get a list timeline by id" in new TwitterListClientSpecContext { val result: RatedData[Seq[Tweet]] = when(listTimelineByListId(8044403)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/statuses.json" request.uri.rawQueryString === Some("count=20&include_entities=true&include_rts=false&list_id=8044403") } .respondWithRated("/twitter/rest/lists/timeline.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[Tweet]]("/fixtures/rest/lists/timeline.json") } "get a list timeline by slug and owner" in new TwitterListClientSpecContext { val result: RatedData[Seq[Tweet]] = when(listTimelineBySlugAndOwnerName("meetup-20100301", "twitterapi")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/statuses.json" request.uri.rawQueryString === Some( "count=20&include_entities=true&include_rts=false&owner_screen_name=twitterapi&slug=meetup-20100301") } .respondWithRated("/twitter/rest/lists/timeline.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[Tweet]]("/fixtures/rest/lists/timeline.json") } "get a list timeline by slug and owner id" in new TwitterListClientSpecContext { val result: RatedData[Seq[Tweet]] = when(listTimelineBySlugAndOwnerId("meetup-20100301", 6253282)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/statuses.json" request.uri.rawQueryString === Some( "count=20&include_entities=true&include_rts=false&owner_id=6253282&slug=meetup-20100301") } .respondWithRated("/twitter/rest/lists/timeline.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[Tweet]]("/fixtures/rest/lists/timeline.json") } "remove list member by list id and user" in new TwitterListClientSpecContext { val result: Unit = when(removeListMemberByListId(8044403, "DanielaSfregola")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/destroy.json" request.uri.rawQueryString === Some("list_id=8044403&screen_name=DanielaSfregola") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "remove list member by slug and owner and user" in new TwitterListClientSpecContext { val result: Unit = when(removeListMemberBySlugAndOwnerName("meetup-20100301", "twitterapi", "DanielaSfregola")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/destroy.json" request.uri.rawQueryString === Some( "owner_screen_name=twitterapi&screen_name=DanielaSfregola&slug=meetup-20100301") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "remove list member by slug and owner id and user" in new TwitterListClientSpecContext { val result: Unit = when(removeListMemberBySlugAndOwnerId("meetup-20100301", 6253282, "DanielaSfregola")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/destroy.json" request.uri.rawQueryString === Some("owner_id=6253282&screen_name=DanielaSfregola&slug=meetup-20100301") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "remove list member by list id and user id" in new TwitterListClientSpecContext { val result: Unit = when(removeListMemberIdByListId(8044403, 2911461333L)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/destroy.json" request.uri.rawQueryString === Some("list_id=8044403&user_id=2911461333") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "remove list member by slug and owner and user id" in new TwitterListClientSpecContext { val result: Unit = when(removeListMemberIdBySlugAndOwnerName("meetup-20100301", "twitterapi", 2911461333L)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/destroy.json" request.uri.rawQueryString === Some("owner_screen_name=twitterapi&slug=meetup-20100301&user_id=2911461333") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "remove list member by slug and owner id and user id" in new TwitterListClientSpecContext { val result: Unit = when(removeListMemberIdBySlugAndOwnerId("meetup-20100301", 6253282, 2911461333L)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/destroy.json" request.uri.rawQueryString === Some("owner_id=6253282&slug=meetup-20100301&user_id=2911461333") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "get list memberships per user" in new TwitterListClientSpecContext { val result: RatedData[TwitterLists] = when(listMembershipsForUser("DanielaSfregola")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/memberships.json" request.uri.rawQueryString === Some( "count=20&cursor=-1&filter_to_owned_lists=false&screen_name=DanielaSfregola") } .respondWithRated("/twitter/rest/lists/memberships.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[TwitterLists]("/fixtures/rest/lists/memberships.json") } "get list memberships per user id" in new TwitterListClientSpecContext { val result: RatedData[TwitterLists] = when(listMembershipsForUserId(2911461333L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/memberships.json" request.uri.rawQueryString === Some("count=20&cursor=-1&filter_to_owned_lists=false&user_id=2911461333") } .respondWithRated("/twitter/rest/lists/memberships.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[TwitterLists]("/fixtures/rest/lists/memberships.json") } "add members ids per list id" in new TwitterListClientSpecContext { val result: Unit = when(addListMemberIdsByListId(8044403, Seq(2911461333L, 2911461334L))) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/create_all.json" request.uri.rawQueryString === Some("list_id=8044403&user_id=2911461333%2C2911461334") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "add members ids per slug and owner" in new TwitterListClientSpecContext { val result: Unit = when(addListMemberIdsBySlugAndOwnerName("meetup-20100301", "twitterapi", Seq(2911461333L, 2911461334L))) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/create_all.json" request.uri.rawQueryString === Some( "owner_screen_name=twitterapi&slug=meetup-20100301&user_id=2911461333%2C2911461334") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "add members ids per slug and owner id" in new TwitterListClientSpecContext { val result: Unit = when(addListMemberIdsBySlugAndOwnerId("meetup-20100301", 6253282, Seq(2911461333L, 2911461334L))) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/create_all.json" request.uri.rawQueryString === Some("owner_id=6253282&slug=meetup-20100301&user_id=2911461333%2C2911461334") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "add members per list id" in new TwitterListClientSpecContext { val result: Unit = when(addListMembersByListId(8044403, Seq("marcobonzanini", "odersky"))) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/create_all.json" request.uri.rawQueryString === Some("list_id=8044403&screen_name=marcobonzanini%2Codersky") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "add members per slug and owner" in new TwitterListClientSpecContext { val result: Unit = when(addListMembersBySlugAndOwnerName("meetup-20100301", "twitterapi", Seq("marcobonzanini", "odersky"))) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/create_all.json" request.uri.rawQueryString === Some( "owner_screen_name=twitterapi&screen_name=marcobonzanini%2Codersky&slug=meetup-20100301") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "add members per slug and owner id" in new TwitterListClientSpecContext { val result: Unit = when(addListMembersBySlugAndOwnerId("meetup-20100301", 6253282, Seq("marcobonzanini", "odersky"))) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/create_all.json" request.uri.rawQueryString === Some( "owner_id=6253282&screen_name=marcobonzanini%2Codersky&slug=meetup-20100301") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "reject 'addListMembersIds' if no ids are provided" in new TwitterListClientSpecContext { addListMemberIdsByListId(8044403, Seq.empty) must throwA[IllegalArgumentException]( "requirement failed: please, provide at least one user id") } "reject 'addListMembersIdsBySlugAndOwnerName' if no ids are provided" in new TwitterListClientSpecContext { addListMemberIdsBySlugAndOwnerName("meetup-20100301", "twitterapi", Seq.empty) must throwA[ IllegalArgumentException]("requirement failed: please, provide at least one user id") } "reject 'addListMembersIdsBySlugAndOwnerId' if no ids are provided" in new TwitterListClientSpecContext { addListMemberIdsBySlugAndOwnerId("meetup-20100301", 6253282, Seq.empty) must throwA[IllegalArgumentException]( "requirement failed: please, provide at least one user id") } "reject 'addListMembers' if no screen names are provided" in new TwitterListClientSpecContext { addListMembersByListId(8044403, Seq.empty) must throwA[IllegalArgumentException]( "requirement failed: please, provide at least one screen name") } "reject 'addListMembersBySlugAndOwnerName' if no screen names are provided" in new TwitterListClientSpecContext { addListMembersBySlugAndOwnerName("meetup-20100301", "twitterapi", Seq.empty) must throwA[ IllegalArgumentException]("requirement failed: please, provide at least one screen name") } "reject 'addListMembersBySlugAndOwnerId' if no screen names are provided" in new TwitterListClientSpecContext { addListMembersBySlugAndOwnerId("meetup-20100301", 6253282, Seq.empty) must throwA[IllegalArgumentException]( "requirement failed: please, provide at least one screen name") } "get member by id per list id" in new TwitterListClientSpecContext { val result: RatedData[User] = when(checkListMemberByUserIdAndListId(8044403, 2911461333L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/show.json" request.uri.rawQueryString === Some( "include_entities=true&list_id=8044403&skip_status=false&user_id=2911461333") } .respondWithRated("/twitter/rest/lists/member.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[User]("/fixtures/rest/lists/member.json") } "get member by id per slug and owner" in new TwitterListClientSpecContext { val result: RatedData[User] = when(checkListMemberByUserIdSlugAndOwnerName("meetup-20100301", "twitterapi", 2911461333L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/show.json" request.uri.rawQueryString === Some( "include_entities=true&owner_screen_name=twitterapi&skip_status=false&slug=meetup-20100301&user_id=2911461333") } .respondWithRated("/twitter/rest/lists/member.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[User]("/fixtures/rest/lists/member.json") } "get member by id per slug and owner id" in new TwitterListClientSpecContext { val result: RatedData[User] = when(checkListMemberByUserIdSlugAndOwnerId("meetup-20100301", 6253282, 2911461333L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/show.json" request.uri.rawQueryString === Some( "include_entities=true&owner_id=6253282&skip_status=false&slug=meetup-20100301&user_id=2911461333") } .respondWithRated("/twitter/rest/lists/member.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[User]("/fixtures/rest/lists/member.json") } "get member per list id" in new TwitterListClientSpecContext { val result: RatedData[User] = when(checkListMemberByUserAndListId(8044403, "DanielaSfregola")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/show.json" request.uri.rawQueryString === Some( "include_entities=true&list_id=8044403&screen_name=DanielaSfregola&skip_status=false") } .respondWithRated("/twitter/rest/lists/member.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[User]("/fixtures/rest/lists/member.json") } "get member per slug and owner" in new TwitterListClientSpecContext { val result: RatedData[User] = when(checkListMemberByUserSlugAndOwnerName("meetup-20100301", "twitterapi", "DanielaSfregola")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/show.json" request.uri.rawQueryString === Some( "include_entities=true&owner_screen_name=twitterapi&screen_name=DanielaSfregola&skip_status=false&slug=meetup-20100301") } .respondWithRated("/twitter/rest/lists/member.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[User]("/fixtures/rest/lists/member.json") } "get member per slug and owner id" in new TwitterListClientSpecContext { val result: RatedData[User] = when(checkListMemberByUserSlugAndOwnerId("meetup-20100301", 6253282, "DanielaSfregola")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/show.json" request.uri.rawQueryString === Some( "include_entities=true&owner_id=6253282&screen_name=DanielaSfregola&skip_status=false&slug=meetup-20100301") } .respondWithRated("/twitter/rest/lists/member.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[User]("/fixtures/rest/lists/member.json") } "get members of list per list id" in new TwitterListClientSpecContext { val result: RatedData[Users] = when(listMembersByListId(8044403)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/members.json" request.uri.rawQueryString === Some( "count=20&cursor=-1&include_entities=true&list_id=8044403&skip_status=false") } .respondWithRated("/twitter/rest/lists/members.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Users]("/fixtures/rest/lists/members.json") } "get members of list per slug and owner" in new TwitterListClientSpecContext { val result: RatedData[Users] = when(listMembersBySlugAndOwnerName("meetup-20100301", "twitterapi")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/members.json" request.uri.rawQueryString === Some( "count=20&cursor=-1&include_entities=true&owner_screen_name=twitterapi&skip_status=false&slug=meetup-20100301") } .respondWithRated("/twitter/rest/lists/members.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Users]("/fixtures/rest/lists/members.json") } "get members of list per slug and owner id" in new TwitterListClientSpecContext { val result: RatedData[Users] = when(listMembersBySlugAndOwnerId("meetup-20100301", 6253282)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/members.json" request.uri.rawQueryString === Some( "count=20&cursor=-1&include_entities=true&owner_id=6253282&skip_status=false&slug=meetup-20100301") } .respondWithRated("/twitter/rest/lists/members.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Users]("/fixtures/rest/lists/members.json") } "add member id to list id" in new TwitterListClientSpecContext { val result: Unit = when(addListMemberIdByListId(8044403, 2911461333L)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/create.json" request.uri.rawQueryString === Some("list_id=8044403&user_id=2911461333") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "add member id to slug and owner" in new TwitterListClientSpecContext { val result: Unit = when(addListMemberIdBySlugAndOwnerName("meetup-20100301", "twitterapi", 2911461333L)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/create.json" request.uri.rawQueryString === Some("owner_screen_name=twitterapi&slug=meetup-20100301&user_id=2911461333") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "add member id to slug and owner id" in new TwitterListClientSpecContext { val result: Unit = when(addListMemberIdBySlugAndOwnerId("meetup-20100301", 6253282, 2911461333L)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/create.json" request.uri.rawQueryString === Some("owner_id=6253282&slug=meetup-20100301&user_id=2911461333") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "add member per list id" in new TwitterListClientSpecContext { val result: Unit = when(addListMemberByListId(8044403, "marcobonzanini")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/create.json" request.uri.rawQueryString === Some("list_id=8044403&screen_name=marcobonzanini") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "add member per slug and owner" in new TwitterListClientSpecContext { val result: Unit = when(addListMemberBySlugAndOwnerName("meetup-20100301", "twitterapi", "marcobonzanini")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/create.json" request.uri.rawQueryString === Some( "owner_screen_name=twitterapi&screen_name=marcobonzanini&slug=meetup-20100301") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "add member per slug and owner id" in new TwitterListClientSpecContext { val result: Unit = when(addListMemberBySlugAndOwnerId("meetup-20100301", 6253282, "marcobonzanini")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/create.json" request.uri.rawQueryString === Some("owner_id=6253282&screen_name=marcobonzanini&slug=meetup-20100301") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "delete a list by id" in new TwitterListClientSpecContext { val result: TwitterList = when(deleteListById(8044403)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/destroy.json" request.uri.rawQueryString === Some("list_id=8044403") } .respondWith("/twitter/rest/lists/destroy.json") .await result === loadJsonAs[TwitterList]("/fixtures/rest/lists/destroy.json") } "delete a list by slug and owner id" in new TwitterListClientSpecContext { val result: TwitterList = when(deleteListBySlugAndOwnerId("meetup-20100301", 6253282)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/destroy.json" request.uri.rawQueryString === Some("owner_id=6253282&slug=meetup-20100301") } .respondWith("/twitter/rest/lists/destroy.json") .await result === loadJsonAs[TwitterList]("/fixtures/rest/lists/destroy.json") } "delete a list by slug and owner" in new TwitterListClientSpecContext { val result: TwitterList = when(deleteListBySlugAndOwnerName("meetup-20100301", "twitterapi")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/destroy.json" request.uri.rawQueryString === Some("owner_screen_name=twitterapi&slug=meetup-20100301") } .respondWith("/twitter/rest/lists/destroy.json") .await result === loadJsonAs[TwitterList]("/fixtures/rest/lists/destroy.json") } "update list mode by id" in new TwitterListClientSpecContext { val result: Unit = when(updateListMode(8044403, Mode.Private)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/update.json" request.uri.rawQueryString === Some("list_id=8044403&mode=private") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "update list mode by slug and owner name" in new TwitterListClientSpecContext { val result: Unit = when(updateListModeBySlugAndOwnerName("meetup-20100301", "twitterapi", Mode.Private)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/update.json" request.uri.rawQueryString === Some("mode=private&owner_screen_name=twitterapi&slug=meetup-20100301") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "update list mode by slug and owner id" in new TwitterListClientSpecContext { val result: Unit = when(updateListModeBySlugAndOwnerId("meetup-20100301", 6253282, Mode.Private)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/update.json" request.uri.rawQueryString === Some("mode=private&owner_id=6253282&slug=meetup-20100301") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "update list name by id" in new TwitterListClientSpecContext { val result: Unit = when(updateListName(8044403, "new name")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/update.json" request.uri.rawQueryString === Some("list_id=8044403&name=new%20name") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "update list name by slug and owner name" in new TwitterListClientSpecContext { val result: Unit = when(updateListNameBySlugAndOwnerName("meetup-20100301", "twitterapi", "new name")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/update.json" request.uri.rawQueryString === Some("name=new%20name&owner_screen_name=twitterapi&slug=meetup-20100301") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "update list name by slug and owner id" in new TwitterListClientSpecContext { val result: Unit = when(updateListNameBySlugAndOwnerId("meetup-20100301", 6253282, "new name")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/update.json" request.uri.rawQueryString === Some("name=new%20name&owner_id=6253282&slug=meetup-20100301") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "update list description by id" in new TwitterListClientSpecContext { val result: Unit = when(updateListDescription(8044403, "cool description")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/update.json" request.uri.rawQueryString === Some("description=cool%20description&list_id=8044403") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "update list description by slug and owner name" in new TwitterListClientSpecContext { val result: Unit = when(updateListDescriptionBySlugAndOwnerName("meetup-20100301", "twitterapi", "cool description")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/update.json" request.uri.rawQueryString === Some( "description=cool%20description&owner_screen_name=twitterapi&slug=meetup-20100301") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "update list description by slug and owner id" in new TwitterListClientSpecContext { val result: Unit = when(updateListDescriptionBySlugAndOwnerId("meetup-20100301", 6253282, "cool description")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/update.json" request.uri.rawQueryString === Some("description=cool%20description&owner_id=6253282&slug=meetup-20100301") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "update list by id" in new TwitterListClientSpecContext { val update = TwitterListUpdate(mode = Some(Mode.Private), description = Some("cool description")) val result: Unit = when(updateList(8044403, update)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/update.json" request.uri.rawQueryString === Some("description=cool%20description&list_id=8044403&mode=private") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "update list by slug and owner name" in new TwitterListClientSpecContext { val update = TwitterListUpdate(mode = Some(Mode.Private), description = Some("cool description")) val result: Unit = when(updateListBySlugAndOwnerName("meetup-20100301", "twitterapi", update)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/update.json" request.uri.rawQueryString === Some( "description=cool%20description&mode=private&owner_screen_name=twitterapi&slug=meetup-20100301") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "update list by slug and owner id" in new TwitterListClientSpecContext { val update = TwitterListUpdate(mode = Some(Mode.Private), description = Some("cool description")) val result: Unit = when(updateListBySlugAndOwnerId("meetup-20100301", 6253282, update)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/update.json" request.uri.rawQueryString === Some( "description=cool%20description&mode=private&owner_id=6253282&slug=meetup-20100301") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "create a list" in new TwitterListClientSpecContext { val result: TwitterList = when(createList("my-list", Mode.Private, Some("a nice description"))) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/create.json" request.uri.rawQueryString === Some("description=a%20nice%20description&mode=private&name=my-list") } .respondWith("/twitter/rest/lists/create.json") .await result === loadJsonAs[TwitterList]("/fixtures/rest/lists/create.json") } "get list by id" in new TwitterListClientSpecContext { val result: RatedData[TwitterList] = when(listById(222669735)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/show.json" request.uri.rawQueryString === Some("list_id=222669735") } .respondWithRated("/twitter/rest/lists/show.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[TwitterList]("/fixtures/rest/lists/show.json") } "get list by slug and owner name" in new TwitterListClientSpecContext { val result: RatedData[TwitterList] = when(listBySlugAndOwnerName("my-list", "Daniela Sfregola")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/show.json" request.uri.rawQueryString === Some("owner_screen_name=Daniela%20Sfregola&slug=my-list") } .respondWithRated("/twitter/rest/lists/show.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[TwitterList]("/fixtures/rest/lists/show.json") } "get list by slug and owner id" in new TwitterListClientSpecContext { val result: RatedData[TwitterList] = when(listBySlugAndOwnerId("my-list", 2911461333L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/show.json" request.uri.rawQueryString === Some("owner_id=2911461333&slug=my-list") } .respondWithRated("/twitter/rest/lists/show.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[TwitterList]("/fixtures/rest/lists/show.json") } "get list subscriptions" in new TwitterListClientSpecContext { val result: RatedData[TwitterLists] = when(listSubscriptions("DanielaSfregola")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/subscriptions.json" request.uri.rawQueryString === Some("count=20&cursor=-1&screen_name=DanielaSfregola") } .respondWithRated("/twitter/rest/lists/subscriptions.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[TwitterLists]("/fixtures/rest/lists/subscriptions.json") } "get list subscriptions by user id" in new TwitterListClientSpecContext { val result: RatedData[TwitterLists] = when(listSubscriptionsByUserId(2911461333L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/subscriptions.json" request.uri.rawQueryString === Some("count=20&cursor=-1&user_id=2911461333") } .respondWithRated("/twitter/rest/lists/subscriptions.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[TwitterLists]("/fixtures/rest/lists/subscriptions.json") } "remove members from list" in new TwitterListClientSpecContext { val result: Unit = when(removeListMembers(222669735, Seq("marcobonzanini", "odersky"))) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/destroy_all.json" request.uri.rawQueryString === Some("list_id=222669735&screen_name=marcobonzanini%2Codersky") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "remove members from list by slug and owner name" in new TwitterListClientSpecContext { val result: Unit = when(removeListMembersBySlugAndOwnerName("my-list", "DanielaSfregola", Seq("marcobonzanini", "odersky"))) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/destroy_all.json" request.uri.rawQueryString === Some( "owner_screen_name=DanielaSfregola&screen_name=marcobonzanini%2Codersky&slug=my-list") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "remove members from list by slug and owner id" in new TwitterListClientSpecContext { val result: Unit = when(removeListMembersBySlugAndOwnerId("my-list", 2911461333L, Seq("marcobonzanini", "odersky"))) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/destroy_all.json" request.uri.rawQueryString === Some("owner_id=2911461333&screen_name=marcobonzanini%2Codersky&slug=my-list") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "remove members ids from list" in new TwitterListClientSpecContext { val result: Unit = when(removeListMembersIds(222669735, Seq(2911461333L, 2911461334L))) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/destroy_all.json" request.uri.rawQueryString === Some("list_id=222669735&user_id=2911461333%2C2911461334") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "remove members ids from list by slug and owner name" in new TwitterListClientSpecContext { val result: Unit = when(removeListMembersIdsBySlugAndOwnerName("my-list", "DanielaSfregola", Seq(2911461333L, 2911461334L))) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/destroy_all.json" request.uri.rawQueryString === Some( "owner_screen_name=DanielaSfregola&slug=my-list&user_id=2911461333%2C2911461334") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "remove members ids from list by slug and owner id" in new TwitterListClientSpecContext { val result: Unit = when(removeListMembersIdsBySlugAndOwnerId("my-list", 2911461333L, Seq(2911461333L, 2911461334L))) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/lists/members/destroy_all.json" request.uri.rawQueryString === Some("owner_id=2911461333&slug=my-list&user_id=2911461333%2C2911461334") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "reject 'removeListMembers' if no screen names are provided" in new TwitterListClientSpecContext { removeListMembers(222669735, Seq.empty) must throwA[IllegalArgumentException]( "requirement failed: please, provide at least one screen name") } "reject 'removeListMembersBySlugAndOwnerName' if no screen names are provided" in new TwitterListClientSpecContext { removeListMembersBySlugAndOwnerName("my-list", "DanielaSfregola", Seq.empty) must throwA[ IllegalArgumentException]("requirement failed: please, provide at least one screen name") } "reject 'removeListMembersBySlugAndOwnerId' if no screen names are provided" in new TwitterListClientSpecContext { removeListMembersBySlugAndOwnerId("my-list", 2911461333L, Seq.empty) must throwA[IllegalArgumentException]( "requirement failed: please, provide at least one screen name") } "reject 'removeListMembersIds' if no ids are provided" in new TwitterListClientSpecContext { removeListMembersIds(222669735, Seq.empty) must throwA[IllegalArgumentException]( "requirement failed: please, provide at least one user id") } "reject 'removeListMembersIdsBySlugAndOwnerName' if no ids are provided" in new TwitterListClientSpecContext { removeListMembersIdsBySlugAndOwnerName("my-list", "DanielaSfregola", Seq.empty) must throwA[ IllegalArgumentException]("requirement failed: please, provide at least one user id") } "reject 'addListMembersIds' if no ids are provided" in new TwitterListClientSpecContext { removeListMembersIdsBySlugAndOwnerId("my-list", 2911461333L, Seq.empty) must throwA[IllegalArgumentException]( "requirement failed: please, provide at least one user id") } "get ownerships for user" in new TwitterListClientSpecContext { val result: RatedData[TwitterLists] = when(listOwnerships("DanielaSfregola")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/ownerships.json" request.uri.rawQueryString === Some("count=20&cursor=-1&screen_name=DanielaSfregola") } .respondWithRated("/twitter/rest/lists/ownerships.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[TwitterLists]("/fixtures/rest/lists/ownerships.json") } "get ownerships for user by id" in new TwitterListClientSpecContext { val result: RatedData[TwitterLists] = when(listOwnershipsForUserId(2911461333L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/lists/ownerships.json" request.uri.rawQueryString === Some("count=20&cursor=-1&user_id=2911461333") } .respondWithRated("/twitter/rest/lists/ownerships.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[TwitterLists]("/fixtures/rest/lists/ownerships.json") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/media/TwitterMediaClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.media import akka.http.scaladsl.model._ import com.danielasfregola.twitter4s.entities.MediaDetails import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterMediaClientSpec extends ClientSpec { class TwitterMediaClientSpecContext extends RestClientSpecContext with TwitterMediaClient "Twitter Media Client" should { "upload a media" in new TwitterMediaClientSpecContext { val initMediaResponse = { val json = """{"media_id":925706675478151168,"media_id_string":"925706675478151168","expires_after_secs":86400}""" HttpResponse(StatusCodes.OK, entity = HttpEntity(MediaTypes.`application/json`, json)) } val imgPath = getClass.getResource("/imgs/twitter.png").getPath val result: MediaDetails = when(uploadMediaFromPath(imgPath)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://upload.twitter.com/1.1/media/upload.json" request.uri.rawQueryString === Some( "command=INIT&media_category=tweet_image&media_type=image%2Fpng&total_bytes=22689") } .respondWith(initMediaResponse) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://upload.twitter.com/1.1/media/upload.json" request.entity.contentType.mediaType.isMultipart === true } .respondWith("/fixtures/rest/media/img_media_details.json") .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://upload.twitter.com/1.1/media/upload.json" request.uri.rawQueryString === Some("command=FINALIZE&media_id=925706675478151168") } .respondWith("/fixtures/rest/media/img_media_details.json") .await result === loadJsonAs[MediaDetails]("/fixtures/rest/media/img_media_details.json") } "check the status of a media upload" in new TwitterMediaClientSpecContext { val result: MediaDetails = when(statusMedia(media_id = 710511363345354753L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://upload.twitter.com/1.1/media/upload.json" request.uri.rawQueryString === Some("command=STATUS&media_id=710511363345354753") } .respondWith("/twitter/rest/media/media_details.json") .await result === loadJsonAs[MediaDetails]("/fixtures/rest/media/media_details.json") } "upload a media description" in new TwitterMediaClientSpecContext { val result: Unit = when(createMediaDescription(media_id = 710511363345354753L, description = "A cat picture")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://upload.twitter.com/1.1/media/metadata/create.json" request.entity === HttpEntity(ContentTypes.`application/json`, """{"media_id":"710511363345354753","description":"A cat picture"}""") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/mutes/TwitterMuteClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.mutes import akka.http.scaladsl.model.HttpMethods import com.danielasfregola.twitter4s.entities.{RatedData, User, UserIds, Users} import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterMuteClientSpec extends ClientSpec { class TwitterMuteClientSpecContext extends RestClientSpecContext with TwitterMuteClient "Twitter Mute Client" should { "mute a user" in new TwitterMuteClientSpecContext { val result: User = when(muteUser("marcobonzanini")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/mutes/users/create.json" request.uri.rawQueryString === Some("screen_name=marcobonzanini") } .respondWith("/twitter/rest/mutes/user.json") .await result === loadJsonAs[User]("/fixtures/rest/mutes/user.json") } "mute a user by id" in new TwitterMuteClientSpecContext { val result: User = when(muteUserId(19018614L)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/mutes/users/create.json" request.uri.rawQueryString === Some("user_id=19018614") } .respondWith("/twitter/rest/mutes/user.json") .await result === loadJsonAs[User]("/fixtures/rest/mutes/user.json") } "unmute a user" in new TwitterMuteClientSpecContext { val result: User = when(unmuteUser("marcobonzanini")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/mutes/users/destroy.json" request.uri.rawQueryString === Some("screen_name=marcobonzanini") } .respondWith("/twitter/rest/mutes/user.json") .await result === loadJsonAs[User]("/fixtures/rest/mutes/user.json") } "unmute a user by id" in new TwitterMuteClientSpecContext { val result: User = when(unmuteUserId(19018614L)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/mutes/users/destroy.json" request.uri.rawQueryString === Some("user_id=19018614") } .respondWith("/twitter/rest/mutes/user.json") .await result === loadJsonAs[User]("/fixtures/rest/mutes/user.json") } "get muted users ids" in new TwitterMuteClientSpecContext { val result: RatedData[UserIds] = when(mutedUserIds()) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/mutes/users/ids.json" request.uri.rawQueryString === Some("cursor=-1") } .respondWithRated("/twitter/rest/mutes/muted_users_ids.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[UserIds]("/fixtures/rest/mutes/muted_users_ids.json") } "get muted users" in new TwitterMuteClientSpecContext { val result: RatedData[Users] = when(mutedUsers()) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/mutes/users/list.json" request.uri.rawQueryString === Some("cursor=-1&include_entities=true&skip_status=false") } .respondWithRated("/twitter/rest/mutes/users.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Users]("/fixtures/rest/mutes/users.json") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/savedsearches/TwitterSavedSearchClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.savedsearches import akka.http.scaladsl.model.HttpMethods import com.danielasfregola.twitter4s.entities.{RatedData, SavedSearch} import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterSavedSearchClientSpec extends ClientSpec { class TwitterSavedSearchClientSpecContext extends RestClientSpecContext with TwitterSavedSearchClient "Twitter Saved Search Client" should { "get saved searches" in new TwitterSavedSearchClientSpecContext { val result: RatedData[Seq[SavedSearch]] = when(savedSearches) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/saved_searches/list.json" } .respondWithRated("/twitter/rest/savedsearches/list.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[SavedSearch]]("/fixtures/rest/savedsearches/list.json") } "save a search" in new TwitterSavedSearchClientSpecContext { val result: SavedSearch = when(saveSearch("#scala")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/saved_searches/create.json" request.uri.rawQueryString === Some("query=%23scala") } .respondWith("/twitter/rest/savedsearches/create.json") .await result === loadJsonAs[SavedSearch]("/fixtures/rest/savedsearches/create.json") } "delete a saved search" in new TwitterSavedSearchClientSpecContext { val id = 9569704 val result: SavedSearch = when(deleteSavedSearch(id)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === s"https://api.twitter.com/1.1/saved_searches/destroy/$id.json" } .respondWith("/twitter/rest/savedsearches/destroy.json") .await result === loadJsonAs[SavedSearch]("/fixtures/rest/savedsearches/destroy.json") } "get saved search by id" in new TwitterSavedSearchClientSpecContext { val id = 9569704 val result: RatedData[SavedSearch] = when(savedSearch(id)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/1.1/saved_searches/show/$id.json" } .respondWithRated("/twitter/rest/savedsearches/show.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[SavedSearch]("/fixtures/rest/savedsearches/show.json") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/search/TwitterSearchClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.search import akka.http.scaladsl.model.HttpMethods import com.danielasfregola.twitter4s.entities.{RatedData, StatusSearch} import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterSearchClientSpec extends ClientSpec { class TwitterSearchClientSpecContext extends RestClientSpecContext with TwitterSearchClient "Twitter Search Client" should { "search for tweets" in new TwitterSearchClientSpecContext { val result: RatedData[StatusSearch] = when(searchTweet("#scala")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/search/tweets.json" request.uri.rawQueryString === Some("count=15&include_entities=true&q=%23scala&result_type=mixed") } .respondWithRated("/twitter/rest/search/tweets.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[StatusSearch]("/fixtures/rest/search/tweets.json") } "search for tweets with url in it" in new TwitterSearchClientSpecContext { val result: RatedData[StatusSearch] = when(searchTweet("https://github.com/ReactiveX/RxJava")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/search/tweets.json" request.uri.rawQueryString === Some("count=15&include_entities=true" + "&q=https%3A%2F%2Fgithub.com%2FReactiveX%2FRxJava&result_type=mixed") } .respondWithRated("/twitter/rest/search/tweets.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[StatusSearch]("/fixtures/rest/search/tweets.json") } "search for tweets with * in it" in new TwitterSearchClientSpecContext { val result: RatedData[StatusSearch] = when(searchTweet("Test*Test")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/search/tweets.json" request.uri.rawQueryString === Some("count=15&include_entities=true" + "&q=Test%2ATest&result_type=mixed") } .respondWithRated("/twitter/rest/search/tweets.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[StatusSearch]("/fixtures/rest/search/tweets.json") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/statuses/TwitterStatusClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.statuses import akka.http.scaladsl.model.{HttpEntity, HttpMethods} import com.danielasfregola.twitter4s.entities._ import com.danielasfregola.twitter4s.entities.enums.TweetMode import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterStatusClientSpec extends ClientSpec { class TwitterStatusClientSpecContext extends RestClientSpecContext with TwitterStatusClient "Twitter Status Client" should { "perform a mentions timeline request" in new TwitterStatusClientSpecContext { val result: RatedData[Seq[Tweet]] = when(mentionsTimeline(count = 10)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/statuses/mentions_timeline.json" request.uri.rawQueryString === Some( "contributor_details=false&count=10&include_entities=true&trim_user=false") } .respondWithRated("/twitter/rest/statuses/mentions_timeline.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[Tweet]]("/fixtures/rest/statuses/mentions_timeline.json") } "perform a user timeline request by screen name" in new TwitterStatusClientSpecContext { val result: RatedData[Seq[Tweet]] = when(userTimelineForUser(screen_name = "DanielaSfregola", count = 10)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/statuses/user_timeline.json" request.uri.rawQueryString === Some( "contributor_details=false&count=10&exclude_replies=false&include_rts=true&screen_name=DanielaSfregola&trim_user=false") } .respondWithRated("/twitter/rest/statuses/user_timeline.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[Tweet]]("/fixtures/rest/statuses/user_timeline.json") } "perform a user timeline request by user id" in new TwitterStatusClientSpecContext { val result: RatedData[Seq[Tweet]] = when(userTimelineForUserId(user_id = 123456L, count = 10)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/statuses/user_timeline.json" request.uri.rawQueryString === Some( "contributor_details=false&count=10&exclude_replies=false&include_rts=true&trim_user=false&user_id=123456") } .respondWithRated("/twitter/rest/statuses/user_timeline.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[Tweet]]("/fixtures/rest/statuses/user_timeline.json") } "perform a home timeline request" in new TwitterStatusClientSpecContext { val result: RatedData[Seq[Tweet]] = when(homeTimeline(count = 10)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/statuses/home_timeline.json" request.uri.rawQueryString === Some( "contributor_details=false&count=10&exclude_replies=false&include_entities=true&trim_user=false") } .respondWithRated("/twitter/rest/statuses/home_timeline.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[Tweet]]("/fixtures/rest/statuses/home_timeline.json") } "perform a retweets of me request" in new TwitterStatusClientSpecContext { val result: RatedData[Seq[Tweet]] = when(retweetsOfMe(count = 10)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/statuses/retweets_of_me.json" request.uri.rawQueryString === Some( "contributor_details=false&count=10&exclude_replies=false&include_entities=true&trim_user=false") } .respondWithRated("/twitter/rest/statuses/retweets_of_me.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[Tweet]]("/fixtures/rest/statuses/retweets_of_me.json") } "perform a retweets request" in new TwitterStatusClientSpecContext { val id = 648866645855879168L val result: RatedData[Seq[Tweet]] = when(retweets(id, count = 10)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/1.1/statuses/retweets/$id.json" request.uri.rawQueryString === Some("count=10&trim_user=false") } .respondWithRated("/twitter/rest/statuses/retweets.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[Tweet]]("/fixtures/rest/statuses/retweets.json") } "perform a show tweet request" in new TwitterStatusClientSpecContext { val result: RatedData[Tweet] = when(getTweet(648866645855879168L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/statuses/show.json" request.uri.rawQueryString === Some( "id=648866645855879168&include_entities=true&include_my_retweet=false&trim_user=false") } .respondWithRated("/twitter/rest/statuses/show.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Tweet]("/fixtures/rest/statuses/show.json") } "send a status update" in new TwitterStatusClientSpecContext { val result: Tweet = when(createTweet("This is a test")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/statuses/update.json" request.entity === HttpEntity( `application/x-www-form-urlencoded`, "display_coordinates=false&possibly_sensitive=false&status=This%20is%20a%20test&trim_user=false") } .respondWith("/twitter/rest/statuses/update.json") .await result === loadJsonAs[Tweet]("/fixtures/rest/statuses/update.json") } "send a status update with some media" in new TwitterStatusClientSpecContext { val result: Tweet = when(createTweet("This is a test", media_ids = Seq(1L, 2L))) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/statuses/update.json" request.entity === HttpEntity( `application/x-www-form-urlencoded`, "display_coordinates=false&media_ids=1%2C2&possibly_sensitive=false&status=This%20is%20a%20test&trim_user=false") } .respondWith("/twitter/rest/statuses/update.json") .await result === loadJsonAs[Tweet]("/fixtures/rest/statuses/update.json") } "send direct message as tweet" in new TwitterStatusClientSpecContext { val result: Tweet = when(createDirectMessageAsTweet("This is a test for a direct message", "DanielaSfregola")) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://api.twitter.com/1.1/statuses/update.json" request.entity === HttpEntity( `application/x-www-form-urlencoded`, "display_coordinates=false&possibly_sensitive=false&status=D%20DanielaSfregola%20This%20is%20a%20test%20for%20a%20direct%20message&trim_user=false" ) } .respondWith("/twitter/rest/statuses/direct_message.json") .await result === loadJsonAs[Tweet]("/fixtures/rest/statuses/direct_message.json") } "delete an existing tweet" in new TwitterStatusClientSpecContext { val id = 648866645855879168L val result: Tweet = when(deleteTweet(id)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === s"https://api.twitter.com/1.1/statuses/destroy/$id.json" request.uri.rawQueryString === Some("trim_user=false") } .respondWith("/twitter/rest/statuses/destroy.json") .await result === loadJsonAs[Tweet]("/fixtures/rest/statuses/destroy.json") } "retweet a tweet" in new TwitterStatusClientSpecContext { val id = 648866645855879168L val result: Tweet = when(retweet(id)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === s"https://api.twitter.com/1.1/statuses/retweet/$id.json" request.uri.rawQueryString === Some("trim_user=false") } .respondWith("/twitter/rest/statuses/retweet.json") .await result === loadJsonAs[Tweet]("/fixtures/rest/statuses/retweet.json") } "get a tweet by id in oembed format " in new TwitterStatusClientSpecContext { val result: RatedData[OEmbedTweet] = when(oembedTweetById(648866645855879168L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/statuses/oembed.json" request.uri.rawQueryString === Some( "align=none&hide_media=false&hide_thread=false&hide_tweet=false&id=648866645855879168&lang=en&omit_script=false") } .respondWithRated("/twitter/rest/statuses/oembed.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[OEmbedTweet]("/fixtures/rest/statuses/oembed.json") } "get a tweet by url in oembed format " in new TwitterStatusClientSpecContext { val url = s"https://twitter.com/Interior/status/648866645855879168" val result: RatedData[OEmbedTweet] = when(oembedTweetByUrl(url)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/statuses/oembed.json" request.uri.rawQueryString === Some( "align=none&hide_media=false&hide_thread=false&hide_tweet=false&lang=en&omit_script=false&url=https%3A%2F%2Ftwitter.com%2FInterior%2Fstatus%2F648866645855879168") } .respondWithRated("/twitter/rest/statuses/oembed.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[OEmbedTweet]("/fixtures/rest/statuses/oembed.json") } "get retweeters ids" in new TwitterStatusClientSpecContext { val result: RatedData[UserIds] = when(retweeterIds(327473909412814850L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/statuses/retweeters/ids.json" request.uri.rawQueryString === Some("count=100&cursor=-1&id=327473909412814850&stringify_ids=false") } .respondWithRated("/twitter/rest/statuses/retweeters_ids.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[UserIds]("/fixtures/rest/statuses/retweeters_ids.json") } "get retweeters ids stringified" in new TwitterStatusClientSpecContext { val result: RatedData[UserStringifiedIds] = when(retweeterStringifiedIds(327473909412814850L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/statuses/retweeters/ids.json" request.uri.rawQueryString === Some("count=100&cursor=-1&id=327473909412814850&stringify_ids=true") } .respondWithRated("/twitter/rest/statuses/retweeters_ids_stringified.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[UserStringifiedIds]("/fixtures/rest/statuses/retweeters_ids_stringified.json") } "perform a lookup" in new TwitterStatusClientSpecContext { val result: RatedData[Seq[Tweet]] = when(tweetLookup(327473909412814850L, 327473909412814851L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/statuses/lookup.json" request.uri.rawQueryString === Some( "id=327473909412814850%2C327473909412814851&include_entities=true&map=false&trim_user=false") } .respondWithRated("/twitter/rest/statuses/lookup.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[Tweet]]("/fixtures/rest/statuses/lookup.json") } "perform a lookup extended" in new TwitterStatusClientSpecContext { val result: RatedData[Seq[Tweet]] = when( tweetLookup(Seq(963141440695078912L, 956111334898270209L), tweet_mode = TweetMode.Extended) ).expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/statuses/lookup.json" request.uri.queryString() === Some( "id=963141440695078912,956111334898270209&include_entities=true&map=false&trim_user=false&tweet_mode=extended") } .respondWithRated("/twitter/rest/statuses/lookup_extended.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[Tweet]]("/fixtures/rest/statuses/lookup_extended.json") } "reject request if no ids have been provided for the lookup" in new TwitterStatusClientSpecContext { tweetLookup() must throwA[IllegalArgumentException]( "requirement failed: please, provide at least one status id to lookup") } "perform a mapped lookup" in new TwitterStatusClientSpecContext { val result: RatedData[LookupMapped] = when(tweetLookupMapped(327473909412814850L, 327473909412814851L)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/statuses/lookup.json" request.uri.rawQueryString === Some( "id=327473909412814850%2C327473909412814851&include_entities=true&map=true&trim_user=false") } .respondWithRated("/twitter/rest/statuses/lookup_mapped.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[LookupMapped]("/fixtures/rest/statuses/lookup_mapped.json") } "perform a mapped lookup extended" in new TwitterStatusClientSpecContext { val result: RatedData[LookupMapped] = when( tweetLookupMapped(Seq(963141440695078912L, 956111334898270209L), tweet_mode = TweetMode.Extended) ).expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/statuses/lookup.json" request.uri.queryString() === Some( "id=963141440695078912,956111334898270209&include_entities=true&map=true&trim_user=false&tweet_mode=extended") } .respondWithRated("/twitter/rest/statuses/lookup_mapped_extended.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[LookupMapped]("/fixtures/rest/statuses/lookup_mapped_extended.json") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/statuses/parameters/HomeTimelineParametersSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.statuses.parameters import com.danielasfregola.twitter4s.entities.enums.TweetMode import org.specs2.mutable.SpecificationLike class HomeTimelineParametersSpec extends SpecificationLike { "HomeTimelineParameters" should { "correctly represents each field as the respective request parameter" in { HomeTimelineParameters( count = 20, since_id = Some(100L), max_id = Some(200L), trim_user = true, exclude_replies = true, contributor_details = true, include_entities = true, tweet_mode = TweetMode.Extended ).toString shouldEqual """contributor_details=true& |count=20& |exclude_replies=true& |include_entities=true& |max_id=200& |since_id=100& |trim_user=true& |tweet_mode=extended""".stripMargin.replace("\n", "") } "doesn't provide request parameter if the respective field is empty (tweet_mode is classic)" in { HomeTimelineParameters( count = 20, since_id = None, max_id = None, trim_user = false, exclude_replies = false, contributor_details = false, include_entities = false, tweet_mode = TweetMode.Classic ).toString shouldEqual """contributor_details=false& |count=20& |exclude_replies=false& |include_entities=false& |trim_user=false""".stripMargin.replace("\n", "") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/statuses/parameters/LookupParametersSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.statuses.parameters import com.danielasfregola.twitter4s.entities.enums.TweetMode import org.specs2.mutable.SpecificationLike class LookupParametersSpec extends SpecificationLike { "LookupParameters" should { "correctly represents each field as the respective request parameter" in { LookupParameters( id = "some_id", include_entities = true, trim_user = true, map = true, tweet_mode = TweetMode.Extended ).toString shouldEqual """id=some_id& |include_entities=true& |map=true& |trim_user=true& |tweet_mode=extended""".stripMargin.replace("\n", "") } "doesn't provide request parameter if the respective field is empty (tweet_mode is classic)" in { LookupParameters( id = "some_id", include_entities = false, trim_user = false, map = false, tweet_mode = TweetMode.Classic ).toString shouldEqual """id=some_id& |include_entities=false& |map=false& |trim_user=false""".stripMargin.replace("\n", "") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/statuses/parameters/MentionsParametersSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.statuses.parameters import com.danielasfregola.twitter4s.entities.enums.TweetMode import org.specs2.mutable.SpecificationLike class MentionsParametersSpec extends SpecificationLike { "MentionsParameters" should { "correctly represents each field as the respective request parameter" in { MentionsParameters( count = 20, since_id = Some(100L), max_id = Some(200L), trim_user = true, contributor_details = true, include_entities = true, tweet_mode = TweetMode.Extended ).toString shouldEqual """contributor_details=true& |count=20& |include_entities=true& |max_id=200& |since_id=100& |trim_user=true& |tweet_mode=extended""".stripMargin.replace("\n", "") } "doesn't provide request parameter if the respective field is empty (tweet_mode is classic)" in { MentionsParameters( count = 20, since_id = None, max_id = None, trim_user = false, contributor_details = false, include_entities = false, tweet_mode = TweetMode.Classic ).toString shouldEqual """contributor_details=false& |count=20& |include_entities=false& |trim_user=false""".stripMargin.replace("\n", "") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/statuses/parameters/OEmbedParametersSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.statuses.parameters import com.danielasfregola.twitter4s.entities.enums.{Alignment, Language, WidgetType} import org.specs2.mutable.SpecificationLike class OEmbedParametersSpec extends SpecificationLike { "OEmbedParameters" should { "correctly represents each field as the respective request parameter" in { OEmbedParameters( id = Some(1L), url = Some("https://example.com/"), maxwidth = Some(30), hide_media = true, hide_thread = true, omit_script = true, align = Alignment.Left, related = Vector("a", "b"), lang = Language.Japanese, widget_type = Some(WidgetType.Video), hide_tweet = true ).toString shouldEqual """align=left& |hide_media=true& |hide_thread=true& |hide_tweet=true& |id=1& |lang=ja& |maxwidth=30& |omit_script=true& |related=a%2Cb& |url=https%3A%2F%2Fexample.com%2F& |widget_type=video""".stripMargin.replace("\n", "") } "doesn't provide request parameter if the respective field is empty (tweet_mode is classic)" in { OEmbedParameters( id = None, url = None, maxwidth = None, hide_media = false, hide_thread = false, omit_script = false, align = Alignment.Left, related = Nil, lang = Language.Japanese, widget_type = None, hide_tweet = false ).toString shouldEqual """align=left& |hide_media=false& |hide_thread=false& |hide_tweet=false& |lang=ja& |omit_script=false""".stripMargin.replace("\n", "") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/statuses/parameters/PostParametersSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.statuses.parameters import com.danielasfregola.twitter4s.entities.enums.TweetMode import org.specs2.mutable.SpecificationLike class PostParametersSpec extends SpecificationLike { "PostParameters" should { "correctly represents each field as the respective request parameter" in { PostParameters( trim_user = true, tweet_mode = TweetMode.Extended ).toString shouldEqual "trim_user=true&tweet_mode=extended" } "doesn't provide request parameter if the respective field is empty (tweet_mode is classic)" in { PostParameters( trim_user = false, tweet_mode = TweetMode.Classic ).toString shouldEqual "trim_user=false" } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/statuses/parameters/RetweetersIdsParametersSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.statuses.parameters import org.specs2.mutable.SpecificationLike class RetweetersIdsParametersSpec extends SpecificationLike { "RetweetersIdsParameters" should { "correctly represents each field as the respective request parameter" in { RetweetersIdsParameters( id = 20L, count = 20, cursor = 20L, stringify_ids = true ).toString shouldEqual "count=20&cursor=20&id=20&stringify_ids=true" } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/statuses/parameters/RetweetsOfMeParametersSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.statuses.parameters import com.danielasfregola.twitter4s.entities.enums.TweetMode import org.specs2.mutable.SpecificationLike class RetweetsOfMeParametersSpec extends SpecificationLike { "RetweetsOfMeParameters" should { "correctly represents each field as the respective request parameter" in { RetweetsOfMeParameters( count = 20, since_id = Some(100L), max_id = Some(200L), trim_user = true, exclude_replies = true, contributor_details = true, include_entities = true, tweet_mode = TweetMode.Extended ).toString shouldEqual """contributor_details=true& |count=20& |exclude_replies=true& |include_entities=true& |max_id=200& |since_id=100& |trim_user=true& |tweet_mode=extended""".stripMargin.replace("\n", "") } "doesn't provide request parameter if the respective field is empty (tweet_mode is classic)" in { RetweetsOfMeParameters( count = 20, since_id = None, max_id = None, trim_user = false, exclude_replies = false, contributor_details = false, include_entities = false, tweet_mode = TweetMode.Classic ).toString shouldEqual """contributor_details=false& |count=20& |exclude_replies=false& |include_entities=false& |trim_user=false""".stripMargin.replace("\n", "") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/statuses/parameters/RetweetsParametersSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.statuses.parameters import com.danielasfregola.twitter4s.entities.enums.TweetMode import org.specs2.mutable.SpecificationLike class RetweetsParametersSpec extends SpecificationLike { "RetweetsParameters" should { "correctly represents each field as the respective request parameter" in { RetweetsParameters( count = 20, trim_user = true, tweet_mode = TweetMode.Extended ).toString shouldEqual "count=20&trim_user=true&tweet_mode=extended" } "doesn't provide request parameter if the respective field is empty (tweet_mode is classic)" in { RetweetsParameters( count = 20, trim_user = false, tweet_mode = TweetMode.Classic ).toString shouldEqual "count=20&trim_user=false" } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/statuses/parameters/ShowParametersSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.statuses.parameters import com.danielasfregola.twitter4s.entities.enums.TweetMode import org.specs2.mutable.SpecificationLike class ShowParametersSpec extends SpecificationLike { "ShowParameters" should { "correctly represents each field as the respective request parameter" in { ShowParameters( id = 10L, trim_user = true, include_my_retweet = true, include_entities = true, tweet_mode = TweetMode.Extended ).toString shouldEqual """id=10& |include_entities=true& |include_my_retweet=true& |trim_user=true& |tweet_mode=extended""".stripMargin.replace("\n", "") } "doesn't provide request parameter if the respective field is empty (tweet_mode is classic)" in { ShowParameters( id = 10L, trim_user = false, include_my_retweet = false, include_entities = false, tweet_mode = TweetMode.Classic ).toString shouldEqual """id=10& |include_entities=false& |include_my_retweet=false& |trim_user=false""".stripMargin.replace("\n", "") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/statuses/parameters/UserTimelineParametersSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.statuses.parameters import com.danielasfregola.twitter4s.entities.enums.TweetMode import org.specs2.mutable.SpecificationLike class UserTimelineParametersSpec extends SpecificationLike { "UserTimelineParameters" should { "correctly represents each field as the respective request parameter" in { UserTimelineParameters( user_id = Some(10L), screen_name = Some("NaMe"), count = 20, since_id = Some(100L), max_id = Some(200L), trim_user = true, exclude_replies = true, contributor_details = true, include_rts = true, tweet_mode = TweetMode.Extended ).toString shouldEqual """contributor_details=true& |count=20& |exclude_replies=true& |include_rts=true& |max_id=200& |screen_name=NaMe& |since_id=100& |trim_user=true& |tweet_mode=extended& |user_id=10""".stripMargin.replace("\n", "") } "doesn't provide request parameter if the respective field is empty (tweet_mode is classic)" in { UserTimelineParameters( user_id = None, screen_name = None, count = 20, since_id = None, max_id = None, trim_user = false, exclude_replies = false, contributor_details = false, include_rts = false, tweet_mode = TweetMode.Classic ).toString shouldEqual """contributor_details=false& |count=20& |exclude_replies=false& |include_rts=false& |trim_user=false""".stripMargin.replace("\n", "") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/suggestions/TwitterSuggestionClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.suggestions import akka.http.scaladsl.model.HttpMethods import com.danielasfregola.twitter4s.entities.{Category, RatedData, Suggestions, User} import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterSuggestionClientSpec extends ClientSpec { class TwitterSuggestionClientSpecContext extends RestClientSpecContext with TwitterSuggestionClient "Twitter Suggestion Client" should { "get suggestions of a category" in new TwitterSuggestionClientSpecContext { val slug = "twitter" val result: RatedData[Suggestions] = when(suggestions(slug)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/1.1/users/suggestions/$slug.json" request.uri.rawQueryString === Some("lang=en") } .respondWithRated("/twitter/rest/suggestions/slug_suggestions.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Suggestions]("/fixtures/rest/suggestions/slug_suggestions.json") } "get suggested categories" in new TwitterSuggestionClientSpecContext { val result: RatedData[Seq[Category]] = when(suggestedCategories()) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/users/suggestions.json" request.uri.rawQueryString === Some("lang=en") } .respondWithRated("/twitter/rest/suggestions/categories.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[Category]]("/fixtures/rest/suggestions/categories.json") } "get suggestions members" in new TwitterSuggestionClientSpecContext { val slug = "twitter" val result: RatedData[Seq[User]] = when(suggestionsMembers(slug)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/1.1/users/suggestions/$slug/members.json" } .respondWithRated("/twitter/rest/suggestions/suggestions_members.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[User]]("/fixtures/rest/suggestions/suggestions_members.json") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/trends/TwitterTrendClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.trends import akka.http.scaladsl.model.HttpMethods import com.danielasfregola.twitter4s.entities.{Location, LocationTrends, RatedData} import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterTrendClientSpec extends ClientSpec { class TwitterTrendClientSpecContext extends RestClientSpecContext with TwitterTrendClient "Twitter Trend Client" should { "get global trends" in new TwitterTrendClientSpecContext { val result: RatedData[Seq[LocationTrends]] = when(globalTrends()) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/trends/place.json" request.uri.rawQueryString === Some("id=1") } .respondWithRated("/twitter/rest/trends/trends.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[LocationTrends]]("/fixtures/rest/trends/trends.json") } "get trends for a location" in new TwitterTrendClientSpecContext { val result: RatedData[Seq[LocationTrends]] = when(trends(1)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/trends/place.json" request.uri.rawQueryString === Some("id=1") } .respondWithRated("/twitter/rest/trends/trends.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[LocationTrends]]("/fixtures/rest/trends/trends.json") } "get trends for a location without hashtags" in new TwitterTrendClientSpecContext { val result: RatedData[Seq[LocationTrends]] = when(trends(1, true)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/trends/place.json" request.uri.rawQueryString === Some("exclude=hashtags&id=1") } .respondWithRated("/twitter/rest/trends/trends.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[LocationTrends]]("/fixtures/rest/trends/trends.json") } "get locations with available trends" in new TwitterTrendClientSpecContext { val result: RatedData[Seq[Location]] = when(locationTrends) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/trends/available.json" } .respondWithRated("/twitter/rest/trends/available_locations.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[Location]]("/fixtures/rest/trends/available_locations.json") } "get closest location trends" in new TwitterTrendClientSpecContext { val result: RatedData[Seq[Location]] = when(closestLocationTrends(37.781157, -122.400612831116)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/trends/closest.json" } .respondWithRated("/twitter/rest/trends/closest_locations.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[Location]]("/fixtures/rest/trends/closest_locations.json") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/users/TwitterUserClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.users import akka.http.scaladsl.model.HttpMethods import com.danielasfregola.twitter4s.entities.{Banners, RatedData, User} import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterUserClientSpec extends ClientSpec { class TwitterUserClientSpecContext extends RestClientSpecContext with TwitterUserClient "Twitter User Client" should { "retrieve users" in new TwitterUserClientSpecContext { val result: RatedData[Seq[User]] = when(users("marcobonzanini", "odersky")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/users/lookup.json" request.uri.rawQueryString === Some("include_entities=true&screen_name=marcobonzanini%2Codersky") } .respondWithRated("/twitter/rest/users/users.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[User]]("/fixtures/rest/users/users.json") } "reject request if no screen names have been provided to retreive users" in new TwitterUserClientSpecContext { users() must throwA[IllegalArgumentException]("requirement failed: please, provide at least one screen name") } "retrieve users by user ids" in new TwitterUserClientSpecContext { val result: RatedData[Seq[User]] = when(usersByIds(19018614, 17765013)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/users/lookup.json" request.uri.rawQueryString === Some("include_entities=true&user_id=19018614%2C17765013") } .respondWithRated("/twitter/rest/users/users.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[User]]("/fixtures/rest/users/users.json") } "reject request if no ids have been provided to retreive users by ids" in new TwitterUserClientSpecContext { usersByIds() must throwA[IllegalArgumentException]("requirement failed: please, provide at least one user id") } "retrieve user" in new TwitterUserClientSpecContext { val result: RatedData[User] = when(user("marcobonzanini")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/users/show.json" request.uri.rawQueryString === Some("include_entities=true&screen_name=marcobonzanini") } .respondWithRated("/twitter/rest/users/user.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[User]("/fixtures/rest/users/user.json") } "retrieve user by id" in new TwitterUserClientSpecContext { val result: RatedData[User] = when(userById(19018614)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/users/show.json" request.uri.rawQueryString === Some("include_entities=true&user_id=19018614") } .respondWithRated("/twitter/rest/users/user.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[User]("/fixtures/rest/users/user.json") } "get the profile banners of a user" in new TwitterUserClientSpecContext { val result: RatedData[Banners] = when(profileBannersForUser("DanielaSfregola")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/users/profile_banner.json" request.uri.rawQueryString === Some("screen_name=DanielaSfregola") } .respondWithRated("/twitter/rest/users/profile_banner.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Banners]("/fixtures/rest/users/profile_banner.json") } "get the profile banners of a user by id" in new TwitterUserClientSpecContext { val result: RatedData[Banners] = when(profileBannersForUserId(19018614)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/users/profile_banner.json" request.uri.rawQueryString === Some("user_id=19018614") } .respondWithRated("/twitter/rest/users/profile_banner.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Banners]("/fixtures/rest/users/profile_banner.json") } "search for a user" in new TwitterUserClientSpecContext { val result: RatedData[Seq[User]] = when(searchForUser("DanielaSfregola")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/1.1/users/search.json" request.uri.rawQueryString === Some("count=20&include_entities=true&page=-1&q=DanielaSfregola") } .respondWithRated("/twitter/rest/users/users.json") .await result.rate_limit === rateLimit result.data === loadJsonAs[Seq[User]]("/fixtures/rest/users/users.json") } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/v2/tweets/TwitterSearchTweetsClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.v2.tweets import akka.http.scaladsl.model.HttpMethods import com.danielasfregola.twitter4s.helpers.ClientSpec import com.danielasfregola.twitter4s.http.clients.rest.v2.utils.V2SpecQueryHelper import java.time.Instant class TwitterSearchTweetsClientSpec extends ClientSpec { class TwitterSearchTweetsClientSpecContext extends RestClientSpecContext with TwitterSearchTweetsClient "Twitter Search Tweets Client" should { "request search recent results" in new TwitterSearchTweetsClientSpecContext { when( searchRecent( query = "-is:retweet has:geo (from:NWSNHC OR from:NHC_Atlantic OR from:NWSHouston OR from:NWSSanAntonio OR from:USGS_TexasRain OR from:USGS_TexasFlood OR from:JeffLindner1)", startTime = Some(Instant.ofEpochMilli(1630263600000L)), // Aug 29, 2021 07:00 endTime = Some(Instant.ofEpochMilli(1630350000000L)), // Aug 30, 2021 06:00 maxResults = Some(20), nextToken = Some("789"), sinceId = Some("1212"), untilId = Some("3434") )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/tweets/search/recent" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( "query" -> "-is%3Aretweet%20has%3Ageo%20%28from%3ANWSNHC%20OR%20from%3ANHC_Atlantic%20OR%20from%3ANWSHouston%20OR%20from%3ANWSSanAntonio%20OR%20from%3AUSGS_TexasRain%20OR%20from%3AUSGS_TexasFlood%20OR%20from%3AJeffLindner1%29", "start_time" -> "2021-08-29T19%3A00%3A00Z", "end_time" -> "2021-08-30T19%3A00%3A00Z", "max_results" -> "20", "next_token" -> "789", "since_id" -> "1212", "until_id" -> "3434" ) } .respondWithOk .await } "request search recent results with expansions" in new TwitterSearchTweetsClientSpecContext { when( searchRecent( query = "mountains", expansions = V2SpecQueryHelper.allTweetExpansions )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/tweets/search/recent" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( "query" -> "mountains", V2SpecQueryHelper.buildTweetExpansionsQueryKeyValue(V2SpecQueryHelper.allTweetExpansions) ) } .respondWithOk .await } "request search recent results with media fields" in new TwitterSearchTweetsClientSpecContext { when( searchRecent( query = "mountains", mediaFields = V2SpecQueryHelper.allMediaFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/tweets/search/recent" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( "query" -> "mountains", V2SpecQueryHelper.buildMediaFieldsQueryKeyValue(V2SpecQueryHelper.allMediaFields) ) } .respondWithOk .await } "request search recent results with tweet fields" in new TwitterSearchTweetsClientSpecContext { when( searchRecent( query = "mountains", tweetFields = V2SpecQueryHelper.allTweetFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/tweets/search/recent" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( "query" -> "mountains", V2SpecQueryHelper.buildTweetFieldsQueryKeyValue(V2SpecQueryHelper.allTweetFields) ) } .respondWithOk .await } "request search recent results with user fields" in new TwitterSearchTweetsClientSpecContext { when( searchRecent( query = "mountains", userFields = V2SpecQueryHelper.allUserFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/tweets/search/recent" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( "query" -> "mountains", V2SpecQueryHelper.buildUserFieldsQueryKeyValue(V2SpecQueryHelper.allUserFields) ) } .respondWithOk .await } "request search all results" in new TwitterSearchTweetsClientSpecContext { when( searchAll( query = "-is:retweet has:geo (from:NWSNHC OR from:NHC_Atlantic OR from:NWSHouston OR from:NWSSanAntonio OR from:USGS_TexasRain OR from:USGS_TexasFlood OR from:JeffLindner1)", startTime = Some(Instant.ofEpochMilli(1630263600000L)), // Aug 29, 2021 07:00 endTime = Some(Instant.ofEpochMilli(1630350000000L)), // Aug 30, 2021 06:00 maxResults = Some(20), nextToken = Some("789"), sinceId = Some("1212"), untilId = Some("3434") )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/tweets/search/all" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( "query" -> "-is%3Aretweet%20has%3Ageo%20%28from%3ANWSNHC%20OR%20from%3ANHC_Atlantic%20OR%20from%3ANWSHouston%20OR%20from%3ANWSSanAntonio%20OR%20from%3AUSGS_TexasRain%20OR%20from%3AUSGS_TexasFlood%20OR%20from%3AJeffLindner1%29", "start_time" -> "2021-08-29T19%3A00%3A00Z", "end_time" -> "2021-08-30T19%3A00%3A00Z", "max_results" -> "20", "next_token" -> "789", "since_id" -> "1212", "until_id" -> "3434" ) } .respondWithOk .await } "request search all results with expansions" in new TwitterSearchTweetsClientSpecContext { when( searchAll( query = "mountains", expansions = V2SpecQueryHelper.allTweetExpansions )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/tweets/search/all" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( "query" -> "mountains", V2SpecQueryHelper.buildTweetExpansionsQueryKeyValue(V2SpecQueryHelper.allTweetExpansions) ) } .respondWithOk .await } "request search all results with media fields" in new TwitterSearchTweetsClientSpecContext { when( searchAll( query = "mountains", mediaFields = V2SpecQueryHelper.allMediaFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/tweets/search/all" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( "query" -> "mountains", V2SpecQueryHelper.buildMediaFieldsQueryKeyValue(V2SpecQueryHelper.allMediaFields) ) } .respondWithOk .await } "request search all results with tweet fields" in new TwitterSearchTweetsClientSpecContext { when( searchAll( query = "mountains", tweetFields = V2SpecQueryHelper.allTweetFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/tweets/search/all" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( "query" -> "mountains", V2SpecQueryHelper.buildTweetFieldsQueryKeyValue(V2SpecQueryHelper.allTweetFields) ) } .respondWithOk .await } "request search all results with user fields" in new TwitterSearchTweetsClientSpecContext { when( searchAll( query = "mountains", userFields = V2SpecQueryHelper.allUserFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/tweets/search/all" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( "query" -> "mountains", V2SpecQueryHelper.buildUserFieldsQueryKeyValue(V2SpecQueryHelper.allUserFields) ) } .respondWithOk .await } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/v2/tweets/TwitterTimelinesClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.v2.tweets import akka.http.scaladsl.model.HttpMethods import com.danielasfregola.twitter4s.entities.v2.enums.rest.TimelineExclude import com.danielasfregola.twitter4s.entities.v2.enums.rest.TimelineExclude.TimelineExclude import com.danielasfregola.twitter4s.helpers.ClientSpec import com.danielasfregola.twitter4s.http.clients.rest.v2.utils.V2SpecQueryHelper class TwitterTimelinesClientSpec extends ClientSpec { class TwitterTimelinesClientSpecContext extends RestClientSpecContext with TwitterTimelinesClient "Twitter Tweet Lookup Client" should { "request timelines" in new TwitterTimelinesClientSpecContext { val userId = "123" when(lookupTimeline(userId)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/users/$userId/tweets" request.uri.rawQueryString === None } .respondWithOk .await } "request timelines with expansions" in new TwitterTimelinesClientSpecContext { val userId = "123" when( lookupTimeline( userId = userId, expansions = V2SpecQueryHelper.allTweetExpansions )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/users/$userId/tweets" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildTweetExpansionsQueryKeyValue(V2SpecQueryHelper.allTweetExpansions) ) } .respondWithOk .await } "request timelines with exclude" in new TwitterTimelinesClientSpecContext { val userId = "123" val exclusions: Seq[TimelineExclude] = Seq( TimelineExclude.Replies, TimelineExclude.Retweets ) when( lookupTimeline( userId = userId, exclude = exclusions )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/users/$userId/tweets" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( "exclude" -> "replies%2Cretweets" ) } .respondWithOk .await } "request timelines with tweet fields" in new TwitterTimelinesClientSpecContext { val userId = "123" when( lookupTimeline( userId = userId, tweetFields = V2SpecQueryHelper.allTweetFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/users/$userId/tweets" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildTweetFieldsQueryKeyValue(V2SpecQueryHelper.allTweetFields) ) } .respondWithOk .await } "request timelines with user fields" in new TwitterTimelinesClientSpecContext { val userId = "123" when( lookupTimeline( userId = userId, userFields = V2SpecQueryHelper.allUserFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/users/$userId/tweets" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildUserFieldsQueryKeyValue(V2SpecQueryHelper.allUserFields) ) } .respondWithOk .await } "request timelines with media fields" in new TwitterTimelinesClientSpecContext { val userId = "123" when( lookupTimeline( userId = userId, mediaFields = V2SpecQueryHelper.allMediaFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/users/$userId/tweets" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildMediaFieldsQueryKeyValue(V2SpecQueryHelper.allMediaFields) ) } .respondWithOk .await } "request mentions" in new TwitterTimelinesClientSpecContext { val userId = "123" when(lookupMentions(userId)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/users/$userId/mentions" request.uri.rawQueryString === None } .respondWithOk .await } "request mentions with expansions" in new TwitterTimelinesClientSpecContext { val userId = "123" when( lookupMentions( userId = userId, expansions = V2SpecQueryHelper.allTweetExpansions )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/users/$userId/mentions" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildTweetExpansionsQueryKeyValue(V2SpecQueryHelper.allTweetExpansions) ) } .respondWithOk .await } "request mentions with tweet fields" in new TwitterTimelinesClientSpecContext { val userId = "123" when( lookupMentions( userId = userId, tweetFields = V2SpecQueryHelper.allTweetFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/users/$userId/mentions" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildTweetFieldsQueryKeyValue(V2SpecQueryHelper.allTweetFields) ) } .respondWithOk .await } "request mentions with user fields" in new TwitterTimelinesClientSpecContext { val userId = "123" when( lookupMentions( userId = userId, userFields = V2SpecQueryHelper.allUserFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/users/$userId/mentions" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildUserFieldsQueryKeyValue(V2SpecQueryHelper.allUserFields) ) } .respondWithOk .await } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/v2/tweets/TwitterTweetLookupClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.v2.tweets import akka.http.scaladsl.model.HttpMethods import com.danielasfregola.twitter4s.helpers.ClientSpec import com.danielasfregola.twitter4s.http.clients.rest.v2.utils.V2SpecQueryHelper class TwitterTweetLookupClientSpec extends ClientSpec { class TwitterTweetLookupClientSpecContext extends RestClientSpecContext with TwitterTweetLookupClient "Twitter Tweet Lookup Client" should { "request tweets" in new TwitterTweetLookupClientSpecContext { val tweetIds = Seq("123", "456") when(lookupTweets(tweetIds)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/2/tweets" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildIdsQueryKeyValue(tweetIds) ) } .respondWithOk .await } "request tweets with expansions" in new TwitterTweetLookupClientSpecContext { val tweetIds = Seq("123", "456") when( lookupTweets( ids = tweetIds, expansions = V2SpecQueryHelper.allTweetExpansions )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/2/tweets" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildTweetExpansionsQueryKeyValue(V2SpecQueryHelper.allTweetExpansions), V2SpecQueryHelper.buildIdsQueryKeyValue(tweetIds) ) } .respondWithOk .await } "request tweets with tweet fields" in new TwitterTweetLookupClientSpecContext { val tweetIds = Seq("123", "456") when( lookupTweets( ids = tweetIds, tweetFields = V2SpecQueryHelper.allTweetFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/2/tweets" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildIdsQueryKeyValue(tweetIds), V2SpecQueryHelper.buildTweetFieldsQueryKeyValue(V2SpecQueryHelper.allTweetFields) ) } .respondWithOk .await } "request tweets with user fields" in new TwitterTweetLookupClientSpecContext { val tweetIds = Seq("123", "456") when( lookupTweets( ids = tweetIds, userFields = V2SpecQueryHelper.allUserFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/2/tweets" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildIdsQueryKeyValue(tweetIds), V2SpecQueryHelper.buildUserFieldsQueryKeyValue(V2SpecQueryHelper.allUserFields) ) } .respondWithOk .await } "request tweets with media fields" in new TwitterTweetLookupClientSpecContext { val tweetIds = Seq("123", "456") when( lookupTweets( ids = tweetIds, mediaFields = V2SpecQueryHelper.allMediaFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/2/tweets" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildIdsQueryKeyValue(tweetIds), V2SpecQueryHelper.buildMediaFieldsQueryKeyValue(V2SpecQueryHelper.allMediaFields) ) } .respondWithOk .await } "request tweet" in new TwitterTweetLookupClientSpecContext { when(lookupTweet("123")) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/2/tweets/123" request.uri.rawQueryString === None } .respondWithOk .await } "request tweet with expansions" in new TwitterTweetLookupClientSpecContext { val tweetId = "123" when( lookupTweet( id = tweetId, expansions = V2SpecQueryHelper.allTweetExpansions )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/tweets/$tweetId" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildTweetExpansionsQueryKeyValue(V2SpecQueryHelper.allTweetExpansions) ) } .respondWithOk .await } "request tweet with tweet fields" in new TwitterTweetLookupClientSpecContext { val tweetId = "123" when( lookupTweet( id = tweetId, tweetFields = V2SpecQueryHelper.allTweetFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/tweets/$tweetId" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildTweetFieldsQueryKeyValue(V2SpecQueryHelper.allTweetFields) ) } .respondWithOk .await } "request tweet with user fields" in new TwitterTweetLookupClientSpecContext { val tweetId = "123" when( lookupTweet( id = tweetId, userFields = V2SpecQueryHelper.allUserFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/tweets/$tweetId" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildUserFieldsQueryKeyValue(V2SpecQueryHelper.allUserFields) ) } .respondWithOk .await } "request tweet with media fields" in new TwitterTweetLookupClientSpecContext { val tweetId = "123" when( lookupTweet( id = tweetId, mediaFields = V2SpecQueryHelper.allMediaFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/tweets/$tweetId" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildMediaFieldsQueryKeyValue(V2SpecQueryHelper.allMediaFields) ) } .respondWithOk .await } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/v2/tweets/deserialization/TweetsDeserializationSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.v2.tweets.deserialization import com.danielasfregola.twitter4s.entities.RatedData import com.danielasfregola.twitter4s.entities.v2.responses.{TweetResponse, TweetsResponse} import com.danielasfregola.twitter4s.helpers.ClientSpec import com.danielasfregola.twitter4s.http.clients.rest.v2.tweets.TwitterTweetLookupClient import com.danielasfregola.twitter4s.http.clients.rest.v2.tweets.deserialization.fixtures.{ TweetResponseFixture, TweetsResponseFixture } class TweetsDeserializationSpec extends ClientSpec { class TwitterTweetLookupClientSpecContext extends RestClientSpecContext with TwitterTweetLookupClient "Twitter Clients" should { "deserialize TweetResponse" in new TwitterTweetLookupClientSpecContext { val result: RatedData[TweetResponse] = when(lookupTweet("123")) .expectRequest(_ => {}) .respondWithRated("/twitter/rest/v2/tweets/tweet.json") .await result.rate_limit === rateLimit result.data === TweetResponseFixture.fixture } "deserialize TweetsResponse" in new TwitterTweetLookupClientSpecContext { val result: RatedData[TweetsResponse] = when(lookupTweets(Seq("123"))) .expectRequest(_ => {}) .respondWithRated("/twitter/rest/v2/tweets/tweets.json") .await result.rate_limit === rateLimit result.data === TweetsResponseFixture.fixture } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/v2/tweets/deserialization/fixtures/TweetResponseFixture.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.v2.tweets.deserialization.fixtures import com.danielasfregola.twitter4s.entities.v2.enums._ import com.danielasfregola.twitter4s.entities.v2.responses.TweetResponse import com.danielasfregola.twitter4s.entities.v2._ import java.time.Instant object TweetResponseFixture { val fixture: TweetResponse = TweetResponse( data = Some( Tweet( id = "2310484964373377688", text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", attachments = Some( TweetAttachments( media_keys = Seq( "13_9995568729608410852", "14_0381608460867506993", "7_1422932273641500672", "3_1422208929984139264" ), poll_ids = Seq( "0419198663175162881" ) )), author_id = Some("6338724728067829004"), context_annotations = Some(Seq( TweetContextAnnotation( domain = TweetDomain( id = "10", name = "Person", description = Some("Vestibulum pellentesque sed justo ac lacinia") ), entity = TweetEntity( id = "5233852574321016658", name = "Phasellus Eu", description = Some("Phasellus Eu") ) ), TweetContextAnnotation( domain = TweetDomain( id = "54", name = "Musician", description = Some("Nullam imperdiet lectus metus") ), entity = TweetEntity( id = "6836362243680041612", name = "Phasellus Eu", description = Some("Phasellus Eu") ) ) )), conversation_id = Some("0471114572504780656"), created_at = Some(Instant.parse("2020-05-15T16:03:42.000Z")), entities = Some(TweetEntities( annotations = Seq( TweetEntitiesAnnotation( start = 144, end = 150, probability = 0.626f, `type` = "Product", normalized_text = "Twitter" ) ), cashtags = Seq( TweetEntitiesCashtag( start = 41, end = 44, tag = "GE" ) ), urls = Seq( TweetEntitiesURL( start = 257, end = 280, url = "https://t.co/sodales", expanded_url = "https://www.google.com/sodales", display_url = "example.google.com/sodales", unwound_url = Some("https://www.google.com/sodales") ), ), mentions = Seq( TweetEntitiesMention( start = 105, end = 121, username = Some("SuspendisseAtNunc"), id = Some("2894469526322928935") ), TweetEntitiesMention( start = 125, end = 138, username = Some("SuspendisseAtNuncPosuere"), id = Some("6279687081065223918") ) ), hashtags = Seq( TweetEntitiesHashtag( start = 47, end = 60, tag = "SuspendisseAtNunc" ), TweetEntitiesHashtag( start = 171, end = 194, tag = "SuspendisseNunc" ) ), )), geo = Some( TweetGeo( coordinates = Some( TweetCoordinates( `type` = CoordinatesType.Point, coordinates = (40.74118764, -73.9998279) )), place_id = Some("0fc2bbe1f995b733") )), in_reply_to_user_id = Some("1600750904601052113"), lang = Some("en"), non_public_metrics = Some( TweetNonPublicMetrics( user_profile_clicks = 0, impression_count = 29, url_link_clicks = Some(12) )), organic_metrics = Some( TweetOrganicMetrics( retweet_count = 0, url_link_clicks = Some(12), reply_count = 0, like_count = 1, user_profile_clicks = 0, impression_count = 29 )), possibly_sensitive = Some(true), promoted_metrics = Some( TweetPromotedMetrics( impression_count = 29, url_link_clicks = Some(12), user_profile_clicks = 0, retweet_count = 0, reply_count = 0, like_count = 1 )), public_metrics = Some( TweetPublicMetrics( retweet_count = 0, reply_count = 0, like_count = 1, quote_count = 0 )), referenced_tweets = Some( Seq( TweetReferencedTweet( `type` = ReferencedTweetType.Retweeted, id = "4653693971459419590" ) )), reply_settings = Some(TweetReplySetting.Everyone), source = Some("Twitter for iPhone"), withheld = None )), includes = Some( TweetIncludes( tweets = Seq(Tweet( id = "6304480225832455363", text = "Donec feugiat elit tellus, a ultrices elit sodales facilisis.", attachments = None, author_id = None, context_annotations = None, conversation_id = None, created_at = None, entities = None, geo = None, in_reply_to_user_id = None, lang = None, non_public_metrics = None, organic_metrics = None, possibly_sensitive = None, promoted_metrics = None, public_metrics = None, referenced_tweets = None, reply_settings = None, source = None, withheld = None )), users = Seq( User( id = "3955854555026519618", name = "AliquamOrciEros", username = "aliquamorcieros", created_at = None, `protected` = None, withheld = None, location = None, url = None, description = None, verified = None, entities = None, profile_image_url = None, public_metrics = None, pinned_tweet_id = None ), User( id = "6747736441958634428", name = "Suspendisse At Nunc", username = "suspendisseatnunc", created_at = None, `protected` = None, withheld = None, location = None, url = None, description = None, verified = None, entities = None, profile_image_url = None, public_metrics = None, pinned_tweet_id = None ) ), media = Seq( Media( media_key = "7_8340593532515834174", `type` = MediaType.Photo, duration_ms = None, height = Some(1280), non_public_metrics = None, organic_metrics = None, preview_image_url = None, promoted_metrics = None, public_metrics = None, url = None, width = None ), Media( media_key = "7_1422932273641500672", `type` = MediaType.Video, duration_ms = Some(70500), height = Some(450), non_public_metrics = Some( MediaNonPublicMetrics( playback_0_count = 1561, playback_100_count = 116, playback_25_count = 559, playback_50_count = 305, playback_75_count = 183 )), organic_metrics = Some( MediaOrganicMetrics( playback_0_count = 1561, playback_100_count = 116, playback_25_count = 559, playback_50_count = 305, playback_75_count = 183, view_count = 629 )), preview_image_url = Some("https://pbs.twimg.com/ext_tw_video_thumb/1422932273641500672/pu/img/kjOa5XKoU_UViWar.jpg"), promoted_metrics = Some( MediaPromotedMetrics( playback_0_count = 259, playback_100_count = 15, playback_25_count = 113, playback_50_count = 57, playback_75_count = 25, view_count = 124 )), public_metrics = Some( MediaPublicMetrics( view_count = 1162 )), url = None, width = Some(720) ), Media( media_key = "3_1422208929984139264", `type` = MediaType.AnimatedGIF, duration_ms = None, height = Some(720), non_public_metrics = None, organic_metrics = None, preview_image_url = None, promoted_metrics = None, public_metrics = None, url = Some("https://pbs.twimg.com/media/E7yzfJQX0AAw-u8.jpg"), width = Some(1280) ), ), places = Seq( Place( full_name = "Seattle", id = "123", contained_within = Seq("987"), country = None, country_code = None, geo = Some( GeoJSON( """{"type":"Feature","geometry":{"type":"Point","coordinates":[47.6062,-122.3321]},"properties":{"name":"Seattle"}}""" )), name = None, place_type = None ), Place( full_name = "London, the capital and largest city of England and the United Kingdom", id = "456", contained_within = Seq.empty[String], country = Some("England"), country_code = Some("44"), geo = None, name = Some("London"), place_type = Some("city") ) ), polls = Seq( Poll( id = "123", options = Seq( PollOption( position = 1, label = "Option A", votes = 795 ), PollOption( position = 2, label = "Option B", votes = 800 ), ), duration_minutes = Some(1440), end_datetime = None, voting_status = Some("closed") ), Poll( id = "123", options = Seq.empty[PollOption], duration_minutes = None, end_datetime = Some(Instant.parse("2019-11-28T20:26:41.000Z")), voting_status = None ) ) )), errors = Seq( Error( detail = "Some generic error", field = Some("archaeology"), parameter = Some("bones"), resource_id = Some("123"), resource_type = Some("tibula"), section = None, title = "One strange error", `type` = None, value = Some("123") ), Error( detail = "Some other generic error", field = None, parameter = Some("login"), resource_id = Some("123"), resource_type = Some("unknown"), section = Some("zero"), title = "Another strange error", `type` = Some("hidden"), value = None ) ) ) } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/v2/tweets/deserialization/fixtures/TweetsResponseFixture.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.v2.tweets.deserialization.fixtures import com.danielasfregola.twitter4s.entities.v2.enums._ import com.danielasfregola.twitter4s.entities.v2.responses.TweetsResponse import com.danielasfregola.twitter4s.entities.v2._ import java.time.Instant object TweetsResponseFixture { val fixture: TweetsResponse = TweetsResponse( data = Seq( Tweet( id = "2310484964373377688", text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.", attachments = Some( TweetAttachments( media_keys = Seq( "13_9995568729608410852", "14_0381608460867506993", "7_1422932273641500672", "3_1422208929984139264" ), poll_ids = Seq( "0419198663175162881" ) )), author_id = Some("6338724728067829004"), context_annotations = Some(Seq( TweetContextAnnotation( domain = TweetDomain( id = "10", name = "Person", description = Some("Vestibulum pellentesque sed justo ac lacinia") ), entity = TweetEntity( id = "5233852574321016658", name = "Phasellus Eu", description = Some("Phasellus Eu") ) ), TweetContextAnnotation( domain = TweetDomain( id = "54", name = "Musician", description = Some("Nullam imperdiet lectus metus") ), entity = TweetEntity( id = "6836362243680041612", name = "Phasellus Eu", description = Some("Phasellus Eu") ) ) )), conversation_id = Some("0471114572504780656"), created_at = Some(Instant.parse("2020-05-15T16:03:42.000Z")), entities = Some(TweetEntities( annotations = Seq( TweetEntitiesAnnotation( start = 144, end = 150, probability = 0.626f, `type` = "Product", normalized_text = "Twitter" ) ), cashtags = Seq( TweetEntitiesCashtag( start = 41, end = 44, tag = "GE" ) ), urls = Seq( TweetEntitiesURL( start = 257, end = 280, url = "https://t.co/sodales", expanded_url = "https://www.google.com/sodales", display_url = "example.google.com/sodales", unwound_url = Some("https://www.google.com/sodales") ), ), mentions = Seq( TweetEntitiesMention( start = 105, end = 121, username = Some("SuspendisseAtNunc"), id = Some("2894469526322928935") ), TweetEntitiesMention( start = 125, end = 138, username = Some("SuspendisseAtNuncPosuere"), id = Some("6279687081065223918") ) ), hashtags = Seq( TweetEntitiesHashtag( start = 47, end = 60, tag = "SuspendisseAtNunc" ), TweetEntitiesHashtag( start = 171, end = 194, tag = "SuspendisseNunc" ) ), )), geo = Some( TweetGeo( coordinates = Some( TweetCoordinates( `type` = CoordinatesType.Point, coordinates = (40.74118764, -73.9998279) )), place_id = Some("0fc2bbe1f995b733") )), in_reply_to_user_id = Some("1600750904601052113"), lang = Some("en"), non_public_metrics = Some( TweetNonPublicMetrics( user_profile_clicks = 0, impression_count = 29, url_link_clicks = Some(12) )), organic_metrics = Some( TweetOrganicMetrics( retweet_count = 0, url_link_clicks = Some(12), reply_count = 0, like_count = 1, user_profile_clicks = 0, impression_count = 29 )), possibly_sensitive = Some(true), promoted_metrics = Some( TweetPromotedMetrics( impression_count = 29, url_link_clicks = Some(12), user_profile_clicks = 0, retweet_count = 0, reply_count = 0, like_count = 1 )), public_metrics = Some( TweetPublicMetrics( retweet_count = 0, reply_count = 0, like_count = 1, quote_count = 0 )), referenced_tweets = Some( Seq( TweetReferencedTweet( `type` = ReferencedTweetType.Retweeted, id = "4653693971459419590" ) )), reply_settings = Some(TweetReplySetting.Everyone), source = Some("Twitter for iPhone"), withheld = None )), includes = Some( TweetIncludes( tweets = Seq(Tweet( id = "6304480225832455363", text = "Donec feugiat elit tellus, a ultrices elit sodales facilisis.", attachments = None, author_id = None, context_annotations = None, conversation_id = None, created_at = None, entities = None, geo = None, in_reply_to_user_id = None, lang = None, non_public_metrics = None, organic_metrics = None, possibly_sensitive = None, promoted_metrics = None, public_metrics = None, referenced_tweets = None, reply_settings = None, source = None, withheld = None )), users = Seq( User( id = "3955854555026519618", name = "AliquamOrciEros", username = "aliquamorcieros", created_at = None, `protected` = None, withheld = None, location = None, url = None, description = None, verified = None, entities = None, profile_image_url = None, public_metrics = None, pinned_tweet_id = None ), User( id = "6747736441958634428", name = "Suspendisse At Nunc", username = "suspendisseatnunc", created_at = None, `protected` = None, withheld = None, location = None, url = None, description = None, verified = None, entities = None, profile_image_url = None, public_metrics = None, pinned_tweet_id = None ) ), media = Seq( Media( media_key = "7_8340593532515834174", `type` = MediaType.Photo, duration_ms = None, height = Some(1280), non_public_metrics = None, organic_metrics = None, preview_image_url = None, promoted_metrics = None, public_metrics = None, url = None, width = None ), Media( media_key = "7_1422932273641500672", `type` = MediaType.Video, duration_ms = Some(70500), height = Some(450), non_public_metrics = Some( MediaNonPublicMetrics( playback_0_count = 1561, playback_100_count = 116, playback_25_count = 559, playback_50_count = 305, playback_75_count = 183 )), organic_metrics = Some( MediaOrganicMetrics( playback_0_count = 1561, playback_100_count = 116, playback_25_count = 559, playback_50_count = 305, playback_75_count = 183, view_count = 629 )), preview_image_url = Some("https://pbs.twimg.com/ext_tw_video_thumb/1422932273641500672/pu/img/kjOa5XKoU_UViWar.jpg"), promoted_metrics = Some( MediaPromotedMetrics( playback_0_count = 259, playback_100_count = 15, playback_25_count = 113, playback_50_count = 57, playback_75_count = 25, view_count = 124 )), public_metrics = Some( MediaPublicMetrics( view_count = 1162 )), url = None, width = Some(720) ), Media( media_key = "3_1422208929984139264", `type` = MediaType.AnimatedGIF, duration_ms = None, height = Some(720), non_public_metrics = None, organic_metrics = None, preview_image_url = None, promoted_metrics = None, public_metrics = None, url = Some("https://pbs.twimg.com/media/E7yzfJQX0AAw-u8.jpg"), width = Some(1280) ) ), places = Seq( Place( full_name = "Seattle", id = "123", contained_within = Seq("987"), country = None, country_code = None, geo = Some( GeoJSON( """{"type":"Feature","geometry":{"type":"Point","coordinates":[47.6062,-122.3321]},"properties":{"name":"Seattle"}}""" )), name = None, place_type = None ), Place( full_name = "London, the capital and largest city of England and the United Kingdom", id = "456", contained_within = Seq.empty[String], country = Some("England"), country_code = Some("44"), geo = None, name = Some("London"), place_type = Some("city") ) ), polls = Seq( Poll( id = "123", options = Seq( PollOption( position = 1, label = "Option A", votes = 795 ), PollOption( position = 2, label = "Option B", votes = 800 ), ), duration_minutes = Some(1440), end_datetime = None, voting_status = Some("closed") ), Poll( id = "123", options = Seq.empty[PollOption], duration_minutes = None, end_datetime = Some(Instant.parse("2019-11-28T20:26:41.000Z")), voting_status = None ) ) )), meta = Some( Meta( oldest_id = Some("1356759580211109999"), newest_id = Some("1410697282811569999"), result_count = 7, next_token = Some("123"), previous_token = None )), errors = Seq( Error( detail = "Some generic error", field = Some("archaeology"), parameter = Some("bones"), resource_id = Some("123"), resource_type = Some("tibula"), section = None, title = "One strange error", `type` = None, value = Some("123") ), Error( detail = "Some other generic error", field = None, parameter = Some("login"), resource_id = Some("123"), resource_type = Some("unknown"), section = Some("zero"), title = "Another strange error", `type` = Some("hidden"), value = None ) ) ) } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/v2/users/TwitterUserLookupClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.v2.users import akka.http.scaladsl.model.HttpMethods import com.danielasfregola.twitter4s.helpers.ClientSpec import com.danielasfregola.twitter4s.http.clients.rest.v2.utils.V2SpecQueryHelper class TwitterUserLookupClientSpec extends ClientSpec { class TwitterUserLookupClientSpecContext extends RestClientSpecContext with TwitterUserLookupClient "Twitter User Lookup Client" should { "request users" in new TwitterUserLookupClientSpecContext { val userIds = Seq("123", "456") when(lookupUsers(userIds)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/2/users" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildIdsQueryKeyValue(userIds)) } .respondWithOk .await } "request users with expansions" in new TwitterUserLookupClientSpecContext { val userIds = Seq("123", "456") when( lookupUsers( ids = userIds, expansions = V2SpecQueryHelper.allUserExpansions )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/2/users" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildUserExpansionsQueryKeyValue(V2SpecQueryHelper.allUserExpansions), V2SpecQueryHelper.buildIdsQueryKeyValue(userIds) ) } .respondWithOk .await } "request users with user fields" in new TwitterUserLookupClientSpecContext { val userIds = Seq("123", "456") when( lookupUsers( ids = userIds, userFields = V2SpecQueryHelper.allUserFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/2/users" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildIdsQueryKeyValue(userIds), V2SpecQueryHelper.buildUserFieldsQueryKeyValue(V2SpecQueryHelper.allUserFields) ) } .respondWithOk .await } "request users with tweet fields" in new TwitterUserLookupClientSpecContext { val userIds = Seq("123", "456") when( lookupUsers( ids = userIds, tweetFields = V2SpecQueryHelper.allTweetFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/2/users" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildIdsQueryKeyValue(userIds), V2SpecQueryHelper.buildTweetFieldsQueryKeyValue(V2SpecQueryHelper.allTweetFields) ) } .respondWithOk .await } "request user" in new TwitterUserLookupClientSpecContext { val userId = "123" when(lookupUser(userId)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/users/$userId" request.uri.rawQueryString === None } .respondWithOk .await } "request user with expansions" in new TwitterUserLookupClientSpecContext { val userId = "123" when( lookupUser( id = userId, expansions = V2SpecQueryHelper.allUserExpansions )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/users/$userId" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildUserExpansionsQueryKeyValue(V2SpecQueryHelper.allUserExpansions) ) } .respondWithOk .await } "request user with user fields" in new TwitterUserLookupClientSpecContext { val userId = "123" when( lookupUser( id = userId, userFields = V2SpecQueryHelper.allUserFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/users/$userId" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildUserFieldsQueryKeyValue(V2SpecQueryHelper.allUserFields) ) } .respondWithOk .await } "request user with tweet fields" in new TwitterUserLookupClientSpecContext { val userId = "123" when( lookupUser( id = userId, tweetFields = V2SpecQueryHelper.allTweetFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/users/$userId" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildTweetFieldsQueryKeyValue(V2SpecQueryHelper.allTweetFields) ) } .respondWithOk .await } "request users by usernames" in new TwitterUserLookupClientSpecContext { val usernames = Seq("user1", "user2") when(lookupUsersByUsernames(usernames)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/2/users/by" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildUsernamesQueryKeyValue(usernames) ) } .respondWithOk .await } "request users by usernames with expansions" in new TwitterUserLookupClientSpecContext { val usernames = Seq("user1", "user2") when( lookupUsersByUsernames( usernames = usernames, expansions = V2SpecQueryHelper.allUserExpansions )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/2/users/by" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildUserExpansionsQueryKeyValue(V2SpecQueryHelper.allUserExpansions), V2SpecQueryHelper.buildUsernamesQueryKeyValue(usernames) ) } .respondWithOk .await } "request users by usernames with user fields" in new TwitterUserLookupClientSpecContext { val usernames = Seq("user1", "user2") when( lookupUsersByUsernames( usernames = usernames, userFields = V2SpecQueryHelper.allUserFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/2/users/by" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildUserFieldsQueryKeyValue(V2SpecQueryHelper.allUserFields), V2SpecQueryHelper.buildUsernamesQueryKeyValue(usernames) ) } .respondWithOk .await } "request users by usernames with tweet fields" in new TwitterUserLookupClientSpecContext { val usernames = Seq("user1", "user2") when( lookupUsersByUsernames( usernames = usernames, tweetFields = V2SpecQueryHelper.allTweetFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://api.twitter.com/2/users/by" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildTweetFieldsQueryKeyValue(V2SpecQueryHelper.allTweetFields), V2SpecQueryHelper.buildUsernamesQueryKeyValue(usernames) ) } .respondWithOk .await } "request user by username" in new TwitterUserLookupClientSpecContext { val username = "user1" when(lookupUserByUsername(username)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/users/by/username/$username" request.uri.rawQueryString === None } .respondWithOk .await } "request user with expansions" in new TwitterUserLookupClientSpecContext { val username = "user1" when( lookupUserByUsername( username = username, expansions = V2SpecQueryHelper.allUserExpansions )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/users/by/username/$username" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildUserExpansionsQueryKeyValue(V2SpecQueryHelper.allUserExpansions) ) } .respondWithOk .await } "request user by username with user fields" in new TwitterUserLookupClientSpecContext { val username = "user1" when( lookupUserByUsername( username = username, userFields = V2SpecQueryHelper.allUserFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/users/by/username/$username" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildUserFieldsQueryKeyValue(V2SpecQueryHelper.allUserFields) ) } .respondWithOk .await } "request user by username with tweet fields" in new TwitterUserLookupClientSpecContext { val username = "user1" when( lookupUserByUsername( username = username, tweetFields = V2SpecQueryHelper.allTweetFields )) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === s"https://api.twitter.com/2/users/by/username/$username" V2SpecQueryHelper.extractEncodedQueryKeyValuesPairs(request.uri.rawQueryString.get) === Map( V2SpecQueryHelper.buildTweetFieldsQueryKeyValue(V2SpecQueryHelper.allTweetFields) ) } .respondWithOk .await } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/v2/users/deserialization/UsersResponseDeserializationSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.v2.users.deserialization import com.danielasfregola.twitter4s.entities.RatedData import com.danielasfregola.twitter4s.entities.v2.responses.{UserResponse, UsersResponse} import com.danielasfregola.twitter4s.helpers.ClientSpec import com.danielasfregola.twitter4s.http.clients.rest.v2.users.TwitterUserLookupClient import com.danielasfregola.twitter4s.http.clients.rest.v2.users.deserialization.fixtures.{ UserResponseFixture, UsersResponseFixture } class UsersDeserializationSpec extends ClientSpec { class UsersDeserializationClientSpec extends RestClientSpecContext with TwitterUserLookupClient "Twitter Clients" should { "deserialize UserResponses" in new UsersDeserializationClientSpec { val result: RatedData[UserResponse] = when(lookupUser("123")) .expectRequest(_ => {}) .respondWithRated("/twitter/rest/v2/users/user.json") .await result.rate_limit === rateLimit result.data === UserResponseFixture.fixture } "deserialize UsersResponses" in new UsersDeserializationClientSpec { val result: RatedData[UsersResponse] = when(lookupUsers(Seq("123"))) .expectRequest(_ => {}) .respondWithRated("/twitter/rest/v2/users/users.json") .await result.rate_limit === rateLimit result.data === UsersResponseFixture.fixture } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/v2/users/deserialization/fixtures/UserResponseFixture.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.v2.users.deserialization.fixtures import com.danielasfregola.twitter4s.entities.v2.responses.UserResponse import com.danielasfregola.twitter4s.entities.v2._ import java.time.Instant object UserResponseFixture { val fixture: UserResponse = UserResponse( data = Some( User( id = "6338724728067829004", name = "Shippy the Squirrel", username = "shippy", created_at = Some(Instant.parse("2020-05-15T16:03:42.000Z")), `protected` = Some(false), location = Some("Seattle"), url = Some("https://www.google.com/sodales"), description = Some("Sed efficitur ultrices elit sed volutpat."), verified = Some(true), entities = Some(UserEntities( url = Some( UserURLContainer( urls = Seq( UserEntitiesURL( start = 257, end = 280, url = "https://t.co/sodales", expanded_url = "https://www.google.com/sodales", display_url = "example.google.com/sodales", ) ) )), description = Some(UserEntitiesDescription( urls = Seq( UserEntitiesURL( start = 257, end = 280, url = "https://t.co/sodales", expanded_url = "https://www.google.com/sodales", display_url = "example.google.com/sodales", ) ), mentions = Seq( UserEntitiesMention( start = 105, end = 121, username = "SuspendisseAtNunc" ), UserEntitiesMention( start = 125, end = 138, username = "SuspendisseAtNuncPosuere" ) ), hashtags = Seq( UserEntitiesHashtag( start = 47, end = 60, tag = "SuspendisseAtNunc" ), UserEntitiesHashtag( start = 171, end = 194, tag = "SuspendisseNunc" ) ), cashtags = Seq(UserEntitiesCashtag( start = 41, end = 44, tag = "GE" )) )) )), profile_image_url = Some("https://www.google.com/sodales.adri"), public_metrics = Some( UserPublicMetrics( followers_count = 501796, following_count = 306, tweet_count = 6655, listed_count = 1433 )), pinned_tweet_id = Some("2894469526322928935"), withheld = None )), includes = Some( UserIncludes( tweets = Seq(Tweet( id = "6304480225832455363", text = "Donec feugiat elit tellus, a ultrices elit sodales facilisis.", attachments = None, author_id = None, context_annotations = None, conversation_id = None, created_at = None, entities = None, geo = None, in_reply_to_user_id = None, lang = None, non_public_metrics = None, organic_metrics = None, possibly_sensitive = None, promoted_metrics = None, public_metrics = None, referenced_tweets = None, reply_settings = None, source = None, withheld = None )), users = Seq( User( id = "3955854555026519618", name = "AliquamOrciEros", username = "aliquamorcieros", created_at = None, `protected` = None, withheld = None, location = None, url = None, description = None, verified = None, entities = None, profile_image_url = None, public_metrics = None, pinned_tweet_id = None ), User( id = "6747736441958634428", name = "Suspendisse At Nunc", username = "suspendisseatnunc", created_at = None, `protected` = None, withheld = None, location = None, url = None, description = None, verified = None, entities = None, profile_image_url = None, public_metrics = None, pinned_tweet_id = None ) ) )), errors = Seq( Error( detail = "Some generic error", field = Some("archaeology"), parameter = Some("bones"), resource_id = Some("123"), resource_type = Some("tibula"), section = None, title = "One strange error", `type` = None, value = Some("123") ), Error( detail = "Some other generic error", field = None, parameter = Some("login"), resource_id = Some("123"), resource_type = Some("unknown"), section = Some("zero"), title = "Another strange error", `type` = Some("hidden"), value = None ) ) ) } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/v2/users/deserialization/fixtures/UsersResponseFixture.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.v2.users.deserialization.fixtures import com.danielasfregola.twitter4s.entities.v2.responses.UsersResponse import com.danielasfregola.twitter4s.entities.v2._ import java.time.Instant object UsersResponseFixture { val fixture: UsersResponse = UsersResponse( data = Seq( User( id = "6338724728067829004", name = "Shippy the Squirrel", username = "shippy", created_at = Some(Instant.parse("2020-05-15T16:03:42.000Z")), `protected` = Some(false), location = Some("Seattle"), url = Some("https://www.google.com/sodales"), description = Some("Sed efficitur ultrices elit sed volutpat."), verified = Some(true), entities = Some(UserEntities( url = Some( UserURLContainer( urls = Seq( UserEntitiesURL( start = 257, end = 280, url = "https://t.co/sodales", expanded_url = "https://www.google.com/sodales", display_url = "example.google.com/sodales", ) ) )), description = Some(UserEntitiesDescription( urls = Seq( UserEntitiesURL( start = 257, end = 280, url = "https://t.co/sodales", expanded_url = "https://www.google.com/sodales", display_url = "example.google.com/sodales", ) ), mentions = Seq( UserEntitiesMention( start = 105, end = 121, username = "SuspendisseAtNunc" ), UserEntitiesMention( start = 125, end = 138, username = "SuspendisseAtNuncPosuere" ) ), hashtags = Seq( UserEntitiesHashtag( start = 47, end = 60, tag = "SuspendisseAtNunc" ), UserEntitiesHashtag( start = 171, end = 194, tag = "SuspendisseNunc" ) ), cashtags = Seq(UserEntitiesCashtag( start = 41, end = 44, tag = "GE" )) )) )), profile_image_url = Some("https://www.google.com/sodales.adri"), public_metrics = Some( UserPublicMetrics( followers_count = 501796, following_count = 306, tweet_count = 6655, listed_count = 1433 )), pinned_tweet_id = Some("2894469526322928935"), withheld = None )), includes = Some( UserIncludes( tweets = Seq(Tweet( id = "6304480225832455363", text = "Donec feugiat elit tellus, a ultrices elit sodales facilisis.", attachments = None, author_id = None, context_annotations = None, conversation_id = None, created_at = None, entities = None, geo = None, in_reply_to_user_id = None, lang = None, non_public_metrics = None, organic_metrics = None, possibly_sensitive = None, promoted_metrics = None, public_metrics = None, referenced_tweets = None, reply_settings = None, source = None, withheld = None )), users = Seq( User( id = "3955854555026519618", name = "AliquamOrciEros", username = "aliquamorcieros", created_at = None, `protected` = None, withheld = None, location = None, url = None, description = None, verified = None, entities = None, profile_image_url = None, public_metrics = None, pinned_tweet_id = None ), User( id = "6747736441958634428", name = "Suspendisse At Nunc", username = "suspendisseatnunc", created_at = None, `protected` = None, withheld = None, location = None, url = None, description = None, verified = None, entities = None, profile_image_url = None, public_metrics = None, pinned_tweet_id = None ) ) )), errors = Seq( Error( detail = "Some generic error", field = Some("archaeology"), parameter = Some("bones"), resource_id = Some("123"), resource_type = Some("tibula"), section = None, title = "One strange error", `type` = None, value = Some("123") ), Error( detail = "Some other generic error", field = None, parameter = Some("login"), resource_id = Some("123"), resource_type = Some("unknown"), section = Some("zero"), title = "Another strange error", `type` = Some("hidden"), value = None ) ) ) } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/rest/v2/utils/V2SpecQueryHelper.scala ================================================ package com.danielasfregola.twitter4s.http.clients.rest.v2.utils import com.danielasfregola.twitter4s.entities.v2.enums.expansions.TweetExpansions import com.danielasfregola.twitter4s.entities.v2.enums.expansions.TweetExpansions.TweetExpansions import com.danielasfregola.twitter4s.entities.v2.enums.expansions.UserExpansions import com.danielasfregola.twitter4s.entities.v2.enums.expansions.UserExpansions.UserExpansions import com.danielasfregola.twitter4s.entities.v2.enums.fields.MediaFields.MediaFields import com.danielasfregola.twitter4s.entities.v2.enums.fields.TweetFields.TweetFields import com.danielasfregola.twitter4s.entities.v2.enums.fields.UserFields.UserFields import com.danielasfregola.twitter4s.entities.v2.enums.fields.{MediaFields, TweetFields, UserFields} import java.net.URLEncoder private[v2] object V2SpecQueryHelper { val allTweetExpansions: Seq[TweetExpansions] = Seq( TweetExpansions.AuthorId, TweetExpansions.`Entities.Mentions.Username`, TweetExpansions.InReplyToUser, TweetExpansions.`ReferencedTweets.Id`, TweetExpansions.`ReferencedTweets.Id.AuthorId` ) val allUserExpansions: Seq[UserExpansions] = Seq( UserExpansions.PinnedTweetId ) val allTweetFields: Seq[TweetFields] = Seq( TweetFields.Attachments, TweetFields.AuthorId, TweetFields.ContextAnnotations, TweetFields.ConversationId, TweetFields.CreatedAt, TweetFields.Entities, TweetFields.Geo, TweetFields.Id, TweetFields.InReplyToUserId, TweetFields.Lang, TweetFields.NonPublicMetrics, TweetFields.PublicMetrics, TweetFields.OrganicMetrics, TweetFields.PromotedMetrics, TweetFields.PossiblySensitive, TweetFields.ReferencedTweets, TweetFields.ReplySettings, TweetFields.Source, TweetFields.Text, TweetFields.Withheld ) val allUserFields: Seq[UserFields] = Seq( UserFields.CreatedAt, UserFields.Description, UserFields.Entities, UserFields.Id, UserFields.Location, UserFields.Name, UserFields.PinnedTweetId, UserFields.ProfileImageUrl, UserFields.Protected, UserFields.PublicMetrics, UserFields.Url, UserFields.Username, UserFields.Verified, UserFields.Withheld ) val allMediaFields: Seq[MediaFields] = Seq( MediaFields.DurationMs, MediaFields.Height, MediaFields.MediaKey, MediaFields.PreviewImageUrl, MediaFields.Type, MediaFields.Url, MediaFields.Width, MediaFields.PublicMetrics, MediaFields.NonPublicMetrics, MediaFields.OrganicMetrics, MediaFields.PromotedMetrics ) def extractEncodedQueryKeyValuesPairs(queryString: String): Map[String, String] = { queryString .split('&') .map(_.split("=") match { case Array(key, value) => key -> value case _ => throw new Exception("Unable to parse query string") }) .toMap } def buildIdsQueryKeyValue(ids: Seq[String]): (String, String) = "ids" -> encodeQueryParamValue(ids.mkString(",")) def buildUsernamesQueryKeyValue(usernames: Seq[String]): (String, String) = "usernames" -> encodeQueryParamKey(usernames.mkString(",")) def buildTweetExpansionsQueryKeyValue(expansions: Seq[TweetExpansions]): (String, String) = "expansions" -> encodeQueryParamValue(expansions.mkString(",")) def buildUserExpansionsQueryKeyValue(expansions: Seq[UserExpansions]): (String, String) = "expansions" -> encodeQueryParamValue(expansions.mkString(",")) def buildTweetFieldsQueryKeyValue(fields: Seq[TweetFields]): (String, String) = encodeQueryParamKey("tweet.fields") -> encodeQueryParamValue(fields.mkString(",")) def buildUserFieldsQueryKeyValue(fields: Seq[UserFields]): (String, String) = encodeQueryParamKey("user.fields") -> encodeQueryParamValue(fields.mkString(",")) def buildMediaFieldsQueryKeyValue(fields: Seq[MediaFields]): (String, String) = encodeQueryParamKey("media.fields") -> encodeQueryParamValue(fields.mkString(",")) private def encodeQueryParamKey(str: String): String = URLEncoder.encode(str, "UTF-8").replace(".", "%2E") private def encodeQueryParamValue(str: String): String = URLEncoder.encode(str, "UTF-8") } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/streaming/StreamingClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.streaming import akka.http.scaladsl.model.{HttpEntity, _} import akka.stream.scaladsl.Source import com.danielasfregola.twitter4s.entities.streaming._ import com.danielasfregola.twitter4s.entities.streaming.common._ import com.danielasfregola.twitter4s.entities.streaming.site._ import com.danielasfregola.twitter4s.entities.streaming.user._ import com.danielasfregola.twitter4s.entities.{DirectMessage, Tweet} import com.danielasfregola.twitter4s.helpers.{ClientSpec, TestActorSystem} import scala.io.Codec class StreamingClientSpec extends TestActorSystem with ClientSpec { abstract class ClientSpecContext extends StreamingClientSpecContext { import streamingClient._ implicit val exampleRequest: HttpRequest = Get("an-example-request", ContentTypes.`application/json`) def buildResponse(resourcePath: String): HttpResponse = { val contentType = ContentTypes.`application/json` val streamInput = getClass.getResourceAsStream(resourcePath) val data = scala.io.Source.fromInputStream(streamInput)(Codec.UTF8).getLines.filter(_.nonEmpty) val chunks = data.map(d => HttpEntity.ChunkStreamPart(s"$d\r\n")).toList HttpResponse(entity = HttpEntity.Chunked(contentType, Source(chunks))) } def redirectMessages: PartialFunction[StreamingMessage, Unit] = { case msg => transport.ref ! StreamingUpdate(msg) } def readStreamUpdatesAs[T <: StreamingMessage: Manifest](path: String): Seq[StreamingUpdate] = loadJsonAs[Seq[T]](path).map(StreamingUpdate) } "StreamingClient" should { "parse a stream of data and output the corresponding entities of type" in { "Tweet" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/common/tweets.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[Tweet]("/fixtures/streaming/common/tweets.json") transport.expectMsgAllOf(messages: _*) } "DirectMessage" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/user/direct_messages.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[DirectMessage]("/fixtures/streaming/user/direct_messages.json") transport.expectMsgAllOf(messages: _*) } "ControlMessage" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/site/control_messages.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[ControlMessage]("/fixtures/streaming/site/control_messages.json") transport.expectMsgAllOf(messages: _*) } "DisconnectMessage" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/common/disconnect_messages.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[DisconnectMessage]("/fixtures/streaming/common/disconnect_messages.json") transport.expectMsgAllOf(messages: _*) } "TweetEvent" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/user/events.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[TweetEvent]("/fixtures/streaming/user/events.json") transport.expectMsgAllOf(messages: _*) } "FriendsLists" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/user/friends_lists.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[FriendsLists]("/fixtures/streaming/user/friends_lists.json") transport.expectMsgAllOf(messages: _*) } "FriendsListsStringified" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/user/friends_lists_stringified.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[FriendsListsStringified]("/fixtures/streaming/user/friends_lists_stringified.json") transport.expectMsgAllOf(messages: _*) } "LimitNotice" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/common/limit_notices.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[LimitNotice]("/fixtures/streaming/common/limit_notices.json") transport.expectMsgAllOf(messages: _*) } "LocationDeletionNotice" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/common/location_deletion_notices.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[LocationDeletionNotice]("/fixtures/streaming/common/location_deletion_notices.json") transport.expectMsgAllOf(messages: _*) } "StatusDeletionNotice" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/common/status_deletion_notices.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[StatusDeletionNotice]("/fixtures/streaming/common/status_deletion_notices.json") transport.expectMsgAllOf(messages: _*) } "StatusWithheldNotice" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/common/status_withheld_notices.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[StatusWithheldNotice]("/fixtures/streaming/common/status_withheld_notices.json") transport.expectMsgAllOf(messages: _*) } "UserWithheldNotice" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/common/user_withheld_notices.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[UserWithheldNotice]("/fixtures/streaming/common/user_withheld_notices.json") transport.expectMsgAllOf(messages: _*) } "UserEnvelopTweet" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/site/user_envelop_tweet.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[UserEnvelopTweet]("/fixtures/streaming/site/user_envelop_tweet.json") transport.expectMsgAllOf(messages: _*) } "UserEnvelopFriendsLists" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/site/user_envelops_friends_list.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[UserEnvelopFriendsLists]("/fixtures/streaming/site/user_envelops_friends_list.json") transport.expectMsgAllOf(messages: _*) } "UserEnvelopFriendsListsStringified" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/site/user_envelops_friends_list_stringified.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[UserEnvelopFriendsListsStringified]( "/fixtures/streaming/site/user_envelops_friends_list_stringified.json") transport.expectMsgAllOf(messages: _*) } "UserEnvelopDirectMessage" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/site/user_envelop_direct_message.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[UserEnvelopDirectMessage]("/fixtures/streaming/site/user_envelop_direct_message.json") transport.expectMsgAllOf(messages: _*) } "UserEnvelopTwitterListEvent" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/site/user_envelop_twitter_list_event.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[UserEnvelopTwitterListEvent]( "/fixtures/streaming/site/user_envelop_twitter_list_event.json") transport.expectMsgAllOf(messages: _*) } "UserEnvelopTweetEvent" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/site/user_envelop_tweet_event.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[UserEnvelopTweetEvent]("/fixtures/streaming/site/user_envelop_tweet_event.json") transport.expectMsgAllOf(messages: _*) } "UserEnvelopSimpleEvent" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/site/user_envelop_simple_event.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[UserEnvelopSimpleEvent]("/fixtures/streaming/site/user_envelop_simple_event.json") transport.expectMsgAllOf(messages: _*) } "UserEnvelopWarningMessage" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/site/user_envelop_warning_message.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[UserEnvelopWarningMessage]("/fixtures/streaming/site/user_envelop_warning_message.json") transport.expectMsgAllOf(messages: _*) } "UserEnvelopTweetStringified" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/site/user_envelop_tweet_stringified.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[UserEnvelopTweetStringified]( "/fixtures/streaming/site/user_envelop_tweet_stringified.json") transport.expectMsgAllOf(messages: _*) } "UserEnvelopDirectMessageStringified" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/site/user_envelop_direct_message_stringified.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[UserEnvelopDirectMessageStringified]( "/fixtures/streaming/site/user_envelop_direct_message_stringified.json") transport.expectMsgAllOf(messages: _*) } "UserEnvelopTwitterListEventStringified" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/site/user_envelop_twitter_list_event_stringified.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[UserEnvelopTwitterListEventStringified]( "/fixtures/streaming/site/user_envelop_twitter_list_event_stringified.json") transport.expectMsgAllOf(messages: _*) } "UserEnvelopTweetEventStringified" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/site/user_envelop_tweet_event_stringified.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[UserEnvelopTweetEventStringified]( "/fixtures/streaming/site/user_envelop_tweet_event_stringified.json") transport.expectMsgAllOf(messages: _*) } "UserEnvelopSimpleEventStringified" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/site/user_envelop_simple_event_stringified.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[UserEnvelopSimpleEventStringified]( "/fixtures/streaming/site/user_envelop_simple_event_stringified.json") transport.expectMsgAllOf(messages: _*) } "UserEnvelopWarningMessageStringified" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/site/user_envelop_warning_message_stringified.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[UserEnvelopWarningMessageStringified]( "/fixtures/streaming/site/user_envelop_warning_message_stringified.json") transport.expectMsgAllOf(messages: _*) } "WarningMessage" in new ClientSpecContext { val response = buildResponse("/twitter/streaming/common/warning_messages.json") streamingClient.processBody(response, killSwitch)(redirectMessages) val messages = readStreamUpdatesAs[WarningMessage]("/fixtures/streaming/common/warning_messages.json") transport.expectMsgAllOf(messages: _*) } } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/streaming/sites/TwitterSiteClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.streaming.sites import akka.http.scaladsl.model.HttpMethods import com.danielasfregola.twitter4s.entities.enums.Language import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterSiteClientSpec extends ClientSpec { class TwitterSiteClientSpecContext extends StreamingClientSpecContext with TwitterSiteClient "Twitter Site Streaming Client" should { "start a filtered site stream" in new TwitterSiteClientSpecContext { val result: Unit = when(siteEvents(languages = Seq(Language.Italian))(dummyProcessing)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://sitestream.twitter.com/1.1/site.json" request.uri.rawQueryString === Some("language=it&stall_warnings=false&stringify_friend_ids=false&with=user") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/streaming/statuses/TwitterStatusClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.streaming.statuses import akka.http.scaladsl.model.{HttpEntity, HttpMethods} import com.danielasfregola.twitter4s.entities.enums.Language import com.danielasfregola.twitter4s.entities.{Coordinate, GeoBoundingBox} import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterStatusClientSpec extends ClientSpec { class TwitterStatusClientSpecContext extends StreamingClientSpecContext with TwitterStatusClient "Twitter Status Streaming Client" should { "start a filtered status stream" in new TwitterStatusClientSpecContext { val locationsFilter = Seq(GeoBoundingBox(Coordinate(-122.75, 36.8), Coordinate(-121.75, 37.8))) val result: Unit = when( filterStatuses(follow = Seq(1L, 2L, 3L), tracks = Seq("trending", "other"), locations = locationsFilter, languages = Seq(Language.Hungarian, Language.Bengali))(dummyProcessing)) .expectRequest { request => request.method === HttpMethods.POST request.uri.endpoint === "https://stream.twitter.com/1.1/statuses/filter.json" request.entity === HttpEntity( `application/x-www-form-urlencoded`, "filter_level=none&follow=1%2C2%2C3&language=hu%2Cbn&locations=-122.75%2C36.8%2C-121.75%2C37.8&stall_warnings=false&track=trending%2Cother" ) } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "start a sample status stream" in new TwitterStatusClientSpecContext { val result: Unit = when(sampleStatuses(languages = Seq(Language.English))(dummyProcessing)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://stream.twitter.com/1.1/statuses/sample.json" request.uri.rawQueryString === Some("filter_level=none&language=en&stall_warnings=false") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } "start a firehose status stream" in new TwitterStatusClientSpecContext { val result: Unit = when(firehoseStatuses(languages = Seq(Language.Hungarian, Language.Bengali))(dummyProcessing)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://stream.twitter.com/1.1/statuses/firehose.json" request.uri.rawQueryString === Some("language=hu%2Cbn&stall_warnings=false") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/clients/streaming/users/TwitterUserClientSpec.scala ================================================ package com.danielasfregola.twitter4s.http.clients.streaming.users import akka.http.scaladsl.model.HttpMethods import com.danielasfregola.twitter4s.entities.enums.Language import com.danielasfregola.twitter4s.entities.{Coordinate, GeoBoundingBox} import com.danielasfregola.twitter4s.helpers.ClientSpec class TwitterUserClientSpec extends ClientSpec { class TwitterUserClientSpecContext extends StreamingClientSpecContext with TwitterUserClient "Twitter User Streaming Client" should { "start a filtered user stream" in new TwitterUserClientSpecContext { val locationsFilter = Seq( GeoBoundingBox(Coordinate(-122.75, 36.8), Coordinate(-121.75, 37.8)), GeoBoundingBox(Coordinate(-74, 40), Coordinate(-73, 41)) ) val result: Unit = when( userEvents(tracks = Seq("trending"), languages = Seq(Language.English), locations = locationsFilter)( dummyProcessing)) .expectRequest { request => request.method === HttpMethods.GET request.uri.endpoint === "https://userstream.twitter.com/1.1/user.json" request.uri.rawQueryString === Some( "filter_level=none&language=en&locations=-122.75%2C36.8%2C-121.75%2C37.8%2C-74.0%2C40.0%2C-73.0%2C41.0&stall_warnings=false&stringify_friend_ids=false&track=trending&with=followings") } .respondWithOk .await result.isInstanceOf[Unit] should beTrue } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/marshalling/BodyEncoderSpec.scala ================================================ package com.danielasfregola.twitter4s.http.marshalling import org.specs2.mutable.Specification class BodyEncoderSpec extends Specification with BodyEncoder { "BodyEncoder" should { "encode a case class to a body with encoded params" in { case class TestData(e: Seq[(Double, Double)], d: Seq[Long], c: String, b: Option[Boolean], a: Int) val test = TestData(Seq((1, 2), (3, 4)), Seq(1, 2, 3), "Hello Ladies + Gentlemen, a signed OAuth request!", None, 5) val result = toBodyAsEncodedParams(test) result === "a=5&c=Hello%20Ladies%20%2B%20Gentlemen%2C%20a%20signed%20OAuth%20request%21&d=1%2C2%2C3&e=1.0%2C2.0%2C3.0%2C4.0" } "encode a case class to a body with params" in { case class TestData(e: Seq[(Double, Double)], d: Seq[Long], c: String, b: Option[Boolean], a: Int) val test = TestData(Seq((1, 2)), Seq(1, 2, 3), "Hello Ladies + Gentlemen, a signed OAuth request!", None, 5) val result = toBodyAsParams(test) result === "a=5&c=Hello Ladies + Gentlemen, a signed OAuth request!&d=1,2,3&e=1.0,2.0" } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/oauth/OAuth1ProviderSpec.scala ================================================ package com.danielasfregola.twitter4s.http package oauth import akka.http.scaladsl.model._ import akka.http.scaladsl.model.headers.RawHeader import com.danielasfregola.twitter4s.entities.{AccessToken, ConsumerToken} import com.danielasfregola.twitter4s.helpers.{AwaitableFuture, TestActorSystem, TestExecutionContext} import org.specs2.matcher.Scope import org.specs2.mutable.SpecificationLike class OAuth1ProviderSpec extends TestActorSystem with SpecificationLike with AwaitableFuture with TestExecutionContext { val consumerToken = ConsumerToken("xvz1evFS4wEEPTGEFPHBog", "kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw") val request = { val uri = Uri("https://api.twitter.com/1/statuses/update.json?include_entities=true") val contentType = ContentType(MediaTypes.`application/x-www-form-urlencoded`) val entity = HttpEntity("status=Hello+Ladies+%2B+Gentlemen%2C+a+signed+OAuth+request%21") HttpRequest(method = HttpMethods.POST, uri = uri, entity = entity.withContentType(contentType)) } def providerBuilder(accessToken: Option[AccessToken]) = new OAuth1Provider(consumerToken, accessToken) { override def currentSecondsFromEpoc = 1318622958 override def generateNonce = "kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg" } abstract class OAuthWithAccessToken extends Scope { implicit val accessToken = AccessToken("370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb", "LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE") val provider = providerBuilder(Some(accessToken)) } abstract class OAuthWithNoAccessToken extends Scope { val provider = providerBuilder(None) } trait WithCallback { val callback = Some("http://my.example/auth") } "OAuth Provider" should { "with no callback" in { "with access token" in { "provide an Authorization token according to the OAuth standards" in new OAuthWithAccessToken { val oauthHeader = provider.oauth1Header(None)(request, materializer).await val expectedAuthorization = """OAuth oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog", oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318622958", oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb", oauth_version="1.0"""" oauthHeader === RawHeader("Authorization", expectedAuthorization) } "provide the oauth parameters as expected" in new OAuthWithAccessToken { val oauthParams = provider.oauth1Params(None)(request, materializer).await oauthParams.size === 7 oauthParams("oauth_consumer_key") === consumerToken.key oauthParams("oauth_signature_method") === "HMAC-SHA1" oauthParams("oauth_version") === "1.0" oauthParams("oauth_token") === accessToken.key oauthParams("oauth_nonce").size === 42 oauthParams("oauth_timestamp") === "1318622958" oauthParams("oauth_signature") === "tnnArxj06cWHq44gCs1OSKk%2FjLY%3D" } "generate the signature base string as expected" in new OAuthWithAccessToken { val oauthParams = Map( "oauth_consumer_key" -> consumerToken.key, "oauth_nonce" -> "kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", "oauth_signature_method" -> "HMAC-SHA1", "oauth_timestamp" -> "1318622958", "oauth_token" -> accessToken.key, "oauth_version" -> "1.0" ) val expectedSignatureBase = "POST&https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.json&include_entities%3Dtrue%26oauth_consumer_key%3Dxvz1evFS4wEEPTGEFPHBog%26oauth_nonce%3DkYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1318622958%26oauth_token%3D370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb%26oauth_version%3D1.0%26status%3DHello%2520Ladies%2520%252B%2520Gentlemen%252C%2520a%2520signed%2520OAuth%2520request%2521" provider.signatureBase(oauthParams)(request, materializer).await === expectedSignatureBase } "generate the signing key as expected" in new OAuthWithAccessToken { val expectedSigningKey = "kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw&LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE" provider.signingKey === expectedSigningKey } "extract body parameters from a request with body as expected" in new OAuthWithAccessToken { val bodyParams = provider.bodyParams(request, materializer).await bodyParams === Map("status" -> "Hello%20Ladies%20%2B%20Gentlemen%2C%20a%20signed%20OAuth%20request%21") } "extract body parameters from a request without body as expected" in new OAuthWithAccessToken { val requestWithoutBody = request.withEntity(HttpEntity.Empty) val bodyParams = provider.bodyParams(requestWithoutBody, materializer).await bodyParams === Map() } } "with no access token" in { "provide an Authorization token according to the OAuth standards" in new OAuthWithNoAccessToken { val oauthHeader = provider.oauth1Header(None)(request, materializer).await val expectedAuthorization = """OAuth oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog", oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", oauth_signature="%2Bgxx4CGoDB7afZbRRRpR56orbKU%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318622958", oauth_version="1.0"""" oauthHeader === RawHeader("Authorization", expectedAuthorization) } "provide the oauth parameters as expected" in new OAuthWithNoAccessToken { val oauthParams = provider.oauth1Params(None)(request, materializer).await oauthParams.size === 6 oauthParams("oauth_consumer_key") === consumerToken.key oauthParams("oauth_signature_method") === "HMAC-SHA1" oauthParams("oauth_version") === "1.0" oauthParams("oauth_nonce").size === 42 oauthParams("oauth_timestamp") === "1318622958" oauthParams("oauth_signature") === "%2Bgxx4CGoDB7afZbRRRpR56orbKU%3D" } "generate the signature base string as expected" in new OAuthWithNoAccessToken { val oauthParams = Map( "oauth_consumer_key" -> consumerToken.key, "oauth_nonce" -> "kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", "oauth_signature_method" -> "HMAC-SHA1", "oauth_timestamp" -> "1318622958", "oauth_version" -> "1.0" ) val expectedSignatureBase = "POST&https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.json&include_entities%3Dtrue%26oauth_consumer_key%3Dxvz1evFS4wEEPTGEFPHBog%26oauth_nonce%3DkYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1318622958%26oauth_version%3D1.0%26status%3DHello%2520Ladies%2520%252B%2520Gentlemen%252C%2520a%2520signed%2520OAuth%2520request%2521" provider.signatureBase(oauthParams)(request, materializer).await === expectedSignatureBase } "generate the signing key as expected" in new OAuthWithNoAccessToken { val expectedSigningKey = "kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw&" provider.signingKey === expectedSigningKey } "extract body parameters from a request with body as expected" in new OAuthWithNoAccessToken { val bodyParams = provider.bodyParams(request, materializer).await bodyParams === Map("status" -> "Hello%20Ladies%20%2B%20Gentlemen%2C%20a%20signed%20OAuth%20request%21") } "extract body parameters from a request without body as expected" in new OAuthWithNoAccessToken { val requestWithoutBody = request.withEntity(HttpEntity.Empty) val bodyParams = provider.bodyParams(requestWithoutBody, materializer).await bodyParams === Map() } } } "with callback" in { "with access token" in { "provide an Authorization token according to the OAuth standards" in new OAuthWithAccessToken with WithCallback { val oauthHeader = provider.oauth1Header(callback)(request, materializer).await val expectedAuthorization = """OAuth oauth_callback="http%3A%2F%2Fmy.example%2Fauth", oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog", oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", oauth_signature="qiHvwU1c%2Bi7rCRk8rnVGOHXXTBI%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318622958", oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb", oauth_version="1.0"""" oauthHeader === RawHeader("Authorization", expectedAuthorization) } "provide the oauth parameters as expected" in new OAuthWithAccessToken with WithCallback { val oauthParams = provider.oauth1Params(callback)(request, materializer).await oauthParams.size === 8 oauthParams("oauth_callback") === "http%3A%2F%2Fmy.example%2Fauth" oauthParams("oauth_consumer_key") === consumerToken.key oauthParams("oauth_signature_method") === "HMAC-SHA1" oauthParams("oauth_version") === "1.0" oauthParams("oauth_token") === accessToken.key oauthParams("oauth_nonce").size === 42 oauthParams("oauth_timestamp") === "1318622958" oauthParams("oauth_signature") === "qiHvwU1c%2Bi7rCRk8rnVGOHXXTBI%3D" } "generate the signature base string as expected" in new OAuthWithAccessToken with WithCallback { val oauthParams = Map( "oauth_callback" -> "http%3A%2F%2Fmy.example%2Fauth", "oauth_consumer_key" -> consumerToken.key, "oauth_nonce" -> "kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", "oauth_signature_method" -> "HMAC-SHA1", "oauth_timestamp" -> "1318622958", "oauth_token" -> accessToken.key, "oauth_version" -> "1.0" ) val expectedSignatureBase = "POST&https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.json&include_entities%3Dtrue%26oauth_callback%3Dhttp%25253A%25252F%25252Fmy.example%25252Fauth%26oauth_consumer_key%3Dxvz1evFS4wEEPTGEFPHBog%26oauth_nonce%3DkYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1318622958%26oauth_token%3D370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb%26oauth_version%3D1.0%26status%3DHello%2520Ladies%2520%252B%2520Gentlemen%252C%2520a%2520signed%2520OAuth%2520request%2521" provider.signatureBase(oauthParams)(request, materializer).await === expectedSignatureBase } "generate the signing key as expected" in new OAuthWithAccessToken with WithCallback { val expectedSigningKey = "kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw&LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE" provider.signingKey === expectedSigningKey } "extract body parameters from a request with body as expected" in new OAuthWithAccessToken with WithCallback { val bodyParams = provider.bodyParams(request, materializer).await bodyParams === Map("status" -> "Hello%20Ladies%20%2B%20Gentlemen%2C%20a%20signed%20OAuth%20request%21") } "extract body parameters from a request without body as expected" in new OAuthWithAccessToken with WithCallback { val requestWithoutBody = request.withEntity(HttpEntity.Empty) val bodyParams = provider.bodyParams(requestWithoutBody, materializer).await bodyParams === Map() } } "with no access token" in { "provide an Authorization token according to the OAuth standards" in new OAuthWithNoAccessToken with WithCallback { val oauthHeader = provider.oauth1Header(callback)(request, materializer).await val expectedAuthorization = """OAuth oauth_callback="http%3A%2F%2Fmy.example%2Fauth", oauth_consumer_key="xvz1evFS4wEEPTGEFPHBog", oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", oauth_signature="Nb7%2FehS1ddvtYCbI9VU1AJyBKS8%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318622958", oauth_version="1.0"""" oauthHeader === RawHeader("Authorization", expectedAuthorization) } "provide the oauth parameters as expected" in new OAuthWithNoAccessToken with WithCallback { val oauthParams = provider.oauth1Params(callback)(request, materializer).await oauthParams.size === 7 oauthParams("oauth_callback") === "http%3A%2F%2Fmy.example%2Fauth" oauthParams("oauth_consumer_key") === consumerToken.key oauthParams("oauth_signature_method") === "HMAC-SHA1" oauthParams("oauth_version") === "1.0" oauthParams("oauth_nonce").size === 42 oauthParams("oauth_timestamp") === "1318622958" oauthParams("oauth_signature") === "Nb7%2FehS1ddvtYCbI9VU1AJyBKS8%3D" } "generate the signature base string as expected" in new OAuthWithNoAccessToken with WithCallback { val oauthParams = Map( "oauth_callback" -> "http%3A%2F%2Fmy.example%2Fauth", "oauth_consumer_key" -> consumerToken.key, "oauth_nonce" -> "kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", "oauth_signature_method" -> "HMAC-SHA1", "oauth_timestamp" -> "1318622958", "oauth_version" -> "1.0" ) val expectedSignatureBase = "POST&https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.json&include_entities%3Dtrue%26oauth_callback%3Dhttp%25253A%25252F%25252Fmy.example%25252Fauth%26oauth_consumer_key%3Dxvz1evFS4wEEPTGEFPHBog%26oauth_nonce%3DkYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1318622958%26oauth_version%3D1.0%26status%3DHello%2520Ladies%2520%252B%2520Gentlemen%252C%2520a%2520signed%2520OAuth%2520request%2521" provider.signatureBase(oauthParams)(request, materializer).await === expectedSignatureBase } "generate the signing key as expected" in new OAuthWithNoAccessToken with WithCallback { val expectedSigningKey = "kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw&" provider.signingKey === expectedSigningKey } "extract body parameters from a request with body as expected" in new OAuthWithNoAccessToken with WithCallback { val bodyParams = provider.bodyParams(request, materializer).await bodyParams === Map("status" -> "Hello%20Ladies%20%2B%20Gentlemen%2C%20a%20signed%20OAuth%20request%21") } "extract body parameters from a request without body as expected" in new OAuthWithNoAccessToken with WithCallback { val requestWithoutBody = request.withEntity(HttpEntity.Empty) val bodyParams = provider.bodyParams(requestWithoutBody, materializer).await bodyParams === Map() } } } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/packageHttpSpec.scala ================================================ package com.danielasfregola.twitter4s.http import org.specs2.mutable.Specification class packageHttpSpec extends Specification { "Rich String" should { "convert a text to ascii encoding" in { "Ladies + Gentlemen".urlEncoded === "Ladies%20%2B%20Gentlemen" "An encoded string!".urlEncoded === "An%20encoded%20string%21" "Dogs, Cats & Mice".urlEncoded === "Dogs%2C%20Cats%20%26%20Mice" "☃".urlEncoded === "%E2%98%83" "()".urlEncoded === "%28%29" } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/http/serializers/FormSupportSpec.scala ================================================ package com.danielasfregola.twitter4s.http.serializers import akka.http.scaladsl.model.{ContentTypes, HttpEntity, HttpResponse} import com.danielasfregola.twitter4s.exceptions.TwitterException import com.danielasfregola.twitter4s.helpers.{AwaitableFuture, TestActorSystem, TestExecutionContext} import org.specs2.mutable.SpecificationLike import org.specs2.specification.Scope import scala.concurrent.Future class FormSupportSpec extends TestActorSystem with SpecificationLike with AwaitableFuture with TestExecutionContext { case class MyTest(a: String, b: String, c: String, d: Boolean) implicit object MyTestFromMap extends FromMap[MyTest] { def apply(m: Map[String, String]) = for { a <- m.get("a") b <- m.get("b") c <- m.get("c") d <- m.get("d") } yield MyTest(a, b, c, toBoolean(d)) } abstract class FormSupportContext extends Scope def buildResponse(text: String): HttpResponse = HttpResponse(entity = HttpEntity.apply(ContentTypes.`text/html(UTF-8)`, text)) "FormSupport" should { "unmarshall a well-formed text into a case class" in new FormSupportContext { val text = "a=hello&c=test&b=foobar&d=true" val result: Future[MyTest] = FormSupport.unmarshallText[MyTest](buildResponse(text)) result.await === MyTest(a = "hello", b = "foobar", c = "test", d = true) } "throw TwitterException if text is not well formed" in new FormSupportContext { val text = "non-well-formed-string" val result: Future[MyTest] = FormSupport.unmarshallText[MyTest](buildResponse(text)) result.await should throwA[TwitterException] } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/util/ConfigurationDetectorSpec.scala ================================================ package com.danielasfregola.twitter4s.util import com.typesafe.config.{Config, ConfigException} import org.specs2.mock.Mockito import org.specs2.mutable.Specification import org.specs2.specification.Scope class ConfigurationDetectorSpec extends Specification with Mockito { val myConfigFromEnvVar = "my-configuration-from-env-var" val myConfigFromFile = "my-configuration-from-file" abstract class ConfigurationDetectorSpecContext extends Scope { def config = mock[Config] val variableName = "MY-CONFIG" val configName = "my.config" } trait NoEnvVariable extends ConfigurationDetector { override protected def environmentVariable(name: String) = None } trait WithEnvVariable extends ConfigurationDetector { override protected def environmentVariable(name: String) = Some(myConfigFromEnvVar) } trait NoConfigFromFile extends ConfigurationDetector { override protected def configuration(path: String) = throw new ConfigException.Missing(path) } trait WithConfigFromFile extends ConfigurationDetector { override protected def configuration(path: String) = myConfigFromFile } "ConfigurationDetector" should { "if environment variable exists" in { "if configuration from file does not exists" in { "detect the configuration from the environment variable" in new ConfigurationDetectorSpecContext with WithEnvVariable with NoConfigFromFile { envVarOrConfig(variableName, configName) === myConfigFromEnvVar } } "if configuration from file exists" in { "detect the configuration from the environment variable" in new ConfigurationDetectorSpecContext with WithEnvVariable with WithConfigFromFile { envVarOrConfig(variableName, configName) === myConfigFromEnvVar } } } "if environment variable does not exist" in { "if configuration from file exists" in { "detect the configuration from the configuration file" in new ConfigurationDetectorSpecContext with NoEnvVariable with WithConfigFromFile { envVarOrConfig(variableName, configName) === myConfigFromFile } } "if configuration from file does not exist" in { "throw an exception" in new ConfigurationDetectorSpecContext with NoEnvVariable with NoConfigFromFile { envVarOrConfig(variableName, configName) must throwA[RuntimeException] } } } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/util/EncoderSpec.scala ================================================ package com.danielasfregola.twitter4s.util import org.specs2.mutable.Specification class EncoderSpec extends Specification with Encoder { "HmacSha1 Encoder" should { "encode a base and secret as expected" in { val base = "POST&" + "https%3A%2F%2Fapi.twitter.com%2F1%2Fstatuses%2Fupdate.json&" + "include_entities%3Dtrue%26" + "oauth_consumer_key%3Dxvz1evFS4wEEPTGEFPHBog%26" + "oauth_nonce%3DkYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg%26" + "oauth_signature_method%3DHMAC-SHA1%26" + "oauth_timestamp%3D1318622958%26" + "oauth_token%3D370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb%26" + "oauth_version%3D1.0%26" + "status%3DHello%2520Ladies%2520%252B%2520Gentlemen%252C%2520a%2520signed%2520OAuth%2520request%2521" val secret = "kAcSOqF21Fu85e7zjz7ZN2U4ZRhfV3WpwPAoE3Z7kBw&LswwdoUaIvS8ltyTt5jkRh4J50vUPVVHtR2YPi5kE" toHmacSha1(base, secret) === "tnnArxj06cWHq44gCs1OSKk/jLY=" } "encode a base and secret as expected with callback" in { val base = "POST&" + "https%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&" + "oauth_callback%3Dhttp%253A%252F%252Flocalhost%252Fsign-in-with-twitter%252F%26" + "oauth_consumer_key%3DcChZNFj6T5R0TigYB9yd1w%26" + "oauth_nonce%3Dea9ec8429b68d6b77cd5600adbbb0456%26" + "oauth_signature_method%3DHMAC-SHA1%26" + "oauth_timestamp%3D1318467427%26" + "oauth_version%3D1.0" val secret = "L8qq9PZyRg6ieKGEKhZolGC0vJWLw8iEJ88DRdyOg&" toHmacSha1(base, secret) === "F1Li3tvehgcraF8DMJ7OyxO4w9Y=" } } } ================================================ FILE: src/test/scala/com/danielasfregola/twitter4s/util/UriHelpersSpec.scala ================================================ package com.danielasfregola.twitter4s.util import akka.http.scaladsl.model.Uri import org.specs2.mutable.Specification class UriHelpersSpec extends Specification with UriHelpers { "UriHelpers" should { "extract an endpoint representation" in { "from a uri" in { val uri = Uri("https://api.twitter.com/1.1/lists/members/create.json?param1=8044403¶m2=daniela") uri.endpoint === "https://api.twitter.com/1.1/lists/members/create.json" } "from a uri with explicit port" in { val uri = Uri("http://example.com:8080/path?p=test") uri.endpoint === "http://example.com:8080/path" } } } }