Module: MedlinePlus

Defined in:
lib/medline_plus.rb,
lib/medline_plus/version.rb

Constant Summary collapse

VERSION =
"0.0.2"

Class Method Summary collapse

Class Method Details

.find_drug_by_name(query) ⇒ Object

returns drug info if there exists a precise name match

“Title”, body: “<p>Body in html</p>”, …


26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/medline_plus.rb', line 26

def self.find_drug_by_name( query )
  results = search_drug( query )
  if results[query.downcase]
    url = URI.parse(results[query.downcase])
    req = Net::HTTP::Get.new(url.to_s)
    res = Net::HTTP.start(url.host, url.port) {|http|
      http.request(req)
    }
    html = Nokogiri::HTML(res.body)
    sections = html.at_css("div[id=\"mplus-content\"]").css("section").collect do |section|
      {
        title: section.at_css(".section-title").inner_text,
        body: section.at_css(".section-body").inner_html
      }
    end
  else
    nil
  end
end

.search(query) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/medline_plus.rb', line 46

def self.search( query )
  url = Addressable::URI.parse("http://wsearch.nlm.nih.gov/ws/query")
  url.query_values = {:db => "healthTopics", :term => query}

  req = Net::HTTP::Get.new(url.to_s)
  res = Net::HTTP.start(url.host, url.port) {|http|
    http.request(req)
  }
  xml = Nokogiri::HTML(res.body)
  puts "There are #{xml.css("count").inner_html} results for --#{xml.css("term").inner_html}--, #{xml.css("document").collect {|e| e.css("content[name=\"title\"]").inner_html}}."
  xml
end

.search_drug(query) ⇒ Object

returns search results

href="http://www.nlm.nih.gov/medlineplus/druginfo/meds/a682878.html">www.nlm.nih.gov/medlineplus/druginfo/meds/a682878.html”, …


10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/medline_plus.rb', line 10

def self.search_drug( query )
  url = Addressable::URI.parse("http://apps.nlm.nih.gov/medlineplus/services/mpconnect_service.cfm")
  url.query_values = {"mainSearchCriteria.v.cs" => "2.16.840.1.113883.6.69", "mainSearchCriteria.v.dn" => query, "informationRecipient.languageCode.c" => "en"}

  req = Net::HTTP::Get.new(url.to_s)
  res = Net::HTTP.start(url.host, url.port) {|http|
    http.request(req)
  }
  xml = Nokogiri::HTML(res.body)
  results = Hash[xml.css("entry").collect {|e| [e.at_css("title").inner_html.downcase, e.at_css("link").attribute("href").value]}]
  puts "There are #{xml.css("entry").size} results, #{results}."
  results
end