2017-05-12 1 views
0

기본적으로 Google 캘린더 및 거의 모든 캘린더 응용 프로그램에서 사용되는 iCalendar 형식을 구문 분석해야합니다.iCalendar 형식 구문 분석

나는이 패키지 iCalendar Hackage
을 발견하지만 누군가가 내가 뭘 잘못 말해 줄 수 있다면, 그것은 좋은 것입니다,이 패키지에있는 parseICalendar 함수를 사용하는 방법을 알아낼 수 없습니다.

주로 나는 유형에 대한 인수를 구성하는 방법을 알아낼 수 없습니다 내 노력

parseICalendar :: DecodingFunctions 
       -> FilePath --^Used in error messages. 
       -> ByteString 
       -> Either String ([VCalendar], [String]) 

DecodingFunctions

:

module CalendarReader 
(getCalendar 
, getSummary 
) where 

{-# LANGUAGE OverloadedStrings #-} 

import qualified Data.ByteString.Lazy as B  -- package "bytestring" 
import qualified Text.ICalendar as ICal   -- package "iCalendar" 
import qualified Data.Map as Map    -- package "containers" 
import Network.HTTP.Simple      -- package "http-conduit" 


import qualified Time       -- local module 
import Constants 

getCalendar :: IO B.ByteString 
getCalendar = do 
    request <- parseRequest $ "GET" ++ calendarURL 
    response <- httpLBS request 
    return $ getResponseBody response 

getSummary :: B.ByteString -> Time.DateTime -> Int -> String 
getSummary cal dateTime dayOffset = summary 
    where 
    summary = "Event Summary" 
    ((ICal.VCalendar { ICal.vcEvents = vcEvents' }), _) = ICal.parseICalendar ?missingArgument? logFile cal 

답변

0

DecodingFunctions가하도록되어 당신의 ByteString (바이너리 배열)을 변환하는 기능을 포함 Text (유니 코드 문자의 문자열을 나타냄) 및 하나는 대소 문자를 구분하지 않는 표현으로 동일하게 처리합니다 (비교 목적으로 가정). 당신의 iCalendar는 경우

parseICalendar def logFile cal 

을 (어딘가에서 DEF를 가져올 것을 잊지 마세요) : 당신을 iCalendar는 "정상"이며, UTF-8로 인코딩되어있는 경우, 당신은 단순히 DecodingFunctionsDefault 인스턴스를 사용할 수 있습니다 Utf-8에 없다면 Data.Text.Lazy.Encodingmk에서 의 decode... 함수를 사용해야합니다. Utf16의 경우 :

decodings = DecodingFunctions decodeUtf16LE (mk . decodeUtf16LE) 

오른쪽 수입품이 있습니다.

+0

그래,이 작품. def에 대해 Data.default를 가져와야한다는 것을 알았지 만 나는 여분의 시간이 필요했다. – BinaryHexer