trubl 1.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. data/.yardopts +8 -0
  2. data/LICENSE.md +20 -0
  3. data/README.md +72 -0
  4. data/Rakefile +11 -0
  5. data/lib/trubl.rb +30 -0
  6. data/lib/trubl/api/category.rb +33 -0
  7. data/lib/trubl/api/channel.rb +32 -0
  8. data/lib/trubl/api/conversation.rb +31 -0
  9. data/lib/trubl/api/hashtags.rb +45 -0
  10. data/lib/trubl/api/me.rb +68 -0
  11. data/lib/trubl/api/search.rb +35 -0
  12. data/lib/trubl/api/streams.rb +14 -0
  13. data/lib/trubl/api/suggested_users.rb +16 -0
  14. data/lib/trubl/api/touts.rb +143 -0
  15. data/lib/trubl/api/users.rb +79 -0
  16. data/lib/trubl/authorization.rb +7 -0
  17. data/lib/trubl/authorizations.rb +8 -0
  18. data/lib/trubl/base.rb +37 -0
  19. data/lib/trubl/category.rb +7 -0
  20. data/lib/trubl/channel.rb +7 -0
  21. data/lib/trubl/client.rb +252 -0
  22. data/lib/trubl/collection.rb +43 -0
  23. data/lib/trubl/conversation.rb +7 -0
  24. data/lib/trubl/hashtag.rb +7 -0
  25. data/lib/trubl/hashtags.rb +8 -0
  26. data/lib/trubl/oauth.rb +56 -0
  27. data/lib/trubl/pagination.rb +17 -0
  28. data/lib/trubl/tout.rb +29 -0
  29. data/lib/trubl/touts.rb +8 -0
  30. data/lib/trubl/user.rb +29 -0
  31. data/lib/trubl/users.rb +8 -0
  32. data/lib/trubl/version.rb +16 -0
  33. data/lib/trubl/widget.rb +15 -0
  34. data/lib/trubl/widgets.rb +8 -0
  35. data/spec/fixtures/category_response.json +1 -0
  36. data/spec/fixtures/category_touts_response.json +689 -0
  37. data/spec/fixtures/category_users_response.json +1709 -0
  38. data/spec/fixtures/channel_response.json +1 -0
  39. data/spec/fixtures/channel_touts_response.json +1 -0
  40. data/spec/fixtures/channel_users_response.json +1 -0
  41. data/spec/fixtures/client1_auth_resp.json +1 -0
  42. data/spec/fixtures/client2_auth_resp.json +1 -0
  43. data/spec/fixtures/conversation_authors_response.json +37 -0
  44. data/spec/fixtures/conversation_response.json +41 -0
  45. data/spec/fixtures/conversation_touts_response.json +107 -0
  46. data/spec/fixtures/featured_touts_response.json +4249 -0
  47. data/spec/fixtures/hashtag_response.json +1 -0
  48. data/spec/fixtures/hashtags_touts_response.json +304 -0
  49. data/spec/fixtures/latest_touts_response.json +3600 -0
  50. data/spec/fixtures/like_tout_response.json +109 -0
  51. data/spec/fixtures/me_authorizations_response.json +14 -0
  52. data/spec/fixtures/me_fb_sharing_response.json +21 -0
  53. data/spec/fixtures/me_friends_response.json +121 -0
  54. data/spec/fixtures/me_retrieve_user_friends_response.json +174 -0
  55. data/spec/fixtures/me_retrieve_user_liked_touts_response.json +1255 -0
  56. data/spec/fixtures/me_retrieve_user_touts_response.json +479 -0
  57. data/spec/fixtures/retout_tout_response.json +99 -0
  58. data/spec/fixtures/retrieve_me_response.json +35 -0
  59. data/spec/fixtures/retrieve_tout.json +98 -0
  60. data/spec/fixtures/retrieve_tout_response.json +98 -0
  61. data/spec/fixtures/search_hashtags_response.json +100 -0
  62. data/spec/fixtures/search_touts_response.json +304 -0
  63. data/spec/fixtures/search_users_response.json +37 -0
  64. data/spec/fixtures/suggested_hashtags_response.json +137 -0
  65. data/spec/fixtures/suggested_users_response.json +1 -0
  66. data/spec/fixtures/test.mp4 +0 -0
  67. data/spec/fixtures/tout.json +98 -0
  68. data/spec/fixtures/tout_conversation_response.json +41 -0
  69. data/spec/fixtures/touts_liked_by_response.json +65 -0
  70. data/spec/fixtures/touts_liked_by_user_response.json +106 -0
  71. data/spec/fixtures/touts_me_updates_response.json +357 -0
  72. data/spec/fixtures/touts_search_results.json +304 -0
  73. data/spec/fixtures/trending_hashtags_response.json +149 -0
  74. data/spec/fixtures/unlike_tout_response.json +109 -0
  75. data/spec/fixtures/update_me_response.json +35 -0
  76. data/spec/fixtures/user.json +28 -0
  77. data/spec/fixtures/user_followers.json +1409 -0
  78. data/spec/fixtures/user_touts_response.json +479 -0
  79. data/spec/fixtures/user_with_utf8.json +29 -0
  80. data/spec/fixtures/users.json +58 -0
  81. data/spec/fixtures/users_search_results.json +37 -0
  82. data/spec/fixtures/widgets.json +142 -0
  83. data/spec/spec_helper.rb +61 -0
  84. data/spec/trubl/api/category_spec.rb +39 -0
  85. data/spec/trubl/api/channel_spec.rb +39 -0
  86. data/spec/trubl/api/conversation_spec.rb +38 -0
  87. data/spec/trubl/api/hashtags_spec.rb +60 -0
  88. data/spec/trubl/api/me_spec.rb +98 -0
  89. data/spec/trubl/api/search_spec.rb +40 -0
  90. data/spec/trubl/api/streams_spec.rb +18 -0
  91. data/spec/trubl/api/suggested_users_spec.rb +17 -0
  92. data/spec/trubl/api/touts_spec.rb +215 -0
  93. data/spec/trubl/api/users_spec.rb +122 -0
  94. data/spec/trubl/base_spec.rb +88 -0
  95. data/spec/trubl/category_spec.rb +15 -0
  96. data/spec/trubl/channel_spec.rb +16 -0
  97. data/spec/trubl/client_spec.rb +141 -0
  98. data/spec/trubl/conversation_spec.rb +13 -0
  99. data/spec/trubl/hashtag_spec.rb +11 -0
  100. data/spec/trubl/oauth_spec.rb +27 -0
  101. data/spec/trubl/tout_spec.rb +41 -0
  102. data/spec/trubl/user_spec.rb +65 -0
  103. data/spec/trubl_spec.rb +23 -0
  104. data/trubl.gemspec +41 -0
  105. metadata +494 -0
