0

我正在尝试通过 javascript 从 Google Photos 加载相册,但我不明白 api 是如何工作的,我开始阅读Google Photos API但没有运气。是否有我可以遵循的代码参考来获取我的相册的照片列表?

我找到了这个但不起作用

<script>   

var scopeApi = ['https://www.googleapis.com/auth/photoslibrary', 'https://www.googleapis.com/auth/photoslibrary.readonly', 'https://www.googleapis.com/auth/photoslibrary.readonly.appcreateddata'];

function onAuthPhotoApiLoad() {
    window.gapi.auth.authorize(
        {
            'apiKey': 'MY_API_KEY',
            'client_id': "MY_CLIEND_ID",
            'scope': scopeApi,
            'immediate': false
        },
        handlePhotoApiAuthResult);
}


function handlePhotoApiAuthResult(authResult) {
    if (authResult && !authResult.error) {
        oauthToken = authResult.access_token;

            GetAllPhotoGoogleApi();
    }
}


function GetAllPhotoGoogleApi() {
    gapi.client.request({
        'path': 'https://photoslibrary.googleapis.com/v1/albums',
        'method': 'POST' 
    }).then(function (response) {
        console.log(response);     

    }, function (reason) {
        console.log(reason);
    });
}

onAuthPhotoApiLoad();

4

1 回答 1

2

在开发照片同步脚本的过程中,我花了几天时间研究和测试Oauth 2.0 文档。有很多东西需要吸收,但希望这个 Cliff-notes 版本会有所帮助:

  1. 应用程序设置您首先需要通过控制台.developers.google.com /上的开发者控制台获取应用程序配置,并确保共享照片数据。

    您将得到一个如下所示的 JSON 文件

        {"installed":{
         "client_id":"xxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
         "project_id":"xxxx-xxxxxxxx-123456",
         "auth_uri":"https://accounts.google.com/o/oauth2/auth",
         "token_uri":"https://accounts.google.com/o/oauth2/token",
         "auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs",
         "client_secret":"xxxxxxxxxxxxxxxxxxxxxxxx",
         "redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"]
         }}
    
  2. 请求授权代码- 然后您需要编写使用这些值来获取授权令牌的代码 - 基本上是一个字符串,表示用户已允许您的应用程序访问他们的数据。使用查询字符串中的这些值向 auth_uri 端点发送请求:

    • scope - developer.google.com/photos中以空格分隔的范围列表,表示您希望您的用户授予对这些功能的访问权限
    • redirect_uri - 您拥有的可以捕获传入查询字符串的 URL
    • client_id - 来自您在步骤 1 中的开发人员配置
    • state - 32 个随机字节,base64 编码并通过分别将 "+","/","=" 替换为 "-","_","" 使 URL 友好
    • code_challenge - 另一个 32 个随机字节的 SHA256 散列,base64 编码并使 URL 友好
    • code_challenge_method - “S256”(无引号)
  3. 授权往返将这个组合的 URI 发送到用户的浏览器将允许他们选择一个 Google 帐户并显示正在请求的范围。提交该表单后,它将使用 querystring (Method = GET) 值重定向到您的 redirect_uri:

    • 代码 - 可用于请求访问令牌的授权代码
    • state - 一个可用于验证哈希的字符串
  4. 获取 access_token最后,您将授权代码交换为 OAuth AccessToken,您将把它放入所有 API 请求的 HTTP 标头中。请求从步骤 1 转到 token_uri 并具有以下请求正文(方法 = POST)参数:

    • 代码 - 您从第 3 步中的重定向查询字符串中获得
    • redirect_uri - 与上面相同,但可能不会使用
    • client_id - 来自配置
    • code_verifier - 散列之前的 code_challenge
    • client_secret - 来自配置
    • 范围 - 这里可以为空
    • grant_type - “authorization_code”(无引号)
  5. 使用访问令牌该请求的响应将包含一个 access_token 和一个 refresh_token。您可以在 API 请求的 HTTP 标头中立即使用短暂的 access_token。存储长期存在的 refresh_token,以便您无需再次授权即可获得新的 access_token。

这就是它的要点。您可以查看我的 Powershell 脚本,了解授权和身份验证流程的示例,尽管其余部分有一些错误和不完整,但这些流程仍然有效。翻阅相册有时会出现 401 错误。

于 2018-08-21T22:13:26.010 回答