gnip_api 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4a0f89ada9f7ec8c66ff45982702e37a0649e8ff
4
- data.tar.gz: 65a52d03b722a14f6264c8d51086d3df9e24cdf9
3
+ metadata.gz: 0ace6a737270b54933d3a565107f177695ccc5fc
4
+ data.tar.gz: a5ff0135422ebbfb589e6caaa75fa78d394b5e61
5
5
  SHA512:
6
- metadata.gz: 1560448fb7366e1422971587abb31fbfe16c121faaf28d37f7cdfcd7aa81019b05d789e053c4ce3be7f20bd67e23d15bc9d46bde9cd9e0ddd226b5f2805f887f
7
- data.tar.gz: c4750dbfcae74f230df1b4a93099b1786715ce5a92fb1b60ad844ba221d7ec75549d37d43e5cf7f113f7e25db8e7a2fe7eb9e54d484b965011038f9dda1090b1
6
+ metadata.gz: 9d5b61329486ff45318975b4b6d2ee844b110a262fd1fa69b4c213bd4ac509cdb628f14815745cc1d9ce3eb1dcdf5c009fd2b4709f05721bbd5bee0ab591ecd6
7
+ data.tar.gz: 921dc1e0a35fbc0377a56fddbfe84e306a6508aef39462405296cc08ccd2d6a237f2f0bed95cdc0158477cca4125468dd930040123b8f92b9c7c4ea7f85c7cea
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- gnip_api (0.0.5)
4
+ gnip_api (0.0.6)
5
5
  activesupport
6
6
  addressable
7
7
  httparty
data/README.md CHANGED
@@ -6,6 +6,7 @@ Connect with different Gnip APIs and get data from streams.
6
6
 
7
7
  ## Recent Changes
8
8
 
9
+ - Search API returns parsed data either for counts or activities, which also makes Search API usable to get activities now
9
10
  - Removed unused RateLimiter
10
11
  - Removed unused Mutex
11
12
  - Added source and label to config as default values
@@ -51,39 +52,49 @@ GnipApi.configure |config|
51
52
  end
52
53
  ```
53
54
 
54
- Put the avobe code in a initializer if you're using Rails, or somewhere else if you aren't. After that you can interact with Gnip APIs.
55
+ Put the avobe code in an initializer if you're using Rails, or somewhere else if you aren't. After that you can interact with Gnip APIs.
55
56
 
56
57
  Note that you'll need a source and a label. Source is the data source within Gnip, such as Twitter, and label is the identifier of your stream.
57
58
 
58
59
  ### Search API
59
60
 
60
- The Search API allows you to get counts or activities in a time period, with a maximum period size of 30 days per request. PowerTrack rules are used as query parameter, but be careful *PowerTrack operators may not be supporter on Search API or could behave differently*. Read the Gnip docs to make sure.
61
+ The Search API allows you to get counts or activities in a time period, with a maximum period size of 30 days per request. PowerTrack rules are used as query parameter, but be careful **PowerTrack operators may not be supported on Search API or could behave differently**. Read the Gnip docs to make sure.
61
62
  To access the Search API you will need a rule first, you can use PowerTrack Rule object for it:
62
63
 
63
64
  ```ruby
64
65
  rule = GnipApi::Apis::PowerTrack::Rule.new :value => 'keyword1 OR keyword2'
65
- end
66
66
  ```
67
67
 
68
- Then you can query the search endpoint. *Only counts are available currently*.
68
+ Then you can query the search endpoint to get counts or activities. For counts:
69
69
 
70
70
  ```ruby
71
71
  results = GnipApi::Apis::Search.new.counts :rule => rule
72
- end
73
72
  ```
74
73
 
74
+ For activities:
75
+
76
+ ```ruby
77
+ results = GnipApi::Apis::Search.new.activities :rule => rule
78
+ ```
79
+
80
+ Responses are parsed, so you can then use the output normally as any other Ruby object. For the case of activities, they get converted to Gnip::Activity objects, and have all the rest parsed as they would came from stream.
81
+
75
82
  You can set different parameters:
76
83
 
77
84
  ```ruby
78
85
  results = GnipApi::Apis::Search.new.counts :rule => rule, :from_date => DateTime.parse('2016-01-01 00:00'), :to_date => DateTime.parse('2016-05-01 22:00'), :bucket => 'day'
79
- end
80
86
  ```
81
87
 
82
- When you query for more than 30 days, the results will include a :next token to iterate over the remaining pages. You can instantly feed this token to a following request with same parameters:
88
+ For activities, there are a few extra considerations:
89
+
90
+ - A param ```:max_results``` indicates how many activities to return on a response, valid values are from 10 to 500, default is 100, this param does not work on counts.
91
+ - As you noticed, you pass a ```GnipApi::Apis::PowerTrack::Rule``` object to the search endpoint, and as you may also know, these objects have mostly 2 thigs: value (actual rule), and tag. When querying activities on the Search API, you can optionally use a tag that is returned on the activity, along with the rule. This tag is deduced from the rule object you pass, in other words, if you want a tag, add it on the ```GnipApi::Apis::PowerTrack::Rule``` object, it's not a valid param for the method.
92
+ - The ```:bucket``` option is only for counts.
93
+
94
+ When you query for more than 30 days or more activities than ```:max_activities```, the results will include a ```:next``` token to iterate over the remaining pages. You can instantly feed this token to a following request with same parameters:
83
95
 
84
96
  ```ruby
85
97
  results = GnipApi::Apis::Search.new.counts :rule => rule, :from_date => DateTime.parse('2016-01-01 00:00'), :to_date => DateTime.parse('2016-05-01 22:00'), :bucket => 'day', :next_token => 'token_from_previous_request'
86
- end
87
98
  ```
88
99
 
89
100
  ### PowerTrack
@@ -94,14 +105,12 @@ PowerTrack API has various functions. You can upload, delete and get rules and y
94
105
  rules = []
95
106
  rules << GnipApi::Apis::PowerTrack::Rule.new :value => 'keyword1 OR keyword2', :tag => 'first_rule'
96
107
  rules << GnipApi::Apis::PowerTrack::Rule.new :value => 'keyword3 keyword4', :tag => 'second_rule'
97
- end
98
108
  ```
99
109
 
100
110
  Once you have your rule objects set, you can put them into an array and feed them to the PowerTrack Rules API:
101
111
 
102
112
  ```ruby
103
113
  GnipApi::Apis::PowerTrack::Rules.new.create rules
104
- end
105
114
  ```
106
115
 
107
116
  That will upload the rules to the stream. The endpoint doesn't return anything on success but it will validate rules before applying and any syntax error will be raised as an error.
@@ -110,17 +119,17 @@ To get a list of rules defined in the stream:
110
119
 
111
120
  ```ruby
112
121
  GnipApi::Apis::PowerTrack::Rules.new.list
113
- end
114
122
  ```
115
123
 
116
124
  That will return an array of GnipRule::Apis::PowerTrack::Rule objects. In the same way as the upload the delete method removes 1 or more rules:
117
125
 
118
126
  ```ruby
119
127
  GnipApi::Apis::PowerTrack::Rules.new.delete rules
120
- end
121
128
  ```
122
129
 
123
130
  Same as upload, no response from Gnip when deleting.
131
+ **Important**: There's no mapping between PowerTrack Rules and the rules you create, and they do not generate any identifier. Gnip suggests to generate an UID including the tag, to create an identifier and keep the mapping. When you delete a rule, the rule you are sending **needs to be exaclty the same you used on upload**, otherwise you would be trying to delete a non-existent rule or deleting a different rule, both cases without error from Gnip alerting this. Running a hash function over the JSON rule should do the trick.
132
+
124
133
  Finally, you can stream the activities and do something with them:
125
134
 
