问:Google Photos Library API-我不知道它是如何工作的,有人吗?

时间:2018-07-31 15:06:24

标签: javascript google-photos google-photos-api

我正在尝试通过JavaScript从Google相册加载相册,但是我不了解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();

1 个答案:

答案 0 :(得分:0)

在开发Photos synching script的过程中,我花了几天的时间研究和测试Oauth 2.0 documentation。需要花很多钱,但是希望这个Cliff-notes版本会有所帮助:

  1. 应用设置,您首先需要在console.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-developers.google.com/photos中范围的空格分隔列表,表明您希望用户授予对这些功能的访问权限
    • redirect_uri-您拥有的URL,可以捕获传入的查询字符串
    • client_id-通过第1步中的开发人员配置
    • 状态-32个随机字节,以base64编码,并通过分别用“-”,“ _”,“””替换“ +”,“ /”,“ =”使URL友好
    • code_challenge-其他32个随机字节的SHA256哈希,以base64编码且对URL友好
    • code_challenge_method-“ S256”(无引号)
  3. 授权往返行程:将此组成的URI发送到用户的浏览器将使他们能够选择Google帐户并显示所请求的范围。提交该表单后,它将使用querystring(Method = GET)值重定向到您的redirect_uri:

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

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

这就是要点。您可以看一下我的Powershell脚本,以获取授权和身份验证流程的示例,尽管其余部分有些漏洞百出且不完整,但它们仍然有效。分页浏览专辑有时会出现401错误。