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 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('google-translate.gemspec')
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.rb'
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
- puts @translator.translate(from.to_sym, to.to_sym, from_text)
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
- puts @translator.translate(from.to_sym, to.to_sym, from_text)
63
+ display(@translator.translate(from.to_sym, to.to_sym, from_text))
56
64
  end
57
-
58
65
  end
59
66
  end
60
67
 
@@ -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.3"
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.3
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
- - "lib/google_translate.rb "
29
+ - lib/google_translate.rb
30
30
  - bin/translate
31
31
  - bin/translate.bat
32
32
  - spec/spec_helper.rb