shvets-google_translate 0.5.3 → 0.5.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +21 -1
- data/bin/translate +12 -5
- data/google_translate.gemspec +2 -2
- data/lib/google_translate.rb +153 -0
- metadata +2 -2
data/Rakefile
CHANGED
@@ -7,7 +7,7 @@ require 'spec/rake/spectask'
|
|
7
7
|
require 'rake/rdoctask'
|
8
8
|
require 'rcov/rcovtask'
|
9
9
|
|
10
|
-
SPEC = Gem::Specification.load('
|
10
|
+
SPEC = Gem::Specification.load('google_translate.gemspec')
|
11
11
|
|
12
12
|
Rake::GemPackageTask.new(SPEC) do |pkg|
|
13
13
|
pkg.need_tar = true
|
@@ -34,4 +34,24 @@ Rcov::RcovTask.new do |task|
|
|
34
34
|
task.verbose = true
|
35
35
|
end
|
36
36
|
|
37
|
+
desc "test gem compatibility with github"
|
38
|
+
task :"github:validate" do
|
39
|
+
require 'yaml'
|
40
|
+
|
41
|
+
require 'rubygems/specification'
|
42
|
+
data = File.read("google_translate.gemspec")
|
43
|
+
spec = nil
|
44
|
+
|
45
|
+
if data !~ %r{!ruby/object:Gem::Specification}
|
46
|
+
Thread.new { spec = eval("$SAFE = 3\n#{data}") }.join
|
47
|
+
else
|
48
|
+
spec = YAML.load(data)
|
49
|
+
end
|
50
|
+
|
51
|
+
spec.validate
|
52
|
+
|
53
|
+
puts spec
|
54
|
+
puts "OK"
|
55
|
+
end
|
56
|
+
|
37
57
|
task :default => :rcov
|
data/bin/translate
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
$:.unshift(File::join(File::dirname(File::dirname(__FILE__)), "lib"))
|
4
4
|
|
5
5
|
require 'rubygems'
|
6
|
-
require 'google_translate
|
6
|
+
require 'google_translate'
|
7
7
|
|
8
8
|
class Translate
|
9
9
|
USAGE= <<-TEXT
|
@@ -23,6 +23,15 @@ class Translate
|
|
23
23
|
puts list.join(', ')
|
24
24
|
end
|
25
25
|
|
26
|
+
def display text
|
27
|
+
if RUBY_PLATFORM =~ /mswin32/
|
28
|
+
File.open("temp.txt", "w") {|f| f.write text }
|
29
|
+
%x[notepad temp.txt]
|
30
|
+
else
|
31
|
+
puts text
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
26
35
|
def run
|
27
36
|
if(ARGV.size == 0)
|
28
37
|
puts USAGE and return
|
@@ -44,17 +53,15 @@ class Translate
|
|
44
53
|
from = $1
|
45
54
|
to = $2
|
46
55
|
|
47
|
-
|
48
|
-
|
56
|
+
display(@translator.translate(from.to_sym, to.to_sym, from_text))
|
49
57
|
when /(..)/
|
50
58
|
from_text = ARGV.join(' ')
|
51
59
|
|
52
60
|
from = @translator.detect_language(from_text)['language']
|
53
61
|
to = $1
|
54
62
|
|
55
|
-
|
63
|
+
display(@translator.translate(from.to_sym, to.to_sym, from_text))
|
56
64
|
end
|
57
|
-
|
58
65
|
end
|
59
66
|
end
|
60
67
|
|
data/google_translate.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{google_translate}
|
5
|
-
s.version = "0.5.
|
5
|
+
s.version = "0.5.4"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
|
@@ -11,7 +11,7 @@ Gem::Specification.new do |s|
|
|
11
11
|
s.description = %q{Simple client for Google Translate API.}
|
12
12
|
s.email = %q{alexander.shvets@gmail.com}
|
13
13
|
|
14
|
-
s.files = ["CHANGES", "google_translate.gemspec", "Rakefile", "README", "lib/google_translate.rb
|
14
|
+
s.files = ["CHANGES", "google_translate.gemspec", "Rakefile", "README", "lib/google_translate.rb",
|
15
15
|
"bin/translate", "bin/translate.bat", "spec/spec_helper.rb" , "spec/translate_spec.rb"]
|
16
16
|
|
17
17
|
s.has_rdoc = false
|
@@ -0,0 +1,153 @@
|
|
1
|
+
# google_translate.rb
|
2
|
+
|
3
|
+
require 'open-uri'
|
4
|
+
require 'cgi'
|
5
|
+
require 'json'
|
6
|
+
|
7
|
+
module Google
|
8
|
+
class Language
|
9
|
+
attr_reader :name, :code
|
10
|
+
|
11
|
+
def initialize(name, code)
|
12
|
+
@name = name
|
13
|
+
@code = code
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_s
|
17
|
+
"(" + @code + ": " + @name + ")"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class Translator
|
22
|
+
URL_STRING = "http://ajax.googleapis.com/ajax/services/language/"
|
23
|
+
URL2_STRING = "http://translate.google.com"
|
24
|
+
|
25
|
+
def translate(from, to, from_text, options={})
|
26
|
+
raise Exception.new :missing_from_language if from.nil?
|
27
|
+
raise Exception.new :missing_to_language if to.nil?
|
28
|
+
raise Exception.new :missing_text if from_text.nil?
|
29
|
+
|
30
|
+
request = URL_STRING + "translate?v=1.0&langpair=#{from}%7C#{to}&q=" + CGI.escape(from_text)
|
31
|
+
|
32
|
+
begin
|
33
|
+
response = call_service(request, [:response_status, :response_details, :response_data])
|
34
|
+
|
35
|
+
raise Exception.new :translate_server_is_down if response.empty?
|
36
|
+
|
37
|
+
raise Exception.new response[:response_details] if response[:response_status] != 200 # success
|
38
|
+
|
39
|
+
to_text = response[:response_data]['translatedText']
|
40
|
+
|
41
|
+
# to_text = encode_text(to_text) if to == :ru
|
42
|
+
|
43
|
+
(options[:html]) ? CGI.unescapeHTML(to_text) : to_text
|
44
|
+
rescue OpenURI::HTTPError
|
45
|
+
raise Exception.new :translate_server_is_down
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def detect_language test_text
|
50
|
+
raise Exception.new :missing_test_text if test_text.nil?
|
51
|
+
|
52
|
+
request = URL_STRING + "detect?v=1.0&q=" + CGI.escape(test_text)
|
53
|
+
|
54
|
+
begin
|
55
|
+
response = call_service(request, [:response_data])
|
56
|
+
response_data = response[:response_data]
|
57
|
+
|
58
|
+
raise Exception.new :translate_server_is_down if response.empty?
|
59
|
+
#raise Exception.new :unreliable_detection if !response_data['isReliable']
|
60
|
+
|
61
|
+
response_data
|
62
|
+
#
|
63
|
+
rescue OpenURI::HTTPError
|
64
|
+
raise Exception.new :translate_server_is_down
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def supported_languages
|
69
|
+
call_service2(URL2_STRING , [])
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
def camelize(str)
|
75
|
+
words = str.split('_')
|
76
|
+
|
77
|
+
words[0] + words[1..-1].map {|w| w.capitalize}.join
|
78
|
+
end
|
79
|
+
|
80
|
+
def call_service(request, keys)
|
81
|
+
response = {}
|
82
|
+
|
83
|
+
open(request) do |stream|
|
84
|
+
content = stream.read
|
85
|
+
|
86
|
+
unless content.nil?
|
87
|
+
json = JSON.parse(content)
|
88
|
+
|
89
|
+
keys.each do |key|
|
90
|
+
response[key] = json[camelize(key.to_s)]
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
response
|
96
|
+
end
|
97
|
+
|
98
|
+
def call_service2(request, keys)
|
99
|
+
response = {}
|
100
|
+
|
101
|
+
open(URI.escape(request)) do |stream|
|
102
|
+
content = stream.read
|
103
|
+
|
104
|
+
from_languages = collect_languages content, 'sl', 'old_sl'
|
105
|
+
to_languages = collect_languages content, 'tl', 'old_tl'
|
106
|
+
|
107
|
+
response[:from_languages] = from_languages
|
108
|
+
response[:to_languages] = to_languages
|
109
|
+
end
|
110
|
+
|
111
|
+
response
|
112
|
+
end
|
113
|
+
|
114
|
+
def collect_languages buffer, tag_name, tag_id
|
115
|
+
languages = []
|
116
|
+
|
117
|
+
spaces = '\s?'
|
118
|
+
quote = '(\s|\'|")?'
|
119
|
+
text = '(.*)'
|
120
|
+
|
121
|
+
re1 = /<select#{spaces}name=#{quote}#{tag_name}#{quote}#{spaces}id=#{quote}#{tag_id}#{quote}#{spaces}tabindex=0>(.*)<\/select>/
|
122
|
+
text = re1.match(buffer)[5]
|
123
|
+
|
124
|
+
re2 = /<option(\s*)value="([a-z|A-Z]*)">([a-z|A-Z]*)<\/option>/
|
125
|
+
|
126
|
+
matches = text.scan(re2)
|
127
|
+
|
128
|
+
matches.each do |m|
|
129
|
+
languages << Language.new(m[2], m[1])
|
130
|
+
end
|
131
|
+
|
132
|
+
languages
|
133
|
+
end
|
134
|
+
|
135
|
+
def encode_text text
|
136
|
+
s = ''
|
137
|
+
text.unpack("U*").each do |ch|
|
138
|
+
if (1072..1087).include? ch
|
139
|
+
s << (ch-912).chr
|
140
|
+
elsif (1088..1103).include? ch
|
141
|
+
s << (ch-864).chr
|
142
|
+
elsif (1020..1071).include? ch
|
143
|
+
s << (ch-892).chr
|
144
|
+
else
|
145
|
+
s << ch
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
s
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shvets-google_translate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Shvets
|
@@ -26,7 +26,7 @@ files:
|
|
26
26
|
- google_translate.gemspec
|
27
27
|
- Rakefile
|
28
28
|
- README
|
29
|
-
-
|
29
|
+
- lib/google_translate.rb
|
30
30
|
- bin/translate
|
31
31
|
- bin/translate.bat
|
32
32
|
- spec/spec_helper.rb
|