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.
Files changed (4) hide show
  1. data/ChangeLog +2 -0
  2. data/README +11 -0
  3. data/lib/mextractr_webapi.rb +111 -0
  4. metadata +55 -0
data/ChangeLog ADDED
@@ -0,0 +1,2 @@
1
+ 2008-08-27 古川大輔 v0.0.1 release
2
+
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
+