我如何使用谷歌的“简单API访问键”?访问谷歌日历信息(PHP)


How do I use Google's "Simple API Access key" to access Google Calendar info (PHP)?

我试图使用谷歌API v3访问一个谷歌日历,并根据文档在这里:http://code.google.com/apis/calendar/v3/using.html#intro和这里:https://code.google.com/apis/console/,我需要的解决方案是"简单的API访问"&"Key for server apps (with IP locking)".

现在,当我用以下代码创建一个页面:
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访问键"时,我什么也没找到,他们的文档上什么也没有,没有例子,没有教程,什么都没有。只有我一个人在用这个吗?

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

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


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

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

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

现在,对于日历访问(见这里),假设我们想要获取访问控制规则列表。我们需要引用calendar.acl.list,它给了我们一个URI:

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

填空,这就是你所需要做的。获取服务器密钥(API Access子菜单),将其存储在项目中的某个地方,并在您请求的uri中调用它。

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

另外,从我在你的代码中看到的,你正在创建一个客户端对象,它将使用OAuth 2.0身份验证,因此你正在获得身份验证错误消息。

根本没有所谓的Simple API Access key

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

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

当我今天尝试做同样的事情时,我得到了这个线程。虽然这有点晚了,但答案是肯定的,对于那些不需要用户授权的API,实际上有一个简单的API密钥,并且官方的客户端库支持这个。

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,但是您需要自己处理错误并解析结果。

请看下面的链接,这对你很有帮助。Google API客户端库使您能够使用Google API,如分析,Adsense, Google+,日历,主持人,任务,或纬度在您的服务器上,在您选择的语言。

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

谢谢,Chintu