springer 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []