Class: Arxiv

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

Constant Summary collapse

API_PATH =

Base api query url

'http://export.arxiv.org/api/query?'
API_URI =
URI.parse(API_PATH)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(referer = '', num_results = 50, start_results = 0) ⇒ Arxiv

Returns a new instance of Arxiv.



20
21
22
23
24
# File 'lib/arxiv.rb', line 20

def initialize(referer='', num_results=50, start_results=0)
  @referer = referer
  @start_results = start_results
  @num_results = num_results
end

Instance Attribute Details

#num_resultsObject

Returns the value of attribute num_results.



18
19
20
# File 'lib/arxiv.rb', line 18

def num_results
  @num_results
end

#refererObject

Returns the value of attribute referer.



18
19
20
# File 'lib/arxiv.rb', line 18

def referer
  @referer
end

#start_resultsObject

Returns the value of attribute start_results.



18
19
20
# File 'lib/arxiv.rb', line 18

def start_results
  @start_results
end

Instance Method Details

#search(query, field = 'all') ⇒ Object



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

def search(query, field='all')
  api = API_URI
  api_call = Net::HTTP.new(api.host)
  
  params = "?search_query=#{field}:#{query}&start=#{@start_results}"
  params += "&max_results=#{@num_results}"

  response = api_call.get2(api.path + params, { 'Referer' => @referer })
  return nil if response.class.superclass == Net::HTTPServerError

  doc = Nokogiri::HTML(response.body)
  doc.xpath('//feed/entry').map do |item|
    authors = item.xpath('author').map { |author| author.xpath('name').text }
    Result.new(
      item.xpath('title').text,
      item.xpath('summary').text.gsub("\n", ' ').strip,
      item.xpath('id').text,
      item.xpath('published').text,
      authors
    )
  end
end