GoogleSuggest 0.0.2 → 0.0.3
raw patch · 2 files changed
+206/−5 lines, 2 filesPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
API changes (from Hackage documentation)
+ Google.Suggest: Afrikaans :: Language
+ Google.Suggest: Albanian :: Language
+ Google.Suggest: Amharic :: Language
+ Google.Suggest: Arabic :: Language
+ Google.Suggest: Armenian :: Language
+ Google.Suggest: Azerbaijani :: Language
+ Google.Suggest: Basque :: Language
+ Google.Suggest: Belarusian :: Language
+ Google.Suggest: Bengali :: Language
+ Google.Suggest: Bihari :: Language
+ Google.Suggest: Bulgarian :: Language
+ Google.Suggest: Burmese :: Language
+ Google.Suggest: Catalan :: Language
+ Google.Suggest: Cherokee :: Language
+ Google.Suggest: Chinese :: Language
+ Google.Suggest: ChineseSimplified :: Language
+ Google.Suggest: ChineseTraditional :: Language
+ Google.Suggest: Croatian :: Language
+ Google.Suggest: Czech :: Language
+ Google.Suggest: Danish :: Language
+ Google.Suggest: Dhivehi :: Language
+ Google.Suggest: Dutch :: Language
+ Google.Suggest: English :: Language
+ Google.Suggest: Esperanto :: Language
+ Google.Suggest: Estonian :: Language
+ Google.Suggest: Filipino :: Language
+ Google.Suggest: Finnish :: Language
+ Google.Suggest: French :: Language
+ Google.Suggest: Galician :: Language
+ Google.Suggest: Georgian :: Language
+ Google.Suggest: German :: Language
+ Google.Suggest: Greek :: Language
+ Google.Suggest: Guarani :: Language
+ Google.Suggest: Gujarati :: Language
+ Google.Suggest: Hebrew :: Language
+ Google.Suggest: Hindi :: Language
+ Google.Suggest: Hungarian :: Language
+ Google.Suggest: Icelandic :: Language
+ Google.Suggest: Indonesian :: Language
+ Google.Suggest: Inuktitut :: Language
+ Google.Suggest: Italian :: Language
+ Google.Suggest: Japanese :: Language
+ Google.Suggest: Kannada :: Language
+ Google.Suggest: Kazakh :: Language
+ Google.Suggest: Khmer :: Language
+ Google.Suggest: Korean :: Language
+ Google.Suggest: Kurdish :: Language
+ Google.Suggest: Kyrgyz :: Language
+ Google.Suggest: Laothian :: Language
+ Google.Suggest: Latvian :: Language
+ Google.Suggest: Lithuanian :: Language
+ Google.Suggest: Macedonian :: Language
+ Google.Suggest: Malay :: Language
+ Google.Suggest: Malayalam :: Language
+ Google.Suggest: Maltese :: Language
+ Google.Suggest: Marathi :: Language
+ Google.Suggest: Mongolian :: Language
+ Google.Suggest: Nepali :: Language
+ Google.Suggest: Norwegian :: Language
+ Google.Suggest: Oriya :: Language
+ Google.Suggest: Pashto :: Language
+ Google.Suggest: Persian :: Language
+ Google.Suggest: Polish :: Language
+ Google.Suggest: Portuguese :: Language
+ Google.Suggest: Punjabi :: Language
+ Google.Suggest: Romanian :: Language
+ Google.Suggest: Russian :: Language
+ Google.Suggest: Sanskrit :: Language
+ Google.Suggest: Serbian :: Language
+ Google.Suggest: Sindhi :: Language
+ Google.Suggest: Sinhalese :: Language
+ Google.Suggest: Slovak :: Language
+ Google.Suggest: Slovenian :: Language
+ Google.Suggest: Spanish :: Language
+ Google.Suggest: Swahili :: Language
+ Google.Suggest: Swedish :: Language
+ Google.Suggest: Tagalog :: Language
+ Google.Suggest: Tajik :: Language
+ Google.Suggest: Tamil :: Language
+ Google.Suggest: Telugu :: Language
+ Google.Suggest: Thai :: Language
+ Google.Suggest: Tibetan :: Language
+ Google.Suggest: Turkish :: Language
+ Google.Suggest: Uighur :: Language
+ Google.Suggest: Ukrainian :: Language
+ Google.Suggest: Unknown :: Language
+ Google.Suggest: Urdu :: Language
+ Google.Suggest: Uzbek :: Language
+ Google.Suggest: Vietnamese :: Language
+ Google.Suggest: data Language
+ Google.Suggest: instance Eq Language
+ Google.Suggest: instance Ord Language
+ Google.Suggest: instance Read Language
+ Google.Suggest: instance Show Language
+ Google.Suggest: languageMap :: Map Language String
- Google.Suggest: suggest :: String -> IO (Either String [(String, Int)])
+ Google.Suggest: suggest :: String -> Maybe Language -> IO (Either String [(String, Int)])
Files
- Google/Suggest.hs +205/−4
- GoogleSuggest.cabal +1/−1
Google/Suggest.hs view
@@ -18,21 +18,222 @@ {-# LANGUAGE OverloadedStrings #-} module Google.Suggest (- suggest+ Language (..),+ suggest,+ languageMap ) where +import Data.Map (Map) import Data.Maybe (fromMaybe) import Network.Curl.Download import Text.XML.Light import qualified Codec.Binary.Url as Url import qualified Codec.Binary.UTF8.String as UTF8+import qualified Data.Map as M +data Language = + Afrikaans+ | Albanian+ | Amharic+ | Arabic+ | Armenian+ | Azerbaijani+ | Basque+ | Belarusian+ | Bengali+ | Bihari+ | Bulgarian+ | Burmese+ | Catalan+ | Cherokee+ | Chinese+ | ChineseSimplified+ | ChineseTraditional+ | Croatian+ | Czech+ | Danish+ | Dhivehi+ | Dutch+ | English+ | Esperanto+ | Estonian+ | Filipino+ | Finnish+ | French+ | Galician+ | Georgian+ | German+ | Greek+ | Guarani+ | Gujarati+ | Hebrew+ | Hindi+ | Hungarian+ | Icelandic+ | Indonesian+ | Inuktitut+ | Italian+ | Japanese+ | Kannada+ | Kazakh+ | Khmer+ | Korean+ | Kurdish+ | Kyrgyz+ | Laothian+ | Latvian+ | Lithuanian+ | Macedonian+ | Malay+ | Malayalam+ | Maltese+ | Marathi+ | Mongolian+ | Nepali+ | Norwegian+ | Oriya+ | Pashto+ | Persian+ | Polish+ | Portuguese+ | Punjabi+ | Romanian+ | Russian+ | Sanskrit+ | Serbian+ | Sindhi+ | Sinhalese+ | Slovak+ | Slovenian+ | Spanish+ | Swahili+ | Swedish+ | Tajik+ | Tamil+ | Tagalog+ | Telugu+ | Thai+ | Tibetan+ | Turkish+ | Ukrainian+ | Urdu+ | Uzbek+ | Uighur+ | Vietnamese+ | Unknown+ deriving (Show, Eq, Ord, Read)++languageMap :: Map Language String+languageMap = + M.fromList+ [(Afrikaans, "af")+ ,(Albanian, "sq")+ ,(Amharic, "am")+ ,(Arabic, "ar")+ ,(Armenian, "hy")+ ,(Azerbaijani, "az")+ ,(Basque, "eu")+ ,(Belarusian, "be")+ ,(Bengali, "bn")+ ,(Bihari, "bh")+ ,(Bulgarian, "bg")+ ,(Burmese, "my")+ ,(Catalan, "ca")+ ,(Cherokee, "chr")+ ,(Chinese, "zh")+ ,(ChineseSimplified, "zh-CN")+ ,(ChineseTraditional, "zh-TW")+ ,(Croatian, "hr")+ ,(Czech, "cs")+ ,(Danish, "da")+ ,(Dhivehi, "dv")+ ,(Dutch, "nl")+ ,(English, "en")+ ,(Esperanto, "eo")+ ,(Estonian, "et")+ ,(Filipino, "tl")+ ,(Finnish, "fi")+ ,(French, "fr")+ ,(Galician, "gl")+ ,(Georgian, "ka")+ ,(German, "de")+ ,(Greek, "el")+ ,(Guarani, "gn")+ ,(Gujarati, "gu")+ ,(Hebrew, "iw")+ ,(Hindi, "hi")+ ,(Hungarian, "hu")+ ,(Icelandic, "is")+ ,(Indonesian, "id")+ ,(Inuktitut, "iu")+ ,(Italian, "it")+ ,(Japanese, "ja")+ ,(Kannada, "kn")+ ,(Kazakh, "kk")+ ,(Khmer, "km")+ ,(Korean, "ko")+ ,(Kurdish, "ku")+ ,(Kyrgyz, "ky")+ ,(Laothian, "lo")+ ,(Latvian, "lv")+ ,(Lithuanian, "lt")+ ,(Macedonian, "mk")+ ,(Malay, "ms")+ ,(Malayalam, "ml")+ ,(Maltese, "mt")+ ,(Marathi, "mr")+ ,(Mongolian, "mn")+ ,(Nepali, "ne")+ ,(Norwegian, "no")+ ,(Oriya, "or")+ ,(Pashto, "ps")+ ,(Persian, "fa")+ ,(Polish, "pl")+ ,(Portuguese, "pt-PT")+ ,(Punjabi, "pa")+ ,(Romanian, "ro")+ ,(Russian, "ru")+ ,(Sanskrit, "sa")+ ,(Serbian, "sr")+ ,(Sindhi, "sd")+ ,(Sinhalese, "si")+ ,(Slovak, "sk")+ ,(Slovenian, "sl")+ ,(Spanish, "es")+ ,(Swahili, "sw")+ ,(Swedish, "sv")+ ,(Tajik, "tg")+ ,(Tamil, "ta")+ ,(Tagalog, "tl")+ ,(Telugu, "te")+ ,(Thai, "th")+ ,(Tibetan, "bo")+ ,(Turkish, "tr")+ ,(Ukrainian, "uk")+ ,(Urdu, "ur")+ ,(Uzbek, "uz")+ ,(Uighur, "ug")+ ,(Vietnamese, "vi")+ ,(Unknown, "")]+ -- | Get [(suggestions, queries)] from Google Suggest.-suggest :: String -> IO (Either String [(String, Int)])-suggest keyword = do+suggest :: String -- ^ @keyword@ the keyword to search+ -> Maybe Language -- ^ @language@ result will adjust with local language,+ -- or 'Nothing' use 'English' default+ -> IO (Either String [(String, Int)])+suggest keyword language = do+ let getLangStr :: Language -> String+ getLangStr lang + | M.null newMap+ = error $ "Miss match language : " ++ show lang+ | otherwise + = snd $ M.findMin newMap+ where newMap = M.filterWithKey (\ l _ -> l == lang) languageMap -- Build url. let url = "http://google.com/complete/search?output=toolbar" + -- Language.+ ++ ("&hl=" ++ getLangStr (fromMaybe English language)) -- Request text. ++ ("&q=" ++ Url.encode (UTF8.encode keyword)) @@ -48,7 +249,7 @@ queries = concatMap (filterElementsName (qNameEqual "num_queries")) elements if length suggestions == length queries then do- let names = map (fromMaybe "" . findAttrBy (qNameEqual "data")) suggestions + let names = map (UTF8.decodeString . fromMaybe "" . findAttrBy (qNameEqual "data")) suggestions nums = map (\x -> case findAttrBy (qNameEqual "int") x of Just str -> read str :: Int Nothing -> 0) queries
GoogleSuggest.cabal view
@@ -1,5 +1,5 @@ name: GoogleSuggest-version: 0.0.2+version: 0.0.3 Cabal-Version: >= 1.6 license: GPL-3 license-file: LICENSE