通过RESTful方法验证Google API

时间:2012-06-08 13:52:10

标签: json authentication rest google-calendar-api

我需要将标准化电子邮件中解析的事件自动发布到共享的Google日历中。解析电子邮件以创建我可以做的JSON对象(并且已经完成)。但我从来没有真正使用 JSON - 我不知道如何将其提交给Google日历。我已经阅读并重新阅读了Google的文档,但我并不清楚。首先,我不明白如果没有用户真正在那里输入接受,如何完成身份验证,这将破坏这个应用程序的目的。

基本上我是一名设计师成为业余开发人员,而且我在PHP方面做得最好,Javascript落后于其他人。我已经构建了一个web应用程序,它会定期调用一个php文档的HTTP请求,该文档应该发现包含事件的新电子邮件,解析它们并发布它们包含的事件。除了发布部分之外,其中的每个部分都已准备好并等待。如果有人能帮我理解概念所需要的安静,自动程序发布到Google日历,我将非常感激。到目前为止 - 只是试图让我的脚踏入水中 - 这就是我所要做的:

<?php 
$url = "https://www.googleapis.com/calendar/v3/calendars/".$calendar."/events?sendNotifications=false&key={".$api_key."}";
?>

<script>
function goGoogle() {
data = "a json object will go here";
xhr = new XMLHttpRequest();
xhr.open("POST", "<?php echo $url?>", true);
xhr.setRequestHeader("Content-type", "application/json");
xhr.send(data); 
xhr.onreadystatechange = function() {
    alert(xhr.responseText);
}
}
</script>
<button onclick="goGoogle()">Sigh</button>

alert(xhr.responseText)来电,我在第2阶段和第3阶段得到了这个:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "required",
    "message": "Login Required",
    "locationType": "header",
    "location": "Authorization"
   }
  ],
  "code": 401,
  "message": "Login Required"
 }
}

现在,我意识到我实际上没有提供任何身份验证,所以我并不感到惊讶它失败了。问题是我不知道如何进行身份验证。救命!? :)

1 个答案:

答案 0 :(得分:1)

首先,确保我理解 - 您有一个应用程序可以接收来自不同用户的电子邮件,并且您希望将这些电子邮件中的内容发布到需要身份验证的共享Google日历中(否则您可以将这些事件发布到,比方说,我根本不喜欢的日历。此外,您的应用需要在不涉及最终用户的情况下执行此操作。但是,您可以对共享日历进行一些凭据/身份验证,您可以在应用中对其进行编码。 (否则你可以再次发布到我的日历)。最后,您在日历中创建的条目将由您的应用程序“拥有”(也就是说,您不会代表其中一个用户输入它们 - 因为您没有他们的凭据,而且他们是无法获得许可)。

如果所有这些都是正确的,我认为您可以开始的地方是对Google Calendar API使用ClientLogin身份验证。相关文件位于: https://developers.google.com/google-apps/calendar/v2/developers_guide_protocol#AuthClientLogin
您的应用将使用您访问共享日历的凭据/身份验证信息。

该页面可能还有其他信息。

如果我误解了你的问题,或者我的回答过于模糊,我表示歉意。我没有在代码中访问CalendarAPI,但过去几周我一直在处理身份验证和OAuth2代码。