module Network.URL.Archiver (checkArchive) where
import Control.Monad (when, unless, void)
import Data.Char (isAlphaNum, isAscii)
import Data.List (isPrefixOf)
import Network.HTTP (getRequest, simpleHTTP)
import Network.URI (isURI)
import System.Random (getStdGen, randomR)
import Text.Printf (printf)
pingURL :: String -> IO ()
pingURL = void . simpleHTTP . getRequest
checkArchive :: String
-> String
-> IO ()
checkArchive email url = when (isURI url) (alexaToolbar url >> webciteArchive email url >> internetArchiveLive url >> wikiwixArchive url >> googleSearch url)
webciteArchive :: String -> String -> IO ()
webciteArchive email url = unless ("http://www.webcitation.org" `isPrefixOf` url) $
pingURL ("http://www.webcitation.org/archive?url="++url++ "&email="++email)
internetArchiveLive :: String -> IO ()
internetArchiveLive url = pingURL ("http://liveweb.archive.org/"++url)
alexaToolbar :: String -> IO ()
alexaToolbar url = do gen <- getStdGen
let rint = fst $ randomR (1000::Int,20000) gen
let payload = "wid=" ++ show rint ++ "&ref=&url=" ++ escape url
pingURL ("http://data.alexa.com/data/SbADd155Tq0000?cli=10&ver=spkyf-1.5.0&dat=ns&cdt=rq=0&"++payload)
return ()
wikiwixArchive :: String -> IO ()
wikiwixArchive url = pingURL ("http://archive.wikiwix.com/cache/?url="++url)
googleSearch :: String -> IO ()
googleSearch url = pingURL ("http://www.google.com/search?q=" ++ escape url)
escape :: String -> String
escape = concatMap escapeURIChar
escapeURIChar :: Char -> String
escapeURIChar c | isAscii c && isAlphaNum c = [c]
| otherwise = concatMap (printf "%%%02X") [c]