YouTube API - API 密钥和身份验证凭据来自不同的项目
YouTube API - The API Key and the authentication credential are from different projects
我正在尝试使用我的 C# 应用程序从 youtube 获取视频,使用“https://youtube.googleapis.com/youtube/v3/search?forMine=true&order=date&type=video&part=snippet&key={key}& access_token={token}" 但我收到此错误:
"error": {
"code": 400,
"message": "The API Key and the authentication credential are from different
projects.",
"errors": [
{
"message": "The API Key and the authentication credential are from
different projects.",
"domain": "global",
"reason": "badRequest"
}
],
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.Help",
"links": [
{
"description": "Google developer console API key",
"url":
"https://console.developers.google.com/project/{MyProjectCode}/apiui/credential"
}
]
},
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "CONSUMER_INVALID",
"domain": "googleapis.com",
"metadata": {
"consumer": "projects/{MyProjectCode}",
"service": "youtube.googleapis.com"
}
}
]
}
上只能看到 1 个 API 密钥和 1 个 OAuth 2.0 客户端 ID(带有客户端 ID 和客户端密码)
你能帮我解决这个问题吗?
代码:
var token = Helper.Decrypt(ytConn.AccessToken);
var url = "https://youtube.googleapis.com/youtube/v3/search?
forMine=true&order=date&type=video&part=snippet&key=" + _key +
"&access_token=" + token;
videos = Helper.GetFromAPI<Videos>(url, token);
它调用这个:
public static T GetFromAPI<T>(string url, string token)
{
WebRequest request = WebRequest.Create(url);
request.Method = "GET";
ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls12;
request.Headers.Set("Authorization", "Bearer " + token);
request.ContentType = "application/json; charset=utf-8";
T type = default(T);
try
{
using (WebResponse response = request.GetResponse())
{
using (Stream dataStream = response.GetResponseStream())
{
using (StreamReader reader = new
StreamReader(dataStream))
{
string responseFromServer = reader.ReadToEnd();
type = JsonConvert.DeserializeObject<T>
(responseFromServer);
}
}
}
}
}
提前致谢
您已添加 API 密钥,需要 API 密钥才能访问 public 数据。他们实际上只需要将您的项目标识为 Google。您还在请求中包含了访问令牌。访问令牌用于访问私人用户数据。访问令牌还可以识别您的项目,因此从技术上讲您不需要两者。
您收到的错误消息
The API Key and the authentication credential are from
different projects
表示您正在使用的 API 密钥来自 Google 云控制台上的一个项目,并且访问令牌是使用来自 google 云上另一个项目的客户端凭据创建的安慰。虽然您不需要两者,但没有什么能阻止您同时使用它们,但事实是它们需要来自同一个项目。
我怀疑您刚刚从代码中删除了关键部分。如果您要发送访问令牌,则无需密钥。
https://youtube.googleapis.com/youtube/v3/search?
forMine=true&order=date&type=video&part=snippet +
"&access_token=" + token;
您应该考虑使用 Google api .net 客户端库。
- 我的YouTube Data api samples
- 初学者 YouTube 数据 api C# 视频 How to find find the Most Popular videos with YouTube API C#
无需更改代码,有一天又开始工作了,所以很可能是 Youtube 方面的问题。
我正在尝试使用我的 C# 应用程序从 youtube 获取视频,使用“https://youtube.googleapis.com/youtube/v3/search?forMine=true&order=date&type=video&part=snippet&key={key}& access_token={token}" 但我收到此错误:
"error": {
"code": 400,
"message": "The API Key and the authentication credential are from different
projects.",
"errors": [
{
"message": "The API Key and the authentication credential are from
different projects.",
"domain": "global",
"reason": "badRequest"
}
],
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.Help",
"links": [
{
"description": "Google developer console API key",
"url":
"https://console.developers.google.com/project/{MyProjectCode}/apiui/credential"
}
]
},
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "CONSUMER_INVALID",
"domain": "googleapis.com",
"metadata": {
"consumer": "projects/{MyProjectCode}",
"service": "youtube.googleapis.com"
}
}
]
}
上只能看到 1 个 API 密钥和 1 个 OAuth 2.0 客户端 ID(带有客户端 ID 和客户端密码)
你能帮我解决这个问题吗?
代码:
var token = Helper.Decrypt(ytConn.AccessToken);
var url = "https://youtube.googleapis.com/youtube/v3/search?
forMine=true&order=date&type=video&part=snippet&key=" + _key +
"&access_token=" + token;
videos = Helper.GetFromAPI<Videos>(url, token);
它调用这个:
public static T GetFromAPI<T>(string url, string token)
{
WebRequest request = WebRequest.Create(url);
request.Method = "GET";
ServicePointManager.SecurityProtocol =
SecurityProtocolType.Tls12;
request.Headers.Set("Authorization", "Bearer " + token);
request.ContentType = "application/json; charset=utf-8";
T type = default(T);
try
{
using (WebResponse response = request.GetResponse())
{
using (Stream dataStream = response.GetResponseStream())
{
using (StreamReader reader = new
StreamReader(dataStream))
{
string responseFromServer = reader.ReadToEnd();
type = JsonConvert.DeserializeObject<T>
(responseFromServer);
}
}
}
}
}
提前致谢
您已添加 API 密钥,需要 API 密钥才能访问 public 数据。他们实际上只需要将您的项目标识为 Google。您还在请求中包含了访问令牌。访问令牌用于访问私人用户数据。访问令牌还可以识别您的项目,因此从技术上讲您不需要两者。
您收到的错误消息
The API Key and the authentication credential are from different projects
表示您正在使用的 API 密钥来自 Google 云控制台上的一个项目,并且访问令牌是使用来自 google 云上另一个项目的客户端凭据创建的安慰。虽然您不需要两者,但没有什么能阻止您同时使用它们,但事实是它们需要来自同一个项目。
我怀疑您刚刚从代码中删除了关键部分。如果您要发送访问令牌,则无需密钥。
https://youtube.googleapis.com/youtube/v3/search?
forMine=true&order=date&type=video&part=snippet +
"&access_token=" + token;
您应该考虑使用 Google api .net 客户端库。
- 我的YouTube Data api samples
- 初学者 YouTube 数据 api C# 视频 How to find find the Most Popular videos with YouTube API C#
无需更改代码,有一天又开始工作了,所以很可能是 Youtube 方面的问题。