pry-translator 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +1 -0
- data/Rakefile +8 -0
- data/lib/pry-translator.rb +36 -0
- data/lib/pry-translator/provider.rb +52 -0
- data/lib/pry-translator/provider/baidu.rb +56 -0
- data/lib/pry-translator/provider/youdao.rb +50 -0
- data/lib/pry-translator/version.rb +5 -0
- metadata +94 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c510c6b4acd2e0572caadae18bab962c79b19488
|
4
|
+
data.tar.gz: 69b837025f3ca11d4d09870081eb50d37d8655ba
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 80a04816f1003be7b0000319b886f4677f6f08227bf29dca3db955425cd917403ad50edc2fd2cb374e9a251f5d26ec01c9b37f51cee43a6d2be9cb0928187538
|
7
|
+
data.tar.gz: e1ef3fbb512a81b66cd3686d128c318ff96f571418191a7430fce8d888ec95a423fe26fb85a1b73032d133c04693fff1dc05ec4614adc8b93b19e727afd59888
|
data/README.md
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
# pry-translator
|
data/Rakefile
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
# encoding : utf-8
|
2
|
+
|
3
|
+
require 'pry'
|
4
|
+
require 'faraday'
|
5
|
+
require 'json'
|
6
|
+
require 'colorize'
|
7
|
+
require 'securerandom'
|
8
|
+
require 'digest'
|
9
|
+
|
10
|
+
require 'pry-translator/provider'
|
11
|
+
require 'pry-translator/version'
|
12
|
+
|
13
|
+
require 'pry-translator/provider/youdao'
|
14
|
+
require 'pry-translator/provider/baidu'
|
15
|
+
|
16
|
+
module PryTranslator
|
17
|
+
DEFAULT_PROVIDER = :youdao
|
18
|
+
INDENT = ' ' * 4
|
19
|
+
|
20
|
+
Commands = Pry::CommandSet.new do
|
21
|
+
create_command 't', 'translate your input.' do
|
22
|
+
def process
|
23
|
+
provider = Pry.config.translator || PryTranslator::DEFAULT_PROVIDER
|
24
|
+
|
25
|
+
begin
|
26
|
+
engine = eval("PryTranslator::Provider::#{provider.to_s.capitalize}").new
|
27
|
+
output.puts engine.translate(args.join(' '))
|
28
|
+
rescue Exception => e
|
29
|
+
puts e.to_s
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
Pry.commands.import PryTranslator::Commands
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# encoding : utf-8
|
2
|
+
|
3
|
+
module PryTranslator
|
4
|
+
class BasicError < StandardError; end
|
5
|
+
|
6
|
+
module Provider
|
7
|
+
class ProviderError < PryTranslator::BasicError; end
|
8
|
+
|
9
|
+
class BaseProvider
|
10
|
+
def initialize(href, api_param_key)
|
11
|
+
@api_href = href
|
12
|
+
@api_param_hash = read_config(api_param_key)
|
13
|
+
|
14
|
+
values = @api_param_hash.values
|
15
|
+
if values.include? nil or values.include? ''
|
16
|
+
puts required_key_tips(api_param_key)
|
17
|
+
raise ProviderError.new('init provider error.')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def read_config(keys)
|
22
|
+
config_prefix = 'Pry.config.translator'
|
23
|
+
|
24
|
+
keys.inject({}) do |hash, key|
|
25
|
+
hash[key] = eval("#{config_prefix}_#{key.to_s}")
|
26
|
+
|
27
|
+
hash
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def required_key_tips(keys, href='')
|
32
|
+
config_prefix = 'Pry.config.translator'
|
33
|
+
|
34
|
+
info = "you are using #{ Pry.config.translator ||PryTranslator::DEFAULT_PROVIDER } service, you need configure\n"
|
35
|
+
info << keys.inject('') do |str, key|
|
36
|
+
str += " #{config_prefix}_#{key.to_s} = #{key.to_s.upcase}\n".colorize(:red)
|
37
|
+
end
|
38
|
+
|
39
|
+
info << "in ~/.pryrc file"
|
40
|
+
info
|
41
|
+
end
|
42
|
+
|
43
|
+
def get(api_url, args={})
|
44
|
+
conn = Faraday.new(@api_href)
|
45
|
+
|
46
|
+
resp = conn.get api_url, (@api_param_hash.clone.merge! args)
|
47
|
+
|
48
|
+
resp.body
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# encoding : utf-8
|
2
|
+
|
3
|
+
module PryTranslator
|
4
|
+
module Provider
|
5
|
+
class Baidu < BaseProvider
|
6
|
+
def initialize
|
7
|
+
api_key_param = [:appid, :appsecret]
|
8
|
+
api_href = 'http://api.fanyi.baidu.com'
|
9
|
+
|
10
|
+
super(api_href, api_key_param)
|
11
|
+
end
|
12
|
+
|
13
|
+
def translate(text, args={})
|
14
|
+
args['to'] = 'auto'
|
15
|
+
args['from'] = 'auto'
|
16
|
+
args['q'] = text
|
17
|
+
args['salt'] = SecureRandom.hex
|
18
|
+
args['sign'] = create_sign(args)
|
19
|
+
|
20
|
+
begin
|
21
|
+
result = JSON.parse(get('/api/trans/vip/translate', args))
|
22
|
+
#result = format(result)
|
23
|
+
rescue JSON::ParserError => e
|
24
|
+
raise ProviderError.new('failed parsing response from baidu.')
|
25
|
+
rescue
|
26
|
+
raise e
|
27
|
+
end
|
28
|
+
|
29
|
+
pretty_string result
|
30
|
+
end
|
31
|
+
|
32
|
+
def create_sign(args)
|
33
|
+
md5 = Digest::MD5.new
|
34
|
+
|
35
|
+
md5.update "#{@api_param_hash[:appid]}#{args['q']}#{args['salt']}#{@api_param_hash[:appsecret]}".encode('utf-8')
|
36
|
+
|
37
|
+
md5.hexdigest
|
38
|
+
end
|
39
|
+
|
40
|
+
def pretty_string(hash)
|
41
|
+
hash = format(hash)
|
42
|
+
str = hash['translation'].colorize(:red)
|
43
|
+
|
44
|
+
str
|
45
|
+
end
|
46
|
+
|
47
|
+
def format(hash)
|
48
|
+
h = {}
|
49
|
+
|
50
|
+
h['translation'] = hash['trans_result'].first['dst'] if hash['trans_result']
|
51
|
+
|
52
|
+
h
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# encoding : utf-8
|
2
|
+
|
3
|
+
module PryTranslator
|
4
|
+
module Provider
|
5
|
+
class Youdao < BaseProvider
|
6
|
+
def initialize
|
7
|
+
api_key_param = [:keyfrom, :key]
|
8
|
+
api_href = 'http://fanyi.youdao.com/'
|
9
|
+
|
10
|
+
super(api_href, api_key_param)
|
11
|
+
end
|
12
|
+
|
13
|
+
def translate(text, args={})
|
14
|
+
args['type'] = 'data'
|
15
|
+
args['version'] = '1.1'
|
16
|
+
args['doctype'] = 'json'
|
17
|
+
args['q'] = text
|
18
|
+
|
19
|
+
begin
|
20
|
+
result = JSON.parse(get('/openapi.do', args))
|
21
|
+
#result = format(result)
|
22
|
+
rescue JSON::ParserError => e
|
23
|
+
raise ProviderError.new('failed parsing response from youdao.')
|
24
|
+
rescue
|
25
|
+
raise e
|
26
|
+
end
|
27
|
+
|
28
|
+
pretty_string result
|
29
|
+
end
|
30
|
+
|
31
|
+
def pretty_string(hash)
|
32
|
+
hash = format(hash)
|
33
|
+
str = hash['translation'].join(' ').colorize(:red)
|
34
|
+
str << "\n#{PryTranslator::INDENT}" << hash['explains'].join("\n#{PryTranslator::INDENT}") if hash['explains']
|
35
|
+
|
36
|
+
str
|
37
|
+
end
|
38
|
+
|
39
|
+
def format(hash)
|
40
|
+
h = {}
|
41
|
+
|
42
|
+
h['translation'] = hash['translation']
|
43
|
+
h['explains'] = hash['basic']['explains'] if hash['basic']
|
44
|
+
h['code'] = hash['errorCode']
|
45
|
+
|
46
|
+
h
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
metadata
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pry-translator
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- jiyaping
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-12-31 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: pry
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: colorize
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: faraday
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: using open translation web api
|
56
|
+
email:
|
57
|
+
- jiyaping0802@gmail.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- README.md
|
63
|
+
- Rakefile
|
64
|
+
- lib/pry-translator.rb
|
65
|
+
- lib/pry-translator/provider.rb
|
66
|
+
- lib/pry-translator/provider/baidu.rb
|
67
|
+
- lib/pry-translator/provider/youdao.rb
|
68
|
+
- lib/pry-translator/version.rb
|
69
|
+
homepage: https://github.com/jiyaping/pry-translator
|
70
|
+
licenses:
|
71
|
+
- MIT
|
72
|
+
metadata: {}
|
73
|
+
post_install_message:
|
74
|
+
rdoc_options: []
|
75
|
+
require_paths:
|
76
|
+
- lib
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - '>='
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
requirements: []
|
88
|
+
rubyforge_project:
|
89
|
+
rubygems_version: 2.4.7
|
90
|
+
signing_key:
|
91
|
+
specification_version: 4
|
92
|
+
summary: translator in pry
|
93
|
+
test_files: []
|
94
|
+
has_rdoc:
|