edgar 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/edgar.rb +56 -0
  2. data/lib/result.rb +10 -0
  3. metadata +57 -0
data/lib/edgar.rb ADDED
@@ -0,0 +1,56 @@
1
+ require 'cgi'
2
+ require 'nokogiri'
3
+ require 'open-uri'
4
+ require 'result'
5
+
6
+ class Edgar
7
+ # API to Edgar search API
8
+ #
9
+ # Example:
10
+ # >> Edgar.new('[Referer]').search('nano fibers')
11
+ # => [ #<Result:...>, ... ]
12
+ #
13
+ # Arguments:
14
+ # referer: (String)
15
+ # num_results: (Integer+)
16
+
17
+ API_PATH = "http://searchwww.sec.gov/EDGARFSClient/jsp/EDGAR_MainAccess.jsp"
18
+
19
+ attr_accessor :referer, :num_results
20
+
21
+ def initialize(referer='', num_results=100)
22
+ @referer = referer
23
+ @num_results = num_results
24
+ end
25
+
26
+ def search(query)
27
+ params = "?search_text=#{CGI.escape(query)}&sort=Date&formType=1&isAdv=true&stemming=true&numResults=#{@num_results}&numResults=#{@num_results}"
28
+ response = open(API_PATH + params, { 'Referer' => @referer })
29
+ return nil if response.class.superclass == Net::HTTPServerError
30
+ doc = Nokogiri::HTML(response)
31
+ # fetch number of results so we slice properly
32
+ num_returned = doc.css('#header td:first font.normalbold')[0].content.match(/- (\d+)/)[1].to_i
33
+ css_types = {
34
+ :date => 0,
35
+ :title_url => 1,
36
+ :abstract => 2
37
+ }
38
+ css_attrs = [
39
+ '#ifrm2 tr i.blue',
40
+ '#ifrm2 tr a.filing',
41
+ '#ifrm2 tr i.small'
42
+ ]
43
+ tag_sets = doc.css(css_attrs.join(', ')).each_slice(num_returned).map do |el|
44
+ el
45
+ end.transpose
46
+ tag_sets.map do |tag_set|
47
+ Result.new({
48
+ :title => tag_set[css_types[:title_url]].content,
49
+ :abstract => tag_set[css_types[:abstract]].content,
50
+ :url => tag_set[css_types[:title_url]]['href'].match(/'([^']+)'/)[1],
51
+ :date => tag_set[css_types[:date]].content
52
+ })
53
+ end
54
+ end
55
+ end
56
+
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
+
metadata ADDED
@@ -0,0 +1,57 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: edgar
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-27 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: nokogiri
16
+ requirement: &76244370 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *76244370
25
+ description: API for SEC Edgar search
26
+ email: peter@helioid.com
27
+ executables: []
28
+ extensions: []
29
+ extra_rdoc_files: []
30
+ files:
31
+ - lib/edgar.rb
32
+ - lib/result.rb
33
+ homepage: http://rubygems.org/gems/edgar
34
+ licenses: []
35
+ post_install_message:
36
+ rdoc_options: []
37
+ require_paths:
38
+ - lib
39
+ required_ruby_version: !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ required_rubygems_version: !ruby/object:Gem::Requirement
46
+ none: false
47
+ requirements:
48
+ - - ! '>='
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ requirements: []
52
+ rubyforge_project:
53
+ rubygems_version: 1.8.13
54
+ signing_key:
55
+ specification_version: 3
56
+ summary: API for SEC Edgar search
57
+ test_files: []