1
2 require 'net/http'
3
4 BASE_URL = 'http://www.gnpcb.org/esv/share/get/'
5 OPTIONS = {
6 'key' => 'IP',
7 'action' => 'doPassageQuery',
8 'include-verse-numbers' => '0',
9 'include-short-copyright' => '0',
10 'output-format' => 'plain-text',
11 'include-passage-horizontal-lines' => '0',
12 'include-heading-horizontal-lines' => '0',
13 'include-passage-references' => '1',
14 'include-first-verse-numbers' => '0',
15 'include-footnotes' => '0',
16 'include-footnote-links' => '0',
17 'include-headings' => '0',
18 'include-subheadings' => '0',
19 'line-length' => '0',
20 }
21
22 def combine_refs(refs)
23 combined = refs.first
24 refs[1..-1].each do |ref|
25 if combined.index(ref.gsub(/\:.*$/, '')) == 0
26 combined += ',' + /\:(.*)$/.match(ref)[1]
27 elsif combined.index(ref.gsub(/\d+\:.*$/, '')) == 0
28 combined += ';' + /\d+\:.*$/.match(ref)[0]
29 else
30 return nil
31 end
32 end
33 combined
34 end
35
36 def lookup_esv(reference)
37 return if reference.nil? or reference.empty?
38 url = BASE_URL + '?' + OPTIONS.map { |name, value| "#{name}=#{value}" }.join('&') + '&passage=' + URI.escape(reference)
39 result = Net::HTTP.get(URI.parse(url))
40 if result =~ /^ERROR/
41 puts 'Error retrieving verse from web service'
42 nil
43 else
44 refs = []
45 result.scan(/^\S.+$/) {|ref| refs << ref }
46 refs.each {|ref| result.gsub! ref, '' }
47 reference = combine_refs(refs)
48 text = result.gsub(/\s+/, ' ').strip
49 text = text.gsub(/"/, '') if (text.count('"') == 1 and text[0..0] == '"')
50 return {:reference => reference, :text => text}
51 end
52 end
Usage: 1
2 > lookup_esv('John 3:16')
3 => {:text=>"For God so loved the world, that he gave his only Son, that whoever
4 believes in him should not perish but have eternal life.", :reference=>"John 3:16"}