标签: google-api-java-client

使用google api的Maven

我正在使用谷歌日历java API进行项目.

日历部分很好,maven似乎下载并使用它没有任何麻烦.

我的问题来自这个lib的主要依赖:com.google.api.client api.

特别是,当我按照本页详述的说明操作时,maven无法正确编译我的项目:

package com.google.api.client.extensions.java6.auth.oauth2 does not exist
package com.google.api.client.extensions.jetty.auth.oauth2 does not exist
package com.google.api.client.json.jackson2 does not exist
Run Code Online (Sandbox Code Playgroud)

它缺少几个类,因此无法编译文件,而当我下载zip并手动添加.jar而不使用maven它工作正常.

这是我用maven管理的第一个项目,不知道如何去那里.指针将不胜感激.

编辑发帖请求---这是我的POM

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>fr.univnantes.atal.atcal</groupId>
  <artifactId>AtCal</artifactId>
  <version>0.1</version>
  <packaging>jar</packaging>

  <name>AtCal</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <repositories>
    <repository>
      <id>google-api-services</id>
      <url>http://google-api-client-libraries.appspot.com/mavenrepo</url>
    </repository>
  </repositories>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.google.api-client</groupId>
      <artifactId>google-api-client</artifactId>
      <version>1.12.0-beta</version>
    </dependency>
    <dependency>
      <groupId>com.google.apis</groupId>
      <artifactId>google-api-services-calendar</artifactId>
      <version>v3-rev20-1.12.0-beta</version>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement>
      <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <!-- best lock down version of the plugin too …
Run Code Online (Sandbox Code Playgroud)

java maven google-api-java-client

6
推荐指数
1
解决办法
1万
查看次数

如何使用服务帐户正确获取用户的日历事件?

我正在尝试为域中的用户检索日历事件.我有服务帐户访问权限,但在尝试获取特定用户事件时出现404错误.继承人连接代码:

NetHttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
    GoogleCredential credential = new GoogleCredential.Builder()
            .setTransport(httpTransport)
            .setJsonFactory(JSON_FACTORY)
            .setServiceAccountId(googleApiServiceAccountId)
            .setServiceAccountScopes(Collections.singleton(CalendarScopes.CALENDAR_READONLY))
            .setServiceAccountPrivateKey(SecurityUtils.loadPrivateKeyFromKeyStore(
                    SecurityUtils.getPkcs12KeyStore(),
                    getClass().getClassLoader().getResourceAsStream(googleApiPrivateKeyPath),
                    NOTASECRET, PRIVATEKEY, NOTASECRET))
            .build();

    calendarApi = new Calendar.Builder(httpTransport,
            JSON_FACTORY, credential).setApplicationName(getApplicactionName()).build();
Run Code Online (Sandbox Code Playgroud)

活动列表方法:

public List<Event> getCalendarEventsForUserAndDates(String userEmail, Long dateFrom, Long dateTo) {
    try {
        String pageToken = null;
        List<Event> allEvents = Lists.newArrayList();
        do {
            ArrayMap<String, Object> parameters = new ArrayMap<String, Object>();
            parameters.add("xoauth_requestor_id", userEmail);
            Calendar.Events.List list = calendarApiBean.getCalendarApi()
                    .events().list("primary");
            list.setTimeMax(new DateTime(dateFrom, 0))
                    .setTimeMin(new DateTime(dateTo, 0))
                    .setUnknownKeys(parameters);
            Events events = list.setPageToken(pageToken)
                    .execute();
            List<? extends Event> items = …
Run Code Online (Sandbox Code Playgroud)

java google-calendar-api google-api-java-client

6
推荐指数
1
解决办法
1647
查看次数

具有两条腿OAuth的Gmail原子Feed收到401错误

我们遇到了包含两条腿OAuth的Gmail原子Feed问题,错误消息是"401未经授权".

错误消息如下所示.

<HTML>
<HEAD>
<TITLE>Unauthorized</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Unauthorized</H1>
<H2>Error 401</H2>
</BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)

直到上周,我们使用Gmail原子Feed都没有问题.从本周开始,即使我们对Gmail原子Feed和oauth没有任何变化,我们也遇到了这个问题.现在,所有用户(50,000个帐户)都不会出现此问题,但此问题越来越多.

看来这个问题是由谷歌方面引起的.

有没有人有同样的问题?

源代码如下.

private GoogleOAuthParameters mOauthParameters; 
private OAuthSigner mSigner; 

private final String SCOPE = "https://mail.google.com/mail/feed/atom";

GoogleService service;

String result = null;

mOauthParameters = new GoogleOAuthParameters();
mSigner = new OAuthHmacSha1Signer();

mOauthParameters.setOAuthConsumerKey(CONSUMER_KEY);
mOauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET);

service = new GoogleService("gmail","feed");
service.setOAuthCredentials(mOauthParameters, mSigner);
service.setConnectTimeout(timeOut);
service.setReadTimeout(timeOut * 5);

GDataRequest request = service.createFeedRequest(new URL(SCOPE +"?xoauth_requestor_id=" + email));
request.execute();
InputStream is = null;

try {
    is = request.getResponseStream();
    StringBuffer out = new StringBuffer();  
    byte[] …
Run Code Online (Sandbox Code Playgroud)

gmail google-api google-api-java-client google-oauth google-oauth-java-client

6
推荐指数
1
解决办法
2190
查看次数

尝试获取正在运行的实例列表时,找不到资源'projects/<my project>'错误

我的目标是通过首先检索活动实例列表来测试google的orchestrator和计算引擎api.包含servlet文件的orchestrator项目存储在jar中.

我正在尝试测试java google计算引擎客户端api.我有一个调用orchestrator servlet的cron作业.cron的目标是后端.我从中尝试获取实例列表:

...
AppIdentityCredential credential = getCredential(computeScope);

String appName = ConfigProperties.getInstance().getGceConfigProperties().get("projectId");

try {
    httpTransport = GoogleNetHttpTransport.newTrustedTransport();

    final Compute compute = new Compute.Builder(
        httpTransport, JSON_FACTORY, credential).setApplicationName(appName)
        .build();
    logger.info("================== Listing Compute Engine Instances ==================");

    Compute.Instances.List instances = compute.instances().list(projectId, zone);
    InstanceList list = instances.execute();

    if (list.getItems() == null) {
        logger.info("No instances found. Sign in to the Google APIs Console and create "
            + "an instance at: code.google.com/apis/console");
    } else {
        for (Instance instance : list.getItems()) {
            logger.info(instance.toPrettyString());
        }
    }
...
Run Code Online (Sandbox Code Playgroud)

我得到的错误响应是(我从响应中省略了我的项目名称,我确认我在我的代码中使用了正确的项目ID): …

google-app-engine google-api-java-client google-compute-engine

6
推荐指数
2
解决办法
5153
查看次数

如何使用Gmail API和Java发送电子邮件

我在Openshift上部署了Web服务。目前,我正在开发一种使用我的Gmail帐户在特定时间发送自动电子邮件的方法。

因此,我已经记录了自己两到三天,得出的结论是我有两个选择:

1)使用JavaMail库。2)使用Gmail API。

对于第一个选项,我使用了以下类:

public class EmailSenderService {  
private final Properties properties = new Properties();  

private String password = "*******";  

private Session session;  

private void init() {  

    //ssl
    properties.put("mail.smtp.host", "smtp.gmail.com");
    properties.put("mail.smtp.socketFactory.port", "465");
    properties.put("mail.smtp.socketFactory.class",
            "javax.net.ssl.SSLSocketFactory");
    properties.put("mail.smtp.auth", "true");
    properties.put("mail.smtp.port", "465");

    session = Session.getDefaultInstance(properties,
        new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication("eu***@gmail.com",password);
            }
        });
}  

