springer 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. data/lib/result.rb +10 -0
  2. data/lib/springer.rb +62 -0
  3. metadata +46 -0
data/lib/result.rb ADDED
@@ -0,0 +1,10 @@
1
+ class Result
2
+ attr_accessor :title, :abstract, :url, :date
3
+
4
+ def initialize(options)
5
+ options.each do |key, value|
6
+ self.send("#{key}=", value)
7
+ end
8
+ end
9
+ end
10
+
data/lib/springer.rb ADDED
@@ -0,0 +1,62 @@
1
+ require 'cgi'
2
+ require 'json'
3
+ require 'net/http'
4
+ require 'result'
5
+ require 'uri'
6
+
7
+ class Springer
8
+ # API to Springer search API
9
+ #
10
+ # Example:
11
+ # >> Springer.new('[METADATA KEY]', '[IMAGES_KEY]', '[OPENACCESS_KEY]', '[Referer]').search('nano fibers')
12
+ # => [ #<Result:...>, ... ]
13
+ #
14
+ # Arguments:
15
+ # metadata_key: (String)
16
+ # images_key: (String)
17
+ # openaccess_key: (String)
18
+ # referer: (String)
19
+ # num_results: (Integer+)
20
+
21
+ API_PATH = "http://api.springer.com/metadata/json"
22
+ API_URI = URI.parse(API_PATH)
23
+
24
+ attr_accessor :metadata_key, :images_key, :openaccess_key, :referer
25
+
26
+ def initialize(metadata_key, images_key='', openaccess_key='', referer='', num_results=50)
27
+ @metadata_key = metadata_key
28
+ @images_key = images_key
29
+ @openaccess_key = openaccess_key
30
+ @referer = referer
31
+ @num_results = num_results
32
+ end
33
+
34
+ def search(query)
35
+ api = API_URI
36
+ api_call = Net::HTTP.new(api.host)
37
+ params = "?p=#{@num_results}&q=#{CGI.escape(query)}&api_key=#{@metadata_key}"
38
+ response = api_call.get2(api.path + params, { 'Referer' => @referer })
39
+ return nil if response.class.superclass == Net::HTTPServerError
40
+ response = JSON.parse(response.body)
41
+ response['records'].map do |result|
42
+ Result.new({
43
+ :title => result['title'],
44
+ :abstract => create_abstract(result),
45
+ :url => result['url'],
46
+ :date => result['publicationDate']
47
+ })
48
+ end
49
+ end
50
+
51
+ # TODO search images and openaccess apis
52
+
53
+ def create_abstract(result)
54
+ abstract = "#{result['publicationName']} &ndash; "
55
+ result['creators'].each_with_index do |creator, i|
56
+ abstract += " and" if i > 0
57
+ abstract += " #{creator['creator']}"
58
+ end
59
+ return abstract
60
+ end
61
+ end
62
+
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: springer
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Peter Lubell-Doughtie
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-12-26 00:00:00.000000000Z
13
+ dependencies: []
14
+ description: API for Springer search
15
+ email: peter@helioid.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/springer.rb
21
+ - lib/result.rb
22
+ homepage: http://rubygems.org/gems/springer
23
+ licenses: []
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ none: false
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 1.8.13
43
+ signing_key:
44
+ specification_version: 3
45
+ summary: API for Springer search
46
+ test_files: []