gnip_api 0.0.1 → 0.0.2

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.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile.lock +6 -1
  6. data/README.md +43 -4
  7. data/gnip_api.gemspec +1 -0
  8. data/lib/gnip_api/adapter.rb +44 -22
  9. data/lib/gnip_api/adapters/base_adapter.rb +59 -0
  10. data/lib/gnip_api/adapters/httparty_adapter.rb +33 -1
  11. data/lib/gnip_api/apis/power_track/buffer.rb +4 -0
  12. data/lib/gnip_api/apis/power_track/rule.rb +31 -0
  13. data/lib/gnip_api/apis/power_track/rules.rb +69 -2
  14. data/lib/gnip_api/apis/power_track/stream.rb +41 -22
  15. data/lib/gnip_api/apis/search/count.rb +0 -0
  16. data/lib/gnip_api/apis/search/query.rb +36 -0
  17. data/lib/gnip_api/apis/search/result.rb +17 -0
  18. data/lib/gnip_api/apis/search/stream.rb +26 -0
  19. data/lib/gnip_api/configuration.rb +4 -1
  20. data/lib/gnip_api/endpoints.rb +15 -2
  21. data/lib/gnip_api/errors.rb +39 -0
  22. data/lib/gnip_api/gnip/activity.rb +72 -0
  23. data/lib/gnip_api/gnip/actor.rb +42 -11
  24. data/lib/gnip_api/gnip/gnip_data.rb +23 -0
  25. data/lib/gnip_api/gnip/message.rb +24 -51
  26. data/lib/gnip_api/gnip/system_message.rb +30 -0
  27. data/lib/gnip_api/gnip/url.rb +35 -0
  28. data/lib/gnip_api/limiters/rules.rb +56 -0
  29. data/lib/gnip_api/rate_limiter.rb +14 -0
  30. data/lib/gnip_api/request.rb +26 -0
  31. data/lib/gnip_api/response.rb +35 -0
  32. data/lib/gnip_api/version.rb +1 -1
  33. data/lib/gnip_api.rb +31 -0
  34. data/spec/fixtures/activities/full_activity.json +227 -0
  35. data/spec/fixtures/activities/nil_urls.json +1 -0
  36. data/spec/fixtures/activities/real_activity.json +127 -0
  37. data/spec/fixtures/activities/real_activity_long_rules.json +126 -0
  38. data/spec/fixtures/system_messages/error.json +1 -0
  39. data/spec/fixtures/system_messages/info.json +1 -0
  40. data/spec/fixtures/system_messages/warn.json +1 -0
  41. data/spec/fixtures/twitter_messages/quote.json +219 -0
  42. data/spec/fixtures/twitter_messages/retweet.json +418 -0
  43. data/spec/fixtures/twitter_messages/retweet_long_rules.json +417 -0
  44. data/spec/fixtures/twitter_messages/scrub_geo.json +11 -0
  45. data/spec/fixtures/twitter_messages/status_delete.json +11 -0
  46. data/spec/fixtures/twitter_messages/status_withheld.json +11 -0
  47. data/spec/fixtures/twitter_messages/tweet.json +233 -0
  48. data/spec/fixtures/twitter_messages/tweet_long_rules.json +232 -0
  49. data/spec/fixtures/twitter_messages/user_delete.json +7 -0
  50. data/spec/fixtures/twitter_messages/user_protect.json +7 -0
  51. data/spec/fixtures/twitter_messages/user_suspend.json +7 -0
  52. data/spec/fixtures/twitter_messages/user_undelete.json +7 -0
  53. data/spec/fixtures/twitter_messages/user_unprotect.json +7 -0
  54. data/spec/fixtures/twitter_messages/user_unsuspend.json +7 -0
  55. data/spec/fixtures/twitter_messages/user_withheld.json +10 -0
  56. data/spec/gnip_api/adapter_spec.rb +78 -0
  57. data/spec/gnip_api/adapters/base_adapter_spec.rb +0 -0
  58. data/spec/gnip_api/adapters/httparty_adapter_spec.rb +0 -0
  59. data/spec/gnip_api/apis/power_track/rule_spec.rb +62 -0
  60. data/spec/gnip_api/apis/power_track/rules_spec.rb +70 -0
  61. data/spec/gnip_api/apis/power_track/stream_spec.rb +50 -0
  62. data/spec/gnip_api/gnip/activity_spec.rb +123 -0
  63. data/spec/gnip_api/gnip/gnip_data_spec.rb +108 -0
  64. data/spec/gnip_api/gnip/message_spec.rb +48 -0
  65. data/spec/gnip_api/limiters/rules_spec.rb +74 -0
  66. data/spec/gnip_api/request_spec.rb +33 -0
  67. data/spec/gnip_api/response_spec.rb +32 -0
  68. data/spec/lib/test_adapter.rb +16 -0
  69. data/spec/spec_helper.rb +8 -0
  70. metadata +103 -2
