Class: TimesTopics

Inherits:
Object
  • Object
show all
Defined in:
lib/times_topics.rb

Constant Summary collapse

BASE_URI =
'http://topics.nytimes.com/top/reference/timestopics/'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(query, type = 'person') ⇒ TimesTopics

Returns a new instance of TimesTopics.



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/times_topics.rb', line 7

def initialize(query, type = 'person')
  @type = type
  @query = query

  if @result = TimesTags.search(query, type)
    @num_results = @result["num_results"]
    if @num_results > 0
      top_result = @result["results"].shift
      @tag = top_result
      case @type
      when /person/
        @url = build_person_url(top_result)
      when /organization/
        @url = build_organization_url(top_result)
      end

      if @result["num_results"] > 1
        @related_results = @result["results"]
      end
    end
  end
end

Instance Attribute Details

#num_resultsObject

Returns the value of attribute num_results.



5
6
7
# File 'lib/times_topics.rb', line 5

def num_results
  @num_results
end

#queryObject

Returns the value of attribute query.



5
6
7
# File 'lib/times_topics.rb', line 5

def query
  @query
end

Returns the value of attribute related_results.



5
6
7
# File 'lib/times_topics.rb', line 5

def related_results
  @related_results
end

#resultObject

Returns the value of attribute result.



5
6
7
# File 'lib/times_topics.rb', line 5

def result
  @result
end

#tagObject

Returns the value of attribute tag.



5
6
7
# File 'lib/times_topics.rb', line 5

def tag
  @tag
end

#typeObject

Returns the value of attribute type.



5
6
7
# File 'lib/times_topics.rb', line 5

def type
  @type
end

#urlObject

Returns the value of attribute url.



5
6
7
# File 'lib/times_topics.rb', line 5

def url
  @url
end

Instance Method Details

#build_organization_url(result) ⇒ Object



72
73
74
75
76
77
# File 'lib/times_topics.rb', line 72

def build_organization_url(result)
  # http://topics.nytimes.com/top/reference/timestopics/organizations/a/al_qaeda/index.html
  topic_name = result.sub(filter('organization'), "").strip.gsub(/\s/, '_').downcase
  index_char = result[0,1].downcase
  BASE_URI + 'organizations/' + index_char + '/' + topic_name + '/index.html'
end

#build_person_url(result) ⇒ Object



65
66
67
68
69
70
# File 'lib/times_topics.rb', line 65

def build_person_url(result)
  # http://topics.nytimes.com/top/reference/timestopics/people/b/osama_bin_laden/index.html
  topic_name = result.sub(filter('person'), "").split(',').map(&:strip).reverse.join('_').gsub(/\s/, '_').downcase
  index_char = result[0,1].downcase
  BASE_URI + 'people/' + index_char + '/' + topic_name + '/index.html'
end

#filter(long_form) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/times_topics.rb', line 30

def filter(long_form)
  case long_form
  when /org/i
    "(Org)"
  when /people|person/i
    "(Per)"
  when /geo/i
    "(Geo)"
  when /des/i
    "(Des)"
  end
end

#page_exists?Boolean

Returns:

  • (Boolean)


43
44
45
46
47
48
49
50
51
# File 'lib/times_topics.rb', line 43

def page_exists?
  return false if @url.nil?
  parsed_url = URI.parse(@url)
  request = Net::HTTP::Get.new(parsed_url.path)
  result = Net::HTTP.start(parsed_url.host, parsed_url.port) {|http|
    http.request(request)
  }
  result.is_a?(Net::HTTPOK)
end


53
54
55
56
57
58
59
60
61
62
63
# File 'lib/times_topics.rb', line 53

def related_result_urls
  return [] if @related_results.nil? || @related_results.empty?
  @related_results.map do |result|
    case @type
    when /person/i
      build_person_url(result)
    when /organization/
      build_organization_url(result)
    end
  end
end