lib/services/search.rb in Active-0.0.32 vs lib/services/search.rb in Active-0.0.34
- old
+ new
@@ -28,44 +28,47 @@
end
end
class Search
attr_accessor :api_key, :start_date, :end_date, :location, :channels, :split_media_type, :keywords, :search, :radius, :limit, :sort, :page, :offset, :latitude, :longitude,
+ :asset_type_id, :url,
:view, :facet, :sort, :num_results, :asset_ids, :dma, :city, :state, :country, :bounding_box
attr_reader :results, :endIndex, :pageSize, :searchTime, :numberOfResults, :end_point, :meta
SEARCH_URL = "http://search.active.com"
DEFAULT_TIMEOUT = 60
def initialize(data={})
- self.api_key = data[:api_key] || ""
- self.location = data[:location]
- self.zips = data[:zips] || []
- self.channels = data[:channels] || []
- self.split_media_type= data[:split_media_type] || []
- self.keywords = data[:keywords] || []
- self.radius = data[:radius] || nil
- self.limit = data[:limit] || "10"
- self.sort = data[:sort] || Sort.DATE_ASC
- self.page = data[:page] || "1"
- self.offset = data[:offset] || "0"
- self.view = data[:view] || "json"
- self.facet = data[:facet] || Facet.ACTIVITIES
- self.num_results = data[:num_results] || "10"
- self.search = data[:search] || ""
- self.start_date = data[:start_date] || "today"
- self.end_date = data[:end_date] || "+"
- self.asset_ids = data[:asset_ids] || []
- self.asset_id = data[:asset_id] || ""
- self.latitude = data[:latitude]
- self.longitude = data[:longitude]
- self.dma = data[:dma]
- self.city = data[:city]
- self.state = data[:state]
- self.country = data[:country]
- self.bounding_box = data[:bounding_box]
+ self.asset_type_id = data[:asset_type_id]
+ self.url = data[:url]
+ self.api_key = data[:api_key] || ""
+ self.location = data[:location]
+ self.zips = data[:zips] || []
+ self.channels = data[:channels] || []
+ self.split_media_type = data[:split_media_type] || []
+ self.keywords = data[:keywords] || []
+ self.radius = data[:radius] || nil
+ self.limit = data[:limit] || "10"
+ self.sort = data[:sort] || Sort.DATE_ASC
+ self.page = data[:page] || "1"
+ self.offset = data[:offset] || "0"
+ self.view = data[:view] || "json"
+ self.facet = data[:facet] || Facet.ACTIVITIES
+ self.num_results = data[:num_results] || "10"
+ self.search = data[:search] || ""
+ self.start_date = data[:start_date] || "today"
+ self.end_date = data[:end_date] || "+"
+ self.asset_ids = data[:asset_ids] || []
+ self.asset_id = data[:asset_id] || ""
+ self.latitude = data[:latitude]
+ self.longitude = data[:longitude]
+ self.dma = data[:dma]
+ self.city = data[:city]
+ self.state = data[:state]
+ self.country = data[:country]
+ self.bounding_box = data[:bounding_box]
end
# Example
# Search.search( {:zips => "92121, 92078, 92114"} )
# or
@@ -126,18 +129,37 @@
meta_data = ""
loc_str = ""
# CHANNELS
channel_keys = []
@channels.each do |c|
- c.to_sym
+ c = c.to_sym
if Categories.CHANNELS.include?(c)
channel_keys << Categories.CHANNELS[c]
+ else
+ puts "/////////// Channel key not found [#{c}]"
end
end
- meta_data = channel_keys.collect { |channel| "meta:channel=#{Search.double_encode_channel(channel)}" }.join("+OR+")
+ meta_data += channel_keys.collect { |channel| "meta:channel=#{Search.double_encode_channel(channel)}" }.join("+OR+")
# SPLIT MEDIA TYPE
- meta_data += split_media_type.collect { |type| "+meta:splitMediaType=#{Search.double_encode_channel(type)}" }.join("+OR+") unless split_media_type.nil?
+ if split_media_type
+ meta_data += "+AND+" unless meta_data == ""
+ meta_data += split_media_type.collect { |type| "meta:splitMediaType=#{Search.double_encode_channel(type)}" }.join("+OR+")
+ end
+ # ASSET TYPE ID
+ if asset_type_id
+ meta_data += "+AND+" unless meta_data == ""
+ meta_data += "meta:assetTypeId=#{Search.double_encode_channel(asset_type_id)}"
+ end
+ # url
+ if url
+ meta_data += "+AND+" unless meta_data == ""
+ # url.gsub!(/\-/,"%252D")
+ url.gsub!(/\//,"%2F")
+ # URI.escape(url, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
+ meta_data += "site:#{url}"
+ # meta_data += "site:#{Search.double_encode_channel(url)}"
+ end
# ASSET IDS
unless asset_ids.empty?
meta_data += "+AND+" unless meta_data == ""
temp_ids = []
asset_ids.each do |id|
@@ -152,46 +174,32 @@
# 4 Look for a formatted string "San Diego, CA, US"
# 5 Look for a dma
if @city or @state or @country
if @city
meta_data += "+AND+" unless meta_data == ""
- meta_data += "meta:city=#{Search.double_encode_channel(@city)}"
+ meta_data += "meta:city=#{Search.double_encode_channel(@city)}"
end
if @state
meta_data += "+AND+" unless meta_data == ""
- meta_data += "meta:state=#{Search.double_encode_channel(@state)}"
+ meta_data += "meta:state=#{Search.double_encode_channel(@state)}"
end
elsif !@zips.empty?
- # if not @zips.empty?
loc_str = @zips.join(",")
elsif @latitude and @longitude
loc_str = "#{@latitude};#{@longitude}"
elsif @dma
-
meta_data += "+AND+" unless meta_data == ""
meta_data += "meta:dma=#{Search.double_encode_channel(@dma)}"
else
loc_str = @location
end
-
- # AND DATE
- meta_data += "+AND+" unless meta_data == ""
- if @start_date.class == Date
- @start_date = URI.escape(@start_date.strftime("%m/%d/%Y")).gsub(/\//,"%2F")
- end
- if @end_date.class == Date
- @end_date = URI.escape(@end_date.strftime("%m/%d/%Y")).gsub(/\//,"%2F")
- end
- meta_data += "meta:startDate:daterange:#{@start_date}..#{@end_date}"
-
# BOUNDING BOX
- if @bounding_box!=nil
+ unless @bounding_box.nil?
#The values in the GSA metadata are shifted to prevent negative values. This was done b/c lat/long
# are searched as a number range and the GSA doesn't allow negative values in number ranges.
# We shift latitude values by 90 and longitude values by 180.
-
if @bounding_box[:sw].class==String
#String :bounding_box => { :sw => "37.695141,-123.013657", :ne => "37.832371,-122.356979"}
latitude1 = @bounding_box[:sw].split(",").first.to_f+90
latitude2 = @bounding_box[:ne].split(",").first.to_f+90
longitude1 = @bounding_box[:sw].split(",").last.to_f+180
@@ -203,11 +211,21 @@
longitude1 = @bounding_box[:sw].last.to_f+180
longitude2 = @bounding_box[:ne].last.to_f+180
end
meta_data += "+AND+" unless meta_data == ""
meta_data += "meta:latitudeShifted:#{latitude1}..#{latitude2}+AND+meta:longitudeShifted:#{longitude1}..#{longitude2}"
- end
+ end
+ # AND DATE
+ if @start_date.class == Date
+ @start_date = URI.escape(@start_date.strftime("%m/%d/%Y")).gsub(/\//,"%2F")
+ end
+ if @end_date.class == Date
+ @end_date = URI.escape(@end_date.strftime("%m/%d/%Y")).gsub(/\//,"%2F")
+ end
+ meta_data += "+AND+" unless meta_data == ""
+ meta_data += "meta:startDate:daterange:#{@start_date}..#{@end_date}"
+
# 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}"
urla = ["#{SEARCH_URL}/search?api_key=#{@api_key}"]
urla << "num=#{@num_results}" if @num_results
urla << "page=#{@page}" if @page
urla << "l=#{loc_str}" unless loc_str.nil? or loc_str.empty?
\ No newline at end of file