Active 0.0.35 → 0.0.36

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.
data/lib/services/gsa.rb CHANGED
@@ -48,13 +48,14 @@ module Active
48
48
  def categories
49
49
  if @data["meta"]["channel"].class==String
50
50
  if @data["meta"]["channel"].index(",")
51
- @data["meta"]["channel"].split(",")
51
+ return @data["meta"]["channel"].split(",")
52
52
  else
53
- [@data["meta"]["channel"]]
53
+ return [@data["meta"]["channel"]]
54
54
  end
55
55
  else
56
- @data["meta"]["channel"]
56
+ return @data["meta"]["channel"]
57
57
  end
58
+ []
58
59
  end
59
60
 
60
61
  def asset_id
@@ -50,6 +50,6 @@ local_asset_type_id = "EC6E96A5-6900-4A0E-8B83-9AA935F45A73"
50
50
  # puts r.map(&:url)
51
51
 
52
52
 
53
- s = Search.search({:dma=>"San Francisco - Oakland - San Jose", :num_results => 5})
53
+ s = Search.search({:bounding_box=>{:sw=>"36.893089,-123.533684", :ne=>"38.8643,-121.208199"}, :facet=>"", :end_date=>"+", :page=>1, :num_results=>10, :sort=>"date_asc", :start_date=>"today", :split_media_type=>nil})
54
54
  puts s.numberOfResults
55
55
  # puts r.map(&:url)
data/version.txt CHANGED
@@ -1 +1 @@
1
- 0.0.35
1
+ 0.0.36
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Active
3
3
  version: !ruby/object:Gem::Version
4
- hash: 89
4
+ hash: 87
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 35
10
- version: 0.0.35
9
+ - 36
10
+ version: 0.0.36
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jonathan Spooner, Brian Levine
@@ -76,7 +76,6 @@ extra_rdoc_files:
76
76
  - History.txt
77
77
  - README.txt
78
78
  - bin/Active
79
- - lib/services/search.txt
80
79
  - version.txt
81
80
  files:
82
81
  - .bnsignore
@@ -97,7 +96,6 @@ files:
97
96
  - lib/services/reg_center.rb
98
97
  - lib/services/sanitize.rb
99
98
  - lib/services/search.rb
100
- - lib/services/search.txt
101
99
  - lib/services/validators.rb
102
100
  - rspec-tm
103
101
  - rvmrc
