Экспорт листа Google с использованием REST в клиентской среде .net

#.net #webclient #google-drive-api #webrequest

#.net #webclient #google-drive-api #webrequest

Вопрос:

Я ищу способ программного получения информации (время последнего изменения), а затем экспортировать и загрузить файл Google Sheets в формат cvs.

Я уже нашел способ сделать это из браузера:

 https://spreadsheets.google.com/feeds/download/spreadsheets/Export?
key={GOOGLE_SPREADSHEET_KEY}amp;hlamp;exportFormat=csvamp;gid={REQUESTED_SHEET_NUMBER}
 

Где GOOGLE_SPREADSHEET_KEY и REQUESTED_SHEET_NUMBER могут быть прочитаны из строки браузера во время стандартной навигации.

но, очевидно, мой браузер аутентифицируется с помощью файла cookie, и я не уверен, как воспроизвести эту ситуацию в консольном приложении.

Причина, по которой я хотел бы избежать использования Google Drive SDK или Google Spreadsheet SDK, заключается в отсутствии исходного кода, и поэтому я не смог бы перенести приложение с помощью Mono.

Обновление: мне удалось получить доступ к своему файлу, установив общий доступ к общедоступному просмотру с диска, это отлично подходит для моих целей, и я хотел бы поделиться им, даже если это не полное решение, если вы хотите сохранить доступ к просмотру файлов в частном порядке.

 static void Main(string[] args)
{
    var file_id = GOOGLE_SPREADSHEET_KEY;
    var sheet_number=REQUESTED_SHEET_NUMBER;
    var export_format="csv";
    string unf_url="https://spreadsheets.google.com/feeds/download/spreadsheets/Export?key={0}amp;hlamp;gid={1}amp;exportFormat={2}";
    string url = string.Format(unf_url, file_id, sheet_number, export_format);

    var request=WebRequest.Create(url);
    var result=request.BeginGetResponse(handleResponse,request);
    Console.ReadKey();
}


private static void handleResponse(IAsyncResult arg)
{
    var request = (arg.AsyncState as WebRequest);
    var stream = request.EndGetResponse(arg).GetResponseStream();
    using (System.IO.StreamReader reader = new System.IO.StreamReader(stream))
    {
        System.Diagnostics.Debug.Write(reader.ReadToEnd());   
    }
}
 

Обновление 2: похоже, это работает только с недавно обновленным форматом листа GSheets (автономные листы). Поэтому, если вы видите «ccc» в URL-адресе, вам нужно скопировать содержимое в совершенно новый файл.

Комментарии:

1. Что вы подразумеваете под отсутствием или исходным кодом? Drive api работает из любого места, где вы можете выполнить запрос https.

2. Я неправильно указал Google Drive Api для Google Drive Sdk, сейчас исправляю

3. в данном случае это не так. это API электронных таблиц Google, но в API drive, вероятно, есть способ экспортировать напрямую, вместо того, чтобы читать фид ячейки

4. Да, вся процедура потока сервера OAuth2 является излишней для рассматриваемой проблемы. Похоже, что передача файла в общедоступный доступ и использование строки get, которую я нашел раньше, работает достаточно хорошо.

5. Да, я собирался предложить это