【问题标题】:How do I use Google's "Simple API Access key" to access Google Calendar info (PHP)?如何使用 Google 的“简单 API 访问密钥”访问 Google 日历信息 (PHP)?
【发布时间】:2012-01-06 10:41:17
【问题描述】:

我正在尝试使用 Google API v3 访问一个谷歌日历,并根据此处的文档:http://code.google.com/apis/calendar/v3/using.html#intro 和此处:https://code.google.com/apis/console/,我需要的解决方案是“简单 API 访问”和“用于服务器应用程序(带有 IP 锁定)”。

现在,当我使用此代码创建页面时:

session_start();

require_once 'fnc/google-api-php-client/src/apiClient.php';
require_once 'fnc/google-api-php-client/src/contrib/apiCalendarService.php';

$apiClient = new apiClient();
$apiClient->setUseObjects(true);
$service = new apiCalendarService($apiClient);

if (isset($_SESSION['oauth_access_token'])) {$apiClient->setAccessToken($_SESSION['oauth_access_token']);
} else {
    $token = $apiClient->authenticate();
    $_SESSION['oauth_access_token'] = $token;
}

在我的“config.php”文件中,我只添加了我的开发者密钥(代替“X”):

global $apiConfig;
$apiConfig = array(
    // True if objects should be returned by the service classes.
    // False if associative arrays should be returned (default behavior).
    'use_objects' => false,

    // The application_name is included in the User-Agent HTTP header.
    'application_name' => '',

    // OAuth2 Settings, you can get these keys at https://code.google.com/apis/console
    'oauth2_client_id' => '',
    'oauth2_client_secret' => '',
    'oauth2_redirect_uri' => '',    

    // The developer key, you get this at https://code.google.com/apis/console
    'developer_key' => 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXX',

    // OAuth1 Settings.
    // If you're using the apiOAuth auth class, it will use these values for the oauth consumer key and secret.
    // See http://code.google.com/apis/accounts/docs/RegistrationForWebAppsAuto.html for info on how to obtain those
    'oauth_consumer_key'    => 'anonymous',
    'oauth_consumer_secret' => 'anonymous',

但后来我收到错误,它告诉我它正在尝试使用我不想使用的“OAuth 2.0”系统进行身份验证。我只想使用 API 密钥访问一个日历。

令人惊讶的是,当我在谷歌搜索“简单 API 访问密钥”时,我什么也没找到,他们的文档上什么都没有,没有示例,没有教程,什么都没有。我是唯一一个使用这个东西的人吗?

那么谁能告诉我我做错了什么?

【问题讨论】:

  • 这里也一样......你去哪儿了吗?
  • 出于好奇 - 您是否将服务器的 IP 添加到“简单 API 访问”对话框下的允许 IP 地址列表中?
  • 我也有同样的情况。有人解决了吗?

标签: php google-calendar-api


【解决方案1】:

我今天尝试做同样的事情时遇到了这个问题。虽然这有点晚了,但答案是肯定的,对于那些不需要用户授权的api,实际上有简单的API key,官方客户端库支持这个。

api 库是通过 Options 来实现的,也就是键值对。

以获取给定 youtube 视频的信息为例,您将使用此 api:https://godoc.org/google.golang.org/api/youtube/v3#VideosListCall.Do

要使用api key,只需创建一个实现CallOption接口的类型,并让它返回api key:

type APIKey struct {
}

func (k *APIKey) Get() (string, string) {
    return "key", "YOU API KEY HERE"
}

然后在调用 API 时,将 APIKey 提供给它:

youtube, err := youtube.New(&http.Client{})
call := youtube.Videos.List("snippet,contentDetails,statistics").Id(id)
rsp, err := call.Do(opt)

这样,你可以用vallina http客户端而不是oauth客户端来构建youtube客户端,享受简单的api密钥。

第一个答案说你可以直接使用http GET,但是你需要自己处理错误并解析结果。

【讨论】:

  • edit:最初的问题是针对 php,但答案应该适用于所有客户端,它是同一组 API。
【解决方案2】:

您无法使用 API 密钥 访问您的日历信息。 API 密钥(或简单的 API 访问密钥)不是授权令牌,只能用于某些 API 调用,例如 Google 搜索查询等; API 密钥不会让您访问任何用户特定的数据,我假设这是您通过此日历应用程序的目标。

另外,根据我在您的代码中看到的,您正在创建一个将使用 OAuth 2.0 身份验证的客户端对象,因此您会收到身份验证错误消息。

【讨论】:

    【解决方案3】:

    (我知道这是一个老问题,但如果有人的话我会很高兴的 在这里给出了真正的答案,所以我现在就这样做)


    我遇到了同样的问题,简单的 API 访问没有很好的文档记录(或者可能只是没有在我搜索的地方),但是使用 Google API Explorer 我找到了一种获得所需内容的方法,这实际上非常简单。 您不需要特定的库或任何东西:它实际上非常简单。

    在我的例子中,我只需要在 G+ 上搜索一个关键字,所以我只需要做一个 GET 请求:

    https://www.googleapis.com/plus/v1/activities?query={KEYWORD}&key={YOUR_API_KEY}
    

    现在,对于日历访问 (see here),假设我们想要获取访问控制规则列表。我们需要参考calendar.acl.list,它给了我们URI:

    https://www.googleapis.com/calendar/v3/calendars/{CALENDAR_ID}/acl?key={YOUR_API_KEY}
    

    填空,这就是你需要做的几乎所有事情。获取server key(API 访问子菜单),将其存储在项目中的某个位置并在您请求的 URI 中调用它。

    【讨论】:

    • 对于那些想知道的人来说,简单访问属于默认存储桶,而不是登录存储桶,这意味着您每天的请求限制为 10k。
    • 我无法让它工作。我得到{ "error": { "errors": [ { "domain": "global", "reason": "required", "message": "Login Required", "locationType": "header", "location": "Authorization" } ], "code": 401, "message": "Login Required" } },如果我能解决这个需要登录的问题。我有 api 密钥,我正在从我授权的 ip 访问。
    • API 密钥仅适用于公共日历和公共端点,如事件而不是 acl
    【解决方案4】:

    请参阅下面对您有帮助的链接。 Google API 客户端库使您能够以您选择的语言在您的服务器上使用 Google API,例如 Analytics、Adsense、Google+、日历、版主、任务或 Latitude。

    http://code.google.com/p/google-api-php-client/

    谢谢, 钦图

    【讨论】:

    • 这没有回答问题。 Google API 客户端库是简单集成的噩梦,3mb 的库用于简单的钩子......
    【解决方案5】:

    没有叫Simple API Access key这样的东西。

    通常使用 OAuth 2.0 进行授权。但既然你有理由不使用它。

    • 如果你想使用 OAuth1.0 进行授权。您需要在API Access 页面的Simple API Access 部分中添加API key
    • 如果您想使用用户名和密码登录而不是OAuth,可以参考ClientLogin,但不建议这样做。

    【讨论】:

    • 你说没有这种东西,然后说“在简单的api访问部分获取一个api密钥”?
    • 只需使用“API key”即可访问。没有任何名为“简单 API 访问密钥”的密钥。
    • 您是否检查过 API 密钥是否真的需要?我认为developers.google.com/google-apps/calendar/auth 中的信息与developers.google.com/accounts/docs/OAuth 冲突,我能够在没有API 密钥的情况下查询Calendar API v3,只需要消费者密钥和秘密(OAuth1)
    • 您现在如何使用 Cloud Console 执行此操作?
    • 我认为这不是真的。请参阅:developers.google.com/api-client-library/php/auth/api-keys - “调用不访问私人用户数据的 API 时,您可以使用简单的 API 密钥。这些密钥用于验证您的应用程序以用于会计目的。Google Developers Console 文档也描述了 API 密钥。”跨度>
    猜你喜欢
    • 2012-06-29
    • 2014-09-23
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    相关资源
    最近更新 更多