mextractr_webapi 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.
- data/ChangeLog +2 -0
- data/README +11 -0
- data/lib/mextractr_webapi.rb +111 -0
- metadata +55 -0
data/ChangeLog
ADDED
data/README
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
=begin
|
2
|
+
[概要] Mextractr WEB API(http://api.emetadata.net/)をrubyから使うためのラッパークラス
|
3
|
+
[作成] 2008-08-27 古川大輔(mogya at mogya.com)
|
4
|
+
[用法] http://api.emetadata.net/からAPIキーを取得しておく必要があります。
|
5
|
+
#取得したAPIキーをつかってMextractrAPIクラスを生成
|
6
|
+
api = MextractrAPI.new('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
|
7
|
+
#解析したいテキストを渡す
|
8
|
+
result = api.parse(text)
|
9
|
+
結果がどのように格納されているかは、 pp result して見てください。
|
10
|
+
おおよそ、普通の人が期待する形で格納したつもり。
|
11
|
+
=end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
=begin
|
2
|
+
[概要] Mextractr WEB API(http://api.emetadata.net/)をrubyから使うためのラッパークラス
|
3
|
+
[作成] 2008-08-27 古川大輔(mogya at mogya.com)
|
4
|
+
[用法] http://api.emetadata.net/からAPIキーを取得しておく必要があります。
|
5
|
+
#取得したAPIキーをつかってMextractrAPIクラスを生成
|
6
|
+
api = MextractrAPI.new('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
|
7
|
+
#解析したいテキストを渡す
|
8
|
+
result = api.parse(text)
|
9
|
+
結果がどのように格納されているかは、 pp result して見てください。
|
10
|
+
おおよそ、普通の人が期待する形で格納したつもり。
|
11
|
+
=end
|
12
|
+
|
13
|
+
require 'rexml/document'
|
14
|
+
require 'kconv'
|
15
|
+
require 'uri'
|
16
|
+
require 'net/http'
|
17
|
+
require 'cgi'
|
18
|
+
|
19
|
+
class MextractrWebApi
|
20
|
+
Mextractr_webapi_url = 'http://api.emetadata.net/mextractr?text=[[text]]&out=[[out]]&apikey=[[apikey]]'
|
21
|
+
@apikey = nil
|
22
|
+
@log = nil
|
23
|
+
@result=nil
|
24
|
+
|
25
|
+
attr_reader :apikey,:result
|
26
|
+
#デバッグ用のメソッドたち。new(APIKEY,log)のlog部分にloggerオブジェクトを渡すと出力されます。
|
27
|
+
def debug_out(text)
|
28
|
+
if (@log)
|
29
|
+
@log.debug(text.to_s)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def debug_obj(obj,msg=nil)
|
34
|
+
if (@log)
|
35
|
+
@log.debug(msg.to_s+"\n"+PP.pp(obj,""))
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def initialize(myapikey,mylog=nil)
|
40
|
+
@apikey = myapikey
|
41
|
+
@log = mylog
|
42
|
+
if (@log)
|
43
|
+
require 'pp'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def parse(text)
|
48
|
+
text_encoded = CGI.escape( CGI.escapeHTML(text.toutf8) )
|
49
|
+
|
50
|
+
#Mextractr APIを呼び出す
|
51
|
+
uri = URI.parse( Mextractr_webapi_url.gsub('[[text]]',text_encoded).gsub('[[out]]','atom').gsub('[[apikey]]',@apikey) )
|
52
|
+
debug_out("uri:"+uri.to_s)
|
53
|
+
response = nil
|
54
|
+
Net::HTTP.start(uri.host,uri.port){|http|
|
55
|
+
#getじゃなくてpostする。
|
56
|
+
# response = http.get(uri.request_uri)
|
57
|
+
response = http.post(uri.path,uri.query)
|
58
|
+
}
|
59
|
+
debug_out "response(atom):\n"+response.body.toutf8
|
60
|
+
|
61
|
+
#得られた結果を解析
|
62
|
+
doc= REXML::Document.new(response.body.toutf8)
|
63
|
+
@result = {}
|
64
|
+
@result['response'] = response.body.toutf8
|
65
|
+
@result['id'] = doc.elements['feed/entry/id'].text
|
66
|
+
@result['updated'] = doc.elements['feed/entry/updated'].text
|
67
|
+
@result['content'] = doc.elements['feed/entry/content'].text
|
68
|
+
|
69
|
+
doc.elements.each("feed/entry/gd:who"){|elem|
|
70
|
+
@result['who'] = [] if(!@result['who'])
|
71
|
+
item = {}
|
72
|
+
item['valueString'] = elem.attributes['valueString']
|
73
|
+
@result['who'] << item
|
74
|
+
}
|
75
|
+
doc.elements.each("feed/entry/gd:when"){|elem|
|
76
|
+
@result['when'] = [] if(!@result['when'])
|
77
|
+
item = {}
|
78
|
+
item['valueString'] = elem.attributes['valueString']
|
79
|
+
item['startTime'] = elem.attributes['startTime']
|
80
|
+
@result['when'] << item
|
81
|
+
}
|
82
|
+
doc.elements.each("feed/entry/gd:where"){|elem|
|
83
|
+
@result['where'] = [] if(!@result['where'])
|
84
|
+
item = {}
|
85
|
+
item['valueString'] = elem.attributes['valueString']
|
86
|
+
item['georss:point'] = elem.elements['georss:point'].text rescue nil
|
87
|
+
@result['where'] << item
|
88
|
+
}
|
89
|
+
doc.elements.each("feed/entry/gd:extendedProperty"){|elem|
|
90
|
+
@result[elem.attributes['name']] = [] if(!@result[elem.attributes['name']])
|
91
|
+
item = {}
|
92
|
+
item['valueString'] = elem.attributes['value']
|
93
|
+
if ('how-much'==elem.attributes['name'])
|
94
|
+
item['currencyID'] = elem.elements['cbc:Amount'].attributes['currencyID']
|
95
|
+
item['value'] = elem.elements['cbc:Amount'].text
|
96
|
+
end
|
97
|
+
|
98
|
+
@result[elem.attributes['name']] << item
|
99
|
+
}
|
100
|
+
|
101
|
+
debug_obj(@result,"result:")
|
102
|
+
|
103
|
+
return @result
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
=begin
|
108
|
+
[更新履歴]
|
109
|
+
2008-08-27 D.Furukawa とりあえず作ってみた。帰り値、これでいいかなぁ?
|
110
|
+
2008-09-25 D.Furukawa ファイル名とクラス名をrailsの規約にあわせる
|
111
|
+
=end
|
metadata
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mextractr_webapi
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Daisuke Furukawa
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-11-26 00:00:00 +09:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description:
|
17
|
+
email: mogya@mogya.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions: []
|
21
|
+
|
22
|
+
extra_rdoc_files: []
|
23
|
+
|
24
|
+
files:
|
25
|
+
- lib/mextractr_webapi.rb
|
26
|
+
- README
|
27
|
+
- ChangeLog
|
28
|
+
has_rdoc: false
|
29
|
+
homepage: http://mogya.com
|
30
|
+
post_install_message:
|
31
|
+
rdoc_options: []
|
32
|
+
|
33
|
+
require_paths:
|
34
|
+
- lib
|
35
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: "0"
|
40
|
+
version:
|
41
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: "0"
|
46
|
+
version:
|
47
|
+
requirements: []
|
48
|
+
|
49
|
+
rubyforge_project:
|
50
|
+
rubygems_version: 1.0.1
|
51
|
+
signing_key:
|
52
|
+
specification_version: 2
|
53
|
+
summary: "Mextractr WEB API(http://api.emetadata.net/)\xE3\x82\x92ruby\xE3\x81\x8B\xE3\x82\x89\xE4\xBD\xBF\xE3\x81\x86\xE3\x81\x9F\xE3\x82\x81\xE3\x81\xAE\xE3\x83\xA9\xE3\x83\x83\xE3\x83\x91\xE3\x83\xBC\xE3\x82\xAF\xE3\x83\xA9\xE3\x82\xB9"
|
54
|
+
test_files: []
|
55
|
+
|