@@ -0,0 +1,7 @@
1
+ require 'trubl/base'
2
+
3
+ module Trubl
4
+ class Conversation < Trubl::Base
5
+
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'trubl/base'
2
+
3
+ module Trubl
4
+ class Hashtag < Trubl::Base
5
+
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ require_relative './collection'
2
+ require_relative './hashtag'
3
+
4
+ module Trubl
5
+ class Hashtags < Collection
6
+
7
+ end
8
+ end
@@ -0,0 +1,56 @@
1
+ require 'httparty'
2
+
3
+ module Trubl
4
+ module OAuth
5
+ # implements OAuth per from http://developer.tout.com/apis/authentication
6
+
7
+ # implements client_credentials access_token retrieval
8
+ def client_auth()
9
+ url = URI.join(@auth_site, @token_url).to_s
10
+ body = {
11
+ client_id: @client_id,
12
+ client_secret: @client_secret,
13
+ grant_type: "client_credentials"
14
+ }
15
+
16
+ Trubl.logger.info("Trubl::OAuth post-ing #{url} with params #{{body: body, headers: headers}}")
17
+ response = HTTParty.send(:post, url, body: body, headers: headers)
18
+ Trubl.logger.debug("Trubl::OAuth #{url} response: #{response.code} #{response.body}")
19
+
20
+ if response.code == 200 and JSON.parse(response.body)["access_token"].present?
21
+ @access_token = JSON.parse(response.body)["access_token"]
22
+ else
23
+ raise "Client failed to get an auth token, response was: " + response.body
24
+ end
25
+ end
26
+
27
+ # ToDo: add some param checking logic
28
+ def password_auth(opts={})
29
+ url = URI.join(@auth_site, @token_url).to_s
30
+ body = {
31
+ client_id: @client_id,
32
+ client_secret: @client_secret,
33
+ email: @email,
34
+ password: @password,
35
+ # scope: "read write share",
36
+ scope: "read write share update_auth",
37
+ grant_type: "password"
38
+ }.merge(opts)
39
+
40
+ Trubl.logger.info("Trubl::OAuth post-ing #{url} with params #{{body: body, headers: headers}}")
41
+ response = HTTParty.send(:post, url, body: body, headers: headers)
42
+ Trubl.logger.debug("Trubl::OAuth #{url} response: #{response.code} #{response.body}")
43
+
44
+ if response.code == 200 and JSON.parse(response.body)["access_token"].present?
45
+ @access_token = JSON.parse(response.body)["access_token"]
46
+ else
47
+ raise "Client failed to get an auth token, response was: " + response.body
48
+ end
49
+ end
50
+
51
+ alias :user_auth :password_auth
52
+
53
+ # ToDo: add autocreate_user, twitter, facebook, etc
54
+
55
+ end
56
+ end
@@ -0,0 +1,17 @@
1
+ module Trubl
2
+ class Pagination
3
+ attr_accessor :current_page, :order, :per_page, :page, :total_entries
4
+
5
+ def from_response(response)
6
+ pagination = pagination_from_response(response)
7
+ %(order current_page per_page page total_entries).each do |attr|
8
+ self.send("#{attr}=", pagination[attr])
9
+ end
10
+ self
11
+ end
12
+
13
+ def pagination_from_response(response)
14
+ JSON.parse(response.body)["pagination"]
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,29 @@
1
+ require 'trubl/base'
2
+
3
+ module Trubl
4
+ class Tout < Trubl::Base
5
+
6
+ def delete
7
+ Trubl.client.delete_tout(self.uid)
8
+ end
9
+
10
+ def like
11
+ Trubl.client.like_tout(self.uid)
12
+ end
13
+
14
+ def unlike
15
+ Trubl.client.unlike_tout(self.uid)
16
+ end
17
+
18
+ =begin
19
+ def share
20
+ Trubl.client.share_tout(self.uid)
21
+ end
22
+
23
+ def update_text
24
+ Trubl.client.update_tout_text(self.uid)
25
+ end
26
+ =end
27
+
28
+ end
29
+ end
@@ -0,0 +1,8 @@
1
+ require_relative './collection'
2
+ require_relative './tout'
3
+
4
+ module Trubl
5
+ class Touts < Collection
6
+
7
+ end
8
+ end
@@ -0,0 +1,29 @@
1
+ require 'trubl/base'
2
+
3
+ module Trubl
4
+ class User < Trubl::Base
5
+
6
+ def likes
7
+ Trubl.client.retrieve_user_likes(self.uid)
8
+ end
9
+
10
+ def touts
11
+ Trubl.client.retrieve_user_touts(self.uid)
12
+ end
13
+
14
+ def followers
15
+ Trubl.client.retrieve_user_followers(self.uid)
16
+ end
17
+
18
+ # the below methods require_relative acting on the behalf of users, which is not yet implemented
19
+ =begin
20
+ def follow
21
+ Trubl.client.follow_user(self.uid)
22
+ end
23
+
24
+ def unfollow
25
+ Trubl.client.unfollow_user(self.uid)
26
+ end
27
+ =end
28
+ end
29
+ end
@@ -0,0 +1,8 @@
1
+ require_relative './collection'
2
+ require_relative './user'
3
+
4
+ module Trubl
5
+ class Users < Collection
6
+
7
+ end
8
+ end
@@ -0,0 +1,16 @@
1
+ module Trubl
2
+ class Version
3
+ MAJOR = 1 unless defined? Trubl::Version::MAJOR
4
+ MINOR = 4 unless defined? Trubl::Version::MINOR
5
+ PATCH = 2 unless defined? Trubl::Version::PATCH
6
+
7
+ class << self
8
+
9
+ def to_s
10
+ [MAJOR, MINOR, PATCH].compact.join('.')
11
+ end
12
+
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ require 'trubl/base'
2
+
3
+ module Trubl
4
+ class Widget < Trubl::Base
5
+
6
+ def user
7
+ Trubl.client.retrieve_user(self.user.uid)
8
+ end
9
+
10
+ def anchor_tout
11
+ self.anchor_tout.present? ? Trubl.client.retrieve_tout(self.anchor_tout.uid) : nil
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,8 @@
1
+ require_relative './collection'
2
+ require_relative './widget'
3
+
4
+ module Trubl
5
+ class Widgets < Collection
6
+
7
+ end
8
+ end
@@ -0,0 +1 @@
1
+ {"category":{"uid":"music","name":"Music","description": "","image":{"web":{"http_url": "http://avatars.tout.com/category_images/music/web/Music_icon__2x.png.png"},"mobile":{"http_url": "http://avatars.tout.com/category_images/music/mobile/Music_icon__2x.png.png"}}}}
@@ -0,0 +1,689 @@
1
+ {
2
+ "touts": [
3
+ {
4
+ "tout": {
5
+ "uid": "jGCQ4gprkbC",
6
+ "text": "New Years Eve",
7
+ "parsed_text": {
8
+ "hashtags": [],
9
+ "mentions": [],
10
+ "urls": []
11
+ },
12
+ "views_count": 35,
13
+ "likes_count": 1,
14
+ "total_likes_count": 1,
15
+ "replies_count": 0,
16
+ "retouts_count": 0,
17
+ "recorded_at": "2011-01-19T19:57:43Z",
18
+ "created_at": "2011-01-19T19:57:43Z",
19
+ "privacy": "public",
20
+ "user": {
21
+ "username": "Gardner",
22
+ "uid": "gardner",
23
+ "fullname": "Gardner Loulan",
24
+ "verified": true,
25
+ "location": "SF, CA, USA",
26
+ "headline": "Your go to guy at Tout.com",
27
+ "bio": "@Gardner is your go to guy at Tout.com!",
28
+ "friendly_name": "Gardner Loulan",
29
+ "touts_count": 3089,
30
+ "followers_count": 18603,
31
+ "friends_count": 18627,
32
+ "last_tout_recorded_at": "2013-05-03T05:19:37Z",
33
+ "created_at": "2011-01-19T19:45:46Z",
34
+ "avatar": {
35
+ "profile": {
36
+ "http_url": "http://avatars.tout.com/u/55f3a3ab7a142ce1df3696c839bd2b1c/profile/D87FBA53-D4EB-46AD-A2EE-8DFF7C8330FD.png"
37
+ },
38
+ "large": {
39
+ "http_url": "http://avatars.tout.com/u/55f3a3ab7a142ce1df3696c839bd2b1c/large/D87FBA53-D4EB-46AD-A2EE-8DFF7C8330FD.png"
40
+ },
41
+ "medium": {
42
+ "http_url": "http://avatars.tout.com/u/55f3a3ab7a142ce1df3696c839bd2b1c/medium/D87FBA53-D4EB-46AD-A2EE-8DFF7C8330FD.png"
43
+ },
44
+ "small": {
45
+ "http_url": "http://avatars.tout.com/u/55f3a3ab7a142ce1df3696c839bd2b1c/small/D87FBA53-D4EB-46AD-A2EE-8DFF7C8330FD.png"
46
+ }
47
+ },
48
+ "following": false,
49
+ "followed_by": false,
50
+ "blocking": false
51
+ },
52
+ "image": {
53
+ "poster": {
54
+ "width": null,
55
+ "height": null,
56
+ "http_url": "http://i2.ytimg.com/vi/LdfNtMuDnzU/hqdefault.jpg"
57
+ },
58
+ "thumbnail": {
59
+ "width": 150,
60
+ "height": null,
61
+ "http_url": "http://i2.ytimg.com/vi/LdfNtMuDnzU/default.jpg"
62
+ }
63
+ },
64
+ "video": {
65
+ "type": "youtube",
66
+ "duration": 11,
67
+ "youtube": {
68
+ "start_offset": 58,
69
+ "video_id": "LdfNtMuDnzU"
70
+ }
71
+ },
72
+ "liked": false
73
+ }
74
+ },
75
+ {
76
+ "tout": {
77
+ "uid": "g2saYTWBH0i",
78
+ "text": "Gweneth is the only way I'll watch Glee #Glee #Hot #CeeLo #Music",
79
+ "parsed_text": {
80
+ "hashtags": [
81
+ {
82
+ "text": "#Glee",
83
+ "name": "Glee",
84
+ "indices": [
85
+ 40,
86
+ 45
87
+ ],
88
+ "uid": "glee"
89
+ },
90
+ {
91
+ "text": "#Hot",
92
+ "name": "Hot",
93
+ "indices": [
94
+ 46,
95
+ 50
96
+ ],
97
+ "uid": "hot"
98
+ },
99
+ {
100
+ "text": "#CeeLo",
101
+ "name": "CeeLo",
102
+ "indices": [
103
+ 51,
104
+ 57
105
+ ],
106
+ "uid": "ceelo"
107
+ },
108
+ {
109
+ "text": "#Music",
110
+ "name": "Music",
111
+ "indices": [
112
+ 58,
113
+ 64
114
+ ],
115
+ "uid": "music"
116
+ }
117
+ ],
118
+ "mentions": [],
119
+ "urls": []
120
+ },
121
+ "views_count": 8,
122
+ "likes_count": 0,
123
+ "total_likes_count": 0,
124
+ "replies_count": 0,
125
+ "retouts_count": 0,
126
+ "recorded_at": "2011-01-19T21:25:53Z",
127
+ "created_at": "2011-01-19T21:25:53Z",
128
+ "privacy": "public",
129
+ "user": {
130
+ "username": "Gardner",
131
+ "uid": "gardner",
132
+ "fullname": "Gardner Loulan",
133
+ "verified": true,
134
+ "location": "SF, CA, USA",
135
+ "headline": "Your go to guy at Tout.com",
136
+ "bio": "@Gardner is your go to guy at Tout.com!",
137
+ "friendly_name": "Gardner Loulan",
138
+ "touts_count": 3089,
139
+ "followers_count": 18603,
140
+ "friends_count": 18627,
141
+ "last_tout_recorded_at": "2013-05-03T05:19:37Z",
142
+ "created_at": "2011-01-19T19:45:46Z",
143
+ "avatar": {
144
+ "profile": {
145
+ "http_url": "http://avatars.tout.com/u/55f3a3ab7a142ce1df3696c839bd2b1c/profile/D87FBA53-D4EB-46AD-A2EE-8DFF7C8330FD.png"
146
+ },
147
+ "large": {
148
+ "http_url": "http://avatars.tout.com/u/55f3a3ab7a142ce1df3696c839bd2b1c/large/D87FBA53-D4EB-46AD-A2EE-8DFF7C8330FD.png"
149
+ },
150
+ "medium": {
151
+ "http_url": "http://avatars.tout.com/u/55f3a3ab7a142ce1df3696c839bd2b1c/medium/D87FBA53-D4EB-46AD-A2EE-8DFF7C8330FD.png"
152
+ },
153
+ "small": {
154
+ "http_url": "http://avatars.tout.com/u/55f3a3ab7a142ce1df3696c839bd2b1c/small/D87FBA53-D4EB-46AD-A2EE-8DFF7C8330FD.png"
155
+ }
156
+ },
157
+ "blocking": false,
158
+ "following": false,
159
+ "followed_by": false
160
+ },
161
+ "image": {
162
+ "poster": {
163
+ "width": null,
164
+ "height": null,
165
+ "http_url": "http://i2.ytimg.com/vi/e1_B9FCZJMA/hqdefault.jpg"
166
+ },
167
+ "thumbnail": {
168
+ "width": 150,
169
+ "height": null,
170
+ "http_url": "http://i2.ytimg.com/vi/e1_B9FCZJMA/default.jpg"
171
+ }
172
+ },
173
+ "video": {
174
+ "type": "youtube",
175
+ "duration": 7,
176
+ "youtube": {
177
+ "start_offset": 27,
178
+ "video_id": "e1_B9FCZJMA"
179
+ }
180
+ },
181
+ "liked": false
182
+ }
183
+ },
184
+ {
185
+ "tout": {
186
+ "uid": "l826BzhEmWs",
187
+ "text": "ha, he can't even put on his flip-flop! #LOL #WTF",
188
+ "parsed_text": {
189
+ "hashtags": [
190
+ {
191
+ "text": "#LOL",
192
+ "name": "LOL",
193
+ "indices": [
194
+ 41,
195
+ 45
196
+ ],
197
+ "uid": "lol"
198
+ },
199
+ {
200
+ "text": "#WTF",
201
+ "name": "WTF",
202
+ "indices": [
203
+ 46,
204
+ 50
205
+ ],
206
+ "uid": "wtf"
207
+ }
208
+ ],
209
+ "mentions": [],
210
+ "urls": []
211
+ },
212
+ "views_count": 7,
213
+ "likes_count": 1,
214
+ "total_likes_count": 1,
215
+ "replies_count": 0,
216
+ "retouts_count": 0,
217
+ "recorded_at": "2011-01-19T21:35:53Z",
218
+ "created_at": "2011-01-19T21:35:53Z",
219
+ "privacy": "public",
220
+ "user": {
221
+ "username": "Gardner",
222
+ "uid": "gardner",
223
+ "fullname": "Gardner Loulan",
224
+ "verified": true,
225
+ "location": "SF, CA, USA",
226
+ "headline": "Your go to guy at Tout.com",
227
+ "bio": "@Gardner is your go to guy at Tout.com!",
228
+ "friendly_name": "Gardner Loulan",
229
+ "touts_count": 3089,
230
+ "followers_count": 18603,
231
+ "friends_count": 18627,
232
+ "last_tout_recorded_at": "2013-05-03T05:19:37Z",
233
+ "created_at": "2011-01-19T19:45:46Z",
234
+ "avatar": {
235
+ "profile": {
236
+ "http_url": "http://avatars.tout.com/u/55f3a3ab7a142ce1df3696c839bd2b1c/profile/D87FBA53-D4EB-46AD-A2EE-8DFF7C8330FD.png"
237
+ },
238
+ "large": {
239
+ "http_url": "http://avatars.tout.com/u/55f3a3ab7a142ce1df3696c839bd2b1c/large/D87FBA53-D4EB-46AD-A2EE-8DFF7C8330FD.png"
240
+ },
241
+ "medium": {
242
+ "http_url": "http://avatars.tout.com/u/55f3a3ab7a142ce1df3696c839bd2b1c/medium/D87FBA53-D4EB-46AD-A2EE-8DFF7C8330FD.png"
243
+ },
244
+ "small": {
245
+ "http_url": "http://avatars.tout.com/u/55f3a3ab7a142ce1df3696c839bd2b1c/small/D87FBA53-D4EB-46AD-A2EE-8DFF7C8330FD.png"
246
+ }
247
+ },
248
+ "blocking": false,
249
+ "following": false,
250
+ "followed_by": false
251
+ },
252
+ "image": {
253
+ "poster": {
254
+ "width": null,
255
+ "height": null,
256
+ "http_url": "http://i2.ytimg.com/vi/0Au_8GMUxVs/hqdefault.jpg"
257
+ },
258
+ "thumbnail": {
259
+ "width": 150,
260
+ "height": null,
261
+ "http_url": "http://i2.ytimg.com/vi/0Au_8GMUxVs/default.jpg"
262
+ }
263
+ },
264
+ "video": {
265
+ "type": "youtube",
266
+ "duration": 9,
267
+ "youtube": {
268
+ "start_offset": 8,
269
+ "video_id": "0Au_8GMUxVs"
270
+ }
271
+ },
272
+ "liked": false
273
+ }
274
+ },
275
+ {
276
+ "tout": {
277
+ "uid": "c59Ar4NTK2m",
278
+ "text": "it only took him 26 years!? #Oscars #movies #movie",
279
+ "parsed_text": {
280
+ "hashtags": [
281
+ {
282
+ "text": "#Oscars",
283
+ "name": "Oscars",
284
+ "indices": [
285
+ 28,
286
+ 35
287
+ ],
288
+ "uid": "oscars"
289
+ },
290
+ {
291
+ "text": "#movies",
292
+ "name": "movies",
293
+ "indices": [
294
+ 36,
295
+ 43
296
+ ],
297
+ "uid": "movies"
298
+ },
299
+ {
300
+ "text": "#movie",
301
+ "name": "movie",
302
+ "indices": [
303
+ 44,
304
+ 50
305
+ ],
306
+ "uid": "movie"
307
+ }
308
+ ],
309
+ "mentions": [],
310
+ "urls": []
311
+ },
312
+ "views_count": 11,
313
+ "likes_count": 0,
314
+ "total_likes_count": 0,
315
+ "replies_count": 0,
316
+ "retouts_count": 0,
317
+ "recorded_at": "2011-01-19T21:50:36Z",
318
+ "created_at": "2011-01-19T21:50:36Z",
319
+ "privacy": "public",
320
+ "user": {
321
+ "username": "Gardner",
322
+ "uid": "gardner",
323
+ "fullname": "Gardner Loulan",
324
+ "verified": true,
325
+ "location": "SF, CA, USA",
326
+ "headline": "Your go to guy at Tout.com",
327
+ "bio": "@Gardner is your go to guy at Tout.com!",
328
+ "friendly_name": "Gardner Loulan",
329
+ "touts_count": 3089,
330
+ "followers_count": 18603,
331
+ "friends_count": 18627,
332
+ "last_tout_recorded_at": "2013-05-03T05:19:37Z",
333
+ "created_at": "2011-01-19T19:45:46Z",
334
+ "avatar": {
335
+ "profile": {
336
+ "http_url": "http://avatars.tout.com/u/55f3a3ab7a142ce1df3696c839bd2b1c/profile/D87FBA53-D4EB-46AD-A2EE-8DFF7C8330FD.png"
337
+ },
338
+ "large": {
339
+ "http_url": "http://avatars.tout.com/u/55f3a3ab7a142ce1df3696c839bd2b1c/large/D87FBA53-D4EB-46AD-A2EE-8DFF7C8330FD.png"
340
+ },
341
+ "medium": {
342
+ "http_url": "http://avatars.tout.com/u/55f3a3ab7a142ce1df3696c839bd2b1c/medium/D87FBA53-D4EB-46AD-A2EE-8DFF7C8330FD.png"
343
+ },
344
+ "small": {
345
+ "http_url": "http://avatars.tout.com/u/55f3a3ab7a142ce1df3696c839bd2b1c/small/D87FBA53-D4EB-46AD-A2EE-8DFF7C8330FD.png"
346
+ }
347
+ },
348
+ "blocking": false,
349
+ "following": false,
350
+ "followed_by": false
351
+ },
352
+ "image": {
353
+ "poster": {
354
+ "width": null,
355
+ "height": null,
356
+ "http_url": "http://i2.ytimg.com/vi/p02QJDzq40c/hqdefault.jpg"
357
+ },
358
+ "thumbnail": {
359
+ "width": 150,
360
+ "height": null,
361
+ "http_url": "http://i2.ytimg.com/vi/p02QJDzq40c/default.jpg"
362
+ }
363
+ },
364
+ "video": {
365
+ "type": "youtube",
366
+ "duration": 7,
367
+ "youtube": {
368
+ "start_offset": 50,
369
+ "video_id": "p02QJDzq40c"
370
+ }
371
+ },
372
+ "liked": false
373
+ }
374
+ },
375
+ {
376
+ "tout": {
377
+ "uid": "kbWWSwhd4fC",
378
+ "text": "The Cult Rocks!",
379
+ "parsed_text": {
380
+ "hashtags": [],
381
+ "mentions": [],
382
+ "urls": []
383
+ },
384
+ "views_count": 12,
385
+ "likes_count": 1,
386
+ "total_likes_count": 1,
387
+ "replies_count": 0,
388
+ "retouts_count": 0,
389
+ "recorded_at": "2011-01-20T17:38:12Z",
390
+ "created_at": "2011-01-20T17:38:12Z",
391
+ "privacy": "public",
392
+ "user": {
393
+ "username": "michael",
394
+ "uid": "michael",
395
+ "fullname": "Michael Downing",
396
+ "verified": true,
397
+ "location": "san francisco, ca",
398
+ "headline": "Chief Janitor of Tout, Archie's Dad, bad drummer",
399
+ "bio": "Bring it !!",
400
+ "friendly_name": "Michael Downing",
401
+ "touts_count": 2179,
402
+ "followers_count": 845,
403
+ "friends_count": 2683,
404
+ "last_tout_recorded_at": "2013-05-01T02:45:06Z",
405
+ "created_at": "2011-01-20T17:35:46Z",
406
+ "avatar": {
407
+ "profile": {
408
+ "http_url": "http://avatars.tout.com/u/a00d80a68a824921baf16cdd55793b2b/profile/TapaTio.jpg"
409
+ },
410
+ "large": {
411
+ "http_url": "http://avatars.tout.com/u/a00d80a68a824921baf16cdd55793b2b/large/TapaTio.jpg"
412
+ },
413
+ "medium": {
414
+ "http_url": "http://avatars.tout.com/u/a00d80a68a824921baf16cdd55793b2b/medium/TapaTio.jpg"
415
+ },
416
+ "small": {
417
+ "http_url": "http://avatars.tout.com/u/a00d80a68a824921baf16cdd55793b2b/small/TapaTio.jpg"
418
+ }
419
+ },
420
+ "following": false,
421
+ "followed_by": false,
422
+ "blocking": false
423
+ },
424
+ "image": {
425
+ "poster": {
426
+ "width": null,
427
+ "height": null,
428
+ "http_url": "http://i2.ytimg.com/vi/1yLVufAfby0/hqdefault.jpg"
429
+ },
430
+ "thumbnail": {
431
+ "width": 150,
432
+ "height": null,
433
+ "http_url": "http://i2.ytimg.com/vi/1yLVufAfby0/default.jpg"
434
+ }
435
+ },
436
+ "video": {
437
+ "type": "youtube",
438
+ "duration": 11,
439
+ "youtube": {
440
+ "start_offset": 41,
441
+ "video_id": "1yLVufAfby0"
442
+ }
443
+ },
444
+ "liked": false
445
+ }
446
+ },
447
+ {
448
+ "tout": {
449
+ "uid": "0QvaKlfFQJm",
450
+ "text": "The Cult Rocks!",
451
+ "parsed_text": {
452
+ "hashtags": [],
453
+ "mentions": [],
454
+ "urls": []
455
+ },
456
+ "views_count": 0,
457
+ "likes_count": 0,
458
+ "total_likes_count": 0,
459
+ "replies_count": 0,
460
+ "retouts_count": 0,
461
+ "recorded_at": "2011-01-20T17:38:13Z",
462
+ "created_at": "2011-01-20T17:38:13Z",
463
+ "privacy": "public",
464
+ "user": {
465
+ "username": "michael",
466
+ "uid": "michael",
467
+ "fullname": "Michael Downing",
468
+ "verified": true,
469
+ "location": "san francisco, ca",
470
+ "headline": "Chief Janitor of Tout, Archie's Dad, bad drummer",
471
+ "bio": "Bring it !!",
472
+ "friendly_name": "Michael Downing",
473
+ "touts_count": 2179,
474
+ "followers_count": 845,
475
+ "friends_count": 2683,
476
+ "last_tout_recorded_at": "2013-05-01T02:45:06Z",
477
+ "created_at": "2011-01-20T17:35:46Z",
478
+ "avatar": {
479
+ "profile": {
480
+ "http_url": "http://avatars.tout.com/u/a00d80a68a824921baf16cdd55793b2b/profile/TapaTio.jpg"
481
+ },
482
+ "large": {
483
+ "http_url": "http://avatars.tout.com/u/a00d80a68a824921baf16cdd55793b2b/large/TapaTio.jpg"
484
+ },
485
+ "medium": {
486
+ "http_url": "http://avatars.tout.com/u/a00d80a68a824921baf16cdd55793b2b/medium/TapaTio.jpg"
487
+ },
488
+ "small": {
489
+ "http_url": "http://avatars.tout.com/u/a00d80a68a824921baf16cdd55793b2b/small/TapaTio.jpg"
490
+ }
491
+ },
492
+ "blocking": false,
493
+ "following": false,
494
+ "followed_by": false
495
+ },
496
+ "image": {
497
+ "poster": {
498
+ "width": null,
499
+ "height": null,
500
+ "http_url": "http://i2.ytimg.com/vi/1yLVufAfby0/hqdefault.jpg"
501
+ },
502
+ "thumbnail": {
503
+ "width": 150,
504
+ "height": null,
505
+ "http_url": "http://i2.ytimg.com/vi/1yLVufAfby0/default.jpg"
506
+ }
507
+ },
508
+ "video": {
509
+ "type": "youtube",
510
+ "duration": 11,
511
+ "youtube": {
512
+ "start_offset": 41,
513
+ "video_id": "1yLVufAfby0"
514
+ }
515
+ },
516
+ "liked": false
517
+ }
518
+ },
519
+ {
520
+ "tout": {
521
+ "uid": "2LWheANu2hZ",
522
+ "text": "KIller Cult #thecult",
523
+ "parsed_text": {
524
+ "hashtags": [
525
+ {
526
+ "text": "#thecult",
527
+ "name": "thecult",
528
+ "indices": [
529
+ 12,
530
+ 20
531
+ ],
532
+ "uid": "thecult"
533
+ }
534
+ ],
535
+ "mentions": [],
536
+ "urls": []
537
+ },
538
+ "views_count": 1,
539
+ "likes_count": 0,
540
+ "total_likes_count": 0,
541
+ "replies_count": 0,
542
+ "retouts_count": 0,
543
+ "recorded_at": "2011-01-20T17:41:51Z",
544
+ "created_at": "2011-01-20T17:41:51Z",
545
+ "privacy": "public",
546
+ "user": {
547
+ "username": "michael",
548
+ "uid": "michael",
549
+ "fullname": "Michael Downing",
550
+ "verified": true,
551
+ "location": "san francisco, ca",
552
+ "headline": "Chief Janitor of Tout, Archie's Dad, bad drummer",
553
+ "bio": "Bring it !!",
554
+ "friendly_name": "Michael Downing",
555
+ "touts_count": 2179,
556
+ "followers_count": 845,
557
+ "friends_count": 2683,
558
+ "last_tout_recorded_at": "2013-05-01T02:45:06Z",
559
+ "created_at": "2011-01-20T17:35:46Z",
560
+ "avatar": {
561
+ "profile": {
562
+ "http_url": "http://avatars.tout.com/u/a00d80a68a824921baf16cdd55793b2b/profile/TapaTio.jpg"
563
+ },
564
+ "large": {
565
+ "http_url": "http://avatars.tout.com/u/a00d80a68a824921baf16cdd55793b2b/large/TapaTio.jpg"
566
+ },
567
+ "medium": {
568
+ "http_url": "http://avatars.tout.com/u/a00d80a68a824921baf16cdd55793b2b/medium/TapaTio.jpg"
569
+ },
570
+ "small": {
571
+ "http_url": "http://avatars.tout.com/u/a00d80a68a824921baf16cdd55793b2b/small/TapaTio.jpg"
572
+ }
573
+ },
574
+ "blocking": false,
575
+ "following": false,
576
+ "followed_by": false
577
+ },
578
+ "image": {
579
+ "poster": {
580
+ "width": null,
581
+ "height": null,
582
+ "http_url": "http://i2.ytimg.com/vi/IrTiauxUQDE/hqdefault.jpg"
583
+ },
584
+ "thumbnail": {
585
+ "width": 150,
586
+ "height": null,
587
+ "http_url": "http://i2.ytimg.com/vi/IrTiauxUQDE/default.jpg"
588
+ }
589
+ },
590
+ "video": {
591
+ "type": "youtube",
592
+ "duration": 11,
593
+ "youtube": {
594
+ "start_offset": 23,
595
+ "video_id": "IrTiauxUQDE"
596
+ }
597
+ },
598
+ "liked": false
599
+ }
600
+ },
601
+ {
602
+ "tout": {
603
+ "uid": "71M6N1zIiuY",
604
+ "text": "Awesome Cult!! #thecult",
605
+ "parsed_text": {
606
+ "hashtags": [
607
+ {
608
+ "text": "#thecult",
609
+ "name": "thecult",
610
+ "indices": [
611
+ 15,
612
+ 23
613
+ ],
614
+ "uid": "thecult"
615
+ }
616
+ ],
617
+ "mentions": [],
618
+ "urls": []
619
+ },
620
+ "views_count": 0,
621
+ "likes_count": 0,
622
+ "total_likes_count": 0,
623
+ "replies_count": 0,
624
+ "retouts_count": 0,
625
+ "recorded_at": "2011-01-20T17:44:16Z",
626
+ "created_at": "2011-01-20T17:44:16Z",
627
+ "privacy": "public",
628
+ "user": {
629
+ "username": "michael",
630
+ "uid": "michael",
631
+ "fullname": "Michael Downing",
632
+ "verified": true,
633
+ "location": "san francisco, ca",
634
+ "headline": "Chief Janitor of Tout, Archie's Dad, bad drummer",
635
+ "bio": "Bring it !!",
636
+ "friendly_name": "Michael Downing",
637
+ "touts_count": 2179,
638
+ "followers_count": 845,
639
+ "friends_count": 2683,
640
+ "last_tout_recorded_at": "2013-05-01T02:45:06Z",
641
+ "created_at": "2011-01-20T17:35:46Z",
642
+ "avatar": {
643
+ "profile": {
644
+ "http_url": "http://avatars.tout.com/u/a00d80a68a824921baf16cdd55793b2b/profile/TapaTio.jpg"
645
+ },
646
+ "large": {
647
+ "http_url": "http://avatars.tout.com/u/a00d80a68a824921baf16cdd55793b2b/large/TapaTio.jpg"
648
+ },
649
+ "medium": {
650
+ "http_url": "http://avatars.tout.com/u/a00d80a68a824921baf16cdd55793b2b/medium/TapaTio.jpg"
651
+ },
652
+ "small": {
653
+ "http_url": "http://avatars.tout.com/u/a00d80a68a824921baf16cdd55793b2b/small/TapaTio.jpg"
654
+ }
655
+ },
656
+ "blocking": false,
657
+ "following": false,
658
+ "followed_by": false
659
+ },
660
+ "image": {
661
+ "poster": {
662
+ "width": null,
663
+ "height": null,
664
+ "http_url": "http://i2.ytimg.com/vi/NuQXS-AP_to/hqdefault.jpg"
665
+ },
666
+ "thumbnail": {
667
+ "width": 150,
668
+ "height": null,
669
+ "http_url": "http://i2.ytimg.com/vi/NuQXS-AP_to/default.jpg"
670
+ }
671
+ },
672
+ "video": {
673
+ "type": "youtube",
674
+ "duration": 11,
675
+ "youtube": {
676
+ "start_offset": 75,
677
+ "video_id": "NuQXS-AP_to"
678
+ }
679
+ },
680
+ "liked": false
681
+ }
682
+ }
683
+ ],
684
+ "pagination": {
685
+ "current_page": 1,
686
+ "per_page": 8,
687
+ "total_entries": 8701
688
+ }
689
+ }