Google Webmasters API for Java 返回空网站列表

2024-04-20

我编写了一个简单的站点列表查询代码,它使用 Oauth 与服务帐户基于谷歌的文档 https://developers.google.com/identity/protocols/OAuth2ServiceAccount。所使用的身份验证密钥文件 (.p12) 以及帐户均有效。

问题是站点列表方法返回一个空列表。

service.sites().list().execute();

另外,如果我明确尝试通过调用获取经过验证的站点的站点地图

service.sitemaps().list("my.sample.site.com").execute();

我收到 403 Forbidden -“用户没有足够的权限访问网站 'sample.site.com'。另请参阅:https://support.google.com/webmasters/answer/2451999 https://support.google.com/webmasters/answer/2451999.” 来自 API 的错误。

根据我的调试,该 API 完美加载密钥文件(.p12)并管理访问令牌等,没有任何问题。

不过我的可能有问题服务帐户验证。

依赖项:

<dependency>
  <groupId>com.google.apis</groupId>
  <artifactId>google-api-services-webmasters</artifactId>
  <version>v3-rev6-1.20.0</version>
</dependency>

示例代码:

package webmastertools;

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.webmasters.Webmasters;
import com.google.api.services.webmasters.WebmastersScopes;
import com.google.api.services.webmasters.model.SitesListResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.File;
import java.util.Collections;

public class GoogleWebmastersClient {

    static Log logger = LogFactory.getLog(GoogleWebmastersClient.class);

    public static void main(String args[]) {

        try {

            HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
            JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
            String emailAddress = "[email protected] /cdn-cgi/l/email-protection";
            String applicationName = "Sitemap Generator";

            GoogleCredential credential = new GoogleCredential.Builder()
                    .setTransport(httpTransport)
                    .setJsonFactory(jsonFactory)
                    .setServiceAccountId(emailAddress)
                    .setServiceAccountPrivateKeyFromP12File(new File("/path/to/auth.p12"))
                    .setServiceAccountScopes(Collections.singletonList(WebmastersScopes.WEBMASTERS))
                    .build();

            Webmasters service = new Webmasters.Builder(httpTransport, jsonFactory, credential)
                    .setApplicationName(applicationName)
                    .build();

            SitesListResponse siteList = service.sites().list().execute();

            if (siteList.isEmpty()) {
                logger.info("Site list is empty!");
            }

        } catch (Exception e) {
            logger.error("Exception: ", e);
        }
    }
}

这段代码有什么问题吗?


在对 Google 的 Oauth 身份验证代码进行一些调试后,我的一位同事发现我的代码没有任何问题,但在 Google 网站管理员控制台上应该遵循一定的程序,顺便说一下,无处可提:

  • 您必须为每个域的服务帐户电子邮件地址授予“完全”权限。如果您之前授予了“所有权”,则必须撤销该所有权(因为如果您在授予权限之前授予所有权,则无法修改权限)。

  • 您必须授予您的服务帐户电子邮件地址的所有权。

如果您以错误的顺序执行此操作;您的网站不会列在站点地图列表中,即使您明确尝试通过站点地址获取站点地图,您也会收到身份验证错误。

您必须为您想要访问的每个域授予权限和所有权(即使只是为了获取它们的名称)。

没有针对所有站点的单一顶级访问控制。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google Webmasters API for Java 返回空网站列表 的相关文章

随机推荐