Использование Github Gist API от Haskell - PullRequest
4 голосов
/ 29 ноября 2009

Прежде всего, я никогда раньше не использовал API, и я никогда не использовал библиотеку HTTP в Haskell. Я не уверен, что я делаю здесь неправильно, так что, возможно, кто-то, кто знает, может помочь.

Я использую то, что я могу прочитать об этом: http://github.com/defunkt/gist/blob/master/gist.rb, а именно метод записи, чтобы написать это:

req = postRequest "http://gist.github.com/gists/new"

testPost = simpleHTTP $ req {rqBody = urlEncodeVars 
                                      [("login", "Raynes"),
                                       ("token","<removed>"),
                                       ("file_ext[gistfile1]",".hs"),
                                       ("file_name[gistfile1]","testfile"),
                                       ("file_contents[gistfile1]","main = putStrLn \"Hello, world!\"")]}

При запуске testPost выдает следующее:

Right HTTP/1.1 302 Found 
Server: nginx/0.7.61
Date: Sun, 29 Nov 2009 17:13:51 GMT
Content-Type: text/html; charset=utf-8
Connection: close
Status: 302 Found
Location: http://gist.github.com/gists/new
X-Runtime: 1ms
Content-Length: 98
Set-Cookie: _github_ses=BAh7BiIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNoSGFzaHsABjoKQHVzZWR7AA%3D%3D--884981fc5aa85daf318eeff084d98e2cff92578f; path=/; expires=Wed, 01 Jan 2020 08:00:00 GMT; HttpOnly
Cache-Control: no-cache

Насколько я знаю, Местоположение должно быть ссылкой на новый Gist. Тем не менее, новый Gist не сделан. Я не уверен, что я делаю неправильно. По сути, документации по Gist API нет, и единственное, что я могу предположить, это то, что я неправильно переводил Ruby. Как я уже говорил, я никогда раньше не использовал библиотеку HTTP.

Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 30 ноября 2009

Я понял это сам, прочитав пример использования Network.Browser.browse.

req = "http://gist.github.com/gists"

testPost = do
  (uri, rsp) <- Network.Browser.browse $ do
                  setAllowRedirects True
                  request $ formToRequest $
                          Form POST (fromJust $ parseURI req)
                                   [("file_ext[gistfile1]",".hs"),
                                    ("file_contents[gistfile1]","main = putStrLn \"Hello, world!\""),
                                    ("login","Raynes"),
                                    ("token","removed")]
  return uri
0 голосов
/ 30 ноября 2009

Ваш POST URL неверен, согласно источнику должен быть http://gist.github.com/gists source

...