Halo博客的谷歌收录自动提交
前言
- 在Halo博客的百度定时页面提交一文中已经实现了向百度的主动页面提交,而对于Google平台,实际上并不需要设计类似的功能,一方面Google的基于sitemap的抓取效果已经很好,另一方面,虽然Google也提供了indexing API以提供主动提交的服务,但是需要挂代理才能访问
- 但是为了功能的完整性以及可以使用树莓派直接挂代理访问,于是决定基于Google indexing API实现谷歌收录的自动提交
准备工作
- 实际上,谷歌SEO提供了丰富的文档供站点管理者学习,但是本文仅摘取其中对于indexing API支持的部分,进行简要的介绍
- 全程设置工作需要正常访问谷歌
获取访问令牌
-
indexing API使用了OAuth2.0的验证方式,请求该API时需要提供访问令牌,因此第一步,首先在Google Cloud Platform中执行相关设置
-
进入服务账号页面创建项目
-
点击创建服务账号
-
直接点击完成即可,两个可选部分不用管
-
创建私钥,注意选择JSON类型的私钥
- 执行创建后,私钥文件会下载到本地
Search Console添加网站
-
在Search Console添加网站实际上是验证网站所有权,有多种方法,可参考验证网站所有权
-
博主自己使用的是域名提供商的方式,比较简单,如下图所示就是验证成功
赋予服务账号所有者状态
-
实际上是向第一步创建的服务账号授予第二步添加的网站的所有权
-
访问网站站长中心,计入到网站条目中,点击添加所有者
-
要求输入服务账号电子邮件地址,此地址可以从第一步中下载到的私钥中的
client_name
字段中找到
项目构建
-
建立Gradle工程,配置文件如下所示
plugins { id 'java' id 'application' } group 'xyz.demoli' version '1.0-SNAPSHOT' sourceCompatibility = 1.11 mainClassName="xyz.demoli.Main" repositories { mavenCentral() } application{ applicationDefaultJvmArgs = ['-Duser.timezone=GMT+8'] } dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' compile 'com.google.api-client:google-api-client:1.33.0' implementation 'com.google.auth:google-auth-library-oauth2-http:1.3.0' compile 'com.google.apis:google-api-services-indexing:v3-rev20200804-1.32.1' // https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp implementation group: 'com.squareup.okhttp3', name: 'okhttp', version: '4.9.3' implementation 'com.google.code.gson:gson:2.9.0' // https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api implementation group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.14.1' // https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.14.1' // https://mvnrepository.com/artifact/org.projectlombok/lombok compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.22' annotationProcessor group: 'org.projectlombok', name: 'lombok', version: '1.18.22' } test { useJUnitPlatform() }
annotationProcessor group: 'org.projectlombok', name: 'lombok', version: '1.18.22'
保证gradle项目中lombok的注解可以被正确解析applicationDefaultJvmArgs
参数的设置是为了解决后续服务部署在容器中时日志打印时间不是东八区时区的问题
-
配置文件
config.properties
如下:prefix=https://blog.demoli.xyz postAPI=%s/api/content/posts?api_access_key=%s&page=%d apiAccessKey=*** proxyURL=192.168.0.137 proxyPort=7890
-
apiAccessKey
是在Halo博客设置中设定的 -
prefix
是Halo博客的首页访问URL -
proxy
的两个配置即是代理配置
-
-
日志配置文件如下(粗糙的配置):
<?xml version="1.0" encoding="utf-8" ?> <configuration status="INFO"> <appenders> <console name="console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </console> </appenders> <loggers> <root level="INFO"> <appender-ref ref="console"/> </root> </loggers> </configuration>
-
将准备工作中得到的私钥放在项目的
resources
目录下,更名为cred.json
-
整个工程只有两个核心类
-
PostScrap
import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject
-