module Text.Yahoo.Types where import Network.HTTP (urlEncode) import Text.XML.Light.Cursor import Data.Maybe type URL = String type MIME = String type UserString = String type Date = String type Size = Integer type Error = (String, Maybe Cursor) -- 'Error's pass an optional 'Cursor', as defined in the 'xml' library. data ResultSet = ResultSet { totalResultsAvailable :: Integer , totalResultsReturned :: Int , firstResultPosition :: Integer , results :: [Result] } deriving (Eq,Show) data Result = Result { title :: String , summary :: String , url :: URL , clickUrl :: URL , mimeType :: Maybe MIME , modDate :: Maybe Date , cache :: Maybe (URL,Size) } deriving (Eq,Show) -- | Related Suggestion and Spelling Suggestion results type RSResultSet = [String] -- | Web and Context Search queries data Query = Query { appid :: UserString -- ^ An application-specific ID provided by Yahoo , query :: UserString -- ^ The query string , context :: Maybe UserString -- ^ An optional context string , region :: Region -- ^ Filter results by region , ty :: Type -- ^ The query type , numResults :: Int -- ^ The number of results to return , start :: Int -- ^ The index of the first result to return, beginning with 1 , format :: Format -- ^ The query format , adult_ok :: Bool -- ^ True turns on adult results , similar_ok :: Bool -- ^ True turns on approximate search , language :: Language -- ^ Filter results by language , country :: Country -- ^ Filter results by country , site :: Maybe [UserString] -- ^ Restrict search to specific websites , subscription :: Maybe Subscription -- ^ Search subscription-based sites , license :: License -- ^ Filter results by license } -- | Related Suggestion and Spelling Suggestion queries data RSQuery = RSQuery { rsappid :: UserString -- ^ An application-specific ID provided by Yahoo , rsquery :: UserString -- ^ The query string , rsNumResults :: Int -- ^ The number of results to return } -- | Coerce a 'UserString' to a 'String' sanitize :: UserString -> String sanitize = urlEncode instance Show Query where showsPrec _ q = showString "appid=" . showString (sanitize (appid q)) . showString "&query=" . showString (sanitize (query q)) . showString (maybe "" (("&context=" ++) . sanitize) (context q)) . showString "®ion=" . (showString . show) (region q) . showString "&type=" . (showString . show) (ty q) . showString "&results=" . (showString . show) (numResults q) . showString "&start=" . (showString . show) (start q) . showString "&format=" . (showString . show) (format q) . showString (if (adult_ok q) then "&adult_ok=1" else "") . showString (if (similar_ok q) then "&similar_ok=1" else "") . showString "&language=" . (showString . show) (language q) . showString "&country=" . (showString . show) (country q) . showString (maybe "" (unwords . (map (("&site=" ++) . sanitize))) (site q)) . showString "&subscription=" . showString ((maybe "" show) (subscription q)) . showString "&license=" . (showString . show) (license q) instance Show RSQuery where showsPrec _ q = showString "appid=" . showString (sanitize (rsappid q)) . showString "&query=" . showString (sanitize (rsquery q)) . showString "&results=" . (showString . show) (rsNumResults q) data Region = RegionDefault | RegionArgentina | RegionAustralia | RegionAustria | RegionBrazil | RegionCanada | RegionCatalan | RegionDenmark | RegionFinland | RegionFrance | RegionGermany | RegionIndia | RegionIndonesia | RegionItaly | RegionMalaysia | RegionMexico | RegionNetherlands | RegionNorway | RegionPhillipines | RegionRussianFederation | RegionSingapore | RegionSpain | RegionSweden | RegionSwitzerland | RegionThailand | RegionUnitedKingdomIreland | RegionUnitedStates instance Show Region where showsPrec _ RegionDefault = showString "" showsPrec _ RegionArgentina = showString "ar" showsPrec _ RegionAustralia = showString "au" showsPrec _ RegionAustria = showString "at" showsPrec _ RegionBrazil = showString "br" showsPrec _ RegionCanada = showString "ca" showsPrec _ RegionCatalan = showString "ct" showsPrec _ RegionDenmark = showString "dk" showsPrec _ RegionFinland = showString "fi" showsPrec _ RegionFrance = showString "fr" showsPrec _ RegionGermany = showString "de" showsPrec _ RegionIndia = showString "in" showsPrec _ RegionIndonesia = showString "id" showsPrec _ RegionItaly = showString "it" showsPrec _ RegionMalaysia = showString "my" showsPrec _ RegionMexico = showString "mx" showsPrec _ RegionNetherlands = showString "nl" showsPrec _ RegionNorway = showString "no" showsPrec _ RegionPhillipines = showString "ph" showsPrec _ RegionRussianFederation = showString "ru" showsPrec _ RegionSingapore = showString "sg" showsPrec _ RegionSpain = showString "es" showsPrec _ RegionSweden = showString "se" showsPrec _ RegionSwitzerland = showString "ch" showsPrec _ RegionThailand = showString "th" showsPrec _ RegionUnitedKingdomIreland = showString "uk" showsPrec _ RegionUnitedStates = showString "us" data Type = TypeDefault | TypeAll | TypeAny | TypePhrase instance Show Type where showsPrec _ TypeDefault = showString "" showsPrec _ TypeAll = showString "all" showsPrec _ TypeAny = showString "any" showsPrec _ TypePhrase = showString "phrase" data Format = FormatDefault | FormatAny | FormatHtml | FormatMsWord | FormatPdf | FormatPpt | FormatRss | FormatTxt | FormatXls instance Show Format where showsPrec _ FormatDefault = showString "" showsPrec _ FormatAny = showString "any" showsPrec _ FormatHtml = showString "html" showsPrec _ FormatMsWord = showString "msword" showsPrec _ FormatPdf = showString "pdf" showsPrec _ FormatPpt = showString "ppt" showsPrec _ FormatRss = showString "rss" showsPrec _ FormatTxt = showString "txt" showsPrec _ FormatXls = showString "xls" data Language = LanguageDefault | LanguageArabic | LanguageBulgarian | LanguageCatalan | LanguageChineseSimplified | LanguageChineseTraditional | LanguageCroatian | LanguageCzech | LanguageDanish | LanguageDutch | LanguageEnglish | LanguageEstonian | LanguageFinnish | LanguageFrench | LanguageGerman | LanguageGreek | LanguageHebrew | LanguageHungarian | LanguageIcelandic | LanguageIndonesian | LanguageItalian | LanguageJapanese | LanguageKorean | LanguageLatvian | LanguageLithuanian | LanguageNorwegian | LanguagePersian | LanguagePolish | LanguagePortuguese | LanguageRomanian | LanguageRussian | LanguageSlovak | LanguageSerbian | LanguageSlovenian | LanguageSpanish | LanguageSwedish | LanguageThai | LanguageTurkish instance Show Language where showsPrec _ LanguageDefault = showString "" showsPrec _ LanguageArabic = showString "ar" showsPrec _ LanguageBulgarian = showString "bg" showsPrec _ LanguageCatalan = showString "ca" showsPrec _ LanguageChineseSimplified = showString "szh" showsPrec _ LanguageChineseTraditional = showString "tzh" showsPrec _ LanguageCroatian = showString "hr" showsPrec _ LanguageCzech = showString "cs" showsPrec _ LanguageDanish = showString "da" showsPrec _ LanguageDutch = showString "nl" showsPrec _ LanguageEnglish = showString "en" showsPrec _ LanguageEstonian = showString "et" showsPrec _ LanguageFinnish = showString "fi" showsPrec _ LanguageFrench = showString "fr" showsPrec _ LanguageGerman = showString "de" showsPrec _ LanguageGreek = showString "el" showsPrec _ LanguageHebrew = showString "he" showsPrec _ LanguageHungarian = showString "hu" showsPrec _ LanguageIcelandic = showString "is" showsPrec _ LanguageIndonesian = showString "id" showsPrec _ LanguageItalian = showString "it" showsPrec _ LanguageJapanese = showString "ja" showsPrec _ LanguageKorean = showString "ko" showsPrec _ LanguageLatvian = showString "lv" showsPrec _ LanguageLithuanian = showString "lt" showsPrec _ LanguageNorwegian = showString "no" showsPrec _ LanguagePersian = showString "fa" showsPrec _ LanguagePolish = showString "pl" showsPrec _ LanguagePortuguese = showString "pt" showsPrec _ LanguageRomanian = showString "ro" showsPrec _ LanguageRussian = showString "ru" showsPrec _ LanguageSlovak = showString "sk" showsPrec _ LanguageSerbian = showString "sr" showsPrec _ LanguageSlovenian = showString "sl" showsPrec _ LanguageSpanish = showString "es" showsPrec _ LanguageSwedish = showString "sv" showsPrec _ LanguageThai = showString "th" showsPrec _ LanguageTurkish = showString "tr" data Country = CountryDefault | CountryArgentina | CountryAustralia | CountryAustria | CountryBelgium | CountryBrazil | CountryCanada | CountryChina | CountryCzechoslovakia | CountryDenmark | CountryFinland | CountryFrance | CountryGermany | CountryItaly | CountryJapan | CountryKorea | CountryNetherlands | CountryNorway | CountryPoland | CountryRussianFederation | CountrySpain | CountrySweden | CountrySwitzerland | CountryTaiwan | CountryUnitedKingdom | CountryUnitedStates instance Show Country where showsPrec _ CountryDefault = showString "" showsPrec _ CountryArgentina = showString "ar" showsPrec _ CountryAustralia = showString "au" showsPrec _ CountryAustria = showString "at" showsPrec _ CountryBelgium = showString "be" showsPrec _ CountryBrazil = showString "br" showsPrec _ CountryCanada = showString "ca" showsPrec _ CountryChina = showString "cn" showsPrec _ CountryCzechoslovakia = showString "cz" showsPrec _ CountryDenmark = showString "dk" showsPrec _ CountryFinland = showString "fi" showsPrec _ CountryFrance = showString "fr" showsPrec _ CountryGermany = showString "de" showsPrec _ CountryItaly = showString "it" showsPrec _ CountryJapan = showString "jp" showsPrec _ CountryKorea = showString "kr" showsPrec _ CountryNetherlands = showString "nl" showsPrec _ CountryNorway = showString "no" showsPrec _ CountryPoland = showString "pl" showsPrec _ CountryRussianFederation = showString "ru" showsPrec _ CountrySpain = showString "es" showsPrec _ CountrySweden = showString "se" showsPrec _ CountrySwitzerland = showString "ch" showsPrec _ CountryTaiwan = showString "tw" showsPrec _ CountryUnitedKingdom = showString "uk" showsPrec _ CountryUnitedStates = showString "us" data Subscription = SubscriptionConsumerReports | SubscriptionFT | SubscriptionForresterResearch | SubscriptionIEEEPublications | SubscriptionNewEnglandJournalOfMedicine | SubscriptionTheStreet | SubscriptionWallStreetJournal instance Show Subscription where showsPrec _ SubscriptionConsumerReports = showString "cr" showsPrec _ SubscriptionFT = showString "ft" showsPrec _ SubscriptionForresterResearch = showString "forrester" showsPrec _ SubscriptionIEEEPublications = showString "ieee" showsPrec _ SubscriptionNewEnglandJournalOfMedicine = showString "nejm" showsPrec _ SubscriptionTheStreet = showString "thestreet" showsPrec _ SubscriptionWallStreetJournal = showString "wsj" data License = LicenseDefault | LicenseAny | LicenseCCAny | LicenseCCommercial | LicenseCCModifiable instance Show License where showsPrec _ LicenseDefault = showString "" showsPrec _ LicenseAny = showString "any" showsPrec _ LicenseCCAny = showString "cc_any" showsPrec _ LicenseCCommercial = showString "cc_commercial" showsPrec _ LicenseCCModifiable = showString "cc_modifiable"