· 7 years ago · Sep 21, 2018, 07:54 AM
1-- OAuth Request 生æˆ
2oauthRequest :: OAuth -> String -> String -> [Parameter] -> IO String
3oauthRequest oauth url token parameter = do
4 timestamp <- show . (\(TOD i _) -> i) <$> getClockTime -- タイムスタンプå–å¾—
5 nonce <- show <$> randomRIO (0, maxBound::Int) -- 乱数å–å¾—
6 let authorizationParameters_ = parameter ++ [
7 ("oauth_consumer_key", consumerKey oauth),
8 ("oauth_nonce", nonce),
9 ("oauth_timestamp", timestamp),
10 ("oauth_signature_method", "HMAC-SHA1"),
11 ("oauth_version", "1.0")
12 ] -- å„種基本パラメータをセット
13 signature = genSignature (consumerSecret oauth) token POST url authorizationParameters_ -- ç½²å生æˆ
14 authorizationParameters = authorizationParameters_++[("oauth_signature", signature)] -- ç½²åをパラメータã«åŠ ãˆã‚‹
15 authorizationHeader = ("Authorization: OAuth "++) . urlEncodeParams $ authorizationParameters -- Authorizationヘッダ生æˆ
16 contentLengthHeader = "Content-Length: 0"
17 -- Curlã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åˆæœŸåŒ–
18 curl <- initialize
19 -- Requestã‚’é€ä¿¡
20 setopts curl [CurlHttpHeaders [authorizationHeader, contentLengthHeader],
21 CurlPostFieldSize 0,
22 CurlPost True]
23 respBody <$> (do_curl_ curl url [] :: IO (CurlResponse_ [(String, String)] String))
24
25-- APIリクエスト
26apiRequest :: OAuth -> String -> RequestMethod -> [Parameter] -> IO String
27apiRequest oauth api method args = do
28 let url = apiRequestURL api
29 accessurl = if method == POST then url else url ++ "?" ++ urlEncodeVars args -- URI
30 timestamp <- show . (\(TOD i _) -> i) <$> getClockTime -- タイムスタンプå–å¾—
31 nonce <- show <$> randomRIO (0, maxBound::Int) -- 乱数å–å¾—
32 let authorizationParameters_ = [
33 ("oauth_token", accessToken oauth),
34 ("oauth_consumer_key", consumerKey oauth),
35 ("oauth_nonce", nonce),
36 ("oauth_timestamp", timestamp),
37 ("oauth_signature_method", "HMAC-SHA1"),
38 ("oauth_version", "1.0")] -- å„種基本パラメータをセット
39 signature = genSignature (consumerSecret oauth) (accessTokenSecret oauth) method url (args ++ authorizationParameters_) -- ç½²å生æˆ
40 authorizationParameters = authorizationParameters_++[("oauth_signature", signature)] -- ç½²åをパラメータã«åŠ ãˆã‚‹
41 authorizationHeader = ("Authorization: OAuth "++) . urlEncodeParams $ authorizationParameters -- Authorizationヘッダ生æˆ
42 contentLengthHeader = "Content-Length: " ++ (show . length . urlEncodeVars $ args)
43 headers = if method==POST then [authorizationHeader, contentLengthHeader] else [authorizationHeader]
44 -- Curlã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹åˆæœŸåŒ–
45 curl <- initialize
46 -- Requestã‚’é€ä¿¡
47 setopts curl [CurlHttpHeaders headers]
48 when (method == POST) $ setopts curl [CurlPostFieldSize 0, CurlPost True]
49 respBody <$> (do_curl_ curl accessurl [] :: IO (CurlResponse_ [(String, String)] String))