packages feed

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 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