pry-translator 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.
- 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:
|