我正在尝试访问Google API v3日历列表,但我不断收到401/404响应,尽管我为用户提供了有效的AccessToken
(我完成了Web服务器应用程序的OAuth2协议,并收到https://www.googleapis.com/auth/calendar权限)
这方面很难找到好的文档,谷歌网站本身也不是很有帮助,搜索中充满了旧的v2信息或使用SDK。通常我可以将python回复翻译成c#,但在这种情况下,即使这样也帮不了我。
所以我很紧张,但我可能忘记了一些非常简单的事情,比如缺少参数之类的,所以如果有人能快速查看一下这段代码并告诉我我做错了什么,我将不胜感激。
var applicationKey = moduleModel.Application.Key;
var userID = moduleModel.User.UserID;
var accessToken = moduleModel.User.AccessToken.Token;
// It doesn't seem to make any difference whether I use the querystring
// parameter or the request header to specify the access_token
var sendAccessTokenAsHeader =
!(Request.QueryString["SendAccessTokenAsHeader"] == "0");
// I tried navigating to a specific user but it results in a 404 Not Found
var requestSpecificUserID =
Request.QueryString["RequestSpecificUserID"] == "1";
// Including or omitting my API_KEY doesn't seem to make any difference
var sendApplicationKey =
!(Request.QueryString["SendApplicationKey"] == "0");
var urlBuilder = new System.Text.StringBuilder();
urlBuilder.Append("https://");
urlBuilder.Append("www.googleapis.com");
if (requestSpecificUserID)
{
urlBuilder.Append
(string.Format("/calendar/v3/users/{0}/calendarList", userID));
}
else
{
urlBuilder.Append
("/calendar/v3/users/me/calendarList");
}
var parameterJoiner = "?";
if (sendApplicationKey)
{
urlBuilder.Append
(
string.Format
(
"{0}{1}={2}",
parameterJoiner,
"key",
HttpUtility.UrlEncode(applicationKey)
)
);
parameterJoiner = "&";
}
if (!sendAccessTokenAsHeader)
{
urlBuilder.Append
(
string.Format
(
"{0}{1}={2}",
parameterJoiner,
"access_token",
HttpUtility.UrlEncode(accessToken)
)
);
parameterJoiner = "&";
}
var httpWebRequest = HttpWebRequest.Create(urlBuilder.ToString())
as HttpWebRequest;
httpWebRequest.CookieContainer = new CookieContainer();
if (sendAccessTokenAsHeader)
{
httpWebRequest.Headers["Authorization"] = string.Format
(
"Bearer {0}",
accessToken
);
}
// GetSafeResponse is just an extension method to catch the WebException
// when the HttpStatusCode != OK
var response = httpWebRequest.GetSafeResponse();
// returns 401 (requestSpecificUserID = false)
// or 404 (requestSpecificUserID = true)
var responseText = response.GetResponseText();
return responseText;
提前感谢您!
我通过阅读这个问题找到了答案。
显然,尽管Google文档中根本没有提到它,但参数minAccessRole是必需的。
工作示例:
var accessToken = moduleModel.User.AccessToken.Token;
var urlBuilder = new System.Text.StringBuilder();
urlBuilder.Append("https://");
urlBuilder.Append("www.googleapis.com");
urlBuilder.Append("/calendar/v3/users/me/calendarList");
urlBuilder.Append("?minAccessRole=writer");
var httpWebRequest = HttpWebRequest.Create(urlBuilder.ToString())
as HttpWebRequest;
httpWebRequest.CookieContainer = new CookieContainer();
httpWebRequest.Headers["Authorization"] =
string.Format("Bearer {0}", accessToken);
var response = httpWebRequest.GetSafeResponse();
var responseText = response.GetResponseText();
return responseText;
我是Google日历API和PHP的新手,我似乎不知道如何实现我想做的事情。基本上,我想从calendarID为的google日历中检索事件webapps098@gmail.com.我当前的代码是这样的 我收到错误: 异常Google_ServiceException消息错误调用GEThttps://www.googleapis.com/calendar/v3/calendars/webapps0
我曾经请求caldav服务器为给定用户提供所有定义的日历。这适用于Fruux/ownCloud(Sabre)和GCalendar(经典方法)。请求如下: 移动到Google OAuth2有不同的调用,ulrstr:类似https://apidata.googleusercontent.com/caldav/v2/{calid}/user的内容 这里的“calid”必须是一个特定的日历[1]iis说
我是新手,但我想将google API与PHP结合使用,但它不起作用。我已经创建了
我正在尝试检索在域
我从快速入门开始(https://developers.google.com/google-apps/calendar/quickstart/python)而且效果很好。然后我尝试用这个指南插入事件(https://developers.google.com/google-apps/calendar/create-events)。我将此代码添加到quickstart的代码中,但出现错误。如何查看我
我希望你能帮帮我。 我正在尝试使用Oauth2身份验证连接到Google(日历)API。 为此,我遵循了以下步骤: 通过Google开发者控制台注册应用程序 使用composer(google-api-php-client)安装客户端库 将以下脚本放置在供应商文件夹中: 不幸的是,在单击“接受”按钮进行身份验证后,我得到了一个错误: 到目前为止,谷歌的研究并没有帮助。 可能的解决办法: > 正确设