Class: MSTranslator
- Inherits:
-
Object
- Object
- MSTranslator
- Defined in:
- lib/lita/handlers/msTranslator.rb
Constant Summary collapse
- OAUTH_URI =
"https://datamarket.accesscontrol.windows.net/v2/OAuth2-13"
- API_URI =
"https://api.microsofttranslator.com/V2/Ajax.svc/"
- REST_LANGCODES =
"GetLanguagesForTranslate"
- REST_LANGNAMES =
"GetLanguageNames"
- REST_DETECTION =
"Detect"
- REST_TRANSLATE =
"Translate"
Instance Method Summary collapse
- #apiSuccess?(result) ⇒ Boolean
- #detect(text) ⇒ Object
- #grabAccessToken ⇒ Object
-
#initialize(clientId, clientSecret, http, redis) ⇒ MSTranslator
constructor
A new instance of MSTranslator.
- #languageCodes ⇒ Object
- #languageNames(codes) ⇒ Object
- #staleToken? ⇒ Boolean
- #translate(text, to, from = nil) ⇒ Object
Constructor Details
#initialize(clientId, clientSecret, http, redis) ⇒ MSTranslator
Returns a new instance of MSTranslator.
12 13 14 15 16 17 |
# File 'lib/lita/handlers/msTranslator.rb', line 12 def initialize(clientId, clientSecret, http, redis) @clientId = clientId @clientSecret = clientSecret @http = http @redis = redis end |
Instance Method Details
#apiSuccess?(result) ⇒ Boolean
47 48 49 50 51 52 53 |
# File 'lib/lita/handlers/msTranslator.rb', line 47 def apiSuccess?(result) if result.status != 200 false else /ID=\d{4}\.V2_Json\.(\w+)\.\w{8}/.match(result.body).nil? end end |
#detect(text) ⇒ Object
92 93 94 95 96 97 98 |
# File 'lib/lita/handlers/msTranslator.rb', line 92 def detect(text) result = @http.get do |req| req.url API_URI+REST_DETECTION, :text => text req.headers['Authorization'] = "Bearer "+@redis.get("token") end TranslationResult.new(apiSuccess?(result), result.body.slice(3..result.body.length)) end |
#grabAccessToken ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/lita/handlers/msTranslator.rb', line 19 def grabAccessToken() result = @http.post( OAUTH_URI, client_id: @clientId, client_secret: @clientSecret, scope: "http://api.microsofttranslator.com", grant_type: "client_credentials" ) if result.status == 200 raw = JSON.parse(result.body) @redis.set("token", raw["access_token"]) @redis.set("start", Time.now) @redis.set("expiry", raw["expires_in"]) true else false end end |
#languageCodes ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/lita/handlers/msTranslator.rb', line 55 def languageCodes() result = @http.get do |req| req.url API_URI+REST_LANGCODES req.headers['Authorization'] = "Bearer "+@redis.get("token") end if apiSuccess?(result) TranslationResult.new( true, JSON.parse(result.body.slice(3..result.body.length)).join(",") ) else TranslationResult.new( false, result.body.slice(3..result.body.length) ) end end |
#languageNames(codes) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/lita/handlers/msTranslator.rb', line 73 def languageNames(codes) codes = '['+codes.split(",").map { |code| '"'+code+'"' }.join(",")+']' result = @http.get do |req| req.url API_URI+REST_LANGNAMES, {:locale => "en", :languageCodes => codes} req.headers['Authorization'] = "Bearer "+@redis.get("token") end if apiSuccess?(result) TranslationResult.new( true, JSON.parse(result.body.slice(3..result.body.length)).join(",") ) else TranslationResult.new( false, result.body.slice(3..result.body.length) ) end end |
#staleToken? ⇒ Boolean
38 39 40 41 42 43 44 45 |
# File 'lib/lita/handlers/msTranslator.rb', line 38 def staleToken?() start = @redis.get("start") expiry = @redis.get("expiry") if start.nil? || (Time.parse(start) + expiry.to_i) < Time.now return true end false end |
#translate(text, to, from = nil) ⇒ Object
100 101 102 103 104 105 106 |
# File 'lib/lita/handlers/msTranslator.rb', line 100 def translate(text, to, from=nil) result = @http.get do |req| req.url API_URI+REST_TRANSLATE, :text => text, :from => from, :to => to, :contentType => "text/plain" req.headers['Authorization'] = "Bearer "+@redis.get("token") end TranslationResult.new(apiSuccess?(result), result.body.slice(3..result.body.length)) end |