Как загрузить документ Google Docs в Haskell? - PullRequest
2 голосов
/ 24 марта 2012

Я хочу создать документ Google Docs из Haskell, поэтому в основном я хочу сделать в Haskell то, что делает эта маленькая программа на C # (адаптировано из примера программы Google):

using Google.GData.Documents;
using Google.GData.Client;

namespace DocListUploader
{
    public class GDocConsole
    {
        static void Main()
        {
            var user = "...";
            var passwd = "...";
            var file = "...";

            service = new DocumentsService("DocListUploader");
            service.setUserCredentials(user, passwd);
            service.UploadDocument(file, null);
        }
    }
}

Из GoogleОписание Docs API здесь и этот SO-ответ здесь Я понял, что это "всего лишь" вопрос отправки пары HTTP POST и выполнения аутентификации OAuth, но только как?Кто-нибудь уже сделал это и имеет несколько примеров кода для меня ...?

РЕДАКТИРОВАТЬ: Все еще не мог понять, как использовать библиотеки oauth, поэтому я просто написал небольшую оболочку C #:

using Google.GData.Documents;
using Google.GData.Client;

public class GoogleDoc
{
    public static int Upload(string user, string passwd, string file)
    {
        try
        {
            var service = new DocumentsService("DocListUploader");
            service.setUserCredentials(user, passwd);
            service.UploadDocument(file, null);

            return 0;
        }
        catch
        {
            return -1;
        }
    }
}

и вызвал эту оболочку из Haskell через hs-dotnet:

module Upload where

import NET

upload :: String -> String -> String -> IO (Int)
upload user passed file = 
   invokeStatic "[GoogleDoc.dll]GoogleDoc" "Upload" (user, passed, file)

testLocal :: IO ()
testLocal = do
  let user = "..."
  let passwd = "..."
  let file = "..."
  returnCode <- upload user passwd file
  putStrLn (show returnCode)

1 Ответ

4 голосов
/ 24 марта 2012

Вы можете использовать библиотеку haskell-oauth , чтобы выполнить oauth и загрузить документацию, как уже упоминалось, вы можете попробовать пакет http от Haskell.

...