使用 Delphi 在 Google 日历中创建事件 - 错误 401

Posted

技术标签:

【中文标题】使用 Delphi 在 Google 日历中创建事件 - 错误 401【英文标题】:Create event in Google Calendar with Delphi - Error 401 【发布时间】:2014-06-14 17:31:50 【问题描述】:

我的程序必须连接到 Google 日历并创建一个活动,但我收到一条错误消息,显示文本“令牌无效 - AuthSub 令牌的范围错误”

网址是http://www.google.com/calendar/feeds/default/owncalendars/full

这是我的代码:

Begin
  createXML := '<?xml version=''1.0'' encoding=''UTF-8''?>'#13#10 +
                  '<entry xmlns=''http://www.w3.org/2005/Atom'''#13#10 +
                  'xmlns:gd=''http://schemas.google.com/g/2005''>'#13#10 +
                  '<category scheme=''http://schemas.google.com/g/2005#kind'''#13#10 +
                  'term=''http://schemas.google.com/g/2005#event''></category>'#13#10 +
                  '<title type=''text''>' + title + '</title>'#13#10 +
                  '<content type=''text''>' + content + '</content>'#13#10 +
                  '<gd:transparency'#13#10 +
                  'value=''http://schemas.google.com/g/2005#event.opaque''>'#13#10 +
                  '</gd:transparency>'#13#10 +
                  '<gd:eventStatus'#13#10 +
                  'value=''http://schemas.google.com/g/2005#event.confirmed''>'#13#10 +
                  '</gd:eventStatus>'#13#10 +
                  '<gd:where valueString=''' + location + '''></gd:where>'#13#10 +
                  '<gd:when startTime=''' + EventStartTime + ''''#13#10 +
                  'endTime=''' + EventEndTime + '''></gd:when>'#13#10 +
                  '</entry>';

  HTTP:=THTTPSend.Create;
  url:=Edit3.Text;
  WriteStrToStream(HTTP.Document,EncodeURL(createXML));
  HTTP.Headers.Add('Authorization: OAuth '+OAuth.Access_token);
  HTTP.Headers.Add('GData-Version: 2');
  HTTP.MimeType:=('application/atom+xml');
  if HTTP.HTTPMethod('POST',url) then
  XML:=HTTP.Document;
  Memo2.Lines.LoadFromStream(XML);
End;

这是我的 OAuth 连接代码...

 Const
    client_id=%s&client_secret=%s&code=%s&redirect_uri=%s&grant_type=authorization_‌​‌​code'; 

.....

        procedure TForm2.Button4Click(Sender: TObject); var HTTP:THTTPSend; 
        begin HTTP:=THTTPSend.Create; 
        try 
        HTTP.Headers.Add('Authorization: OAuth '+OAuth.Access_token); 
        HTTP.Headers.Add('GData-Version: 2'); 
        if       HTTP.HTTPMethod('GET','google.com:443/calendar/feeds/default/allcalendars/full') then 
        XML:=HTTP.Document; 
        End;

非常感谢您的宝贵时间。

用户:谷歌翻译

【问题讨论】:

如果您改为添加与 OAuth.Access_token 相关的代码会很有用。 @AMS 添加 Oauth Connect 的代码,完成。 【参考方案1】:

Here 您可以阅读协议,包括它需要的授权标头。即使使用您添加的代码,仍然不清楚 OAuth 对象是如何构建的。

但是,我不建议您继续使用 GData API,因为它已被弃用。考虑使用基于 JSON 的 v3 版本以及新的身份验证方法。 API 规范和用法也是新的,因此您需要投入一些时间。

【讨论】:

谢谢,目前我正在使用 ClientLogin 方法,但很快就会通过 OAuth 2.0

以上是关于使用 Delphi 在 Google 日历中创建事件 - 错误 401的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 android 使用日历 API 在谷歌日历上添加事件?

从电子表格创建 Google 日历事件但防止重复

Google 日历推送通知 - 发送到源本身的通知

未在服务帐户谷歌日历 api php 中创建环聊链接

从Google服务帐户编辑Google日历活动:403

来自Google日历的即将发生的事件在python中