@@ -1,403 +0,0 @@
1
- require 'net/http'
2
- require 'json'
3
- require 'cgi'
4
- require 'rubygems'
5
- require 'mysql'
6
- require 'active_record'
7
-
8
- module Active
9
- module Services
10
-
11
- # we should remove this class and just replace with symbols
12
- class Sort
13
- def self.DATE_ASC
14
- "date_asc"
15
- end
16
- def self.DATE_DESC
17
- "date_desc"
18
- end
19
- def self.RELEVANCE
20
- "relevance"
21
- end
22
- end
23
-
24
- # we should remove this class and just replace with symbols
25
- class Facet
26
- def self.ACTIVITIES
27
- "activities"
28
- end
29
- end
30
-
31
- class Search
32
- attr_accessor :api_key, :start_date, :end_date, :location, :channels, :keywords, :search, :radius, :limit, :sort, :page, :offset, :latitude, :longitude,
33
- :view, :facet, :sort, :num_results, :asset_ids, :dma, :city, :state, :country
34
-
35
- attr_reader :results, :endIndex, :pageSize, :searchTime, :numberOfResults, :end_point, :meta
36
-
37
- SEARCH_URL = "http://search.active.com"
38
- DEFAULT_TIMEOUT = 60
39
-
40
- def initialize(data={})
41
- self.api_key = data[:api_key] || ""
42
- self.location = data[:location] || ""
43
- self.zips = data[:zips] || []
44
- self.channels = data[:channels] || []
45
- self.keywords = data[:keywords] || []
46
- self.radius = data[:radius] || nil
47
- self.limit = data[:limit] || "10"
48
- self.sort = data[:sort] || Sort.DATE_ASC
49
- self.page = data[:page] || "1"
50
- self.offset = data[:offset] || "0"
51
- self.view = data[:view] || "json"
52
- self.facet = data[:facet] || Facet.ACTIVITIES
53
- self.num_results = data[:num_results] || "10"
54
- self.search = data[:search] || ""
55
- self.start_date = data[:start_date] || "today"
56
- self.end_date = data[:end_date] || "+"
57
- self.asset_ids = data[:asset_ids] || []
58
- self.asset_id = data[:asset_id] || ""
59
- self.latitude = data[:latitude]
60
- self.longitude = data[:longitude]
61
- self.dma = data[:dma]
62
- self.city = data[:city]
63
- self.state = data[:state]
64
- self.country = data[:country]
65
- end
66
-
67
- # Example
68
- # Search.search( {:zips => "92121, 92078, 92114"} )
69
- # or
70
- # Search.new( {:zips => [92121, 92078, 92114]} )
71
- def zips=(value)
72
- if value.class == String
73
- @zips = value.split(",").each { |k| k.strip! }
74
- else
75
- @zips = value
76
- end
77
- end
78
-
79
- def zips
80
- @zips
81
- end
82
-
83
- def location=(value)
84
- @location = CGI.escape(value)
85
- end
86
-
87
- def keywords=(value)
88
- if value.class == String
89
- @keywords = value.gsub(",", " ").split(" ").each { |k| k.strip! }
90
- else
91
- @keywords = value
92
- end
93
- end
94
-
95
- def channels=(value)
96
- if value.class == String
97
- @channels = value.split(",").each { |k| k.strip! }
98
- else
99
- @channels = value
100
- end
101
- end
102
-
103
- def asset_ids=(value)
104
- @asset_ids = value
105
- end
106
-
107
- def asset_id=(value)
108
- return if value.empty?
109
- @asset_ids<<value
110
- end
111
-
112
- def end_point
113
- meta_data = ""
114
- loc_str = ""
115
- # CHANNELS
116
- channel_keys = []
117
- @channels.each do |c|
118
- c.to_sym
119
- if Categories.CHANNELS.include?(c)
120
- channel_keys << Categories.CHANNELS[c]
121
- end
122
- end
123
- meta_data = channel_keys.collect { |channel| "meta:channel=#{Search.double_encode_channel(channel)}" }.join("+OR+")
124
- # ASSET IDS
125
- unless asset_ids.empty?
126
- meta_data += "+AND+" unless meta_data == ""
127
- temp_ids = []
128
- asset_ids.each do |id|
129
- temp_ids << "meta:" + CGI.escape("assetId=#{id.gsub("-","%2d")}")
130
- end
131
- meta_data += temp_ids.join("+OR+")
132
- end
133
- # LOCATION
134
- # 1 Look for :city, :state, :country
135
- # 2 Look for zip codes
136
- # 3 Look for lat lng
137
- # 4 Look for a formatted string "San Diego, CA, US"
138
- # 5 Look for a dma
139
-
140
- if @city or @state or @country
141
- if @city
142
- meta_data += "+AND+" unless meta_data == ""
143
- meta_data += "meta:city=#{Search.double_encode_channel(@city)}"
144
- end
145
- if @state
146
- meta_data += "+AND+" unless meta_data == ""
147
- meta_data += "meta:state=#{Search.double_encode_channel(@state)}"
148
- end
149
- elsif !@zips.empty?
150
- # if not @zips.empty?
151
- loc_str = @zips.join(",")
152
- elsif @latitude and @longitude
153
- loc_str = "#{@latitude};#{@longitude}"
154
- elsif @dma
155
-
156
- meta_data += "+AND+" unless meta_data == ""
157
- meta_data += "meta:dma=#{Search.double_encode_channel(@dma)}"
158
- else
159
- loc_str = @location
160
- end
161
-
162
-
163
- # AND DATE
164
- meta_data += "+AND+" unless meta_data == ""
165
- if @start_date.class == Date
166
- @start_date = URI.escape(@start_date.strftime("%m/%d/%Y")).gsub(/\//,"%2F")
167
- end
168
- if @end_date.class == Date
169
- @end_date = URI.escape(@end_date.strftime("%m/%d/%Y")).gsub(/\//,"%2F")
170
- end
171
- meta_data += "meta:startDate:daterange:#{@start_date}..#{@end_date}"
172
-
173
- # url = "#{SEARCH_URL}/search?api_key=#{@api_key}&num=#{@num_results}&page=#{@page}&l=#{loc_str}&f=#{@facet}&v=#{@view}&r=#{@radius}&s=#{@sort}&k=#{@keywords.join("+")}&m=#{meta_data}"
174
- urla = ["#{SEARCH_URL}/search?api_key=#{@api_key}"]
175
- urla << "num=#{@num_results}" if @num_results
176
- urla << "page=#{@page}" if @page
177
- urla << "l=#{loc_str}" unless loc_str.empty?
178
- urla << "f=#{@facet}" if @facet
179
- urla << "v=#{@view}" if @view
180
- urla << "r=#{@radius}" if @radius
181
- urla << "s=#{@sort}" if @sort
182
- urla << "k=#{@keywords.join("+")}" if @keywords and !@keywords.empty?
183
- urla << "m=#{meta_data}" if meta_data
184
-
185
- return urla.join("&")
186
- end
187
-
188
- def search
189
- searchurl = URI.parse(end_point)
190
- req = Net::HTTP::Get.new(searchurl.path)
191
- http = Net::HTTP.new(searchurl.host, searchurl.port)
192
- http.read_timeout = DEFAULT_TIMEOUT
193
-
194
- puts "#{searchurl.path}?#{searchurl.query}"
195
-
196
- res = http.start { |http|
197
- http.get("#{searchurl.path}?#{searchurl.query}")
198
- }
199
-
200
- if (200..307).include?(res.code.to_i)
201
- begin
202
- parsed_json = JSON.parse(res.body)
203
- @endIndex = parsed_json["endIndex"]
204
- @pageSize = parsed_json["pageSize"]
205
- @searchTime = parsed_json["searchTime"]
206
- @numberOfResults = parsed_json["numberOfResults"]
207
- @results = parsed_json['_results'].collect { |a| GSA.new(a) }
208
- rescue JSON::ParserError => e
209
- raise RuntimeError, "JSON::ParserError json=#{res.body}"
210
- @endIndex = 0
211
- @pageSize = 0
212
- @searchTime = 0
213
- @numberOfResults = 0
214
- @results = []
215
- end
216
-
217
- else
218
- raise RuntimeError, "Active Search responded with a #{res.code} for your query."
219
- end
220
- end
221
-
222
- # examples
223
- #
224
- #
225
- # = Keywords =
226
- # Keywords can be set like this
227
- # Search.new({:keywords => "Dog,Cat,Cow"})
228
- # Search.new({:keywords => %w(Dog Cat Cow)})
229
- # Search.new({:keywords => ["Dog","Cat","Cow"]})
230
- #
231
- # = Location =
232
- # The location will be set in this order and will override other values. For example is you set a zip code and a location only the zip will be used.
233
- #
234
- # 1 Look for zip codes
235
- # Search.search( {:zips => "92121, 92078, 92114"} )
236
- # Search.search( {:zips => %w(92121, 92078, 92114)} )
237
- # Search.search( {:zips => [92121, 92078, 92114]} )
238
- #
239
- # 2 Look for lat lng
240
- # Search.search( {:latitude=>"37.785895", :longitude=>"-122.40638"} )
241
- #
242
- # 3 Look for a formatted string "San Diego, CA, US"
243
- # Search.search( {:location = "San Diego, CA, US"} )
244
- #
245
- # 4 Look for a DMA
246
- # Search.new({:dma=>"San Francisco - Oakland - San Jose"})
247
- #
248
- # = How to look at the results =
249
- #
250
- #
251
- # http://developer.active.com/docs/Activecom_Search_API_Reference
252
- # returns an array of results and query info
253
- def self.search(data=nil)
254
- search = Search.new(data)
255
- search.search
256
- return search
257
- end
258
-
259
- def []
260
- @results
261
- end
262
-
263
- private
264
- def self.double_encode_channel str
265
- str = URI.escape(str, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
266
- str = URI.escape(str, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
267
- str.gsub!(/\-/,"%252D")
268
- str
269
- end
270
-
271
- end
272
-
273
- # TODO move to a reflection service
274
- class Categories
275
- def self.CHANNELS
276
- {
277
- :active_lifestyle => '',
278
- :fitness => 'Fitness',
279
- :body_building => 'Fitness\Body Building',
280
- :boxing => 'Fitness\Boxing',
281
- :weight_lifting => 'Fitness\Weight Lifting',
282
- :gear => 'Gear',
283
- :lifestyle_vehicles => 'Lifestyle Vehicles',
284
- :mind_mody => 'Mind & Body',
285
- :meditation => 'Mind & Body\Meditation',
286
- :pilates => 'Mind & Body\Pilates',
287
- :yoga => 'Mind & Body\Yoga',
288
- :nutrition => 'Nutrition',
289
- :travel => 'Travel',
290
- :women => 'Women',
291
- :other => 'Other',
292
- :corporate => 'Corporate',
293
- :not_specified => 'Not Specified',
294
- :unknown => 'Unknown',
295
- :special_interest => 'Special+Interest',
296
- :giving => 'Giving',
297
- :parks_recreation => 'Parks & Recreation',
298
- :gear => 'Parks & Recreation\Gear',
299
- :mind_body => 'Parks & Recreation\Mind & Body',
300
- :travel => 'Parks & Recreation\Travel',
301
- :vehicles => 'Parks & Recreation\Vehicles',
302
- :women => 'Parks & Recreation\Women',
303
- :reunions => 'Reunions',
304
- :sports => 'Sports',
305
- :action_sports => 'Action Sports',
306
- :auto_racing => 'Action Sports\Auto Racing',
307
- :bmx => 'Action Sports\BMX',
308
- :dirt_bike_racing => 'Action Sports\Dirt Bike Racing',
309
- :motocross => 'Action Sports\Motocross',
310
- :motorcycle_racing => 'Action Sports\Motorcycle Racing',
311
- :skateboarding => 'Action Sports\Skateboarding',
312
- :skydiving => 'Action Sports\Skydiving',
313
- :surfing => 'Action Sports\Surfing',
314
- :wake_kite_boarding => 'Action Sports\Wake/Kite Boarding',
315
- :water_skiing => 'Action Sports\Water Skiing',
316
- :wind_surfing => 'Action Sports\Wind Surfing',
317
- :baseball => 'Baseball',
318
- :little_league_baseball => 'Baseball\Little League Baseball',
319
- :tee_ball => 'Baseball\Tee Ball',
320
- :basketball => 'Basketball',
321
- :cheerleading => 'Cheerleading',
322
- :cycling => 'Cycling',
323
- :field_hockey => 'Field Hockey',
324
- :football => 'Football',
325
- :flag_football => 'Football\Flag Football',
326
- :football_au => 'Football\Football-AU',
327
- :golf => 'Golf',
328
- :ice_hockey => 'Ice Hockey',
329
- :lacrosse => 'Lacrosse',
330
- :more_sports => 'More Sports',
331
- :adventure_racing => 'More Sports\Adventure Racing',
332
- :archery => 'More Sports\Archery',
333
- :badminton => 'More Sports\Badminton',
334
- :billiards => 'More Sports\Billiards',
335
- :bowling => 'More Sports\Bowling',
336
- :cricket => 'More Sports\Cricket',
337
- :croquet => 'More Sports\Croquet',
338
- :curling => 'More Sports\Curling',
339
- :dance => 'More Sports\Dance',
340
- :disc_sports => 'More Sports\Disc Sports',
341
- :dodgeball => 'More Sports\Dodgeball',
342
- :duathlon => 'More Sports\Duathlon',
343
- :equestrian => 'More Sports\Equestrian',
344
- :fencing => 'More Sports\Fencing',
345
- :figure_skating => 'More Sports\Figure Skating',
346
- :gymnastics => 'More Sports\Gymnastics',
347
- :inline_hockey => 'More Sports\Inline Hockey',
348
- :inline_skating => 'More Sports\Inline Skating',
349
- :kickball => 'More Sports\Kickball',
350
- :martial_arts => 'More Sports\Martial Arts',
351
- :paintball => 'More Sports\Paintball',
352
- :polo => 'More Sports\Polo',
353
- :racquetball => 'More Sports\Racquetball',
354
- :rowing => 'More Sports\Rowing',
355
- :rugby => 'More Sports\Rugby',
356
- :scouting => 'More Sports\Scouting',
357
- :scuba_diving => 'More Sports\Scuba Diving',
358
- :skating => 'More Sports\Skating',
359
- :squash => 'More Sports\Squash',
360
- :ultimate_frisbee => 'More Sports\Ultimate Frisbee',
361
- :water_polo => 'More Sports\Water Polo',
362
- :mountain_biking => 'Mountain Biking',
363
- :outdoors => 'Outdoors',
364
- :canoeing => 'Outdoors\Canoeing',
365
- :climbing => 'Outdoors\Climbing',
366
- :hiking => 'Outdoors\Hiking',
367
- :kayaking => 'Outdoors\Kayaking',
368
- :orienteering => 'Outdoors\Orienteering',
369
- :outrigging => 'Outdoors\Outrigging',
370
- :rafting => 'Outdoors\Rafting',
371
- :racquetball => 'Racquetball',
372
- :rugby => 'Rugby',
373
- :running => 'Running',
374
- :cross_country => 'Running\Cross Country',
375
- :marathon_running => 'Running\Marathon Running',
376
- :track_field => 'Running\Track & Field',
377
- :trail_running => 'Running\Trail Running',
378
- :sailing => 'Sailing',
379
- :snow_sports => 'Snow Sports',
380
- :skiing => 'Snow Sports\Skiing',
381
- :snowboarding => 'Snow Sports\Snowboarding',
382
- :snowshoeing => 'Snow Sports\Snowshoeing',
383
- :soccer => 'Soccer',
384
- :softball => 'Softball',
385
- :softball_dixie => 'Softball\Softball-Dixie',
386
- :softball_fast_pitch => 'Softball\Softball-Fast Pitch',
387
- :softball_slow_pitch => 'Softball\Softball-Slow Pitch',
388
- :squash => 'Squash',
389
- :swimming => 'Swimming',
390
- :diving => 'Swimming\Diving',
391
- :tennis => 'Tennis',
392
- :other_tennis => 'Tennis\Other Tennis',
393
- :usta => 'Tennis\USTA',
394
- :triathlon => 'Triathlon',
395
- :volleyball => 'Volleyball',
396
- :walking => 'Walking',
397
- :wrestling => 'Wrestling'
398
- }
399
- end
400
- end
401
-
402
- end
403
- end