Drkcore

08 02 2010 Haskell Tweet

HaskellでPitを使う

perlにもConfig::Pitあるし、Pythonにもあるしという状況なので、Haskellでネットワークのちょろっとしたものを書くときにもパスワードをハードコードしないで、pitのやつを使いたかった。

module HsPit (
            pitGet,
            pitSet
           )
where

import System.FilePath ((</>))
import System.Directory
import Data.Yaml.Syck

pitGet :: String -> IO [(String,String)]
pitGet query = do
  home <- getHomeDirectory
  do yaml <- parseYamlFile (home </> ".pit" </> "default.yaml")
     case n_elem yaml of
       EMap list -> return $ map (\keyval -> (,) ((fromYaml . fst) keyval) ((fromYaml . snd) keyval)) $ concatMap (fromEMap . snd) $ filter checkElem list
           where checkElem ynode = ((n_elem . fst) ynode) == (EStr (packBuf query))
       otherwise -> return []
       where 
         fromYaml MkNode {n_elem=EStr str}   = unpackBuf str
         fromEMap MkNode {n_elem=EMap nodes} = nodes

pitSet = error "Not implemented"

HsSyckの使い方はPugsのYamlコードを参考にした。

で、例えばtwitterでつぶやくときには

import Network.HTTP
import Network.URI
import Codec.Binary.Base64.String
import Data.Maybe
import HsPit

tweet username password msg = simpleHTTP req where 
    req = Request uri POST [ah] "" where
        ah = Header HdrAuthorization $ "Basic " ++ encode (username ++ ":" ++ password)
        uri = fromJust $ parseURI $ "http://twitter.com/statuses/update.xml?" 
              ++ urlEncodeVars [("status", msg)]

main = do 
  userdata <- pitGet "twitter"
  case lookup "username" userdata of Just username ->
                                         case lookup "password" userdata of Just password ->
                                                                                tweet username password "tWeet"

なんかごちゃごちゃとしてしまった。

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021