STREAMS-679: add support for accessing and searching with twitter derived fields
resolves STREAMS-679
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/search/SearchUtil.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/search/SearchUtil.java
index 4426c80..01dd20d 100644
--- a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/search/SearchUtil.java
+++ b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/search/SearchUtil.java
@@ -88,6 +88,15 @@
for( String time_zone : operator.getTimeZones()) {
stringJoiner.add("time_zone:" + time_zone);
}
+ if( operator.getProfileCountry() != null) {
+ stringJoiner.add("profile_country:" + operator.getProfileCountry());
+ }
+ if( operator.getProfileRegion() != null) {
+ stringJoiner.add("profile_region:" + operator.getProfileRegion());
+ }
+ if( operator.getProfileLocality() != null) {
+ stringJoiner.add("profile_locality:" + operator.getProfileLocality());
+ }
if( operator.getHasImages() ) {
stringJoiner.add("has:images");
}
@@ -97,8 +106,8 @@
if( operator.getHasMedia() ) {
stringJoiner.add("has:media");
}
- if( operator.getHasImages() ) {
- stringJoiner.add("has:image");
+ if( operator.getHasProfileGeo() ) {
+ stringJoiner.add("has:profile_geo");
}
if( operator.getHasVideos() ) {
stringJoiner.add("has:video");
diff --git a/streams-contrib/streams-provider-twitter/src/main/jsonschema/org/apache/streams/twitter/api/ThirtyDaySearchRequest.json b/streams-contrib/streams-provider-twitter/src/main/jsonschema/org/apache/streams/twitter/api/ThirtyDaySearchRequest.json
index 21f5cce..6740843 100644
--- a/streams-contrib/streams-provider-twitter/src/main/jsonschema/org/apache/streams/twitter/api/ThirtyDaySearchRequest.json
+++ b/streams-contrib/streams-provider-twitter/src/main/jsonschema/org/apache/streams/twitter/api/ThirtyDaySearchRequest.json
@@ -13,6 +13,11 @@
"required": true,
"type": "string"
},
+ "tag": {
+ "description": "Tags can be used to segregate rules and their matching data into different logical groups. If a rule tag is provided, the rule tag is included in the 'matching_rules' attribute.\n\nIt is recommended to assign rule-specific UUIDs to rule tags and maintain desired mappings on the client side.",
+ "required": false,
+ "type": "string"
+ },
"fromDate": {
"description": "The oldest UTC timestamp (back to 3/21/2006) from which the activities will be provided. Timestamp is in minute granularity and is inclusive (i.e. 12:00 includes the 00 minute).",
"required": false,
diff --git a/streams-contrib/streams-provider-twitter/src/main/jsonschema/org/apache/streams/twitter/config/SevenDaySearchProviderConfiguration.json b/streams-contrib/streams-provider-twitter/src/main/jsonschema/org/apache/streams/twitter/config/SevenDaySearchProviderConfiguration.json
index bc5450b..551517b 100644
--- a/streams-contrib/streams-provider-twitter/src/main/jsonschema/org/apache/streams/twitter/config/SevenDaySearchProviderConfiguration.json
+++ b/streams-contrib/streams-provider-twitter/src/main/jsonschema/org/apache/streams/twitter/config/SevenDaySearchProviderConfiguration.json
@@ -19,6 +19,25 @@
"max_pages": {
"type": "integer",
"description": "Max pages to request"
+ },
+ "page_size": {
+ "type": "integer",
+ "description": "Requested items per page"
+ },
+ "geocode": {
+ "type": "string"
+ },
+ "lang": {
+ "type": "string"
+ },
+ "locale": {
+ "type": "string"
+ },
+ "result_type": {
+ "type": "string"
+ },
+ "include_entities": {
+ "type": "boolean"
}
}
}
\ No newline at end of file
diff --git a/streams-contrib/streams-provider-twitter/src/main/jsonschema/org/apache/streams/twitter/config/ThirtyDaySearchProviderConfiguration.json b/streams-contrib/streams-provider-twitter/src/main/jsonschema/org/apache/streams/twitter/config/ThirtyDaySearchProviderConfiguration.json
index 1d31bb3..c117b0f 100644
--- a/streams-contrib/streams-provider-twitter/src/main/jsonschema/org/apache/streams/twitter/config/ThirtyDaySearchProviderConfiguration.json
+++ b/streams-contrib/streams-provider-twitter/src/main/jsonschema/org/apache/streams/twitter/config/ThirtyDaySearchProviderConfiguration.json
@@ -12,6 +12,9 @@
"query": {
"$ref": "../api/ThirtyDaySearchRequest.json#properties/query"
},
+ "tag": {
+ "$ref": "../api/ThirtyDaySearchRequest.json#properties/tag"
+ },
"max_items": {
"type": "integer",
"description": "Max items total"
@@ -19,6 +22,10 @@
"max_pages": {
"type": "integer",
"description": "Max pages to request"
+ },
+ "page_size": {
+ "type": "integer",
+ "description": "Requested items per page"
}
}
}
\ No newline at end of file
diff --git a/streams-contrib/streams-provider-twitter/src/main/jsonschema/org/apache/streams/twitter/pojo/User.json b/streams-contrib/streams-provider-twitter/src/main/jsonschema/org/apache/streams/twitter/pojo/User.json
index c6cb798..a560011 100644
--- a/streams-contrib/streams-provider-twitter/src/main/jsonschema/org/apache/streams/twitter/pojo/User.json
+++ b/streams-contrib/streams-provider-twitter/src/main/jsonschema/org/apache/streams/twitter/pojo/User.json
@@ -123,6 +123,50 @@
},
"status": {
"$ref": "tweet.json"
+ },
+ "derived": {
+ "type": "object",
+ "properties": {
+ "locations": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "javaType" : "org.apache.streams.twitter.pojo.DerivedLocation",
+ "properties": {
+ "country": {
+ "type": "string"
+ },
+ "country_code": {
+ "type": "string"
+ },
+ "locality": {
+ "type": "string"
+ },
+ "region": {
+ "type": "string"
+ },
+ "sub_region": {
+ "type": "string"
+ },
+ "full_name": {
+ "type": "string"
+ },
+ "geo": {
+ "type": "object",
+ "properties": {
+ "coordinates": {
+ "type": "array",
+ "items": {
+ "type": "number"
+ }
+ },
+ "type": "string"
+ }
+ }
+ }
+ }
+ }
+ }
}
}
diff --git a/streams-contrib/streams-provider-twitter/src/main/jsonschema/org/apache/streams/twitter/search/ThirtyDaySearchOperator.json b/streams-contrib/streams-provider-twitter/src/main/jsonschema/org/apache/streams/twitter/search/ThirtyDaySearchOperator.json
index 2ae1657..3c78e8b 100644
--- a/streams-contrib/streams-provider-twitter/src/main/jsonschema/org/apache/streams/twitter/search/ThirtyDaySearchOperator.json
+++ b/streams-contrib/streams-provider-twitter/src/main/jsonschema/org/apache/streams/twitter/search/ThirtyDaySearchOperator.json
@@ -121,6 +121,18 @@
"type": "string"
}
},
+ "profile_country": {
+ "description": "Exact match on the “countryCode” field from the “address” object in the Profile Geo enrichment.\nUses a normalized set of two-letter country codes, based on ISO-3166-1-alpha-2 specification. This operator is provided in lieu of an operator for “country” field from the “address” object to be concise.",
+ "type": "string"
+ },
+ "profile_region": {
+ "description": "Matches on the “region” field from the “address” object in the Profile Geo enrichment.\nThis is an exact full string match. It is not necessary to escape characters with a backslash. For example, if matching something with a slash, use “one/two”, not “one\\/two”. Use double quotes to match substrings that contain whitespace or punctuation.",
+ "type": "string"
+ },
+ "profile_locality": {
+ "description": "Matches on the “locality” field from the “address” object in the Profile Geo enrichment.\nThis is an exact full string match. It is not necessary to escape characters with a backslash. For example, if matching something with a slash, use “one/two”, not “one\\/two”. Use double quotes to match substrings that contain whitespace or punctuation.",
+ "type": "string"
+ },
"time_zones": {
"description": "Matches Tweets where the user-selected time zone specified in a user’s profile settings matches a given string.",
"type": "array",
@@ -135,6 +147,11 @@
"type": "string"
}
},
+ "has_geo": {
+ "description": "Matches Tweets that have Tweet-specific geo location data provided from Twitter. This can be either “geo” lat-long coordinate, or a “location” in the form of a Twitter “Place”, with corresponding display name, geo polygon, and other fields.",
+ "type": "boolean",
+ "default": false
+ },
"has_images": {
"description": "A boolean search operator that returns all Tweets that contain a native images (e.g. pic.twitter.com).",
"type": "boolean",
@@ -145,18 +162,23 @@
"type": "boolean",
"default": false
},
+ "has_media": {
+ "description": "Matches Tweets that contain a media url classified by Twitter, e.g. pic.twitter.com.",
+ "type": "boolean",
+ "default": false
+ },
"has_mentions": {
"description": "Matches Tweets that mention another Twitter user.",
"type": "boolean",
"default": false
},
- "has_videos": {
- "description": "A boolean search operator that returns all Tweets that contain native videos (does not include vine, periscope).",
+ "has_profile_geo": {
+ "description": "Matches Tweets that have any Profile Geo metadata, regardless of the actual value.",
"type": "boolean",
"default": false
},
- "has_media": {
- "description": "Matches Tweets that contain a media url classified by Twitter, e.g. pic.twitter.com.",
+ "has_videos": {
+ "description": "A boolean search operator that returns all Tweets that contain native videos (does not include vine, periscope).",
"type": "boolean",
"default": false
},