【问题标题】:Access Google drive spreadsheets with drive API [closed]使用驱动器 API 访问 Google 驱动器电子表格 [关闭]
【发布时间】:2014-12-13 18:13:44
【问题描述】:

我想制作一个网络应用程序,它使用 Google Drive API 来访问位于他的 Google Drive 上的朋友的电子表格。它将读取/写入工作表,仅此而已,只有该工作表。可以说,过去两天我一直在阅读 Google Drive API 的文档,但几乎没有什么可展示的。无论我阅读了多少示例,我都无法理解它,因为 API 与示例显示的内容不匹配。我发现必须有 4-5 种不同的方式来使用 OAuth2.0 进行身份验证,但没有一种方法可以与我从 NuGet 包管理器(谷歌表示获取最新 API 的地方)下的 Drive API 一起使用。没有任何意义。 OAuth2Parameters 类不存在,所以我不知道如何使用谷歌提供的示例进行身份验证。与其他示例类似的方法以相同的结果结束,例如 Google 的 DrEdit。谁能提供一些见解?电子表格将由我的朋友(必要时我)托管,而 Web 应用程序将由 AppHarbor 等免费服务托管。非常感谢。

【问题讨论】:

  • 我感受到了你的痛苦,Google 文档是我见过的最糟糕的并且很少维护,但这不是这类问题的格式 - 它太宽泛了。从 Nuget 获取 Google .NET 客户端库,并为其获取 Drive SDK。然后查看 .NET 客户端库 Google 代码网站上的文档。它们比官方所谓的“文档”要好得多
  • 如果您指的是:code.google.com/p/google-api-dotnet-client,那么恐怕所有文档都已移至我刚刚查看的页面...没有意义的页面已经过时了。
  • 更新电子表格,有 2 个选项:1) google-apps-script (不需要 Oauth2) 2) google-sparesheet-api developers.google.com/google-apps/spreadsheets ---- 是的 OAuth2 内容一个痛苦,每个人看起来都在挣扎。我从 DrEdit 中提取了我的 OAuth2 代码,非常混乱,但有效。
  • 简而言之,如果您需要对电子表格本身进行操作(数据输入/输出、格式化、图表等),请使用 Google Sheets API (developers.google.com/sheets),如果您是在文件级别使用表格,然后使用 Google Drive API (developers.google.com/drive)。如果您仍然对身份验证和使用 Google API 感到困惑,请查看我在此 SO 答案中发布的所有视频和阅读资源以确保清晰:stackoverflow.com/a/38359875/305689(大多数代码在 Python 中,因此在心理上转换为 C#)

标签: c# .net google-api google-spreadsheet-api google-drive-api


【解决方案1】:

我刚刚尝试了quickstart guide 中的代码,它使用Google.Apis.Drive.v2 nuget 包完全没有任何问题。正如您所说,身份验证有很多不同的方法,并且快速入门中的代码不适合 Web 应用程序,但它们都应该在最新的 SDK 中可用。详情请参阅web server authorization 页面。

认为OAuth2Parameters 类属于 Google API 的“旧”gdata 方法;使用它的示例可能适用于旧版本的 Drive SDK。

我不想在测试中创建文件,所以我将示例代码修改为仅列出文件:

using System;
using System.Threading;

using Google.Apis.Auth.OAuth2;
using Google.Apis.Drive.v2;
using Google.Apis.Services;

class Test
{
    static void Main(string[] args)
    {
        UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
            new ClientSecrets
            {
                ClientId = /* YOUR CLIENT ID HERE */,
                ClientSecret = /* YOUR CLIENT SECRET HERE */,
            },
            new[] { DriveService.Scope.Drive },
            /* USER TO AUTHORIZE */,
            CancellationToken.None).Result;

        var service = new DriveService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = "Stack Overflow Drive test",
        });

        var response = service.Files.List().Execute();
        foreach (var item in response.Items)
        {
            Console.WriteLine(item.Title);
        }
    }
}

【讨论】:

  • 感谢您的回复。就我而言, 是什么?会是用户名吗?访问 API?
  • @dangerisgo:好吧,我将它设置为我的电子邮件地址......我承认我并不完全清楚这与我在浏览器中获得的用户选择有何对应 - 但如果你正在写一个无论如何,网络应用程序,那部分不会那么相关。这是一个很好的起点来检查一切是否正常。
  • 这是我的网络应用程序的一个很好的起点。非常感谢乔恩的帮助!
猜你喜欢
  • 2015-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多