youpy-text-converter 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog ADDED
@@ -0,0 +1,4 @@
1
+ == 0.0.1 / 2009-08-06
2
+
3
+ * initial release
4
+
data/README.rdoc ADDED
@@ -0,0 +1,32 @@
1
+ = text-converter
2
+
3
+
4
+ == Description
5
+
6
+
7
+ == Installation
8
+
9
+ === Archive Installation
10
+
11
+ rake install
12
+
13
+ === Gem Installation
14
+
15
+ gem sources -a http://gems.github.com/
16
+ gem install youpy-text-converter
17
+
18
+ == Features/Problems
19
+
20
+
21
+ == Synopsis
22
+
23
+ require 'text_converter'
24
+
25
+ converter = TextConverter.new
26
+ converter.convert('アレ', 'テストです') #=> 'アレです'
27
+
28
+ == Copyright
29
+
30
+ Author:: youpy <youpy@buycheapviagraonlinenow.com>
31
+ Copyright:: Copyright (c) 2009 youpy
32
+ License:: MIT
data/Rakefile ADDED
@@ -0,0 +1,110 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/clean'
4
+ require 'rake/testtask'
5
+ require 'rake/packagetask'
6
+ require 'rake/gempackagetask'
7
+ require 'rake/rdoctask'
8
+ require 'rake/contrib/rubyforgepublisher'
9
+ require 'rake/contrib/sshpublisher'
10
+ require 'spec/rake/spectask'
11
+ require 'fileutils'
12
+ include FileUtils
13
+
14
+ $LOAD_PATH.unshift "lib"
15
+ require "text_converter"
16
+
17
+ NAME = "text-converter"
18
+ AUTHOR = "youpy"
19
+ EMAIL = "youpy@buycheapviagraonlinenow.com"
20
+ DESCRIPTION = ""
21
+ RUBYFORGE_PROJECT = "text-converter"
22
+ HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
23
+ BIN_FILES = %w( )
24
+ VERS = '0.0.1'
25
+
26
+ REV = File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
27
+ CLEAN.include ['**/.*.sw?', '*.gem', '.config']
28
+ RDOC_OPTS = [
29
+ '--title', "#{NAME} documentation",
30
+ "--charset", "utf-8",
31
+ "--opname", "index.html",
32
+ "--line-numbers",
33
+ "--main", "README.rdoc",
34
+ "--inline-source",
35
+ ]
36
+
37
+ task :default => [:spec]
38
+ task :package => [:clean]
39
+
40
+ Spec::Rake::SpecTask.new do |t|
41
+ t.spec_opts = ['--options', "spec/spec.opts"]
42
+ t.spec_files = FileList['spec/*_spec.rb']
43
+ t.rcov = true
44
+ end
45
+
46
+ spec = Gem::Specification.new do |s|
47
+ s.name = NAME
48
+ s.version = VERS
49
+ s.platform = Gem::Platform::RUBY
50
+ s.has_rdoc = true
51
+ s.extra_rdoc_files = ["README.rdoc", "ChangeLog"]
52
+ s.rdoc_options += RDOC_OPTS + ['--exclude', '^(examples|extras)/']
53
+ s.summary = DESCRIPTION
54
+ s.description = DESCRIPTION
55
+ s.author = AUTHOR
56
+ s.email = EMAIL
57
+ s.homepage = HOMEPATH
58
+ s.executables = BIN_FILES
59
+ s.rubyforge_project = RUBYFORGE_PROJECT
60
+ s.bindir = "bin"
61
+ s.require_path = "lib"
62
+ s.autorequire = ""
63
+ s.test_files = Dir["test/test_*.rb"]
64
+
65
+ #s.add_dependency('activesupport', '>=1.3.1')
66
+ #s.required_ruby_version = '>= 1.8.2'
67
+
68
+ s.files = %w(README.rdoc ChangeLog Rakefile) +
69
+ Dir.glob("{bin,doc,spec,test,lib,templates,generator,extras,website,script}/**/*") +
70
+ Dir.glob("ext/**/*.{h,c,rb}") +
71
+ Dir.glob("examples/**/*.rb") +
72
+ Dir.glob("tools/*.rb")
73
+
74
+ s.extensions = FileList["ext/**/extconf.rb"].to_a
75
+ end
76
+
77
+ Rake::GemPackageTask.new(spec) do |p|
78
+ p.need_tar = true
79
+ p.gem_spec = spec
80
+ end
81
+
82
+ task :install do
83
+ name = "#{NAME}-#{VERS}.gem"
84
+ sh %{rake package}
85
+ sh %{sudo gem install pkg/#{name}}
86
+ end
87
+
88
+ task :uninstall => [:clean] do
89
+ sh %{sudo gem uninstall #{NAME}}
90
+ end
91
+
92
+
93
+ Rake::RDocTask.new do |rdoc|
94
+ rdoc.rdoc_dir = 'html'
95
+ rdoc.options += RDOC_OPTS
96
+ rdoc.template = "resh"
97
+ #rdoc.template = "#{ENV['template']}.rb" if ENV['template']
98
+ if ENV['DOC_FILES']
99
+ rdoc.rdoc_files.include(ENV['DOC_FILES'].split(/,\s*/))
100
+ else
101
+ rdoc.rdoc_files.include('README.rdoc', 'ChangeLog')
102
+ rdoc.rdoc_files.include('lib/**/*.rb')
103
+ rdoc.rdoc_files.include('ext/**/*.c')
104
+ end
105
+ end
106
+
107
+ desc "Show information about the gem"
108
+ task :debug_gem do
109
+ puts spec.to_ruby
110
+ end
@@ -0,0 +1,82 @@
1
+ require 'json'
2
+ require 'open-uri'
3
+ require 'nokogiri'
4
+ require 'nkf'
5
+ require 'cgi'
6
+
7
+ class TextConverter
8
+ DATABASE_URL = 'http://wedata.net/databases/Text%20Conversion%20Services/items.json'
9
+
10
+ class Error < StandardError; end
11
+ class NoSuchService < Error; end
12
+
13
+ def json
14
+ @json ||= JSON.load(open(DATABASE_URL).read)
15
+ end
16
+
17
+ def service(name)
18
+ @services ||= json.inject({}) do |services, entry|
19
+ services[entry['name']] = Service.new(entry['name'], entry['data'])
20
+ services
21
+ end
22
+
23
+ service = @services[name]
24
+
25
+ raise NoSuchService.new(name) unless service
26
+
27
+ service
28
+ end
29
+
30
+ def convert(name, text)
31
+ service(name).convert(text)
32
+ end
33
+
34
+ class Service
35
+ attr_reader :name, :url, :charset, :xpath
36
+
37
+ def initialize(name, options)
38
+ @name = name
39
+ @url = options['url']
40
+ @charset = options['charset']
41
+ @xpath = options['xpath']
42
+ end
43
+
44
+ def convert(text)
45
+ parse(get(text))
46
+ end
47
+
48
+ def build_url(text)
49
+ case charset
50
+ when 'sjis'
51
+ text = NKF.nkf('-Ws', text)
52
+ when 'euc'
53
+ text = NKF.nkf('-We', text)
54
+ end
55
+
56
+ url.gsub(/%s/, CGI.escape(text))
57
+ end
58
+
59
+ def get(text)
60
+ result = open(build_url(text)).read
61
+
62
+ case charset
63
+ when 'sjis'
64
+ result = NKF.nkf('-Sw', result)
65
+ when 'euc'
66
+ result = NKF.nkf('-Ew', result)
67
+ end
68
+
69
+ result
70
+ end
71
+
72
+ def parse(result)
73
+ if xpath
74
+ doctype = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'
75
+ html = Nokogiri::HTML.parse(doctype + result, nil, 'utf-8')
76
+ result = html.xpath(xpath).text
77
+ end
78
+
79
+ result
80
+ end
81
+ end
82
+ end
@@ -0,0 +1 @@
1
+ アレです
@@ -0,0 +1,45 @@
1
+ <html>
2
+ <head>
3
+ <title>アルベド語変換・逆変換CGI</title>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
5
+ <link rel="stylesheet" type="text/css" href="../base.css">
6
+ <link rel="stylesheet" type="text/css" href="./data.css">
7
+ </head>
8
+ <body text="#000000">
9
+
10
+
11
+ <br><br>
12
+ <table border="0" align="center">
13
+ <tr>
14
+ <td>テストベヌ</td>
15
+
16
+ </tr>
17
+ <tr>
18
+ <td align="center"><br><br><br>変換前<hr size=1 noshade></td>
19
+ </tr>
20
+ <tr>
21
+ <td>テストです</td>
22
+ </tr>
23
+ </table>
24
+ <p class="center">
25
+ <table border="0"><tr><td>
26
+ <form action="./arubedo.cgi" method="POST">
27
+ <textarea cols="65" rows="7" name="text" wrap="soft"></textarea></td></tr><br>
28
+ <tr><td align="right"><input type="submit" value="変換する" name="btn1"> <input type="reset" value="書き直し" name="btn2"></td></tr></table><br><input type="radio" value="mode1" checked name="mode">日本語→アルベド語 <input type="radio" name="mode" value="mode2">アルベド語→日本語
29
+
30
+ <input type="hidden" name="pagetype" value="on">
31
+ </form></p>
32
+
33
+ <hr noshade size="1" color="#002E79">
34
+ <p class="cp">
35
+ v1.01<br>
36
+ Script by Scene@DBS-Master<br>
37
+ Copyright 2001 <a href="http://scene.vis.ne.jp/ff10/" target="top">Deep Blue Stones</a> All rights reserved.<br>
38
+ [<a href="../main.htm">Back</a>]<br>
39
+
40
+ <br>
41
+ <br>
42
+ </p>
43
+ </body>
44
+ </html>
45
+
@@ -0,0 +1,496 @@
1
+ [
2
+ {
3
+ "name": "Integrated alphabets",
4
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
5
+ "updated_at": "2009-06-17T00:17:59+09:00",
6
+ "created_by": "fuba",
7
+ "resource_url": "http:\/\/wedata.net\/items\/29141",
8
+ "data": {
9
+ "url": "http:\/\/phji.net\/conv\/integrate.php?q=%s",
10
+ "charset": "utf8",
11
+ "lang": "",
12
+ "xpath": "id(\"output\")"
13
+ },
14
+ "created_at": "2009-06-17T00:17:59+09:00"
15
+ },
16
+ {
17
+ "name": "\u30b1\u30b7\u30dd\u30f3(\u30dc\u30af\u30b5\u30fc)",
18
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
19
+ "updated_at": "2009-06-10T10:08:57+09:00",
20
+ "created_by": "Uchimata",
21
+ "resource_url": "http:\/\/wedata.net\/items\/28947",
22
+ "data": {
23
+ "url": "http:\/\/cheap.digick.jp\/remove\/bin\/keshipon.cgi?s=%s&p=(o'-')%3Do)&q=100&a&r",
24
+ "charset": "utf8"
25
+ },
26
+ "created_at": "2009-05-18T13:37:17+09:00"
27
+ },
28
+ {
29
+ "name": "\u30b1\u30b7\u30dd\u30f3",
30
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
31
+ "updated_at": "2009-06-20T01:47:07+09:00",
32
+ "created_by": "fuba",
33
+ "resource_url": "http:\/\/wedata.net\/items\/28946",
34
+ "data": {
35
+ "url": "http:\/\/cheap.digick.jp\/remove\/bin\/keshipon.cgi?s=%s&a",
36
+ "charset": "utf8"
37
+ },
38
+ "created_at": "2009-05-18T11:26:59+09:00"
39
+ },
40
+ {
41
+ "name": "\u304a\u304b\u3057\u306a\u65e5\u672c\u8a9e",
42
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
43
+ "updated_at": "2009-05-18T06:00:43+09:00",
44
+ "created_by": "youpy",
45
+ "resource_url": "http:\/\/wedata.net\/items\/28944",
46
+ "data": {
47
+ "url": "http:\/\/atsushi-takayama.com\/shuffle\/?sentence=%s",
48
+ "charset": "utf8",
49
+ "lang": "",
50
+ "xpath": "id(\"result\")"
51
+ },
52
+ "created_at": "2009-05-18T06:00:43+09:00"
53
+ },
54
+ {
55
+ "name": "\u7b11\u3044\u9854\u9854\u6587\u5b57",
56
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
57
+ "updated_at": "2009-04-14T14:09:31+09:00",
58
+ "created_by": "ucnv",
59
+ "resource_url": "http:\/\/wedata.net\/items\/27838",
60
+ "data": {
61
+ "url": "http:\/\/mimitako.net\/api\/warosuapi.cgi",
62
+ "action": "append",
63
+ "charset": "utf8",
64
+ "xpath": "\/\/str\/text()"
65
+ },
66
+ "created_at": "2009-04-14T14:06:22+09:00"
67
+ },
68
+ {
69
+ "name": "\u691c\u7d22\u907f\u3051",
70
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
71
+ "updated_at": "2009-07-01T02:04:06+09:00",
72
+ "created_by": "youpy",
73
+ "resource_url": "http:\/\/wedata.net\/items\/27497",
74
+ "data": {
75
+ "url": "http:\/\/unsearchablize.jgate.de\/convert?q=%s",
76
+ "charset": "utf8"
77
+ },
78
+ "created_at": "2009-03-17T01:31:15+09:00"
79
+ },
80
+ {
81
+ "name": "pikachu(lang:ja)",
82
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
83
+ "updated_at": "2009-06-20T20:10:01+09:00",
84
+ "created_by": "ucnv",
85
+ "resource_url": "http:\/\/wedata.net\/items\/27397",
86
+ "data": {
87
+ "url": "http:\/\/query.yahooapis.com\/v1\/public\/yql?q=use%20%22http%3A%2F%2Fgist.github.com%2F133124.txt%22%20as%20cvt%3B%0Aselect%20*%20from%20cvt%20where%20q%3D%22%s%22&format=xml",
88
+ "charset": "utf8",
89
+ "xpath": "\/\/results\/result\/text()"
90
+ },
91
+ "created_at": "2009-03-09T14:32:21+09:00"
92
+ },
93
+ {
94
+ "name": "\u304b\u306a\u6f22\u5b57\u5909\u63db",
95
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
96
+ "updated_at": "2009-07-01T02:04:41+09:00",
97
+ "created_by": "youpy",
98
+ "resource_url": "http:\/\/wedata.net\/items\/27308",
99
+ "data": {
100
+ "url": "http:\/\/kana-to-kanji.jgate.de\/convert?q=%s",
101
+ "charset": "utf8"
102
+ },
103
+ "created_at": "2009-03-03T00:01:38+09:00"
104
+ },
105
+ {
106
+ "name": "prefix + gobi",
107
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
108
+ "updated_at": "2009-07-01T02:05:00+09:00",
109
+ "created_by": "youpy",
110
+ "resource_url": "http:\/\/wedata.net\/items\/27205",
111
+ "data": {
112
+ "url": "http:\/\/prefix-gobi.jgate.de\/convert?q=%s",
113
+ "charset": "utf8"
114
+ },
115
+ "created_at": "2009-02-20T15:07:45+09:00"
116
+ },
117
+ {
118
+ "name": "\u8aa4\u5b57",
119
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
120
+ "updated_at": "2009-02-10T00:25:14+09:00",
121
+ "created_by": "negipo",
122
+ "resource_url": "http:\/\/wedata.net\/items\/27037",
123
+ "data": {
124
+ "url": "http:\/\/goji.polog.org\/api\/get.plain?rate=1&sentence=%s",
125
+ "charset": "utf8"
126
+ },
127
+ "created_at": "2009-02-10T00:20:48+09:00"
128
+ },
129
+ {
130
+ "name": "append-gobi",
131
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
132
+ "updated_at": "2009-07-01T18:55:26+09:00",
133
+ "created_by": "fuba",
134
+ "resource_url": "http:\/\/wedata.net\/items\/27031",
135
+ "data": {
136
+ "url": "http:\/\/append-gobi.jgate.de\/convert?q=%s",
137
+ "charset": "utf8"
138
+ },
139
+ "created_at": "2009-02-09T17:47:30+09:00"
140
+ },
141
+ {
142
+ "name": "\u30a2\u30ec",
143
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
144
+ "updated_at": "2009-07-01T02:05:19+09:00",
145
+ "created_by": "youpy",
146
+ "resource_url": "http:\/\/wedata.net\/items\/26941",
147
+ "data": {
148
+ "url": "http:\/\/areare.jgate.de\/convert?q=%s",
149
+ "charset": "utf8"
150
+ },
151
+ "created_at": "2009-02-03T01:24:21+09:00"
152
+ },
153
+ {
154
+ "name": "Motsu",
155
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
156
+ "updated_at": "2009-07-01T02:05:34+09:00",
157
+ "created_by": "youpy",
158
+ "resource_url": "http:\/\/wedata.net\/items\/26429",
159
+ "data": {
160
+ "url": "http:\/\/motsu.jgate.de\/?text=%s",
161
+ "charset": "utf8"
162
+ },
163
+ "created_at": "2008-12-16T17:41:13+09:00"
164
+ },
165
+ {
166
+ "name": "IT\u7528\u8a9e",
167
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
168
+ "updated_at": "2008-10-19T02:53:07+09:00",
169
+ "created_by": "negipo",
170
+ "resource_url": "http:\/\/wedata.net\/items\/2875",
171
+ "data": {
172
+ "url": "http:\/\/it.polog.org\/api?sentence=%s",
173
+ "charset": "utf8",
174
+ "lang": "",
175
+ "xpath": ""
176
+ },
177
+ "created_at": "2008-10-19T02:53:07+09:00"
178
+ },
179
+ {
180
+ "name": "\u30da\u30f3\u30d1\u30f3(kkshow)",
181
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
182
+ "updated_at": "2008-09-09T00:46:23+09:00",
183
+ "created_by": "youpy",
184
+ "resource_url": "http:\/\/wedata.net\/items\/2466",
185
+ "data": {
186
+ "url": "http:\/\/phji.net\/conv\/penpan.php?c=2&q=%s",
187
+ "charset": "utf8",
188
+ "lang": "",
189
+ "xpath": "\/\/div[@id=\"output\"]"
190
+ },
191
+ "created_at": "2008-09-09T00:46:23+09:00"
192
+ },
193
+ {
194
+ "name": "\u30da\u30f3\u30d1\u30f3(youpy)",
195
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
196
+ "updated_at": "2008-09-09T00:45:54+09:00",
197
+ "created_by": "youpy",
198
+ "resource_url": "http:\/\/wedata.net\/items\/2465",
199
+ "data": {
200
+ "url": "http:\/\/phji.net\/conv\/penpan.php?c=1&q=%s",
201
+ "charset": "utf8",
202
+ "lang": "",
203
+ "xpath": "\/\/div[@id=\"output\"]"
204
+ },
205
+ "created_at": "2008-09-09T00:45:54+09:00"
206
+ },
207
+ {
208
+ "name": "\u30a2\u30f3\u30b0\u30e9\u30b5\u30a4\u30c8",
209
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
210
+ "updated_at": "2009-02-08T04:04:55+09:00",
211
+ "created_by": "fuba",
212
+ "resource_url": "http:\/\/wedata.net\/items\/1666",
213
+ "data": {
214
+ "url": "http:\/\/phji.net\/neta\/angura.php?get=%s",
215
+ "charset": "utf8",
216
+ "xpath": "\/\/div[@id=\"output\"]\/p"
217
+ },
218
+ "created_at": "2008-06-10T20:41:01+09:00"
219
+ },
220
+ {
221
+ "name": "\u30af\u30ea\u30ea\u30f3\u30ce\u30b3\u30c8\u30ab\u30fc",
222
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
223
+ "updated_at": "2009-02-08T04:05:21+09:00",
224
+ "created_by": "fuba",
225
+ "resource_url": "http:\/\/wedata.net\/items\/1657",
226
+ "data": {
227
+ "url": "http:\/\/phji.net\/neta\/kuririn.php?get=%s",
228
+ "charset": "utf8",
229
+ "xpath": "\/\/div[@id=\"output\"]\/p"
230
+ },
231
+ "created_at": "2008-06-09T21:16:27+09:00"
232
+ },
233
+ {
234
+ "name": "dice",
235
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
236
+ "updated_at": "2008-05-22T16:58:57+09:00",
237
+ "created_by": "youpy",
238
+ "resource_url": "http:\/\/wedata.net\/items\/1553",
239
+ "data": {
240
+ "url": "http:\/\/fuba.moaningnerds.org\/dice\/",
241
+ "charset": "utf8",
242
+ "lang": "",
243
+ "xpath": ""
244
+ },
245
+ "created_at": "2008-05-22T16:58:57+09:00"
246
+ },
247
+ {
248
+ "name": "\u6587\u5b57\u5316\u3051TEXT2VOICE",
249
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
250
+ "updated_at": "2008-04-22T15:09:01+09:00",
251
+ "created_by": "fuba",
252
+ "resource_url": "http:\/\/wedata.net\/items\/875",
253
+ "data": {
254
+ "url": "http:\/\/fuba.moaningnerds.org\/kkshow_decode\/voice.cgi?%s",
255
+ "charset": "utf8",
256
+ "lang": "",
257
+ "xpath": ""
258
+ },
259
+ "created_at": "2008-04-22T15:09:01+09:00"
260
+ },
261
+ {
262
+ "name": "TEXT2VOICE",
263
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
264
+ "updated_at": "2008-04-22T13:16:47+09:00",
265
+ "created_by": "ucnv",
266
+ "resource_url": "http:\/\/wedata.net\/items\/871",
267
+ "data": {
268
+ "url": "http:\/\/api.satoru.net\/text2voice\/?text=%s",
269
+ "charset": "utf8",
270
+ "lang": "",
271
+ "xpath": ""
272
+ },
273
+ "created_at": "2008-04-22T13:16:47+09:00"
274
+ },
275
+ {
276
+ "name": "\u643a\u5e2f\u6587\u5b57\u5316\u3051",
277
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
278
+ "updated_at": "2008-04-19T22:49:26+09:00",
279
+ "created_by": "fuba",
280
+ "resource_url": "http:\/\/wedata.net\/items\/804",
281
+ "data": {
282
+ "url": "http:\/\/fuba.moaningnerds.org\/kkshow_decode\/encode.cgi?%s",
283
+ "charset": "utf8",
284
+ "lang": "",
285
+ "xpath": ""
286
+ },
287
+ "created_at": "2008-04-19T22:36:40+09:00"
288
+ },
289
+ {
290
+ "name": "\u82f1\u65e5\u7ffb\u8a33",
291
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
292
+ "updated_at": "2008-04-16T19:57:01+09:00",
293
+ "created_by": "youpy",
294
+ "resource_url": "http:\/\/wedata.net\/items\/781",
295
+ "data": {
296
+ "url": "http:\/\/translate.google.com\/translate_t?langpair=en|ja&text=%s",
297
+ "charset": "utf8",
298
+ "xpath": "\/\/div[@id=\"result_box\"]"
299
+ },
300
+ "created_at": "2008-04-16T19:57:01+09:00"
301
+ },
302
+ {
303
+ "name": "\u82e5\u65e6\u90a3\u98a8",
304
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
305
+ "updated_at": "2008-04-16T19:57:01+09:00",
306
+ "created_by": "youpy",
307
+ "resource_url": "http:\/\/wedata.net\/items\/780",
308
+ "data": {
309
+ "url": "http:\/\/www.edo.net\/goinkyo\/cgi-bin\/sun.cgi?tion=regist&comment=%s",
310
+ "charset": "sjis",
311
+ "xpath": "(\/\/font[@size=\"+1\"])[2]"
312
+ },
313
+ "created_at": "2008-04-16T19:57:01+09:00"
314
+ },
315
+ {
316
+ "name": "\u82b1\u9b41",
317
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
318
+ "updated_at": "2008-04-16T19:57:01+09:00",
319
+ "created_by": "youpy",
320
+ "resource_url": "http:\/\/wedata.net\/items\/779",
321
+ "data": {
322
+ "url": "http:\/\/www.edo.net\/goinkyo\/cgi-bin\/urasato.cgi?tion=regist&comment=%s",
323
+ "charset": "sjis",
324
+ "xpath": "(\/\/font[@size=\"+1\"])[2]"
325
+ },
326
+ "created_at": "2008-04-16T19:57:01+09:00"
327
+ },
328
+ {
329
+ "name": "\u6c5f\u6238\u3063\u5b50",
330
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
331
+ "updated_at": "2008-04-16T19:57:00+09:00",
332
+ "created_by": "youpy",
333
+ "resource_url": "http:\/\/wedata.net\/items\/778",
334
+ "data": {
335
+ "url": "http:\/\/www.edo.net\/goinkyo\/cgi-bin\/edo_1.cgi?tion=regist&comment=%s",
336
+ "charset": "sjis",
337
+ "xpath": "(\/\/font[@size=\"+1\"])[2]"
338
+ },
339
+ "created_at": "2008-04-16T19:57:00+09:00"
340
+ },
341
+ {
342
+ "name": "\u65e5\u82f1\u7ffb\u8a33",
343
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
344
+ "updated_at": "2008-04-16T19:57:00+09:00",
345
+ "created_by": "youpy",
346
+ "resource_url": "http:\/\/wedata.net\/items\/777",
347
+ "data": {
348
+ "url": "http:\/\/translate.google.com\/translate_t?langpair=ja|en&text=%s",
349
+ "charset": "utf8",
350
+ "xpath": "\/\/div[@id=\"result_box\"]"
351
+ },
352
+ "created_at": "2008-04-16T19:57:00+09:00"
353
+ },
354
+ {
355
+ "name": "\u65e5\u4e2d\u7ffb\u8a33(\u518d\u7ffb\u8a33)",
356
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
357
+ "updated_at": "2008-04-16T19:57:00+09:00",
358
+ "created_by": "youpy",
359
+ "resource_url": "http:\/\/wedata.net\/items\/776",
360
+ "data": {
361
+ "url": "http:\/\/www.excite.co.jp\/world\/chinese\/?before=%s&wb_lp=JACH&big5=no&reverse_option=yes",
362
+ "charset": "utf8",
363
+ "xpath": "(\/\/textarea)[3]"
364
+ },
365
+ "created_at": "2008-04-16T19:57:00+09:00"
366
+ },
367
+ {
368
+ "name": "\u65e5\u4e2d\u7ffb\u8a33",
369
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
370
+ "updated_at": "2008-04-16T19:57:00+09:00",
371
+ "created_by": "youpy",
372
+ "resource_url": "http:\/\/wedata.net\/items\/775",
373
+ "data": {
374
+ "url": "http:\/\/www.excite.co.jp\/world\/chinese\/?before=%s&wb_lp=JACH&big5=no",
375
+ "charset": "utf8",
376
+ "xpath": "(\/\/textarea)[2]"
377
+ },
378
+ "created_at": "2008-04-16T19:57:00+09:00"
379
+ },
380
+ {
381
+ "name": "\u65cf\u8a00\u8449",
382
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
383
+ "updated_at": "2008-04-16T19:57:00+09:00",
384
+ "created_by": "youpy",
385
+ "resource_url": "http:\/\/wedata.net\/items\/774",
386
+ "data": {
387
+ "url": "http:\/\/home.lib.net\/usr1\/magi\/zoku\/zoku.cgi?action=regist&word=%s",
388
+ "charset": "sjis",
389
+ "xpath": "\/\/font[@size=\"6\"]"
390
+ },
391
+ "created_at": "2008-04-16T19:57:00+09:00"
392
+ },
393
+ {
394
+ "name": "\u5bcc\u5c71\u5f01",
395
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
396
+ "updated_at": "2008-04-16T19:56:59+09:00",
397
+ "created_by": "youpy",
398
+ "resource_url": "http:\/\/wedata.net\/items\/773",
399
+ "data": {
400
+ "url": "http:\/\/www.bea.hi-ho.ne.jp\/cgi-bin\/user\/omizu\/bunhen.cgi?bunsyo=%s",
401
+ "charset": "euc"
402
+ },
403
+ "created_at": "2008-04-16T19:56:59+09:00"
404
+ },
405
+ {
406
+ "name": "\u5927\u962a\u5f01",
407
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
408
+ "updated_at": "2008-04-16T19:56:59+09:00",
409
+ "created_by": "youpy",
410
+ "resource_url": "http:\/\/wedata.net\/items\/772",
411
+ "data": {
412
+ "url": "http:\/\/www.yansite.net\/osaka.cgi?command=%s",
413
+ "charset": "euc",
414
+ "xpath": "\/\/pre"
415
+ },
416
+ "created_at": "2008-04-16T19:56:59+09:00"
417
+ },
418
+ {
419
+ "name": "\u535a\u591a\u5f01",
420
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
421
+ "updated_at": "2008-04-16T19:56:59+09:00",
422
+ "created_by": "youpy",
423
+ "resource_url": "http:\/\/wedata.net\/items\/771",
424
+ "data": {
425
+ "url": "http:\/\/www.gem.hi-ho.ne.jp\/cgi-bin\/user\/rumiko\/bunhen.cgi?bunsyo=%s",
426
+ "charset": "sjis"
427
+ },
428
+ "created_at": "2008-04-16T19:56:59+09:00"
429
+ },
430
+ {
431
+ "name": "\u30eb\u30fc\u8a9e",
432
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
433
+ "updated_at": "2008-04-16T19:56:59+09:00",
434
+ "created_by": "youpy",
435
+ "resource_url": "http:\/\/wedata.net\/items\/770",
436
+ "data": {
437
+ "url": "http:\/\/lou5.jp\/?v=1&text=%s",
438
+ "charset": "utf8",
439
+ "xpath": "\/\/p[@class=\"large align-left box\"]"
440
+ },
441
+ "created_at": "2008-04-16T19:56:59+09:00"
442
+ },
443
+ {
444
+ "name": "\u30ae\u30e3\u30eb\u6587\u5b57",
445
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
446
+ "updated_at": "2008-04-16T19:56:58+09:00",
447
+ "created_by": "youpy",
448
+ "resource_url": "http:\/\/wedata.net\/items\/769",
449
+ "data": {
450
+ "url": "http:\/\/wolfside.com\/i\/x\/henkan.php?to=0&mes=%s",
451
+ "charset": "sjis",
452
+ "xpath": "\/\/textarea"
453
+ },
454
+ "created_at": "2008-04-16T19:56:58+09:00"
455
+ },
456
+ {
457
+ "name": "\u30aa\u30f3\u30c9\u30a5\u30eb\u8a9e",
458
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
459
+ "updated_at": "2008-04-16T19:56:58+09:00",
460
+ "created_by": "youpy",
461
+ "resource_url": "http:\/\/wedata.net\/items\/768",
462
+ "data": {
463
+ "url": "http:\/\/flexfrank.net\/cgi\/ondl\/index.cgi?word=%s",
464
+ "charset": "sjis",
465
+ "xpath": "\/\/p[@class=\"result\"]"
466
+ },
467
+ "created_at": "2008-04-16T19:56:58+09:00"
468
+ },
469
+ {
470
+ "name": "\u30a2\u30eb\u30d9\u30c9\u8a9e",
471
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
472
+ "updated_at": "2008-04-16T19:56:57+09:00",
473
+ "created_by": "youpy",
474
+ "resource_url": "http:\/\/wedata.net\/items\/767",
475
+ "data": {
476
+ "url": "http:\/\/scene.vis.ne.jp\/ff10\/data\/arubedo.cgi?text=%s&btn1=%95%CF%8A%B7%82%B7%82%E9&mode=mode1&pagetype=on",
477
+ "charset": "sjis",
478
+ "xpath": "(\/\/td)[1]",
479
+ "lang": "albed"
480
+ },
481
+ "created_at": "2008-04-16T19:56:57+09:00"
482
+ },
483
+ {
484
+ "name": "pikachu(english only)",
485
+ "database_resource_url": "http:\/\/wedata.net\/databases\/Text%20Conversion%20Services",
486
+ "updated_at": "2008-04-16T19:56:57+09:00",
487
+ "created_by": "youpy",
488
+ "resource_url": "http:\/\/wedata.net\/items\/766",
489
+ "data": {
490
+ "url": "http:\/\/pikachize.eye-of-newt.com\/pika.cgi?text=%s",
491
+ "charset": "utf8",
492
+ "xpath": "\/\/pre"
493
+ },
494
+ "created_at": "2008-04-16T19:56:57+09:00"
495
+ }
496
+ ]
@@ -0,0 +1,52 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+
3
+ require 'spec_helper'
4
+ require 'json'
5
+
6
+ include SpecHelper
7
+
8
+ describe TextConverter::Service do
9
+ before do
10
+ @converter = TextConverter.new
11
+ @converter.stub!(:json).and_return(JSON.load(open(fixture('items.json')).read))
12
+ end
13
+
14
+ it 'should build url' do
15
+ service = @converter.service('アレ')
16
+
17
+ service.build_url('テストです').should eql('http://areare.jgate.de/convert?q=%E3%83%86%E3%82%B9%E3%83%88%E3%81%A7%E3%81%99')
18
+ end
19
+
20
+ it 'should parse html' do
21
+ service = TextConverter::Service.new('foo', 'url' => 'http://example.com/', 'charset' => 'utf8', 'xpath' => '(//p)[2]')
22
+
23
+ service.parse(<<_HTML_).should eql('かきくけこ')
24
+ <html>
25
+ <head>
26
+ <title>foo</title>
27
+ </head>
28
+ <body>
29
+ <p>あいうえお</p>
30
+ <p>かきくけこ</p>
31
+ </body>
32
+ </html>
33
+ _HTML_
34
+ end
35
+
36
+ it 'should parse html without DOCTYPE with xpath id() function' do
37
+ service = TextConverter::Service.new('foo', 'url' => 'http://example.com/', 'charset' => 'utf8', 'xpath' => 'id("bar")')
38
+
39
+ service.parse(<<_HTML_).should eql('かきくけこ')
40
+ <html>
41
+ <head>
42
+ <title>foo</title>
43
+ </head>
44
+ <body>
45
+ <p>あいうえお</p>
46
+ <p id="bar">かきくけこ</p>
47
+ </body>
48
+ </html>
49
+ _HTML_
50
+ end
51
+ end
52
+
data/spec/spec.opts ADDED
@@ -0,0 +1,2 @@
1
+ -c
2
+ -fs
@@ -0,0 +1,10 @@
1
+ $:.unshift File.dirname(__FILE__) + '/../lib/'
2
+
3
+ require "text_converter"
4
+ require "pathname"
5
+
6
+ module SpecHelper
7
+ def fixture(filename)
8
+ Pathname.new(File.dirname(__FILE__) + '/fixtures/' + filename).realpath
9
+ end
10
+ end
@@ -0,0 +1,36 @@
1
+ $:.unshift File.dirname(__FILE__)
2
+
3
+ require 'spec_helper'
4
+ require 'json'
5
+
6
+ include SpecHelper
7
+
8
+ describe TextConverter do
9
+ before do
10
+ @converter = TextConverter.new
11
+ @converter.stub!(:json).and_return(JSON.load(open(fixture('items.json')).read))
12
+ end
13
+
14
+ it 'should convert text using a service returning plain text' do
15
+ service = @converter.service('アレ')
16
+ service.stub!(:get).and_return(open(fixture('are.txt')).read)
17
+ @converter.stub!(:service).and_return(service)
18
+
19
+ @converter.convert('アレ', 'テストです').should eql('アレです')
20
+ end
21
+
22
+ it 'should convert text using a service returning html' do
23
+ service = @converter.service('アルベド語')
24
+ service.stub!(:get).and_return(open(fixture('arubedo.html')).read)
25
+ @converter.stub!(:service).and_return(service)
26
+
27
+ @converter.convert('アルベド語', 'テストです').should eql('テストベヌ')
28
+ end
29
+
30
+ it 'should raise error if no service are found by name' do
31
+ lambda {
32
+ @converter.convert('FooBar', 'テストです')
33
+ }.should raise_error(TextConverter::NoSuchService)
34
+ end
35
+ end
36
+
metadata ADDED
@@ -0,0 +1,77 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: youpy-text-converter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - youpy
8
+ autorequire: ""
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-08-07 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: ""
17
+ email: youpy@buycheapviagraonlinenow.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.rdoc
24
+ - ChangeLog
25
+ files:
26
+ - README.rdoc
27
+ - ChangeLog
28
+ - Rakefile
29
+ - spec/fixtures
30
+ - spec/fixtures/are.txt
31
+ - spec/fixtures/arubedo.html
32
+ - spec/fixtures/items.json
33
+ - spec/service_spec.rb
34
+ - spec/spec.opts
35
+ - spec/spec_helper.rb
36
+ - spec/text_converter_spec.rb
37
+ - lib/text_converter.rb
38
+ has_rdoc: true
39
+ homepage: http://text-converter.rubyforge.org
40
+ licenses:
41
+ post_install_message:
42
+ rdoc_options:
43
+ - --title
44
+ - text-converter documentation
45
+ - --charset
46
+ - utf-8
47
+ - --opname
48
+ - index.html
49
+ - --line-numbers
50
+ - --main
51
+ - README.rdoc
52
+ - --inline-source
53
+ - --exclude
54
+ - ^(examples|extras)/
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: "0"
62
+ version:
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: "0"
68
+ version:
69
+ requirements: []
70
+
71
+ rubyforge_project: text-converter
72
+ rubygems_version: 1.3.5
73
+ signing_key:
74
+ specification_version: 2
75
+ summary: ""
76
+ test_files: []
77
+