此文章代码已实现并开源:《站长推送工具发布并已开源,支持百度/必应/谷歌搜索引擎的主动推送》
谷歌搜索引擎作为全球第一的搜索引擎早就支持了站长主动推送的功能,只不过不是面向普通用户的可视化界面,而是通过编程API接口实现的,有很多站长并不是专业的开发者,但由于谷歌需要验证网站所有权,所以我不能直接做一个可视化界面让站长自己填写自己的秘钥,所以只能对谷歌的接口进行二次封装,以降低使用的难度。
源码项目地址:https://github.com/NeilRen/GoogleIndexing
环境要求
首先,我是以Java为平台进行的封装,JDK版本为1.8,其他程序可能需要中间层才能打通,还不如自己实现,其他编程语言的同学我也没有办法,这个世界上编程语言太多了。
其次,谷歌的Google Indexing API接口在中国大陆无法访问,所以程序需要运行在可以访问谷歌的网络环境中。
前提条件
首先,你需要一个谷歌账号。你的项目是Java的,并且JDK为1.8以上。
创建 Google API 项目
由于谷歌更新了用户操作流程,本节教程已经过时了,对此节点的新补充教程请参考:《谷歌 Google Indexing 推送接口教程的更新》
然后在向 Indexing API 发送请求之前,您需要告知 Google 您的客户端并激活对 Indexing API 的访问权限。谷歌为我们提供了一个设置向导,设置向导会引导您在 Google API 控制台中创建项目、启用 Indexing API 以及创建凭据。
首先先跟着向导创建一个项目

然后转到凭据,添加凭据

添加的凭据选择Indexing API、网页服务器(例如 node.js、Tomecat),选择应用数据,点击“我需要哪些凭据?”到下一页

创建一个服务账号,名称可以自己起一个名字,秘钥类型选择JSON,点击继续

选择创建无角色账号即可

这时就会自动下载一个json文件,这个就是我们的私钥,要保存好

在 Search Console 中验证网站所有权
我们还需要到 Search Console 添加我们的网站,验证所有权,验证成功以后,注意我们要去旧版的控制台,不要去新版的控制台!然后添加所有者

所有者的邮箱填写我们上一步获得的私钥JSON文件中的邮箱地址。
=
在自己的项目中安装依赖
如果您使用Apache Maven来管理Java项目,只需在项目的pom.xml文件加入相应的依赖项即可。您只需在pom.xml中声明以下依赖:
<dependency>
<groupId>net.renfei</groupId>
<artifactId>googleindexing</artifactId>
<version>1.0.0</version>
</dependency>
编写代码调用服务,在实例化GoogleIndexing的时候,需要传一个String参数,这个参数是私钥JSON文件所在的文件地址:
import com.alibaba.fastjson.JSON;
import com.google.api.services.indexing.v3.model.UrlNotificationMetadata;
import net.renfei.googleindexing.GoogleIndexing;
import net.renfei.googleindexing.entity.UrlNotification;
import net.renfei.googleindexing.entity.UrlNotificationType;
public class Demo {
public static void main(String[] args) {
try {
GoogleIndexing googleIndexing = new GoogleIndexing("/Users/renfei/Google/Ren-Fei-5a8df7c2b912.json");
UrlNotification urlNotification = new UrlNotification();
urlNotification.setUrl("https://www.renfei.net");
urlNotification.setType(UrlNotificationType.URL_UPDATED);
UrlNotificationMetadata urlNotificationMetadata = googleIndexing.publish(urlNotification);
System.out.printf(JSON.toJSONString(urlNotificationMetadata));
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
后续如果用的人多,我还会再发布百度的推送。