packages feed

GoogleTranslate 0.0.2 → 0.0.3

raw patch · 2 files changed

+20/−16 lines, 2 filesdep +AttoJsondep −jsondep −textPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies added: AttoJson

Dependencies removed: json, text

API changes (from Hackage documentation)

- Language.Translate.Google: translate :: ByteString -> Maybe Language -> Language -> IO (Either String Text)
+ Language.Translate.Google: translate :: ByteString -> Maybe Language -> Language -> IO (Either String ByteString)

Files

GoogleTranslate.cabal view
@@ -1,5 +1,5 @@ name:			GoogleTranslate-version:		0.0.2+version:		0.0.3 Cabal-Version:	>= 1.6 license:		GPL-3 license-file:	LICENSE@@ -17,5 +17,5 @@ Library   Exposed-Modules:      Language.Translate.Google-  Build-depends: base >= 4 && < 5, json >= 0.4.4, download-curl >= 0.1.2, -                 containers >= 0.3.0.0, bytestring >= 0.9.1.7, dataenc, text+  Build-depends: base >= 4 && < 5, AttoJson >= 0.5.3, download-curl >= 0.1.2, +                 containers >= 0.3.0.0, bytestring >= 0.9.1.7, dataenc
Language/Translate/Google.hs view
@@ -16,7 +16,7 @@ -- You should have received a copy of the GNU General Public License -- along with this program.  If not, see <http://www.gnu.org/licenses/>. -{-# LANGUAGE ViewPatterns #-}+{-# LANGUAGE OverloadedStrings #-} module Language.Translate.Google (     Language (..),     translate,@@ -24,14 +24,12 @@ ) where  import Data.Map (Map)-import Data.Text (Text) import Network.Curl.Download-import Text.JSON+import Text.JSON.AttoJSON  import qualified Codec.Binary.Url as C import qualified Data.ByteString as B import qualified Data.Map as M-import qualified Data.Text as T  data Language =      Afrikaans@@ -219,10 +217,10 @@     ,(Unknown,            "")]  -- | Get translation from Google Translate.-translate :: B.ByteString        -- ^ @text@ the byte string need to translate-          -> Maybe Language      -- ^ @sourceLanguage@ source language, or 'Nothing' use automatic language detect-          -> Language            -- ^ @destinationLanguage@ destination language-          -> IO (Either String Text) +translate :: B.ByteString        -- ^ the byte string need to translate+          -> Maybe Language      -- ^ source language, or 'Nothing' use automatic language detect+          -> Language            -- ^ destination language+          -> IO (Either String B.ByteString)  translate text srcLang destLang = do   let getLangStr :: Language -> String       getLangStr lang @@ -231,20 +229,26 @@           | otherwise                = snd $ M.findMin newMap                 where newMap = M.filterWithKey (\ l _ -> l == lang) languageMap+  -- Build url.   let url = "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0" +            -- Request text.              ++ ("&q=" ++ C.encode (B.unpack text)) +            -- Source language and destination language.             ++ ("&langpair="                  ++ (maybe "" getLangStr srcLang                     ++ "|"                      ++ getLangStr destLang)) -  string <- openURIString url+  -- Request JSON data.+  string <- openURI url      return $      case string of         Left error -> Left error         Right jsonString -> -            case decode jsonString of -              Ok ((valFromObj "responseData") -> Ok ((valFromObj "translatedText") -> Ok tr)) -> -                  Right $ T.pack $ fromJSString tr-              Error error -> Left error+            case parseJSON jsonString of+              Left error -> Left error+              Right jsvalue -> +                  case getFields ["responseData", "translatedText"] jsvalue of+                    Just (JSString str) -> Right str+                    _ -> Left "translate : parse failed."