@@ -0,0 +1,219 @@
1
+ {
2
+ "id": "tag:search.twitter.com,2005:600699303225466880",
3
+ "objectType": "activity",
4
+ "actor": {
5
+ "objectType": "person",
6
+ "id": "id:twitter.com:63046977",
7
+ "link": "http://www.twitter.com/happycamper",
8
+ "displayName": "Emily S.",
9
+ "postedTime": "2009-08-05T05:46:48.000Z",
10
+ "image": "https://pbs.twimg.com/profile_images/561029571521159170/uIHj3rwp_normal.jpeg",
11
+ "summary": "Pathfinder",
12
+ "links": [
13
+ {
14
+ "href": null,
15
+ "rel": "me"
16
+ }
17
+ ],
18
+ "friendsCount": 480,
19
+ "followersCount": 147,
20
+ "listedCount": 4,
21
+ "statusesCount": 187,
22
+ "twitterTimeZone": "Mountain Time (US & Canada)",
23
+ "verified": false,
24
+ "utcOffset": "-21600",
25
+ "preferredUsername": "happycamper",
26
+ "languages": [
27
+ "en-gb"
28
+ ],
29
+ "favoritesCount": 97
30
+ },
31
+ "verb": "post",
32
+ "postedTime": "2015-05-19T16:27:28.000Z",
33
+ "generator": {
34
+ "displayName": "Twitter for iPhone",
35
+ "link": "http://twitter.com"
36
+ },
37
+ "provider": {
38
+ "objectType": "service",
39
+ "displayName": "Twitter",
40
+ "link": "http://www.twitter.com"
41
+ },
42
+ "link": "http://twitter.com/happycamper/statuses/600699303225466880",
43
+ "body": "Check it out here @johnd https://t.co/F4H2ikacfs",
44
+ "object": {
45
+ "objectType": "note",
46
+ "id": "object:search.twitter.com,2005:600699303225466880",
47
+ "summary": "Check it out here @johnd https://t.co/F4H2ikacfs",
48
+ "link": "http://twitter.com/happycamper/statuses/600699303225466880",
49
+ "postedTime": "2015-05-19T16:27:28.000Z"
50
+ },
51
+ "favoritesCount": 0,
52
+ "location": {
53
+ "objectType": "place",
54
+ "displayName": "Boulder, CO",
55
+ "name": "Boulder",
56
+ "country_code": "United States",
57
+ "twitter_country_code": "US",
58
+ "link": "https://api.twitter.com/1.1/geo/id/fd70c22040963ac7.json",
59
+ "geo": {
60
+ "type": "Polygon",
61
+ "coordinates": [
62
+ [
63
+ [
64
+ -105.3017759,
65
+ 39.953552
66
+ ],
67
+ [
68
+ -105.3017759,
69
+ 40.094411
70
+ ],
71
+ [
72
+ -105.183597,
73
+ 40.094411
74
+ ],
75
+ [
76
+ -105.183597,
77
+ 39.953552
78
+ ]
79
+ ]
80
+ ]
81
+ },
82
+ "twitter_place_type": "city"
83
+ },
84
+ "twitter_entities": {
85
+ "hashtags": [],
86
+ "trends": [],
87
+ "urls": [
88
+ {
89
+ "url": "https://t.co/F4H2ikacfs",
90
+ "expanded_url": "https://twitter.com/twittermusic/status/600436537998897153",
91
+ "display_url": "twitter.com/twittermusic/s…",
92
+ "indices": [
93
+ 26,
94
+ 49
95
+ ]
96
+ }
97
+ ],
98
+ "user_mentions": [
99
+ {
100
+ "screen_name": "johnd",
101
+ "name": "John Demos",
102
+ "id": 408623049,
103
+ "id_str": "408623049",
104
+ "indices": [
105
+ 18,
106
+ 24
107
+ ]
108
+ }
109
+ ],
110
+ "symbols": []
111
+ },
112
+ "twitter_filter_level": "low",
113
+ "twitter_lang": "en",
114
+ "retweetCount": 0,
115
+ "gnip": {
116
+ "matching_rules": [
117
+ {
118
+ "value": "from:happycamper",
119
+ "tag": null
120
+ }
121
+ ],
122
+ "urls": [
123
+ {
124
+ "url": "https://t.co/F4H2ikacfs",
125
+ "expanded_url": "http://test.gnip.com/mock",
126
+ "expanded_status": 200
127
+ }
128
+ ],
129
+ "language": {
130
+ "value": "en"
131
+ }
132
+ },
133
+ "twitter_quoted_status": {
134
+ "id": "tag:search.twitter.com,2005:600436537998897153",
135
+ "objectType": "activity",
136
+ "actor": {
137
+ "objectType": "person",
138
+ "id": "id:twitter.com:373471064",
139
+ "link": "http://www.twitter.com/TwitterMusic",
140
+ "displayName": "Twitter Music",
141
+ "postedTime": "2011-09-14T16:50:47.000Z",
142
+ "image": "https://pbs.twimg.com/profile_images/378800000449287089/70dea90873e8a0f92fd582b4d04cfd4b_normal.png",
143
+ "summary": "Music related Tweets from around the world.",
144
+ "links": [
145
+ {
146
+ "href": "http://music.twitter.com",
147
+ "rel": "me"
148
+ }
149
+ ],
150
+ "friendsCount": 268,
151
+ "followersCount": 7481816,
152
+ "listedCount": 9384,
153
+ "statusesCount": 8254,
154
+ "twitterTimeZone": "Hawaii",
155
+ "verified": true,
156
+ "utcOffset": "-36000",
157
+ "preferredUsername": "TwitterMusic",
158
+ "languages": [
159
+ "en"
160
+ ],
161
+ "location": {
162
+ "objectType": "place",
163
+ "displayName": "Twitter HQ"
164
+ },
165
+ "favoritesCount": 928
166
+ },
167
+ "verb": "post",
168
+ "postedTime": "2015-05-18T23:03:20.000Z",
169
+ "generator": {
170
+ "displayName": "Twitter for Android",
171
+ "link": "http://twitter.com/download/android"
172
+ },
173
+ "provider": {
174
+ "objectType": "service",
175
+ "displayName": "Twitter",
176
+ "link": "http://www.twitter.com"
177
+ },
178
+ "link": "http://twitter.com/TwitterMusic/statuses/600436537998897153",
179
+ "body": "Don't worry if you missed the @RollingStones first-ever Twitter Q+A, because you can relive every moment here: https://t.co/7EQVlmjYWG",
180
+ "object": {
181
+ "objectType": "note",
182
+ "id": "object:search.twitter.com,2005:600436537998897153",
183
+ "summary": "Don't worry if you missed the @RollingStones first-ever Twitter Q+A, because you can relive every moment here: https://t.co/7EQVlmjYWG",
184
+ "link": "http://twitter.com/TwitterMusic/statuses/600436537998897153",
185
+ "postedTime": "2015-05-18T23:03:20.000Z"
186
+ },
187
+ "favoritesCount": 0,
188
+ "twitter_entities": {
189
+ "hashtags": [],
190
+ "trends": [],
191
+ "urls": [
192
+ {
193
+ "url": "https://t.co/7EQVlmjYWG",
194
+ "expanded_url": "https://twitter.com/TwitterMusic/timelines/600367899493142528",
195
+ "display_url": "twitter.com/TwitterMusic/t…",
196
+ "indices": [
197
+ 111,
198
+ 134
199
+ ]
200
+ }
201
+ ],
202
+ "user_mentions": [
203
+ {
204
+ "screen_name": "RollingStones",
205
+ "name": "The Rolling Stones",
206
+ "id": 217518231,
207
+ "id_str": "217518231",
208
+ "indices": [
209
+ 30,
210
+ 44
211
+ ]
212
+ }
213
+ ],
214
+ "symbols": []
215
+ },
216
+ "twitter_filter_level": "low",
217
+ "twitter_lang": "en"
218
+ }
219
+ }
@@ -0,0 +1,418 @@
1
+ {
2
+ "id": "tag:search.twitter.com,2005:595648617588912128",
3
+ "objectType": "activity",
4
+ "actor": {
5
+ "objectType": "person",
6
+ "id": "id:twitter.com:2993982541",
7
+ "link": "http://www.twitter.com/jondee_test",
8
+ "displayName": "Test Demo",
9
+ "postedTime": "2015-01-24T00:12:53.000Z",
10
+ "image": "https://pbs.twimg.com/profile_images/593893018911907840/YM9oLru3_normal.png",
11
+ "summary": "this is a test account.",
12
+ "links": [
13
+ {
14
+ "href": null,
15
+ "rel": "me"
16
+ }
17
+ ],
18
+ "friendsCount": 43,
19
+ "followersCount": 2,
20
+ "listedCount": 0,
21
+ "statusesCount": 35,
22
+ "twitterTimeZone": "Mountain Time (US & Canada)",
23
+ "verified": false,
24
+ "utcOffset": "-21600",
25
+ "preferredUsername": "jondee_test",
26
+ "languages": [
27
+ "en"
28
+ ],
29
+ "location": {
30
+ "objectType": "place",
31
+ "displayName": "Denver, CO"
32
+ },
33
+ "favoritesCount": 0
34
+ },
35
+ "verb": "share",
36
+ "postedTime": "2015-05-05T17:57:51.000Z",
37
+ "generator": {
38
+ "displayName": "Twitter Web Client",
39
+ "link": "http://twitter.com"
40
+ },
41
+ "provider": {
42
+ "objectType": "service",
43
+ "displayName": "Twitter",
44
+ "link": "http://www.twitter.com"
45
+ },
46
+ "link": "http://twitter.com/jondee_test/statuses/595648617588912128",
47
+ "body": "RT @stevedz: More geo testing. Dinner with my son and a Petrus 50/50 http://t.co/NtoHc3cOY4 from @BrouwerijDB is just a bonus! http://t.c…",
48
+ "object": {
49
+ "id": "tag:search.twitter.com,2005:593935592573898753",
50
+ "objectType": "activity",
51
+ "actor": {
52
+ "objectType": "person",
53
+ "id": "id:twitter.com:88777459",
54
+ "link": "http://www.twitter.com/stevedz",
55
+ "displayName": "Steven Dzilvelis",
56
+ "postedTime": "2009-11-09T22:17:48.000Z",
57
+ "image": "https://pbs.twimg.com/profile_images/3495413548/59af29182894424a4c977e981dbd55da_normal.jpeg",
58
+ "summary": "Sales Engineer @TwitterBoulder aka @Gnip, Dad/Husband, Coder, devops geek & baker. Almost all of tweets are my own.",
59
+ "links": [
60
+ {
61
+ "href": "http://about.me/SteveDz",
62
+ "rel": "me"
63
+ }
64
+ ],
65
+ "friendsCount": 344,
66
+ "followersCount": 228,
67
+ "listedCount": 12,
68
+ "statusesCount": 268,
69
+ "twitterTimeZone": "Mountain Time (US & Canada)",
70
+ "verified": false,
71
+ "utcOffset": "-21600",
72
+ "preferredUsername": "stevedz",
73
+ "languages": [
74
+ "en"
75
+ ],
76
+ "location": {
77
+ "objectType": "place",
78
+ "displayName": "Boulder, Colorado"
79
+ },
80
+ "favoritesCount": 24
81
+ },
82
+ "verb": "post",
83
+ "postedTime": "2015-05-01T00:30:54.000Z",
84
+ "generator": {
85
+ "displayName": "Twitter for Android",
86
+ "link": "http://twitter.com/download/android"
87
+ },
88
+ "provider": {
89
+ "objectType": "service",
90
+ "displayName": "Twitter",
91
+ "link": "http://www.twitter.com"
92
+ },
93
+ "link": "http://twitter.com/stevedz/statuses/593935592573898753",
94
+ "body": "More geo testing. Dinner with my son and a Petrus 50/50 http://t.co/NtoHc3cOY4 from @BrouwerijDB is just a bonus! http://t.co/nHPh4YMdhN",
95
+ "object": {
96
+ "objectType": "note",
97
+ "id": "object:search.twitter.com,2005:593935592573898753",
98
+ "summary": "More geo testing. Dinner with my son and a Petrus 50/50 http://t.co/NtoHc3cOY4 from @BrouwerijDB is just a bonus! http://t.co/nHPh4YMdhN",
99
+ "link": "http://twitter.com/stevedz/statuses/593935592573898753",
100
+ "postedTime": "2015-05-01T00:30:54.000Z"
101
+ },
102
+ "favoritesCount": 1,
103
+ "location": {
104
+ "objectType": "place",
105
+ "displayName": "Fate Brewing Company",
106
+ "name": "Fate Brewing Company",
107
+ "country_code": "United States",
108
+ "twitter_country_code": "US",
109
+ "link": "https://api.twitter.com/1.1/geo/id/07d9e920af882000.json",
110
+ "geo": {
111
+ "type": "Polygon",
112
+ "coordinates": [
113
+ [
114
+ [
115
+ -105.24541854858398,
116
+ 40.01499435375046
117
+ ],
118
+ [
119
+ -105.24541854858398,
120
+ 40.01499435375046
121
+ ],
122
+ [
123
+ -105.24541854858398,
124
+ 40.01499435375046
125
+ ],
126
+ [
127
+ -105.24541854858398,
128
+ 40.01499435375046
129
+ ]
130
+ ]
131
+ ]
132
+ },
133
+ "twitter_place_type": "poi"
134
+ },
135
+ "geo": {
136
+ "type": "Point",
137
+ "coordinates": [
138
+ 40.013423,
139
+ -105.235281
140
+ ]
141
+ },
142
+ "twitter_entities": {
143
+ "hashtags": [],
144
+ "trends": [],
145
+ "urls": [
146
+ {
147
+ "url": "http://t.co/NtoHc3cOY4",
148
+ "expanded_url": "http://www.brouwerijdebrabandere.be/en/merken/petrus",
149
+ "display_url": "brouwerijdebrabandere.be/en/merken/petr…",
150
+ "indices": [
151
+ 58,
152
+ 80
153
+ ]
154
+ }
155
+ ],
156
+ "user_mentions": [
157
+ {
158
+ "screen_name": "BrouwerijDB",
159
+ "name": "De Brabandere",
160
+ "id": 322774299,
161
+ "id_str": "322774299",
162
+ "indices": [
163
+ 86,
164
+ 98
165
+ ]
166
+ }
167
+ ],
168
+ "symbols": [],
169
+ "media": [
170
+ {
171
+ "id": 593935482129518600,
172
+ "id_str": "593935482129518593",
173
+ "indices": [
174
+ 116,
175
+ 138
176
+ ],
177
+ "media_url": "http://pbs.twimg.com/media/CD4VLJfUkAEI4px.jpg",
178
+ "media_url_https": "https://pbs.twimg.com/media/CD4VLJfUkAEI4px.jpg",
179
+ "url": "http://t.co/nHPh4YMdhN",
180
+ "display_url": "pic.twitter.com/nHPh4YMdhN",
181
+ "expanded_url": "http://twitter.com/stevedz/status/593935592573898753/photo/1",
182
+ "type": "photo",
183
+ "sizes": {
184
+ "small": {
185
+ "w": 340,
186
+ "h": 453,
187
+ "resize": "fit"
188
+ },
189
+ "medium": {
190
+ "w": 600,
191
+ "h": 800,
192
+ "resize": "fit"
193
+ },
194
+ "thumb": {
195
+ "w": 150,
196
+ "h": 150,
197
+ "resize": "crop"
198
+ },
199
+ "large": {
200
+ "w": 768,
201
+ "h": 1024,
202
+ "resize": "fit"
203
+ }
204
+ }
205
+ }
206
+ ]
207
+ },
208
+ "twitter_extended_entities": {
209
+ "media": [
210
+ {
211
+ "id": 593935482129518600,
212
+ "id_str": "593935482129518593",
213
+ "indices": [
214
+ 116,
215
+ 138
216
+ ],
217
+ "media_url": "http://pbs.twimg.com/media/CD4VLJfUkAEI4px.jpg",
218
+ "media_url_https": "https://pbs.twimg.com/media/CD4VLJfUkAEI4px.jpg",
219
+ "url": "http://t.co/nHPh4YMdhN",
220
+ "display_url": "pic.twitter.com/nHPh4YMdhN",
221
+ "expanded_url": "http://twitter.com/stevedz/status/593935592573898753/photo/1",
222
+ "type": "photo",
223
+ "sizes": {
224
+ "small": {
225
+ "w": 340,
226
+ "h": 453,
227
+ "resize": "fit"
228
+ },
229
+ "medium": {
230
+ "w": 600,
231
+ "h": 800,
232
+ "resize": "fit"
233
+ },
234
+ "thumb": {
235
+ "w": 150,
236
+ "h": 150,
237
+ "resize": "crop"
238
+ },
239
+ "large": {
240
+ "w": 768,
241
+ "h": 1024,
242
+ "resize": "fit"
243
+ }
244
+ }
245
+ }
246
+ ]
247
+ },
248
+ "twitter_filter_level": "low",
249
+ "twitter_lang": "en"
250
+ },
251
+ "favoritesCount": 0,
252
+ "twitter_entities": {
253
+ "hashtags": [],
254
+ "trends": [],
255
+ "urls": [
256
+ {
257
+ "url": "http://t.co/NtoHc3cOY4",
258
+ "expanded_url": "http://www.brouwerijdebrabandere.be/en/merken/petrus",
259
+ "display_url": "brouwerijdebrabandere.be/en/merken/petr…",
260
+ "indices": [
261
+ 71,
262
+ 93
263
+ ]
264
+ }
265
+ ],
266
+ "user_mentions": [
267
+ {
268
+ "screen_name": "stevedz",
269
+ "name": "Steven Dzilvelis",
270
+ "id": 88777459,
271
+ "id_str": "88777459",
272
+ "indices": [
273
+ 3,
274
+ 11
275
+ ]
276
+ },
277
+ {
278
+ "screen_name": "BrouwerijDB",
279
+ "name": "De Brabandere",
280
+ "id": 322774299,
281
+ "id_str": "322774299",
282
+ "indices": [
283
+ 99,
284
+ 111
285
+ ]
286
+ }
287
+ ],
288
+ "symbols": [],
289
+ "media": [
290
+ {
291
+ "id": 593935482129518600,
292
+ "id_str": "593935482129518593",
293
+ "indices": [
294
+ 139,
295
+ 140
296
+ ],
297
+ "media_url": "http://pbs.twimg.com/media/CD4VLJfUkAEI4px.jpg",
298
+ "media_url_https": "https://pbs.twimg.com/media/CD4VLJfUkAEI4px.jpg",
299
+ "url": "http://t.co/nHPh4YMdhN",
300
+ "display_url": "pic.twitter.com/nHPh4YMdhN",
301
+ "expanded_url": "http://twitter.com/stevedz/status/593935592573898753/photo/1",
302
+ "type": "photo",
303
+ "sizes": {
304
+ "small": {
305
+ "w": 340,
306
+ "h": 453,
307
+ "resize": "fit"
308
+ },
309
+ "medium": {
310
+ "w": 600,
311
+ "h": 800,
312
+ "resize": "fit"
313
+ },
314
+ "thumb": {
315
+ "w": 150,
316
+ "h": 150,
317
+ "resize": "crop"
318
+ },
319
+ "large": {
320
+ "w": 768,
321
+ "h": 1024,
322
+ "resize": "fit"
323
+ }
324
+ },
325
+ "source_status_id": 593935592573898800,
326
+ "source_status_id_str": "593935592573898753"
327
+ }
328
+ ]
329
+ },
330
+ "twitter_extended_entities": {
331
+ "media": [
332
+ {
333
+ "id": 593935482129518600,
334
+ "id_str": "593935482129518593",
335
+ "indices": [
336
+ 139,
337
+ 140
338
+ ],
339
+ "media_url": "http://pbs.twimg.com/media/CD4VLJfUkAEI4px.jpg",
340
+ "media_url_https": "https://pbs.twimg.com/media/CD4VLJfUkAEI4px.jpg",
341
+ "url": "http://t.co/nHPh4YMdhN",
342
+ "display_url": "pic.twitter.com/nHPh4YMdhN",
343
+ "expanded_url": "http://twitter.com/stevedz/status/593935592573898753/photo/1",
344
+ "type": "photo",
345
+ "sizes": {
346
+ "small": {
347
+ "w": 340,
348
+ "h": 453,
349
+ "resize": "fit"
350
+ },
351
+ "medium": {
352
+ "w": 600,
353
+ "h": 800,
354
+ "resize": "fit"
355
+ },
356
+ "thumb": {
357
+ "w": 150,
358
+ "h": 150,
359
+ "resize": "crop"
360
+ },
361
+ "large": {
362
+ "w": 768,
363
+ "h": 1024,
364
+ "resize": "fit"
365
+ }
366
+ },
367
+ "source_status_id": 593935592573898800,
368
+ "source_status_id_str": "593935592573898753"
369
+ }
370
+ ]
371
+ },
372
+ "twitter_filter_level": "low",
373
+ "twitter_lang": "en",
374
+ "retweetCount": 1,
375
+ "gnip": {
376
+ "matching_rules": [
377
+ {
378
+ "value": "(\"@GooglePlay\" OR \"@YouTube\" OR \"Google Music\" OR \"YouTube\")(\"watching\" OR \"watched\" OR saw it on OR heard OR look at OR listen to OR heard OR read OR got it from OR play OR recording OR DVR OR going to see OR just saw OR checking)-\"itunes store\" -store -#apps -#download -#free -#games -#giveaway -#iphone -#iphonegames -#ipad -contest -win -\"deals\" -\"#deals\" -offers -#offers -rules lang:en followers_count:300 -url_contains:buy -is:retweet -bio_contains:followback -url_contains:itunes.apple.com",
379
+ "tag": "something"
380
+ }
381
+ ],
382
+ "urls": [
383
+ {
384
+ "url": "http://t.co/NtoHc3cOY4",
385
+ "expanded_url": "http://www.brouwerijdebrabandere.be/en/merken/petrus",
386
+ "expanded_status": 200
387
+ },
388
+ {
389
+ "url": "http://t.co/nHPh4YMdhN",
390
+ "expanded_url": "http://twitter.com/stevedz/status/593935592573898753/photo/1",
391
+ "expanded_status": 200
392
+ }
393
+ ],
394
+ "language": {
395
+ "value": "en"
396
+ },
397
+ "profileLocations": [
398
+ {
399
+ "objectType": "place",
400
+ "geo": {
401
+ "type": "point",
402
+ "coordinates": [
403
+ -104.9847,
404
+ 39.73915
405
+ ]
406
+ },
407
+ "address": {
408
+ "country": "United States",
409
+ "countryCode": "US",
410
+ "locality": "Denver",
411
+ "region": "Colorado",
412
+ "subRegion": "Denver County"
413
+ },
414
+ "displayName": "Denver, Colorado, United States"
415
+ }
416
+ ]
417
+ }
418
+ }