GoogleSuggest 0.0.3 → 0.0.4
raw patch · 2 files changed
+104/−114 lines, 2 filesdep −containersPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies removed: containers
API changes (from Hackage documentation)
- Google.Suggest: languageMap :: Map Language String
Files
- Google/Suggest.hs +101/−112
- GoogleSuggest.cabal +3/−2
Google/Suggest.hs view
@@ -16,21 +16,17 @@ -- 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 OverloadedStrings #-} module Google.Suggest ( Language (..),- suggest,- languageMap+ suggest ) where -import Data.Map (Map) import Data.Maybe (fromMaybe)-import Network.Curl.Download-import Text.XML.Light+import Network.Curl.Download (openAsXML)+import Text.XML.Light (Content (Elem), filterElementsName, findAttrBy, qName) import qualified Codec.Binary.Url as Url import qualified Codec.Binary.UTF8.String as UTF8-import qualified Data.Map as M data Language = Afrikaans@@ -124,116 +120,15 @@ | 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 -- ^ @keyword@ the keyword to search- -> Maybe Language -- ^ @language@ result will adjust with local language,- -- or 'Nothing' use 'English' default+suggest :: String -- ^ search term+ -> Maybe Language -- ^ @'Just' language@, or 'Nothing' to 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.+ -- Build URL. let url = "http://google.com/complete/search?output=toolbar" -- Language.- ++ ("&hl=" ++ getLangStr (fromMaybe English language))+ ++ ("&hl=" ++ getLanguageCode (fromMaybe English language)) -- Request text. ++ ("&q=" ++ Url.encode (UTF8.encode keyword)) @@ -256,3 +151,97 @@ Right $ zip names nums else Left "Parse failed." _ -> Left "Parse failed."++-- | Get language code.+getLanguageCode :: Language -> String+getLanguageCode lang = + case lang of+ 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 -> ""
GoogleSuggest.cabal view
@@ -1,5 +1,5 @@ name: GoogleSuggest-version: 0.0.3+version: 0.0.4 Cabal-Version: >= 1.6 license: GPL-3 license-file: LICENSE@@ -18,5 +18,6 @@ Exposed-Modules: Google.Suggest Build-depends: base >= 4 && < 5, download-curl >= 0.1.2, - containers >= 0.3.0.0, dataenc, utf8-string, xml+ dataenc, utf8-string, xml+ ghc-options: -Wall