Hatena::ブログ(Diary)

tsurushuuの日記

2011-09-24

haskellでtwitter APIを使う

| 17:22

twitterのデータはJSONで取得出来る

https://dev.twitter.com/docs/api/1/get/help/languages

http://twitter.com/statuses/public_timeline.json


HaskellJSON

http://d.hatena.ne.jp/eagletmt/20090419/1240132123

http://www.amateurtopologist.com/blog/2010/11/05/a-haskell-newbies-guide-to-text-json/

module Main where

import Text.JSON

main = do
  print "test"
  -- Stringから
  print $ (decode "[123, 3.1, [1,2,3], \"abc\"]" :: Result JSValue)
  print $ (decode "[{}]" :: Result JSValue)
  print $ (decode "{}" :: Result JSValue)
  print "---"
  print $ (decode "[[\"A\", \"B\"], {\"C\":0}]" :: Result JSValue)
  print $ (decode "[[\"A\", \"B\"], {\"C\":0}]" :: Result JSValue)
  print $ (decode "{\"test\":0.3}" :: Result JSValue)
  print "---"
  print $ (decode "{\"test\":3" :: Result JSValue)
  print $ (decode "{\"test\"" :: Result JSValue)
  print "---"
  print $ (decode "{\"test\":0.3}" :: Result JSValue)
  print $ (valFromObj "test" :: JSObject JSValue -> Result Float) $ (\(Ok x) -> x) (decode "{\"test\":0.3}" :: Result (JSObject JSValue) )
  print "---"
  -- ファイルから
  json <- readFile "test.json"
  print $ (decode json :: Result JSValue)

HaskellHTTP

http://hackage.haskell.org/package/HTTP

http://d.hatena.ne.jp/kenkov/20110430/1304162021

テストコード

当たり障りのなさそうでデータ構造も簡単な、languages.jsonというデータから取得

module Main (main) where

import Data.List (intercalate)
import Network.HTTP (getRequest, getResponseBody, simpleHTTP)
import Text.JSON (JSObject, JSValue, decode, valFromObj, Result (Ok))
import Control.Monad ( (>=>) )

data TW_Langage = Language { name :: String, code :: String, status :: String }

instance Show TW_Langage where
    show l = intercalate " : " [name l, code l, status l]

makeLanguage :: JSObject JSValue -> Result TW_Langage
makeLanguage lang = do
  name <- valFromObj "name" lang
  code <- valFromObj "code" lang
  status <- valFromObj "status" lang
  return Language {name = name, code = code, status = status}

parseLang :: String -> Result [TW_Langage]
parseLang = decode >=> mapM makeLanguage

fromOk :: Result t -> t
fromOk (Ok x) = x

main :: IO ()
main = do
  body <- simpleHTTP (getRequest "https://api.twitter.com/1/help/languages.json") >>= getResponseBody
  -- putStrLn $ body
  putStrLn $ unlines $ map show $ fromOk $ parseLang body

game botgame bot 2011/11/30 15:25 もう、mmorpgゲームをいちいち手でやるのはやめましょう。
自動狩りが出来るオートマウスで楽にゲームを楽しみませんか?
オートマウスにやらせた時間には他のことをやったりしましょう!
BANされにくいので安心して使えます。
詳しい機能は下記のホームページで確認出来ますのでご参考までに。。。
(www.automouse.jp)

トラックバック - http://d.hatena.ne.jp/tsurushuu/20110924/1316852543
Connection: close