public void sendEmail(){  

    init();  

    //ssl
    try {
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress("eu***@gmail.com"));
        message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse("c***6@gmail.com"));
        message.setSubject("Testing Subject");
        message.setText("Dear Mail Crawler," +
                "\n\n No spam …
Run Code Online (Sandbox Code Playgroud)

email jakarta-mail google-api-java-client google-oauth gmail-api

6
推荐指数
1
解决办法
2万
查看次数

如何使用Google QPX API和Java进行航班搜索?

我正在尝试构建一个简单的Java代码,使用Google QPX API获取从纽约到伦敦的航班.我注册了Google并获得了API_key.

我阅读了文档,但不幸的是,我找不到任何能告诉我如何操作的例子.

这是我到目前为止所尝试的:

import com.google.api.services.qpxExpress.model.*;
import java.util.*;

public class Main 
{
    public static void main(String[] args) 
    {   
        // Passengers
        PassengerCounts passengers = new PassengerCounts();
        passengers.setAdultCount(2);

        // Slice
        List<SliceInput> slices = new ArrayList<SliceInput>();

        SliceInput slice = new SliceInput();
        slice.setOrigin("JFK"); // John Kennedy Airport in Ney York
        slice.setDestination("LHR"); // London Heathrow
        slice.setDate("2015-07-01");
        slices.add(slice);


        // Options request
        TripOptionsRequest tripOptions = new TripOptionsRequest(); 
        tripOptions.setPassengers(passengers);
        tripOptions.setSlice(slices);


        // Search request
        TripsSearchRequest tripSearchReq = new TripsSearchRequest();
        tripSearchReq.setRequest(tripOptions);

        // Next steps?
        // Setting up QPXExpress?

    } …
Run Code Online (Sandbox Code Playgroud)

api google-api httprequest google-api-java-client

6
推荐指数
1
解决办法
2886
查看次数

使用Google API Client Library for Java更改批量HTTP请求的READ TIMEOUT

我正在批量请求将成员添加到组.为此,我使用OAuth2.0并获取类类型Credential的对象.执行时,batch.execute()抛出一个

java.net.SocketTimeoutException : Read timed out
Run Code Online (Sandbox Code Playgroud)

要更改超时限制,这是我找到的解决方案: GoogleApps客户端仅提供SocketTimeOutException

但我无法更改我正在创建的Credential对象的超时.

Credential credential = new AuthorizationCodeInstalledApp(
                flow, new LocalServerReceiver()).authorize("user");
Run Code Online (Sandbox Code Playgroud)

注意:凭据实现HttpRequestInitializer.

提前致谢!

java google-api-java-client google-admin-sdk google-directory-api

6
推荐指数
1
解决办法
1307
查看次数

使用 Google API Java 客户端库刷新令牌

我正在使用 Google API Java 客户端http://code.google.com/p/google-api-java-client/并且能够成功获取 Android 的访问令牌。

    // Google Accounts
credential = GoogleAccountCredential.usingOAuth2(this, CalendarScopes.CALENDAR);
SharedPreferences settings = getPreferences(Context.MODE_PRIVATE);
credential.setSelectedAccountName(settings.getString(PREF_ACCOUNT_NAME, null));
Run Code Online (Sandbox Code Playgroud)

由于我希望我的 Web 服务器进行离线 API 调用,因此我需要一个刷新令牌。我一直在广泛搜索,但还没有想出如何做到这一点。

理想情况下,我更喜欢在 WebView 上使用 Google API Java 客户端来获取刷新令牌(无需输入用户名或密码)。

任何帮助,将不胜感激!

google-api-java-client google-oauth google-oauth-java-client

5
推荐指数
2
解决办法
2910
查看次数

通过 YouTube API 上传视频

我正在使用 YouTube API 以编程方式将视频上传到 YouTube。我的一些视频需要标记年龄限制,所以我想指定 AgeGating 视频属性。当指定 video.setAgeGating(gating) 时,还必须提供适当的部分名称,否则我会收到以下错误

{
  "code" : 400,
  "errors" : [ {
    "domain" : "youtube.part",
    "location" : "part",
    "locationType" : "parameter",
    "message" : "ageGating",
    "reason" : "unexpectedPart"
  } ],
  "message" : "ageGating"
}
Run Code Online (Sandbox Code Playgroud)

文件指出以下可用的部分:

片段、内容详细信息、文件详细信息、实时流媒体详细信息、播放器、处理详细信息、录制详细信息、统计信息、状态、建议和主题详细信息。

在我的情况下,它们都不起作用,仍然返回相同的unexpectedPart错误消息,因此我尝试了自定义ageGating部件名称,尽管这次响应是:

{
  "code" : 403,
  "errors" : [ {
    "domain" : "youtube.common",
    "message" : "Forbidden",
    "reason" : "forbidden"
  } ],
  "message" : "Forbidden"
}
Run Code Online (Sandbox Code Playgroud)

YouTube API 错误文档页面中未列出此错误类型。

这是我的代码示例:

Video videoMetadata = …
Run Code Online (Sandbox Code Playgroud)

youtube api video youtube-api google-api-java-client

5
推荐指数
1
解决办法
1668
查看次数

Google Admin SDK 403 无权访问此资源/API

我在 java web 应用程序中使用以下代码来尝试获取组的所有用户:

GoogleCredential credential = GoogleCredential.fromStream(Util.class.getResourceAsStream("[credential_file].json")).createScoped(SCOPES);

Directory directory = new Directory.Builder(httpTransport, JSON_FACTORY, credential).build();

Directory.Members dirMem = directory.members();
Members members = dirMem.list("[group_email]").execute();
Run Code Online (Sandbox Code Playgroud)

这会导致最后一行 ( dirMem.list...)出现异常 403(未授权访问此资源/API )。

从文档(https://developers.google.com/admin-sdk/directory/v1/guides/delegation)和其他帖子中,我看到解决方案是使用setServiceAccountUser(). 但是,这意味着我必须使用 p12 文件而不是 json 文件(Google 建议在创建密钥时使用 json 文件)。

有什么办法可以在仍然使用 json 文件的同时解决这个问题(它还涉及更少的代码)。

谢谢。

google-api google-api-java-client google-oauth google-admin-sdk

5
推荐指数
1
解决办法
8057
查看次数