126
135
  ```ruby
@@ -12,6 +12,14 @@ module GnipApi
12
12
  @label = params[:label] || GnipApi.config.label
13
13
  end
14
14
 
15
+ def activities options={}
16
+ required_options?(options)
17
+ payload = construct_activities_payload(options)
18
+ request = GnipApi::Request.new_post(activities_endpoint, payload)
19
+ data = adapter.post(request)
20
+ return parse_activities_response(data)
21
+ end
22
+
15
23
  def counts options={}
16
24
  required_options?(options)
17
25
  payload = construct_counts_payload(options)
@@ -25,6 +33,10 @@ module GnipApi
25
33
  GnipApi::Endpoints.search_counts(@label)
26
34
  end
27
35
 
36
+ def activities_endpoint
37
+ GnipApi::Endpoints.search_activities(@label)
38
+ end
39
+
28
40
  def required_options
29
41
  [:rule]
30
42
  end
@@ -53,6 +65,21 @@ module GnipApi
53
65
  return result
54
66
  end
55
67
 
68
+ def parse_activities_response data
69
+ parsed_data = JSON.parse(data)
70
+ result_set = parsed_data['results']
71
+ params = parsed_data['requestParameters']
72
+ result = {:results => [], :next => parsed_data['next'], :request_parameters => {}}
73
+ result[:request_parameters][:bucket] = params['bucket'] if params['bucket']
74
+ result[:request_parameters][:from_date] = Time.parse("#{params['fromDate']}-0000") if params['fromDate']
75
+ result[:request_parameters][:to_date] = Time.parse("#{params['toDate']}-0000") if params['toDate']
76
+ result[:request_parameters][:max_results] = params['maxResults'] if params['maxResult']
77
+ result_set.each do |item|
78
+ result[:results] << Gnip::Activity.new(item)
79
+ end
80
+ return result
81
+ end
82
+
56
83
  def construct_counts_payload options
57
84
  payload = {
58
85
  :query => options[:rule].value,
@@ -64,6 +91,19 @@ module GnipApi
64
91
  payload.delete_if{|k,v| v.nil?}
65
92
  return payload.to_json
66
93
  end
94
+
95
+ def construct_activities_payload options
96
+ payload = {
97
+ :query => options[:rule].value,
98
+ :fromDate => parse_date(options[:from_date]),
99
+ :toDate => parse_date(options[:to_date]),
100
+ :tag => options[:rule].tag,
101
+ :maxResults => options[:max_results],
102
+ :next => options[:next_token]
103
+ }
104
+ payload.delete_if{|k,v| v.nil?}
105
+ return payload.to_json
106
+ end
67
107
  end
68
108
  end
69
109
  end
@@ -10,7 +10,7 @@ module GnipApi
10
10
  end
11
11
 
12
12
  def search_activities label
13
- URI("https://gnip-api.twitter.com/search/fullarchive/accounts/#{account}/#{label}")
13
+ URI("https://gnip-api.twitter.com/search/fullarchive/accounts/#{account}/#{label}.json")
14
14
  end
15
15
 
16
16
  def search_counts label
@@ -1,3 +1,3 @@
1
1
  module GnipApi
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -0,0 +1 @@
1
+ {"results":[{"id":"tag:search.twitter.com,2005:776490824091701249","objectType":"activity","verb":"post","postedTime":"2016-09-15T18:40:13.000Z","generator":{"displayName":"Twitter for iPhone","link":"http:\/\/twitter.com\/download\/iphone"},"provider":{"objectType":"service","displayName":"Twitter","link":"http:\/\/www.twitter.com"},"link":"http:\/\/twitter.com\/wdymsophie\/statuses\/776490824091701249","body":"no offense but I'm poor can old navy call me back about that job I applied to","actor":{"objectType":"person","id":"id:twitter.com:1869781076","link":"http:\/\/www.twitter.com\/wdymsophie","displayName":"sophie!!!","postedTime":"2013-09-16T01:09:55.458Z","image":"https:\/\/pbs.twimg.com\/profile_images\/749817892959424513\/jJwJSl-a_normal.jpg","summary":null,"friendsCount":157,"followersCount":14096,"listedCount":33,"statusesCount":28020,"twitterTimeZone":"Central Time (US & Canada)","verified":false,"utcOffset":"-18000","preferredUsername":"wdymsophie","languages":["en"],"links":[{"href":null,"rel":"me"}],"location":{"objectType":"place","displayName":"Boston, MA"},"favoritesCount":2135},"object":{"objectType":"note","id":"object:search.twitter.com,2005:776490824091701249","summary":"no offense but I'm poor can old navy call me back about that job I applied to","link":"http:\/\/twitter.com\/wdymsophie\/statuses\/776490824091701249","postedTime":"2016-09-15T18:40:13.000Z"},"favoritesCount":0,"twitter_entities":{"hashtags":[],"urls":[],"user_mentions":[],"symbols":[]},"twitter_lang":"en","retweetCount":0,"gnip":{"matching_rules":[{"value":"(((gap OR intermix) (tee OR top OR shirt OR blouse OR dress OR skirt OR shorts OR sweater OR sweatshirt OR jeans OR pants OR shoes OR clothes)) OR gapbody OR gapfit OR #gaplove OR athleta OR \"banana republic\" OR \"old navy\" OR piperlime -(\"The Gap, inc\" OR \"gap stock\" or $GPS)) -(followback OR #follow OR #free OR contest OR #win OR #offers OR is:retweet OR porn OR \"$$$\" OR #give OR #wefollow OR $follow) lang:en","tag":null}]},"twitter_filter_level":"low"},{"id":"tag:search.twitter.com,2005:776490588333969408","objectType":"activity","verb":"post","postedTime":"2016-09-15T18:39:17.000Z","generator":{"displayName":"Facebook","link":"http:\/\/www.facebook.com\/twitter"},"provider":{"objectType":"service","displayName":"Twitter","link":"http:\/\/www.twitter.com"},"link":"http:\/\/twitter.com\/TITLEPasadena\/statuses\/776490588333969408","body":"To our TITLE Card &amp; CLUB Card Members: \n\nTODAY THROUGH MONDAY, 9\/19\/16 Our friends at ATHLETA PASADENA are... https:\/\/t.co\/REYL5ixnY3","actor":{"objectType":"person","id":"id:twitter.com:2471559446","link":"http:\/\/www.twitter.com\/TITLEPasadena","displayName":"TITLE Old Pasadena","postedTime":"2014-04-30T22:11:23.761Z","image":"https:\/\/pbs.twimg.com\/profile_images\/661309393254789120\/AsUlP_1N_normal.jpg","summary":"TITLE Boxing Club\u2019s fun group classes deliver results of cardio boxing to strengthen your full body. Come take Pasadena's Best Workout at Pasadena's Best Gym!","friendsCount":16,"followersCount":26,"listedCount":1,"statusesCount":222,"twitterTimeZone":"Pacific Time (US & Canada)","verified":false,"utcOffset":"-25200","preferredUsername":"TITLEPasadena","languages":["en"],"links":[{"href":"http:\/\/oldpasadena.titleboxingclub.com","rel":"me"}],"location":{"objectType":"place","displayName":"Pasadena, CA"},"favoritesCount":1},"object":{"objectType":"note","id":"object:search.twitter.com,2005:776490588333969408","summary":"To our TITLE Card &amp; CLUB Card Members: \n\nTODAY THROUGH MONDAY, 9\/19\/16 Our friends at ATHLETA PASADENA are... https:\/\/t.co\/REYL5ixnY3","link":"http:\/\/twitter.com\/TITLEPasadena\/statuses\/776490588333969408","postedTime":"2016-09-15T18:39:17.000Z"},"favoritesCount":0,"twitter_entities":{"hashtags":[],"urls":[{"url":"https:\/\/t.co\/REYL5ixnY3","expanded_url":"http:\/\/fb.me\/PL1QNa1x","display_url":"fb.me\/PL1QNa1x","indices":[114,137]}],"user_mentions":[],"symbols":[]},"twitter_lang":"en","retweetCount":0,"gnip":{"matching_rules":[{"value":"(((gap OR intermix) (tee OR top OR shirt OR blouse OR dress OR skirt OR shorts OR sweater OR sweatshirt OR jeans OR pants OR shoes OR clothes)) OR gapbody OR gapfit OR #gaplove OR athleta OR \"banana republic\" OR \"old navy\" OR piperlime -(\"The Gap, inc\" OR \"gap stock\" or $GPS)) -(followback OR #follow OR #free OR contest OR #win OR #offers OR is:retweet OR porn OR \"$$$\" OR #give OR #wefollow OR $follow) lang:en","tag":null}],"urls":[{"url":"https:\/\/t.co\/REYL5ixnY3","expanded_url":"https:\/\/www.facebook.com\/photo.php?fbid=1043195339132000","expanded_status":403,"expanded_url_title":null,"expanded_url_description":null}]},"twitter_filter_level":"low"},{"id":"tag:search.twitter.com,2005:776490432997957633","objectType":"activity","verb":"post","postedTime":"2016-09-15T18:38:40.000Z","generator":{"displayName":"Twitter for iPhone","link":"http:\/\/twitter.com\/download\/iphone"},"provider":{"objectType":"service","displayName":"Twitter","link":"http:\/\/www.twitter.com"},"link":"http:\/\/twitter.com\/DontBlowItTrump\/statuses\/776490432997957633","body":"I'll bet even money Trump will have zero votes in precincts across the country welcome to the new banana republic https:\/\/t.co\/qeEWrTlYjS","actor":{"objectType":"person","id":"id:twitter.com:760864021574672384","link":"http:\/\/www.twitter.com\/DontBlowItTrump","displayName":"Deplorable Infidel","postedTime":"2016-08-03T15:44:53.733Z","image":"https:\/\/pbs.twimg.com\/profile_images\/775238564531404800\/pDhvDOcq_normal.jpg","summary":"Trump is not our messiah\/savior, he drives Liberals, MSM, GOP to insanity. Donald is our Big F U for the past 8 years. EMBRACE your new reality!","friendsCount":2720,"followersCount":2123,"listedCount":11,"statusesCount":8985,"twitterTimeZone":null,"verified":false,"utcOffset":null,"preferredUsername":"DontBlowItTrump","languages":["en"],"links":[{"href":"https:\/\/www.thereligionofpeace.com\/","rel":"me"}],"favoritesCount":6907},"object":{"objectType":"note","id":"object:search.twitter.com,2005:776490432997957633","summary":"I'll bet even money Trump will have zero votes in precincts across the country welcome to the new banana republic https:\/\/t.co\/qeEWrTlYjS","link":"http:\/\/twitter.com\/DontBlowItTrump\/statuses\/776490432997957633","postedTime":"2016-09-15T18:38:40.000Z"},"favoritesCount":0,"twitter_entities":{"hashtags":[],"urls":[{"url":"https:\/\/t.co\/qeEWrTlYjS","expanded_url":"https:\/\/twitter.com\/ricky_vaughn99\/status\/776477505096036352","display_url":"twitter.com\/ricky_vaughn99\u2026","indices":[114,137]}],"user_mentions":[],"symbols":[]},"twitter_lang":"en","retweetCount":0,"gnip":{"matching_rules":[{"value":"(((gap OR intermix) (tee OR top OR shirt OR blouse OR dress OR skirt OR shorts OR sweater OR sweatshirt OR jeans OR pants OR shoes OR clothes)) OR gapbody OR gapfit OR #gaplove OR athleta OR \"banana republic\" OR \"old navy\" OR piperlime -(\"The Gap, inc\" OR \"gap stock\" or $GPS)) -(followback OR #follow OR #free OR contest OR #win OR #offers OR is:retweet OR porn OR \"$$$\" OR #give OR #wefollow OR $follow) lang:en","tag":null}],"urls":[{"url":"https:\/\/t.co\/qeEWrTlYjS","expanded_url":"https:\/\/twitter.com\/ricky_vaughn99\/status\/776477505096036352","expanded_status":200,"expanded_url_title":"Ricky Vaughn on Twitter","expanded_url_description":"\u201cCheck out this crosstab: Trump winning non-Obama or Romney voters 60 to 9 in Virginia.\u201d"}]},"twitter_filter_level":"low","twitter_quoted_status":{"id":"tag:search.twitter.com,2005:776477505096036352","objectType":"activity","verb":"post","postedTime":"2016-09-15T17:47:18.000Z","generator":{"displayName":"Twitter Web Client","link":"http:\/\/twitter.com"},"provider":{"objectType":"service","displayName":"Twitter","link":"http:\/\/www.twitter.com"},"link":"http:\/\/twitter.com\/Ricky_Vaughn99\/statuses\/776477505096036352","body":"Check out this crosstab: Trump winning non-Obama or Romney voters 60 to 9 in Virginia. https:\/\/t.co\/VGOQ2lIw7j","display_text_range":[0,86],"actor":{"objectType":"person","id":"id:twitter.com:2288462990","link":"http:\/\/www.twitter.com\/Ricky_Vaughn99","displayName":"Ricky Vaughn","postedTime":"2014-01-12T17:38:30.898Z","image":"https:\/\/pbs.twimg.com\/profile_images\/726965893742354436\/vasiLyAN_normal.jpg","summary":"Deplorable American nationalist. Deplorable free speech activist. Deplorable MIT-certified Top 150 2016 Election Influencer.","friendsCount":2042,"followersCount":55757,"listedCount":983,"statusesCount":211900,"twitterTimeZone":"Eastern Time (US & Canada)","verified":false,"utcOffset":"-14400","preferredUsername":"Ricky_Vaughn99","languages":["en"],"links":[{"href":null,"rel":"me"}],"favoritesCount":260836},"object":{"objectType":"note","id":"object:search.twitter.com,2005:776477505096036352","summary":"Check out this crosstab: Trump winning non-Obama or Romney voters 60 to 9 in Virginia. https:\/\/t.co\/VGOQ2lIw7j","link":"http:\/\/twitter.com\/Ricky_Vaughn99\/statuses\/776477505096036352","postedTime":"2016-09-15T17:47:18.000Z"},"favoritesCount":55,"twitter_entities":{"hashtags":[],"urls":[],"user_mentions":[],"symbols":[],"media":[{"id":776477451513847808,"id_str":"776477451513847808","indices":[87,110],"media_url":"http:\/\/pbs.twimg.com\/media\/CsaaINGVYAA7bOc.jpg","media_url_https":"https:\/\/pbs.twimg.com\/media\/CsaaINGVYAA7bOc.jpg","url":"https:\/\/t.co\/VGOQ2lIw7j","display_url":"pic.twitter.com\/VGOQ2lIw7j","expanded_url":"https:\/\/twitter.com\/Ricky_Vaughn99\/status\/776477505096036352\/photo\/1","type":"photo","sizes":{"small":{"w":680,"h":394,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"medium":{"w":810,"h":469,"resize":"fit"},"large":{"w":810,"h":469,"resize":"fit"}}}]},"twitter_extended_entities":{"media":[{"id":776477451513847808,"id_str":"776477451513847808","indices":[87,110],"media_url":"http:\/\/pbs.twimg.com\/media\/CsaaINGVYAA7bOc.jpg","media_url_https":"https:\/\/pbs.twimg.com\/media\/CsaaINGVYAA7bOc.jpg","url":"https:\/\/t.co\/VGOQ2lIw7j","display_url":"pic.twitter.com\/VGOQ2lIw7j","expanded_url":"https:\/\/twitter.com\/Ricky_Vaughn99\/status\/776477505096036352\/photo\/1","type":"photo","sizes":{"small":{"w":680,"h":394,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"medium":{"w":810,"h":469,"resize":"fit"},"large":{"w":810,"h":469,"resize":"fit"}}}]},"twitter_lang":"en","twitter_filter_level":"low"}},{"id":"tag:search.twitter.com,2005:776490280073760768","objectType":"activity","verb":"post","postedTime":"2016-09-15T18:38:03.000Z","generator":{"displayName":"Buffer","link":"http:\/\/bufferapp.com"},"provider":{"objectType":"service","displayName":"Twitter","link":"http:\/\/www.twitter.com"},"link":"http:\/\/twitter.com\/geneticdirect\/statuses\/776490280073760768","body":"RT @WellandGoodNYC: Take your outfit from sweat-to-street with these super-stylish pieces from @GAP: https:\/\/t.co\/1r3J47nedx #GapFit","actor":{"objectType":"person","id":"id:twitter.com:2924482004","link":"http:\/\/www.twitter.com\/geneticdirect","displayName":"Genetic Direction","postedTime":"2014-12-09T20:35:47.169Z","image":"https:\/\/pbs.twimg.com\/profile_images\/598607470810963968\/R0Os8DMK_normal.png","summary":"Makers of GxSlim: The weight management program that utilizes your genetic makeup to provide personalized diet and exercise plans.","friendsCount":511,"followersCount":1291,"listedCount":46,"statusesCount":5768,"twitterTimeZone":"Pacific Time (US & Canada)","verified":false,"utcOffset":"-25200","preferredUsername":"geneticdirect","languages":["en"],"links":[{"href":"http:\/\/www.GeneticDirection.com","rel":"me"}],"location":{"objectType":"place","displayName":"Dallas, TX"},"favoritesCount":13},"object":{"objectType":"note","id":"object:search.twitter.com,2005:776490280073760768","summary":"RT @WellandGoodNYC: Take your outfit from sweat-to-street with these super-stylish pieces from @GAP: https:\/\/t.co\/1r3J47nedx #GapFit","link":"http:\/\/twitter.com\/geneticdirect\/statuses\/776490280073760768","postedTime":"2016-09-15T18:38:03.000Z"},"favoritesCount":0,"twitter_entities":{"hashtags":[{"text":"GapFit","indices":[125,132]}],"urls":[{"url":"https:\/\/t.co\/1r3J47nedx","expanded_url":"http:\/\/buff.ly\/2bA6OmM","display_url":"buff.ly\/2bA6OmM","indices":[101,124]}],"user_mentions":[{"screen_name":"WellandGoodNYC","name":"Well and Good","id":50292966,"id_str":"50292966","indices":[3,18]},{"screen_name":"Gap","name":"Gap","id":18462157,"id_str":"18462157","indices":[95,99]}],"symbols":[]},"twitter_lang":"en","retweetCount":0,"gnip":{"matching_rules":[{"value":"(((gap OR intermix) (tee OR top OR shirt OR blouse OR dress OR skirt OR shorts OR sweater OR sweatshirt OR jeans OR pants OR shoes OR clothes)) OR gapbody OR gapfit OR #gaplove OR athleta OR \"banana republic\" OR \"old navy\" OR piperlime -(\"The Gap, inc\" OR \"gap stock\" or $GPS)) -(followback OR #follow OR #free OR contest OR #win OR #offers OR is:retweet OR porn OR \"$$$\" OR #give OR #wefollow OR $follow) lang:en","tag":null}],"urls":[{"url":"https:\/\/t.co\/1r3J47nedx","expanded_url":"http:\/\/www.wellandgood.com\/good-looks\/double-your-wardrobe-with-these-genius-pieces\/?utm_campaign=socialflowtwitter&utm_source=twitter&utm_medium=social","expanded_status":200,"expanded_url_title":"Double your wardrobe with these genius pieces","expanded_url_description":"Healthy blogger Sophie Gray is constantly on the go, switching between workouts and business\u2014here's how she makes her activewear work all day."}]},"twitter_filter_level":"low"},{"id":"tag:search.twitter.com,2005:776490219847712768","objectType":"activity","verb":"post","postedTime":"2016-09-15T18:37:49.000Z","generator":{"displayName":"Twitter for iPhone","link":"http:\/\/twitter.com\/download\/iphone"},"provider":{"objectType":"service","displayName":"Twitter","link":"http:\/\/www.twitter.com"},"link":"http:\/\/twitter.com\/xbrendaaaaa\/statuses\/776490219847712768","body":"people really sleep on Old Navy jeans. I bought a pair &amp; never looked back \ud83d\ude02","actor":{"objectType":"person","id":"id:twitter.com:328330493","link":"http:\/\/www.twitter.com\/xbrendaaaaa","displayName":"281-330-8004","postedTime":"2011-07-03T05:00:31.000Z","image":"https:\/\/pbs.twimg.com\/profile_images\/770153562273882112\/_LbwYQ01_normal.jpg","summary":"3.02 \u2653\ufe0f","friendsCount":4294,"followersCount":4399,"listedCount":6,"statusesCount":69756,"twitterTimeZone":"Pacific Time (US & Canada)","verified":false,"utcOffset":"-25200","preferredUsername":"xbrendaaaaa","languages":["en"],"links":[{"href":null,"rel":"me"}],"location":{"objectType":"place","displayName":"252"},"favoritesCount":1561},"object":{"objectType":"note","id":"object:search.twitter.com,2005:776490219847712768","summary":"people really sleep on Old Navy jeans. I bought a pair &amp; never looked back \ud83d\ude02","link":"http:\/\/twitter.com\/xbrendaaaaa\/statuses\/776490219847712768","postedTime":"2016-09-15T18:37:49.000Z"},"favoritesCount":0,"twitter_entities":{"hashtags":[],"urls":[],"user_mentions":[],"symbols":[]},"twitter_lang":"en","retweetCount":0,"gnip":{"matching_rules":[{"value":"(((gap OR intermix) (tee OR top OR shirt OR blouse OR dress OR skirt OR shorts OR sweater OR sweatshirt OR jeans OR pants OR shoes OR clothes)) OR gapbody OR gapfit OR #gaplove OR athleta OR \"banana republic\" OR \"old navy\" OR piperlime -(\"The Gap, inc\" OR \"gap stock\" or $GPS)) -(followback OR #follow OR #free OR contest OR #win OR #offers OR is:retweet OR porn OR \"$$$\" OR #give OR #wefollow OR $follow) lang:en","tag":null}]},"twitter_filter_level":"low"},{"id":"tag:search.twitter.com,2005:776489998853955584","objectType":"activity","verb":"post","postedTime":"2016-09-15T18:36:56.000Z","generator":{"displayName":"Blacktradecircle login","link":"http:\/\/www.blacktradelines.com"},"provider":{"objectType":"service","displayName":"Twitter","link":"http:\/\/www.twitter.com"},"link":"http:\/\/twitter.com\/Blacktradelines\/statuses\/776489998853955584","body":"Banana Republic Sandals Size 10 - $28.00 \n#blacktwitter #BlackOwnedStores @railucille\nhttps:\/\/t.co\/ErJH1p6u0X https:\/\/t.co\/iYRR8WvV19","display_text_range":[0,110],"actor":{"objectType":"person","id":"id:twitter.com:1307706822","link":"http:\/\/www.twitter.com\/Blacktradelines","displayName":"BlackTradeCircle App","postedTime":"2013-03-27T15:00:51.000Z","image":"https:\/\/pbs.twimg.com\/profile_images\/634105437986553856\/7ZiUAWvM_normal.png","summary":"#BlackTradeLines uses digital technology to empower BLK businesses. The Mobile app (BlackTradeCircle) locates nearest Black Business. http:\/\/t.co\/evkMbuO7M9","friendsCount":9633,"followersCount":9209,"listedCount":211,"statusesCount":366042,"twitterTimeZone":"Central Time (US & Canada)","verified":false,"utcOffset":"-18000","preferredUsername":"Blacktradelines","languages":["en"],"links":[{"href":"http:\/\/www.blacktradelines.com","rel":"me"}],"location":{"objectType":"place","displayName":"USA"},"favoritesCount":8106},"object":{"objectType":"note","id":"object:search.twitter.com,2005:776489998853955584","summary":"Banana Republic Sandals Size 10 - $28.00 \n#blacktwitter #BlackOwnedStores @railucille\nhttps:\/\/t.co\/ErJH1p6u0X https:\/\/t.co\/iYRR8WvV19","link":"http:\/\/twitter.com\/Blacktradelines\/statuses\/776489998853955584","postedTime":"2016-09-15T18:36:56.000Z"},"favoritesCount":0,"twitter_entities":{"hashtags":[{"text":"blacktwitter","indices":[43,56]},{"text":"BlackOwnedStores","indices":[57,74]}],"urls":[{"url":"https:\/\/t.co\/ErJH1p6u0X","expanded_url":"http:\/\/blacktradelines.com\/store\/30\/item\/292\/Banana-Republic-Sandals-Size-10","display_url":"blacktradelines.com\/store\/30\/item\/\u2026","indices":[87,110]}],"user_mentions":[{"screen_name":"railucille","name":"Narai","id":133928859,"id_str":"133928859","indices":[75,86]}],"symbols":[],"media":[{"id":776489996832247808,"id_str":"776489996832247808","indices":[111,134],"media_url":"http:\/\/pbs.twimg.com\/media\/CsalicDUkAA52SV.jpg","media_url_https":"https:\/\/pbs.twimg.com\/media\/CsalicDUkAA52SV.jpg","url":"https:\/\/t.co\/iYRR8WvV19","display_url":"pic.twitter.com\/iYRR8WvV19","expanded_url":"https:\/\/twitter.com\/Blacktradelines\/status\/776489998853955584\/photo\/1","type":"photo","sizes":{"medium":{"w":600,"h":600,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"small":{"w":600,"h":600,"resize":"fit"},"large":{"w":600,"h":600,"resize":"fit"}}}]},"twitter_extended_entities":{"media":[{"id":776489996832247808,"id_str":"776489996832247808","indices":[111,134],"media_url":"http:\/\/pbs.twimg.com\/media\/CsalicDUkAA52SV.jpg","media_url_https":"https:\/\/pbs.twimg.com\/media\/CsalicDUkAA52SV.jpg","url":"https:\/\/t.co\/iYRR8WvV19","display_url":"pic.twitter.com\/iYRR8WvV19","expanded_url":"https:\/\/twitter.com\/Blacktradelines\/status\/776489998853955584\/photo\/1","type":"photo","sizes":{"medium":{"w":600,"h":600,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"small":{"w":600,"h":600,"resize":"fit"},"large":{"w":600,"h":600,"resize":"fit"}}}]},"twitter_lang":"en","retweetCount":0,"gnip":{"matching_rules":[{"value":"(((gap OR intermix) (tee OR top OR shirt OR blouse OR dress OR skirt OR shorts OR sweater OR sweatshirt OR jeans OR pants OR shoes OR clothes)) OR gapbody OR gapfit OR #gaplove OR athleta OR \"banana republic\" OR \"old navy\" OR piperlime -(\"The Gap, inc\" OR \"gap stock\" or $GPS)) -(followback OR #follow OR #free OR contest OR #win OR #offers OR is:retweet OR porn OR \"$$$\" OR #give OR #wefollow OR $follow) lang:en","tag":null}],"urls":[{"url":"https:\/\/t.co\/ErJH1p6u0X","expanded_url":"http:\/\/blacktradelines.com\/store\/30\/item\/292\/Banana-Republic-Sandals-Size-10","expanded_status":200,"expanded_url_title":"Banana Republic Sandals Size 10","expanded_url_description":"Black leather sandals, with slim chunky heel. In excellent condition. Size 10"}]},"twitter_filter_level":"low"},{"id":"tag:search.twitter.com,2005:776489854381064192","objectType":"activity","verb":"post","postedTime":"2016-09-15T18:36:22.000Z","generator":{"displayName":"Poshmark","link":"http:\/\/poshmark.com\/"},"provider":{"objectType":"service","displayName":"Twitter","link":"http:\/\/www.twitter.com"},"link":"http:\/\/twitter.com\/hannahcookcross\/statuses\/776489854381064192","body":"I just added this to my closet on Poshmark: Gap khaki linen skirt. https:\/\/t.co\/qORGCvO3px via @poshmarkapp #shopmycloset","actor":{"objectType":"person","id":"id:twitter.com:136032425","link":"http:\/\/www.twitter.com\/hannahcookcross","displayName":"Hannah Cook Cross","postedTime":"2010-04-22T21:25:04.000Z","image":"https:\/\/pbs.twimg.com\/profile_images\/1093410695\/ec3d0c99-573a-4f26-b23a-20ed5cf48729_normal.png","summary":"Poet, mom of two gingers, stylist, and fashion curator.","friendsCount":314,"followersCount":420,"listedCount":12,"statusesCount":4844,"twitterTimeZone":"Arizona","verified":false,"utcOffset":"-25200","preferredUsername":"hannahcookcross","languages":["en"],"links":[{"href":"http:\/\/www.poshmark.com\/hotmommy","rel":"me"}],"location":{"objectType":"place","displayName":"Arizona"},"favoritesCount":23},"object":{"objectType":"note","id":"object:search.twitter.com,2005:776489854381064192","summary":"I just added this to my closet on Poshmark: Gap khaki linen skirt. https:\/\/t.co\/qORGCvO3px via @poshmarkapp #shopmycloset","link":"http:\/\/twitter.com\/hannahcookcross\/statuses\/776489854381064192","postedTime":"2016-09-15T18:36:22.000Z"},"favoritesCount":0,"twitter_entities":{"hashtags":[{"text":"shopmycloset","indices":[108,121]}],"urls":[{"url":"https:\/\/t.co\/qORGCvO3px","expanded_url":"https:\/\/bnc.lt\/focc\/TcBEjPveHw","display_url":"bnc.lt\/focc\/TcBEjPveHw","indices":[67,90]}],"user_mentions":[{"screen_name":"Poshmarkapp","name":"Poshmark","id":357211620,"id_str":"357211620","indices":[95,107]}],"symbols":[]},"twitter_lang":"en","retweetCount":0,"gnip":{"matching_rules":[{"value":"(((gap OR intermix) (tee OR top OR shirt OR blouse OR dress OR skirt OR shorts OR sweater OR sweatshirt OR jeans OR pants OR shoes OR clothes)) OR gapbody OR gapfit OR #gaplove OR athleta OR \"banana republic\" OR \"old navy\" OR piperlime -(\"The Gap, inc\" OR \"gap stock\" or $GPS)) -(followback OR #follow OR #free OR contest OR #win OR #offers OR is:retweet OR porn OR \"$$$\" OR #give OR #wefollow OR $follow) lang:en","tag":null}],"urls":[{"url":"https:\/\/t.co\/qORGCvO3px","expanded_url":"https:\/\/poshmark.com\/listing\/Gap-khaki-linen-skirt-57aed93b680278637602d923?utm_campaign=referral_code%3DHBRNI","expanded_status":200,"expanded_url_title":"Gap khaki linen skirt","expanded_url_description":"Perfect skirt to help you coast deom spring to summer and right into fall. Double front pockets (fatigue and button seam) and back slip pockets. Excellent condition. Fabric content 100% linen Approx. Measurements in inches Waist 34 Hip 40 Length 17.5 No trades."}]},"twitter_filter_level":"low"},{"id":"tag:search.twitter.com,2005:776489702463418368","objectType":"activity","verb":"post","postedTime":"2016-09-15T18:35:46.000Z","generator":{"displayName":"twitterfeed","link":"http:\/\/twitterfeed.com"},"provider":{"objectType":"service","displayName":"Twitter","link":"http:\/\/www.twitter.com"},"link":"http:\/\/twitter.com\/MissFiyahwurkz\/statuses\/776489702463418368","body":"Women's Size 26\/2 Banana Republic Bootcut Jeans https:\/\/t.co\/oTB8H3dk1Q","actor":{"objectType":"person","id":"id:twitter.com:749657379688607744","link":"http:\/\/www.twitter.com\/MissFiyahwurkz","displayName":"krystal v","postedTime":"2016-07-03T17:33:42.079Z","image":"https:\/\/pbs.twimg.com\/profile_images\/765359053027565568\/pTtaS-sY_normal.jpg","summary":"Internet Marketer Web enthusiast!","friendsCount":207,"followersCount":4968,"listedCount":24,"statusesCount":71931,"twitterTimeZone":null,"verified":false,"utcOffset":null,"preferredUsername":"MissFiyahwurkz","languages":["en"],"links":[{"href":null,"rel":"me"}],"favoritesCount":9},"object":{"objectType":"note","id":"object:search.twitter.com,2005:776489702463418368","summary":"Women's Size 26\/2 Banana Republic Bootcut Jeans https:\/\/t.co\/oTB8H3dk1Q","link":"http:\/\/twitter.com\/MissFiyahwurkz\/statuses\/776489702463418368","postedTime":"2016-09-15T18:35:46.000Z"},"favoritesCount":0,"twitter_entities":{"hashtags":[],"urls":[{"url":"https:\/\/t.co\/oTB8H3dk1Q","expanded_url":"http:\/\/ebay.to\/2cBpM8r","display_url":"ebay.to\/2cBpM8r","indices":[48,71]}],"user_mentions":[],"symbols":[]},"twitter_lang":"en","retweetCount":0,"gnip":{"matching_rules":[{"value":"(((gap OR intermix) (tee OR top OR shirt OR blouse OR dress OR skirt OR shorts OR sweater OR sweatshirt OR jeans OR pants OR shoes OR clothes)) OR gapbody OR gapfit OR #gaplove OR athleta OR \"banana republic\" OR \"old navy\" OR piperlime -(\"The Gap, inc\" OR \"gap stock\" or $GPS)) -(followback OR #follow OR #free OR contest OR #win OR #offers OR is:retweet OR porn OR \"$$$\" OR #give OR #wefollow OR $follow) lang:en","tag":null}],"urls":[{"url":"https:\/\/t.co\/oTB8H3dk1Q","expanded_url":"http:\/\/www.ebay.com\/itm\/like\/131940171928?item=131940171928&lgeo=1&utm_medium=twitter&utm_source=twitterfeed&vectorid=229466&rmvSB=true","expanded_status":200,"expanded_url_title":"Women's Size 26\/2 Banana Republic Bootcut Jeans","expanded_url_description":"US $7.00 Pre-owned in Clothing, Shoes & Accessories, Women's Clothing, Jeans"}]},"twitter_filter_level":"low"},{"id":"tag:search.twitter.com,2005:776489700919943168","objectType":"activity","verb":"post","postedTime":"2016-09-15T18:35:45.000Z","generator":{"displayName":"twitterfeed","link":"http:\/\/twitterfeed.com"},"provider":{"objectType":"service","displayName":"Twitter","link":"http:\/\/www.twitter.com"},"link":"http:\/\/twitter.com\/MissFiyahwurkz\/statuses\/776489700919943168","body":"Womens Size 12P Nwt New Banana Republic Khaki Cargo https:\/\/t.co\/wwexjW548n","actor":{"objectType":"person","id":"id:twitter.com:749657379688607744","link":"http:\/\/www.twitter.com\/MissFiyahwurkz","displayName":"krystal v","postedTime":"2016-07-03T17:33:42.079Z","image":"https:\/\/pbs.twimg.com\/profile_images\/765359053027565568\/pTtaS-sY_normal.jpg","summary":"Internet Marketer Web enthusiast!","friendsCount":207,"followersCount":4968,"listedCount":24,"statusesCount":71931,"twitterTimeZone":null,"verified":false,"utcOffset":null,"preferredUsername":"MissFiyahwurkz","languages":["en"],"links":[{"href":null,"rel":"me"}],"favoritesCount":9},"object":{"objectType":"note","id":"object:search.twitter.com,2005:776489700919943168","summary":"Womens Size 12P Nwt New Banana Republic Khaki Cargo https:\/\/t.co\/wwexjW548n","link":"http:\/\/twitter.com\/MissFiyahwurkz\/statuses\/776489700919943168","postedTime":"2016-09-15T18:35:45.000Z"},"favoritesCount":0,"twitter_entities":{"hashtags":[],"urls":[{"url":"https:\/\/t.co\/wwexjW548n","expanded_url":"http:\/\/ebay.to\/2crac4L","display_url":"ebay.to\/2crac4L","indices":[52,75]}],"user_mentions":[],"symbols":[]},"twitter_lang":"en","retweetCount":0,"gnip":{"matching_rules":[{"value":"(((gap OR intermix) (tee OR top OR shirt OR blouse OR dress OR skirt OR shorts OR sweater OR sweatshirt OR jeans OR pants OR shoes OR clothes)) OR gapbody OR gapfit OR #gaplove OR athleta OR \"banana republic\" OR \"old navy\" OR piperlime -(\"The Gap, inc\" OR \"gap stock\" or $GPS)) -(followback OR #follow OR #free OR contest OR #win OR #offers OR is:retweet OR porn OR \"$$$\" OR #give OR #wefollow OR $follow) lang:en","tag":null}],"urls":[{"url":"https:\/\/t.co\/wwexjW548n","expanded_url":"http:\/\/www.ebay.com\/itm\/like\/122135557847?lgeo=1&vectorid=229466&utm_medium=twitter&utm_source=twitterfeed&item=122135557847&rmvSB=true","expanded_status":200,"expanded_url_title":"Womens Size 12P Nwt New Banana Republic Khaki Cargo","expanded_url_description":"US $19.99 New with tags in Clothing, Shoes & Accessories, Women's Clothing, Jeans"}]},"twitter_filter_level":"low"},{"id":"tag:search.twitter.com,2005:776489700118843392","objectType":"activity","verb":"post","postedTime":"2016-09-15T18:35:45.000Z","generator":{"displayName":"twitterfeed","link":"http:\/\/twitterfeed.com"},"provider":{"objectType":"service","displayName":"Twitter","link":"http:\/\/www.twitter.com"},"link":"http:\/\/twitter.com\/MissFiyahwurkz\/statuses\/776489700118843392","body":"Womens Size 12 Nwt New Banana Republic Vintage Denim Jeans https:\/\/t.co\/tGP3XfR00Q","actor":{"objectType":"person","id":"id:twitter.com:749657379688607744","link":"http:\/\/www.twitter.com\/MissFiyahwurkz","displayName":"krystal v","postedTime":"2016-07-03T17:33:42.079Z","image":"https:\/\/pbs.twimg.com\/profile_images\/765359053027565568\/pTtaS-sY_normal.jpg","summary":"Internet Marketer Web enthusiast!","friendsCount":207,"followersCount":4968,"listedCount":24,"statusesCount":71931,"twitterTimeZone":null,"verified":false,"utcOffset":null,"preferredUsername":"MissFiyahwurkz","languages":["en"],"links":[{"href":null,"rel":"me"}],"favoritesCount":9},"object":{"objectType":"note","id":"object:search.twitter.com,2005:776489700118843392","summary":"Womens Size 12 Nwt New Banana Republic Vintage Denim Jeans https:\/\/t.co\/tGP3XfR00Q","link":"http:\/\/twitter.com\/MissFiyahwurkz\/statuses\/776489700118843392","postedTime":"2016-09-15T18:35:45.000Z"},"favoritesCount":0,"twitter_entities":{"hashtags":[],"urls":[{"url":"https:\/\/t.co\/tGP3XfR00Q","expanded_url":"http:\/\/ebay.to\/2craEA8","display_url":"ebay.to\/2craEA8","indices":[59,82]}],"user_mentions":[],"symbols":[]},"twitter_lang":"en","retweetCount":0,"gnip":{"matching_rules":[{"value":"(((gap OR intermix) (tee OR top OR shirt OR blouse OR dress OR skirt OR shorts OR sweater OR sweatshirt OR jeans OR pants OR shoes OR clothes)) OR gapbody OR gapfit OR #gaplove OR athleta OR \"banana republic\" OR \"old navy\" OR piperlime -(\"The Gap, inc\" OR \"gap stock\" or $GPS)) -(followback OR #follow OR #free OR contest OR #win OR #offers OR is:retweet OR porn OR \"$$$\" OR #give OR #wefollow OR $follow) lang:en","tag":null}],"urls":[{"url":"https:\/\/t.co\/tGP3XfR00Q","expanded_url":"http:\/\/www.ebay.com\/itm\/like\/122135556187?item=122135556187&lgeo=1&utm_medium=twitter&utm_source=twitterfeed&vectorid=229466&rmvSB=true","expanded_status":200,"expanded_url_title":"Womens Size 12 Nwt New Banana Republic Vintage Denim Jeans","expanded_url_description":"US $24.00 New with tags in Clothing, Shoes & Accessories, Women's Clothing, Jeans"}]},"twitter_filter_level":"low"}],"next":"eyJhdXRoZW50aWNpdHkiOiI1ZTM3YTQ4YzNhZWRjOGNiZTAxNTc4MmNhMzAyZjE3ZWIyMzc1NjFjYmI5MTllYmQwNjE4ZTY0MWIwZTA2ZjViIiwiZnJvbURhdGUiOiIyMDE2MDgxNjAwMDAiLCJ0b0RhdGUiOiIyMDE2MDkxNTE4NDAiLCJuZXh0IjoiMjAxNjA5MTUxODM1NDUtNzc2NDg5NzAwMTE4ODQzMzkxLTAifQ==","requestParameters":{"maxResults":10,"fromDate":"201608160000","toDate":"201609151840"}}
@@ -0,0 +1 @@
1
+ {"results":[{"timePeriod":"201609151800","count":75},{"timePeriod":"201609151700","count":114},{"timePeriod":"201609151600","count":85},{"timePeriod":"201609151500","count":91},{"timePeriod":"201609151400","count":96},{"timePeriod":"201609151300","count":120},{"timePeriod":"201609151200","count":97},{"timePeriod":"201609151100","count":54},{"timePeriod":"201609151000","count":51},{"timePeriod":"201609150900","count":34},{"timePeriod":"201609150800","count":30},{"timePeriod":"201609150700","count":24},{"timePeriod":"201609150600","count":35},{"timePeriod":"201609150500","count":44},{"timePeriod":"201609150400","count":53},{"timePeriod":"201609150300","count":89},{"timePeriod":"201609150200","count":121},{"timePeriod":"201609150100","count":89},{"timePeriod":"201609150000","count":110},{"timePeriod":"201609142300","count":109},{"timePeriod":"201609142200","count":68},{"timePeriod":"201609142100","count":112},{"timePeriod":"201609142000","count":95},{"timePeriod":"201609141900","count":100},{"timePeriod":"201609141800","count":99},{"timePeriod":"201609141700","count":123},{"timePeriod":"201609141600","count":88},{"timePeriod":"201609141500","count":125},{"timePeriod":"201609141400","count":113},{"timePeriod":"201609141300","count":88},{"timePeriod":"201609141200","count":75},{"timePeriod":"201609141100","count":71},{"timePeriod":"201609141000","count":42},{"timePeriod":"201609140900","count":35},{"timePeriod":"201609140800","count":36},{"timePeriod":"201609140700","count":33},{"timePeriod":"201609140600","count":38},{"timePeriod":"201609140500","count":49},{"timePeriod":"201609140400","count":65},{"timePeriod":"201609140300","count":103},{"timePeriod":"201609140200","count":130},{"timePeriod":"201609140100","count":133},{"timePeriod":"201609140000","count":119},{"timePeriod":"201609132300","count":108},{"timePeriod":"201609132200","count":107},{"timePeriod":"201609132100","count":100},{"timePeriod":"201609132000","count":93},{"timePeriod":"201609131900","count":112},{"timePeriod":"201609131800","count":128},{"timePeriod":"201609131700","count":125},{"timePeriod":"201609131600","count":125},{"timePeriod":"201609131500","count":107},{"timePeriod":"201609131400","count":122},{"timePeriod":"201609131300","count":136},{"timePeriod":"201609131200","count":98},{"timePeriod":"201609131100","count":85},{"timePeriod":"201609131000","count":74},{"timePeriod":"201609130900","count":31},{"timePeriod":"201609130800","count":43},{"timePeriod":"201609130700","count":38},{"timePeriod":"201609130600","count":68},{"timePeriod":"201609130500","count":51},{"timePeriod":"201609130400","count":130},{"timePeriod":"201609130300","count":119},{"timePeriod":"201609130200","count":141},{"timePeriod":"201609130100","count":133},{"timePeriod":"201609130000","count":155},{"timePeriod":"201609122300","count":117},{"timePeriod":"201609122200","count":108},{"timePeriod":"201609122100","count":133},{"timePeriod":"201609122000","count":132},{"timePeriod":"201609121900","count":161},{"timePeriod":"201609121800","count":164},{"timePeriod":"201609121700","count":157},{"timePeriod":"201609121600","count":128},{"timePeriod":"201609121500","count":142},{"timePeriod":"201609121400","count":137},{"timePeriod":"201609121300","count":113},{"timePeriod":"201609121200","count":92},{"timePeriod":"201609121100","count":55},{"timePeriod":"201609121000","count":45},{"timePeriod":"201609120900","count":62},{"timePeriod":"201609120800","count":51},{"timePeriod":"201609120700","count":34},{"timePeriod":"201609120600","count":44},{"timePeriod":"201609120500","count":53},{"timePeriod":"201609120400","count":97},{"timePeriod":"201609120300","count":118},{"timePeriod":"201609120200","count":176},{"timePeriod":"201609120100","count":100},{"timePeriod":"201609120000","count":119},{"timePeriod":"201609112300","count":130},{"timePeriod":"201609112200","count":123},{"timePeriod":"201609112100","count":126},{"timePeriod":"201609112000","count":146},{"timePeriod":"201609111900","count":131},{"timePeriod":"201609111800","count":96},{"timePeriod":"201609111700","count":127},{"timePeriod":"201609111600","count":118},{"timePeriod":"201609111500","count":190},{"timePeriod":"201609111400","count":132},{"timePeriod":"201609111300","count":89},{"timePeriod":"201609111200","count":83},{"timePeriod":"201609111100","count":58},{"timePeriod":"201609111000","count":29},{"timePeriod":"201609110900","count":54},{"timePeriod":"201609110800","count":59},{"timePeriod":"201609110700","count":41},{"timePeriod":"201609110600","count":54},{"timePeriod":"201609110500","count":79},{"timePeriod":"201609110400","count":100},{"timePeriod":"201609110300","count":96},{"timePeriod":"201609110200","count":147},{"timePeriod":"201609110100","count":261},{"timePeriod":"201609110000","count":226},{"timePeriod":"201609102300","count":154},{"timePeriod":"201609102200","count":133},{"timePeriod":"201609102100","count":137},{"timePeriod":"201609102000","count":148},{"timePeriod":"201609101900","count":185},{"timePeriod":"201609101800","count":125},{"timePeriod":"201609101700","count":153},{"timePeriod":"201609101600","count":106},{"timePeriod":"201609101500","count":127},{"timePeriod":"201609101400","count":78},{"timePeriod":"201609101300","count":86},{"timePeriod":"201609101200","count":91},{"timePeriod":"201609101100","count":132},{"timePeriod":"201609101000","count":32},{"timePeriod":"201609100900","count":80},{"timePeriod":"201609100800","count":33},{"timePeriod":"201609100700","count":34},{"timePeriod":"201609100600","count":41},{"timePeriod":"201609100500","count":60},{"timePeriod":"201609100400","count":50},{"timePeriod":"201609100300","count":99},{"timePeriod":"201609100200","count":162},{"timePeriod":"201609100100","count":167},{"timePeriod":"201609100000","count":160},{"timePeriod":"201609092300","count":113},{"timePeriod":"201609092200","count":90},{"timePeriod":"201609092100","count":99},{"timePeriod":"201609092000","count":124},{"timePeriod":"201609091900","count":110},{"timePeriod":"201609091800","count":97},{"timePeriod":"201609091700","count":131},{"timePeriod":"201609091600","count":163},{"timePeriod":"201609091500","count":122},{"timePeriod":"201609091400","count":107},{"timePeriod":"201609091300","count":164},{"timePeriod":"201609091200","count":116},{"timePeriod":"201609091100","count":53},{"timePeriod":"201609091000","count":43},{"timePeriod":"201609090900","count":41},{"timePeriod":"201609090800","count":80},{"timePeriod":"201609090700","count":57},{"timePeriod":"201609090600","count":52},{"timePeriod":"201609090500","count":45},{"timePeriod":"201609090400","count":78},{"timePeriod":"201609090300","count":83},{"timePeriod":"201609090200","count":131},{"timePeriod":"201609090100","count":132},{"timePeriod":"201609090000","count":97},{"timePeriod":"201609082300","count":130},{"timePeriod":"201609082200","count":106},{"timePeriod":"201609082100","count":106},{"timePeriod":"201609082000","count":141},{"timePeriod":"201609081900","count":103},{"timePeriod":"201609081800","count":125},{"timePeriod":"201609081700","count":104},{"timePeriod":"201609081600","count":131},{"timePeriod":"201609081500","count":139},{"timePeriod":"201609081400","count":135},{"timePeriod":"201609081300","count":115},{"timePeriod":"201609081200","count":75},{"timePeriod":"201609081100","count":60},{"timePeriod":"201609081000","count":48},{"timePeriod":"201609080900","count":35},{"timePeriod":"201609080800","count":39},{"timePeriod":"201609080700","count":30},{"timePeriod":"201609080600","count":38},{"timePeriod":"201609080500","count":50},{"timePeriod":"201609080400","count":72},{"timePeriod":"201609080300","count":90},{"timePeriod":"201609080200","count":159},{"timePeriod":"201609080100","count":154},{"timePeriod":"201609080000","count":145},{"timePeriod":"201609072300","count":132},{"timePeriod":"201609072200","count":111},{"timePeriod":"201609072100","count":130},{"timePeriod":"201609072000","count":126},{"timePeriod":"201609071900","count":113},{"timePeriod":"201609071800","count":106},{"timePeriod":"201609071700","count":134},{"timePeriod":"201609071600","count":115},{"timePeriod":"201609071500","count":105},{"timePeriod":"201609071400","count":151},{"timePeriod":"201609071300","count":114},{"timePeriod":"201609071200","count":105},{"timePeriod":"201609071100","count":70},{"timePeriod":"201609071000","count":46},{"timePeriod":"201609070900","count":52},{"timePeriod":"201609070800","count":52},{"timePeriod":"201609070700","count":48},{"timePeriod":"201609070600","count":60},{"timePeriod":"201609070500","count":57},{"timePeriod":"201609070400","count":83},{"timePeriod":"201609070300","count":165},{"timePeriod":"201609070200","count":172},{"timePeriod":"201609070100","count":193},{"timePeriod":"201609070000","count":158},{"timePeriod":"201609062300","count":160},{"timePeriod":"201609062200","count":163},{"timePeriod":"201609062100","count":148},{"timePeriod":"201609062000","count":123},{"timePeriod":"201609061900","count":209},{"timePeriod":"201609061800","count":147},{"timePeriod":"201609061700","count":152},{"timePeriod":"201609061600","count":141},{"timePeriod":"201609061500","count":159},{"timePeriod":"201609061400","count":130},{"timePeriod":"201609061300","count":171},{"timePeriod":"201609061200","count":120},{"timePeriod":"201609061100","count":90},{"timePeriod":"201609061000","count":55},{"timePeriod":"201609060900","count":53},{"timePeriod":"201609060800","count":37},{"timePeriod":"201609060700","count":51},{"timePeriod":"201609060600","count":87},{"timePeriod":"201609060500","count":159},{"timePeriod":"201609060400","count":120},{"timePeriod":"201609060300","count":158},{"timePeriod":"201609060200","count":146},{"timePeriod":"201609060100","count":150},{"timePeriod":"201609060000","count":163},{"timePeriod":"201609052300","count":126},{"timePeriod":"201609052200","count":158},{"timePeriod":"201609052100","count":135},{"timePeriod":"201609052000","count":154},{"timePeriod":"201609051900","count":175},{"timePeriod":"201609051800","count":168},{"timePeriod":"201609051700","count":152},{"timePeriod":"201609051600","count":153},{"timePeriod":"201609051500","count":147},{"timePeriod":"201609051400","count":165},{"timePeriod":"201609051300","count":134},{"timePeriod":"201609051200","count":97},{"timePeriod":"201609051100","count":58},{"timePeriod":"201609051000","count":59},{"timePeriod":"201609050900","count":49},{"timePeriod":"201609050800","count":57},{"timePeriod":"201609050700","count":59},{"timePeriod":"201609050600","count":76},{"timePeriod":"201609050500","count":72},{"timePeriod":"201609050400","count":84},{"timePeriod":"201609050300","count":135},{"timePeriod":"201609050200","count":135},{"timePeriod":"201609050100","count":141},{"timePeriod":"201609050000","count":130},{"timePeriod":"201609042300","count":117},{"timePeriod":"201609042200","count":119},{"timePeriod":"201609042100","count":147},{"timePeriod":"201609042000","count":117},{"timePeriod":"201609041900","count":110},{"timePeriod":"201609041800","count":121},{"timePeriod":"201609041700","count":126},{"timePeriod":"201609041600","count":110},{"timePeriod":"201609041500","count":120},{"timePeriod":"201609041400","count":103},{"timePeriod":"201609041300","count":129},{"timePeriod":"201609041200","count":73},{"timePeriod":"201609041100","count":68},{"timePeriod":"201609041000","count":58},{"timePeriod":"201609040900","count":46},{"timePeriod":"201609040800","count":76},{"timePeriod":"201609040700","count":46},{"timePeriod":"201609040600","count":56},{"timePeriod":"201609040500","count":83},{"timePeriod":"201609040400","count":93},{"timePeriod":"201609040300","count":85},{"timePeriod":"201609040200","count":151},{"timePeriod":"201609040100","count":110},{"timePeriod":"201609040000","count":119},{"timePeriod":"201609032300","count":122},{"timePeriod":"201609032200","count":110},{"timePeriod":"201609032100","count":124},{"timePeriod":"201609032000","count":144},{"timePeriod":"201609031900","count":179},{"timePeriod":"201609031800","count":144},{"timePeriod":"201609031700","count":153},{"timePeriod":"201609031600","count":123},{"timePeriod":"201609031500","count":127},{"timePeriod":"201609031400","count":143},{"timePeriod":"201609031300","count":133},{"timePeriod":"201609031200","count":64},{"timePeriod":"201609031100","count":45},{"timePeriod":"201609031000","count":39},{"timePeriod":"201609030900","count":46},{"timePeriod":"201609030800","count":75},{"timePeriod":"201609030700","count":69},{"timePeriod":"201609030600","count":44},{"timePeriod":"201609030500","count":59},{"timePeriod":"201609030400","count":104},{"timePeriod":"201609030300","count":121},{"timePeriod":"201609030200","count":131},{"timePeriod":"201609030100","count":163},{"timePeriod":"201609030000","count":123},{"timePeriod":"201609022300","count":115},{"timePeriod":"201609022200","count":122},{"timePeriod":"201609022100","count":122},{"timePeriod":"201609022000","count":229},{"timePeriod":"201609021900","count":210},{"timePeriod":"201609021800","count":207},{"timePeriod":"201609021700","count":185},{"timePeriod":"201609021600","count":218},{"timePeriod":"201609021500","count":293},{"timePeriod":"201609021400","count":195},{"timePeriod":"201609021300","count":218},{"timePeriod":"201609021200","count":87},{"timePeriod":"201609021100","count":94},{"timePeriod":"201609021000","count":79},{"timePeriod":"201609020900","count":148},{"timePeriod":"201609020800","count":49},{"timePeriod":"201609020700","count":29},{"timePeriod":"201609020600","count":52},{"timePeriod":"201609020500","count":68},{"timePeriod":"201609020400","count":55},{"timePeriod":"201609020300","count":121},{"timePeriod":"201609020200","count":149},{"timePeriod":"201609020100","count":116},{"timePeriod":"201609020000","count":114},{"timePeriod":"201609012300","count":123},{"timePeriod":"201609012200","count":118},{"timePeriod":"201609012100","count":139},{"timePeriod":"201609012000","count":122},{"timePeriod":"201609011900","count":111},{"timePeriod":"201609011800","count":122},{"timePeriod":"201609011700","count":110},{"timePeriod":"201609011600","count":136},{"timePeriod":"201609011500","count":109},{"timePeriod":"201609011400","count":133},{"timePeriod":"201609011300","count":108},{"timePeriod":"201609011200","count":102},{"timePeriod":"201609011100","count":74},{"timePeriod":"201609011000","count":67},{"timePeriod":"201609010900","count":38},{"timePeriod":"201609010800","count":31},{"timePeriod":"201609010700","count":46},{"timePeriod":"201609010600","count":60},{"timePeriod":"201609010500","count":48},{"timePeriod":"201609010400","count":72},{"timePeriod":"201609010300","count":161},{"timePeriod":"201609010200","count":156},{"timePeriod":"201609010100","count":156},{"timePeriod":"201609010000","count":128},{"timePeriod":"201608312300","count":142},{"timePeriod":"201608312200","count":119},{"timePeriod":"201608312100","count":99},{"timePeriod":"201608312000","count":106},{"timePeriod":"201608311900","count":136},{"timePeriod":"201608311800","count":129},{"timePeriod":"201608311700","count":141},{"timePeriod":"201608311600","count":127},{"timePeriod":"201608311500","count":129},{"timePeriod":"201608311400","count":99},{"timePeriod":"201608311300","count":110},{"timePeriod":"201608311200","count":94},{"timePeriod":"201608311100","count":76},{"timePeriod":"201608311000","count":48},{"timePeriod":"201608310900","count":46},{"timePeriod":"201608310800","count":40},{"timePeriod":"201608310700","count":48},{"timePeriod":"201608310600","count":51},{"timePeriod":"201608310500","count":94},{"timePeriod":"201608310400","count":92},{"timePeriod":"201608310300","count":91},{"timePeriod":"201608310200","count":196},{"timePeriod":"201608310100","count":137},{"timePeriod":"201608310000","count":163},{"timePeriod":"201608302300","count":132},{"timePeriod":"201608302200","count":132},{"timePeriod":"201608302100","count":149},{"timePeriod":"201608302000","count":117},{"timePeriod":"201608301900","count":114},{"timePeriod":"201608301800","count":122},{"timePeriod":"201608301700","count":158},{"timePeriod":"201608301600","count":877},{"timePeriod":"201608301500","count":140},{"timePeriod":"201608301400","count":88},{"timePeriod":"201608301300","count":100},{"timePeriod":"201608301200","count":119},{"timePeriod":"201608301100","count":58},{"timePeriod":"201608301000","count":71},{"timePeriod":"201608300900","count":49},{"timePeriod":"201608300800","count":68},{"timePeriod":"201608300700","count":51},{"timePeriod":"201608300600","count":41},{"timePeriod":"201608300500","count":73},{"timePeriod":"201608300400","count":92},{"timePeriod":"201608300300","count":116},{"timePeriod":"201608300200","count":159},{"timePeriod":"201608300100","count":119},{"timePeriod":"201608300000","count":155},{"timePeriod":"201608292300","count":135},{"timePeriod":"201608292200","count":100},{"timePeriod":"201608292100","count":95},{"timePeriod":"201608292000","count":107},{"timePeriod":"201608291900","count":103},{"timePeriod":"201608291800","count":103},{"timePeriod":"201608291700","count":124},{"timePeriod":"201608291600","count":181},{"timePeriod":"201608291500","count":111},{"timePeriod":"201608291400","count":111},{"timePeriod":"201608291300","count":133},{"timePeriod":"201608291200","count":78},{"timePeriod":"201608291100","count":59},{"timePeriod":"201608291000","count":74},{"timePeriod":"201608290900","count":42},{"timePeriod":"201608290800","count":27},{"timePeriod":"201608290700","count":72},{"timePeriod":"201608290600","count":59},{"timePeriod":"201608290500","count":59},{"timePeriod":"201608290400","count":74},{"timePeriod":"201608290300","count":154},{"timePeriod":"201608290200","count":122},{"timePeriod":"201608290100","count":160},{"timePeriod":"201608290000","count":128},{"timePeriod":"201608282300","count":154},{"timePeriod":"201608282200","count":152},{"timePeriod":"201608282100","count":145},{"timePeriod":"201608282000","count":126},{"timePeriod":"201608281900","count":150},{"timePeriod":"201608281800","count":102},{"timePeriod":"201608281700","count":124},{"timePeriod":"201608281600","count":96},{"timePeriod":"201608281500","count":82},{"timePeriod":"201608281400","count":116},{"timePeriod":"201608281300","count":108},{"timePeriod":"201608281200","count":91},{"timePeriod":"201608281100","count":62},{"timePeriod":"201608281000","count":46},{"timePeriod":"201608280900","count":31},{"timePeriod":"201608280800","count":60},{"timePeriod":"201608280700","count":35},{"timePeriod":"201608280600","count":38},{"timePeriod":"201608280500","count":70},{"timePeriod":"201608280400","count":82},{"timePeriod":"201608280300","count":112},{"timePeriod":"201608280200","count":106},{"timePeriod":"201608280100","count":115},{"timePeriod":"201608280000","count":111},{"timePeriod":"201608272300","count":114},{"timePeriod":"201608272200","count":117},{"timePeriod":"201608272100","count":119},{"timePeriod":"201608272000","count":121},{"timePeriod":"201608271900","count":154},{"timePeriod":"201608271800","count":116},{"timePeriod":"201608271700","count":130},{"timePeriod":"201608271600","count":103},{"timePeriod":"201608271500","count":124},{"timePeriod":"201608271400","count":118},{"timePeriod":"201608271300","count":102},{"timePeriod":"201608271200","count":107},{"timePeriod":"201608271100","count":72},{"timePeriod":"201608271000","count":65},{"timePeriod":"201608270900","count":34},{"timePeriod":"201608270800","count":39},{"timePeriod":"201608270700","count":38},{"timePeriod":"201608270600","count":47},{"timePeriod":"201608270500","count":56},{"timePeriod":"201608270400","count":96},{"timePeriod":"201608270300","count":83},{"timePeriod":"201608270200","count":106},{"timePeriod":"201608270100","count":155},{"timePeriod":"201608270000","count":140},{"timePeriod":"201608262300","count":132},{"timePeriod":"201608262200","count":107},{"timePeriod":"201608262100","count":110},{"timePeriod":"201608262000","count":130},{"timePeriod":"201608261900","count":141},{"timePeriod":"201608261800","count":120},{"timePeriod":"201608261700","count":105},{"timePeriod":"201608261600","count":124},{"timePeriod":"201608261500","count":135},{"timePeriod":"201608261400","count":102},{"timePeriod":"201608261300","count":106},{"timePeriod":"201608261200","count":121},{"timePeriod":"201608261100","count":73},{"timePeriod":"201608261000","count":51},{"timePeriod":"201608260900","count":59},{"timePeriod":"201608260800","count":35},{"timePeriod":"201608260700","count":54},{"timePeriod":"201608260600","count":49},{"timePeriod":"201608260500","count":68},{"timePeriod":"201608260400","count":90},{"timePeriod":"201608260300","count":94},{"timePeriod":"201608260200","count":146},{"timePeriod":"201608260100","count":183},{"timePeriod":"201608260000","count":99},{"timePeriod":"201608252300","count":133},{"timePeriod":"201608252200","count":129},{"timePeriod":"201608252100","count":127},{"timePeriod":"201608252000","count":138},{"timePeriod":"201608251900","count":190},{"timePeriod":"201608251800","count":148},{"timePeriod":"201608251700","count":133},{"timePeriod":"201608251600","count":122},{"timePeriod":"201608251500","count":105},{"timePeriod":"201608251400","count":151},{"timePeriod":"201608251300","count":126},{"timePeriod":"201608251200","count":133},{"timePeriod":"201608251100","count":128},{"timePeriod":"201608251000","count":62},{"timePeriod":"201608250900","count":43},{"timePeriod":"201608250800","count":47},{"timePeriod":"201608250700","count":39},{"timePeriod":"201608250600","count":76},{"timePeriod":"201608250500","count":69},{"timePeriod":"201608250400","count":70},{"timePeriod":"201608250300","count":102},{"timePeriod":"201608250200","count":157},{"timePeriod":"201608250100","count":118},{"timePeriod":"201608250000","count":142},{"timePeriod":"201608242300","count":112},{"timePeriod":"201608242200","count":142},{"timePeriod":"201608242100","count":128},{"timePeriod":"201608242000","count":148},{"timePeriod":"201608241900","count":140},{"timePeriod":"201608241800","count":109},{"timePeriod":"201608241700","count":120},{"timePeriod":"201608241600","count":126},{"timePeriod":"201608241500","count":174},{"timePeriod":"201608241400","count":139},{"timePeriod":"201608241300","count":122},{"timePeriod":"201608241200","count":75},{"timePeriod":"201608241100","count":77},{"timePeriod":"201608241000","count":64},{"timePeriod":"201608240900","count":62},{"timePeriod":"201608240800","count":38},{"timePeriod":"201608240700","count":60},{"timePeriod":"201608240600","count":62},{"timePeriod":"201608240500","count":71},{"timePeriod":"201608240400","count":90},{"timePeriod":"201608240300","count":111},{"timePeriod":"201608240200","count":148},{"timePeriod":"201608240100","count":117},{"timePeriod":"201608240000","count":154},{"timePeriod":"201608232300","count":116},{"timePeriod":"201608232200","count":107},{"timePeriod":"201608232100","count":125},{"timePeriod":"201608232000","count":124},{"timePeriod":"201608231900","count":132},{"timePeriod":"201608231800","count":125},{"timePeriod":"201608231700","count":125},{"timePeriod":"201608231600","count":170},{"timePeriod":"201608231500","count":118},{"timePeriod":"201608231400","count":117},{"timePeriod":"201608231300","count":72},{"timePeriod":"201608231200","count":79},{"timePeriod":"201608231100","count":77},{"timePeriod":"201608231000","count":54},{"timePeriod":"201608230900","count":52},{"timePeriod":"201608230800","count":38},{"timePeriod":"201608230700","count":39},{"timePeriod":"201608230600","count":59},{"timePeriod":"201608230500","count":58},{"timePeriod":"201608230400","count":97},{"timePeriod":"201608230300","count":146},{"timePeriod":"201608230200","count":101},{"timePeriod":"201608230100","count":97},{"timePeriod":"201608230000","count":128},{"timePeriod":"201608222300","count":124},{"timePeriod":"201608222200","count":113},{"timePeriod":"201608222100","count":156},{"timePeriod":"201608222000","count":126},{"timePeriod":"201608221900","count":136},{"timePeriod":"201608221800","count":135},{"timePeriod":"201608221700","count":136},{"timePeriod":"201608221600","count":103},{"timePeriod":"201608221500","count":133},{"timePeriod":"201608221400","count":190},{"timePeriod":"201608221300","count":98},{"timePeriod":"201608221200","count":60},{"timePeriod":"201608221100","count":40},{"timePeriod":"201608221000","count":44},{"timePeriod":"201608220900","count":58},{"timePeriod":"201608220800","count":54},{"timePeriod":"201608220700","count":63},{"timePeriod":"201608220600","count":69},{"timePeriod":"201608220500","count":57},{"timePeriod":"201608220400","count":65},{"timePeriod":"201608220300","count":126},{"timePeriod":"201608220200","count":154},{"timePeriod":"201608220100","count":130},{"timePeriod":"201608220000","count":156},{"timePeriod":"201608212300","count":125},{"timePeriod":"201608212200","count":122},{"timePeriod":"201608212100","count":131},{"timePeriod":"201608212000","count":150},{"timePeriod":"201608211900","count":119},{"timePeriod":"201608211800","count":96},{"timePeriod":"201608211700","count":105},{"timePeriod":"201608211600","count":115},{"timePeriod":"201608211500","count":101},{"timePeriod":"201608211400","count":94},{"timePeriod":"201608211300","count":95},{"timePeriod":"201608211200","count":81},{"timePeriod":"201608211100","count":69},{"timePeriod":"201608211000","count":31},{"timePeriod":"201608210900","count":53},{"timePeriod":"201608210800","count":68},{"timePeriod":"201608210700","count":50},{"timePeriod":"201608210600","count":55},{"timePeriod":"201608210500","count":51},{"timePeriod":"201608210400","count":73},{"timePeriod":"201608210300","count":94},{"timePeriod":"201608210200","count":100},{"timePeriod":"201608210100","count":174},{"timePeriod":"201608210000","count":111},{"timePeriod":"201608202300","count":105},{"timePeriod":"201608202200","count":91},{"timePeriod":"201608202100","count":126},{"timePeriod":"201608202000","count":119},{"timePeriod":"201608201900","count":136},{"timePeriod":"201608201800","count":125},{"timePeriod":"201608201700","count":123},{"timePeriod":"201608201600","count":143},{"timePeriod":"201608201500","count":123},{"timePeriod":"201608201400","count":123},{"timePeriod":"201608201300","count":136},{"timePeriod":"201608201200","count":70},{"timePeriod":"201608201100","count":66},{"timePeriod":"201608201000","count":43},{"timePeriod":"201608200900","count":43},{"timePeriod":"201608200800","count":55},{"timePeriod":"201608200700","count":56},{"timePeriod":"201608200600","count":54},{"timePeriod":"201608200500","count":56},{"timePeriod":"201608200400","count":102},{"timePeriod":"201608200300","count":178},{"timePeriod":"201608200200","count":136},{"timePeriod":"201608200100","count":134},{"timePeriod":"201608200000","count":104},{"timePeriod":"201608192300","count":109},{"timePeriod":"201608192200","count":134},{"timePeriod":"201608192100","count":105},{"timePeriod":"201608192000","count":123},{"timePeriod":"201608191900","count":117},{"timePeriod":"201608191800","count":126},{"timePeriod":"201608191700","count":126},{"timePeriod":"201608191600","count":107},{"timePeriod":"201608191500","count":144},{"timePeriod":"201608191400","count":104},{"timePeriod":"201608191300","count":104},{"timePeriod":"201608191200","count":89},{"timePeriod":"201608191100","count":72},{"timePeriod":"201608191000","count":97},{"timePeriod":"201608190900","count":59},{"timePeriod":"201608190800","count":56},{"timePeriod":"201608190700","count":31},{"timePeriod":"201608190600","count":69},{"timePeriod":"201608190500","count":74},{"timePeriod":"201608190400","count":88},{"timePeriod":"201608190300","count":101},{"timePeriod":"201608190200","count":125},{"timePeriod":"201608190100","count":125},{"timePeriod":"201608190000","count":140},{"timePeriod":"201608182300","count":157},{"timePeriod":"201608182200","count":136},{"timePeriod":"201608182100","count":118},{"timePeriod":"201608182000","count":129},{"timePeriod":"201608181900","count":110},{"timePeriod":"201608181800","count":100},{"timePeriod":"201608181700","count":120},{"timePeriod":"201608181600","count":121},{"timePeriod":"201608181500","count":161},{"timePeriod":"201608181400","count":132},{"timePeriod":"201608181300","count":79},{"timePeriod":"201608181200","count":87},{"timePeriod":"201608181100","count":87},{"timePeriod":"201608181000","count":67},{"timePeriod":"201608180900","count":103},{"timePeriod":"201608180800","count":58},{"timePeriod":"201608180700","count":42},{"timePeriod":"201608180600","count":41},{"timePeriod":"201608180500","count":83},{"timePeriod":"201608180400","count":68},{"timePeriod":"201608180300","count":115},{"timePeriod":"201608180200","count":137},{"timePeriod":"201608180100","count":148},{"timePeriod":"201608180000","count":125},{"timePeriod":"201608172300","count":125},{"timePeriod":"201608172200","count":100},{"timePeriod":"201608172100","count":114},{"timePeriod":"201608172000","count":118},{"timePeriod":"201608171900","count":127},{"timePeriod":"201608171800","count":130},{"timePeriod":"201608171700","count":111},{"timePeriod":"201608171600","count":141},{"timePeriod":"201608171500","count":138},{"timePeriod":"201608171400","count":130},{"timePeriod":"201608171300","count":86},{"timePeriod":"201608171200","count":60},{"timePeriod":"201608171100","count":60},{"timePeriod":"201608171000","count":56},{"timePeriod":"201608170900","count":51},{"timePeriod":"201608170800","count":61},{"timePeriod":"201608170700","count":56},{"timePeriod":"201608170600","count":52},{"timePeriod":"201608170500","count":59},{"timePeriod":"201608170400","count":80},{"timePeriod":"201608170300","count":103},{"timePeriod":"201608170200","count":149},{"timePeriod":"201608170100","count":139},{"timePeriod":"201608170000","count":132},{"timePeriod":"201608162300","count":128},{"timePeriod":"201608162200","count":119},{"timePeriod":"201608162100","count":102},{"timePeriod":"201608162000","count":124},{"timePeriod":"201608161900","count":129},{"timePeriod":"201608161800","count":143},{"timePeriod":"201608161700","count":140},{"timePeriod":"201608161600","count":105},{"timePeriod":"201608161500","count":110},{"timePeriod":"201608161400","count":114},{"timePeriod":"201608161300","count":103},{"timePeriod":"201608161200","count":78},{"timePeriod":"201608161100","count":79},{"timePeriod":"201608161000","count":54},{"timePeriod":"201608160900","count":68},{"timePeriod":"201608160800","count":39},{"timePeriod":"201608160700","count":59},{"timePeriod":"201608160600","count":58},{"timePeriod":"201608160500","count":84},{"timePeriod":"201608160400","count":99},{"timePeriod":"201608160300","count":132},{"timePeriod":"201608160200","count":153},{"timePeriod":"201608160100","count":227},{"timePeriod":"201608160000","count":248}],"totalCount":77795,"requestParameters":{"bucket":"hour","fromDate":"201608160000","toDate":"201609151841"}}
@@ -11,8 +11,9 @@ describe GnipApi::Apis::Search do
11
11
 
12
12
  describe '#counts' do
13
13
  before do
14
+ @raw_response = File.read(fixture_path.join('search_api/search_counts_response.json'))
14
15
  @api = GnipApi::Apis::Search.new
15
- allow(@api.adapter).to receive(:post).and_return("{\"results\":[{\"timePeriod\":\"201607200000\",\"count\":87},{\"timePeriod\":\"201607190000\",\"count\":188}],\"totalCount\":5949,\"requestParameters\":{\"bucket\":\"day\",\"fromDate\":\"201607190000\",\"toDate\":\"201608181340\"}}")
16
+ allow(@api.adapter).to receive(:post).and_return(@raw_response)
16
17
  end
17
18
 
18
19
  it 'raises error if missing params' do
@@ -23,7 +24,78 @@ describe GnipApi::Apis::Search do
23
24
  rule = GnipApi::Apis::PowerTrack::Rule.new :value => 'lolcat OR madcat'
24
25
  result = @api.counts :rule => rule
25
26
  expect(result).not_to eq(nil)
26
- expect(result.keys).to eq([:results, :total_count, :next, :request_parameters])
27
+ end
28
+
29
+ describe 'result set' do
30
+ before do
31
+ rule = GnipApi::Apis::PowerTrack::Rule.new :value => 'lolcat OR madcat'
32
+ @result = @api.counts :rule => rule
33
+ end
34
+
35
+ it 'should be hash' do
36
+ expect(@result.class).to eq(Hash)
37
+ end
38
+
39
+ it 'contains specific keys' do
40
+ expect(@result.keys).to eq([:results, :total_count, :next, :request_parameters])
41
+ end
42
+
43
+ it 'has parsed items on results key' do
44
+ expect(@result[:results].first.class).to eq(Hash)
45
+ end
46
+
47
+ it 'has time period on items' do
48
+ expect(@result[:results].first.keys).to include(:time_period)
49
+ end
50
+
51
+ it 'has time period as Time object' do
52
+ expect(@result[:results].first[:time_period].class).to eq(Time)
53
+ end
54
+
55
+ it 'has count' do
56
+ expect(@result[:results].first.keys).to include(:count)
57
+ end
58
+
59
+ it 'has number as count' do
60
+ expect(@result[:results].first[:count].class).to eq(Fixnum)
61
+ end
62
+ end
63
+ end
64
+
65
+ describe '#activities' do
66
+ before do
67
+ @raw_response = File.read(fixture_path.join('search_api/search_activities_response.json'))
68
+ @api = GnipApi::Apis::Search.new
69
+ allow(@api.adapter).to receive(:post).and_return(@raw_response)
70
+ end
71
+
72
+ it 'raises error if missing params' do
73
+ expect(Proc.new{@api.activities}).to raise_error(GnipApi::Errors::Search::MissingParameters)
74
+ end
75
+
76
+ it 'performs request and parses response' do
77
+ rule = GnipApi::Apis::PowerTrack::Rule.new :value => 'lolcat OR madcat'
78
+ result = @api.activities :rule => rule
79
+ expect(result).not_to eq(nil)
80
+ end
81
+
82
+ describe 'result set' do
83
+ before do
84
+ rule = GnipApi::Apis::PowerTrack::Rule.new :value => 'lolcat OR madcat'
85
+ @result = @api.activities :rule => rule
86
+ end
87
+
88
+ it 'should be hash' do
89
+ expect(@result.class).to eq(Hash)
90
+ end
91
+
92
+ it 'contains specific keys' do
93
+ expect(@result.keys).to eq([:results, :next, :request_parameters])
94
+ end
95
+
96
+ it 'has parsed items on results key' do
97
+ expect(@result[:results].first.class).to eq(Gnip::Activity)
98
+ end
27
99
  end
28
100
  end
29
101
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gnip_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rayko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-18 00:00:00.000000000 Z
11
+ date: 2016-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -193,6 +193,8 @@ files:
193
193
  - spec/fixtures/activities/nil_urls2.json
194
194
  - spec/fixtures/activities/real_activity.json
195
195
  - spec/fixtures/activities/real_activity_long_rules.json
196
+ - spec/fixtures/search_api/search_activities_response.json
197
+ - spec/fixtures/search_api/search_counts_response.json
196
198
  - spec/fixtures/system_messages/error.json
197
199
  - spec/fixtures/system_messages/info.json
198
200
  - spec/fixtures/system_messages/warn.json
@@ -259,6 +261,8 @@ test_files:
259
261
  - spec/fixtures/activities/nil_urls2.json
260
262
  - spec/fixtures/activities/real_activity.json
261
263
  - spec/fixtures/activities/real_activity_long_rules.json
264
+ - spec/fixtures/search_api/search_activities_response.json
265
+ - spec/fixtures/search_api/search_counts_response.json
262
266
  - spec/fixtures/system_messages/error.json
263
267
  - spec/fixtures/system_messages/info.json
264
268
  - spec/fixtures/system_messages/warn.json