如何使用Google的“简单API访问密钥”访问Google日历信息(PHP)?

时间:2011-11-25 15:10:24

标签: php google-calendar-api

我正在尝试使用Google API v3访问一个Google日历,并根据此处的文档: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访问密钥”时,我什么都没找到,他们的文档没有任何内容,没有示例,没有教程,什么都没有。我是唯一一个使用这个东西的人吗?

那么有人能告诉我我做错了吗?

5 个答案:

答案 0 :(得分:5)

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


我遇到了同样的问题,简单的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中调用它。

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

没有一种称为Simple API Access key的东西。

通常OAuth 2.0用于授权。但是因为你有理由不使用它。

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

答案 3 :(得分:0)

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

api库通过Options执行此操作,这是键值对。

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

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

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

答案 4 :(得分:-1)

请参阅以下链接,对您有所帮助。通过Google API客户端库,您可以使用您选择的语言在服务器上使用Google Analytics(分析,Adsense,Google +,日历,版主,任务或谷歌纵横)等Google API。

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

谢谢, Chintu