houjin-bangou 0.0.0 → 1.0.0
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.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/Guardfile +14 -0
- data/README.md +21 -1
- data/bin/console +2 -0
- data/lib/houjin-bangou.rb +38 -1
- data/lib/houjin-bangou/api_endpoint.rb +47 -0
- data/lib/houjin-bangou/immutable_struct.rb +14 -0
- data/lib/houjin-bangou/result_set.rb +77 -0
- data/lib/houjin-bangou/util.rb +21 -0
- data/lib/houjin-bangou/version.rb +2 -1
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c06f71c9299c43aee6ddae7d7090d79ceb901b10
|
4
|
+
data.tar.gz: 7815175acbf4c116d1deba51b57e55a0427752f8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 327ed7f65b0a034976a705ac1955717a254acbff4906b2ac3fc10de6ea5a66265c32b7fa60af2fa42696a7cab866773b2d88b82d792080ac091b1691301a4301
|
7
|
+
data.tar.gz: b3b0ee0ab72d696c5ba4c15cba8315688cb05426d45a53c9ca4f77b2b230645379de86353cdf433f0226877427755afc9f07c50864fb47f31b8aa65963229328
|
data/Gemfile
CHANGED
data/Guardfile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
guard :rspec, cmd: 'bundle exec rspec --format Fuubar' do
|
2
|
+
require 'guard/rspec/dsl'
|
3
|
+
dsl = Guard::RSpec::Dsl.new(self)
|
4
|
+
|
5
|
+
# RSpec files
|
6
|
+
rspec = dsl.rspec
|
7
|
+
watch(rspec.spec_helper) { rspec.spec_dir }
|
8
|
+
watch(rspec.spec_support) { rspec.spec_dir }
|
9
|
+
watch(rspec.spec_files)
|
10
|
+
|
11
|
+
# Ruby files
|
12
|
+
ruby = dsl.ruby
|
13
|
+
dsl.watch_spec_files_for(ruby.lib_files)
|
14
|
+
end
|
data/README.md
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
[](https://github.com/kissy2go/houjin-bangou)
|
4
4
|
|
5
|
+
[](https://badge.fury.io/rb/houjin-bangou)
|
5
6
|
[](https://app.wercker.com/project/byKey/60de5f243a0940720d44ff8958410aa8)
|
6
7
|
[](#license)
|
7
8
|
|
@@ -26,7 +27,26 @@ Or install it yourself as:
|
|
26
27
|
|
27
28
|
## Usage
|
28
29
|
|
29
|
-
|
30
|
+
HoujinBangou.application_id = YOUR_APPLICATION_ID
|
31
|
+
|
32
|
+
# Search by number
|
33
|
+
number = ... # String or Array
|
34
|
+
result = HoujinBangou::Num.search(number)
|
35
|
+
result.each do |record|
|
36
|
+
record #=> HoujinBangou::ResultSet::Record
|
37
|
+
record.corporate_number
|
38
|
+
record.name
|
39
|
+
end
|
40
|
+
|
41
|
+
# Search by date span
|
42
|
+
from = ... # Date, Time or String
|
43
|
+
to = ... # Date, Time or String
|
44
|
+
result = HoujinBangou::Diff.search(from, to)
|
45
|
+
result.each do |record|
|
46
|
+
record #=> HoujinBangou::ResultSet::Record
|
47
|
+
record.corporate_number
|
48
|
+
record.name
|
49
|
+
end
|
30
50
|
|
31
51
|
## Development
|
32
52
|
|
data/bin/console
CHANGED
data/lib/houjin-bangou.rb
CHANGED
@@ -1,5 +1,42 @@
|
|
1
|
+
require 'csv'
|
2
|
+
|
1
3
|
require 'houjin-bangou/version'
|
2
4
|
|
5
|
+
require 'houjin-bangou/immutable_struct'
|
6
|
+
require 'houjin-bangou/api_endpoint'
|
7
|
+
require 'houjin-bangou/result_set'
|
8
|
+
require 'houjin-bangou/util'
|
9
|
+
|
10
|
+
# @see http://www.houjin-bangou.nta.go.jp/webapi
|
11
|
+
# @see http://www.houjin-bangou.nta.go.jp/documents/k-web-api-kinou.pdf
|
3
12
|
module HoujinBangou
|
4
|
-
|
13
|
+
@base_url = "https://api.houjin-bangou.nta.go.jp/#{API_VERSION}"
|
14
|
+
@open_timeout = 60
|
15
|
+
@read_timeout = 60
|
16
|
+
|
17
|
+
class << self
|
18
|
+
attr_accessor :base_url, :application_id, :open_timeout, :read_timeout
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.request(url, query, src_encoding: Encoding::Shift_JIS)
|
22
|
+
query = { id: application_id }.merge(query)
|
23
|
+
url.query = URI.encode_www_form(query)
|
24
|
+
|
25
|
+
http = Net::HTTP.new(url.host, url.port)
|
26
|
+
http.use_ssl = true if url.scheme == 'https'
|
27
|
+
http.open_timeout = open_timeout
|
28
|
+
http.read_timeout = read_timeout
|
29
|
+
|
30
|
+
response = http.start do |http|
|
31
|
+
request = Net::HTTP::Get.new(url.request_uri)
|
32
|
+
http.request(request)
|
33
|
+
end
|
34
|
+
|
35
|
+
case response
|
36
|
+
when Net::HTTPSuccess
|
37
|
+
HoujinBangou::ResultSet.new(response.body, src_encoding)
|
38
|
+
else
|
39
|
+
response.value
|
40
|
+
end
|
41
|
+
end
|
5
42
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module HoujinBangou
|
2
|
+
def self.APIEndpoint(path)
|
3
|
+
Module.new do |m|
|
4
|
+
define_method :endpoint_url do
|
5
|
+
URI.parse(HoujinBangou.base_url + path)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
module Num
|
11
|
+
extend HoujinBangou::APIEndpoint('/num')
|
12
|
+
|
13
|
+
RESPONSE_TYPE = '01' # CSV 形式 / Shift-JIS (JIS 第一及び第二水準)
|
14
|
+
|
15
|
+
def self.search(number, history: nil)
|
16
|
+
query = {}
|
17
|
+
query[:number] = Array[*number].join(',')
|
18
|
+
query[:history] = history unless history.nil?
|
19
|
+
query[:type] = RESPONSE_TYPE
|
20
|
+
|
21
|
+
HoujinBangou.request(endpoint_url, query)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
module Diff
|
26
|
+
extend HoujinBangou::APIEndpoint('/diff')
|
27
|
+
|
28
|
+
KIND_COUNTRY = '01' # 国の機関
|
29
|
+
KIND_LOCAL_GOVEMENTS = '02' # 地方公共団体
|
30
|
+
KIND_HOUJIN = '03' # 設立登記法人
|
31
|
+
KIND_ETC = '04' # 外国会社等・その他
|
32
|
+
|
33
|
+
RESPONSE_TYPE = '01' # CSV 形式 / Shift-JIS (JIS 第一及び第二水準)
|
34
|
+
|
35
|
+
def self.search(from, to, address: nil, kind: nil, divide: nil)
|
36
|
+
query = {}
|
37
|
+
query[:from] = HoujinBangou::Util::Date.encode(from)
|
38
|
+
query[:to] = HoujinBangou::Util::Date.encode(to)
|
39
|
+
query[:address] = address unless address.nil?
|
40
|
+
query[:kind] = Array[*kind].join(',') unless kind.nil?
|
41
|
+
query[:divide] = divide unless divide.nil?
|
42
|
+
query[:type] = RESPONSE_TYPE
|
43
|
+
|
44
|
+
HoujinBangou.request(endpoint_url, query)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
module HoujinBangou
|
2
|
+
class ResultSet
|
3
|
+
include Enumerable
|
4
|
+
|
5
|
+
attr_reader :header
|
6
|
+
|
7
|
+
def initialize(response, src_encoding)
|
8
|
+
dst_encoding = Encoding.default_internal || Encoding::UTF_8
|
9
|
+
@csv_operator = CSV.new(response.encode(dst_encoding, src_encoding))
|
10
|
+
@header = Header.new(*@csv_operator.readline)
|
11
|
+
end
|
12
|
+
|
13
|
+
def each(&block)
|
14
|
+
return self.to_enum unless block_given?
|
15
|
+
return @csv.each(&block) unless @csv.nil?
|
16
|
+
|
17
|
+
@csv = []
|
18
|
+
@csv_operator.each do |row|
|
19
|
+
@csv << record = Record.new(*row)
|
20
|
+
yield record
|
21
|
+
end
|
22
|
+
@csv
|
23
|
+
end
|
24
|
+
|
25
|
+
class Header < ImmutableStruct.new(
|
26
|
+
:last_update_date, # 最終更新年月日
|
27
|
+
:count, # 総件数
|
28
|
+
:divide_number, # 分割番号
|
29
|
+
:divide_size # 分割数
|
30
|
+
)
|
31
|
+
|
32
|
+
def initialize(*)
|
33
|
+
super
|
34
|
+
self[:last_update_date] = HoujinBangou::Util::Date.decode(last_update_date)
|
35
|
+
self[:count] = HoujinBangou::Util::Number.decode(count)
|
36
|
+
self[:divide_number] = HoujinBangou::Util::Number.decode(divide_number)
|
37
|
+
self[:divide_size] = HoujinBangou::Util::Number.decode(divide_size)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class Record < ImmutableStruct.new(
|
42
|
+
:sequence_number, # 一連番号
|
43
|
+
:corporate_number, # 法人番号
|
44
|
+
:process, # 処理区分
|
45
|
+
:correct, # 訂正区分
|
46
|
+
:update_date, # 更新年月日
|
47
|
+
:change_date, # 変更年月日
|
48
|
+
:name, # 商号又は名称
|
49
|
+
:name_image_id, # 商号又は名称イメージ ID
|
50
|
+
:kind, # 法人種別
|
51
|
+
:prefecture_name, # 国内所在地 (都道府県)
|
52
|
+
:city_name, # 国内所在地 (市区町村)
|
53
|
+
:street_number, # 国内所在地 (丁目番地等)
|
54
|
+
:address_image_id, # 国内所在地イメージ ID
|
55
|
+
:prefecture_code, # 都道府県コード
|
56
|
+
:city_code, # 市区町村コード
|
57
|
+
:post_code, # 郵便番号
|
58
|
+
:address_outside, # 国外所在地
|
59
|
+
:address_outside_image_id, # 国外所在地イメージ ID
|
60
|
+
:close_date, # 登記記録の閉鎖等年月日
|
61
|
+
:close_cause, # 登記記録の閉鎖等の事由
|
62
|
+
:successor_corporate_number, # 承継先法人番号
|
63
|
+
:change_cause, # 変更事由の詳細
|
64
|
+
:assignment_date # 法人番号指定年月日
|
65
|
+
)
|
66
|
+
|
67
|
+
def initialize(*)
|
68
|
+
super
|
69
|
+
self[:sequence_number] = HoujinBangou::Util::Number.decode(sequence_number)
|
70
|
+
self[:update_date] = HoujinBangou::Util::Date.decode(update_date)
|
71
|
+
self[:change_date] = HoujinBangou::Util::Date.decode(change_date)
|
72
|
+
self[:close_date] = HoujinBangou::Util::Date.decode(close_date)
|
73
|
+
self[:assignment_date] = HoujinBangou::Util::Date.decode(assignment_date)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module HoujinBangou
|
2
|
+
module Util
|
3
|
+
module Date
|
4
|
+
DATE_FORMAT = '%Y-%m-%d'
|
5
|
+
|
6
|
+
def self.encode(date)
|
7
|
+
date.strftime(DATE_FORMAT) rescue date
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.decode(string)
|
11
|
+
::Date.strptime(string, DATE_FORMAT) rescue string
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
module Number
|
16
|
+
def self.decode(string)
|
17
|
+
Integer(string) rescue string
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: houjin-bangou
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kissy2go
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-01-
|
11
|
+
date: 2017-01-20 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: See http://www.houjin-bangou.nta.go.jp/webapi for details.
|
14
14
|
email:
|
@@ -20,12 +20,17 @@ files:
|
|
20
20
|
- ".gitignore"
|
21
21
|
- ".rspec"
|
22
22
|
- Gemfile
|
23
|
+
- Guardfile
|
23
24
|
- LICENSE.txt
|
24
25
|
- README.md
|
25
26
|
- Rakefile
|
26
27
|
- bin/console
|
27
28
|
- houjin-bangou.gemspec
|
28
29
|
- lib/houjin-bangou.rb
|
30
|
+
- lib/houjin-bangou/api_endpoint.rb
|
31
|
+
- lib/houjin-bangou/immutable_struct.rb
|
32
|
+
- lib/houjin-bangou/result_set.rb
|
33
|
+
- lib/houjin-bangou/util.rb
|
29
34
|
- lib/houjin-bangou/version.rb
|
30
35
|
- wercker.yml
|
31
36
|
homepage: https://github.com/kissy2go/houjin-bangou
|