kenkovlog

Haskell, Python, Vim, ...

Haskellでweb上の画像を取得する。

Haskellでweb上の画像を取得します。
ここでは、Googleの画像を取得してきてみます。

import Network.HTTP
import Network.Browser (browse, request, request)
import Data.Maybe
import Network.URI
import qualified Data.ByteString.Lazy as L


main :: IO ()
main = do
   -- まず、pngのバイナリファイルをダウンロードしてくる。
   x <- binaryString
   -- pngファイルをファイルに書き出す。
   L.writeFile "google.png" x

-- Requestの作成
-- バイナリを取得してくるため、rqBodyの型をL.ByteStringにする
rq :: Request L.ByteString
rq = Request {
       rqURI = fromJust $ parseURI "http://www.google.com/intl/en_com/images/srpr/logo1w.png",
       rqMethod = GET,
       rqHeaders = [],
       rqBody = L.empty}

-- pngのバイナリの取得
binaryString :: IO L.ByteString
binaryString = do
  (uri, res) <- browse $ request $ rq
  return $ rspBody res