Halo博客的百度定时页面提交
前言
- 好不容易搭建好博客,写了些自以为有点意思的文章,但是没人看!!因为没有提交到搜索引擎,所以根本没人能搜到嘛~。虽然Next主题提供了百度自动提交的配置,但是百度收录已经不再提供推动收录的服务,所以Next主题的配置也没啥用了
- 百度收录网站中提供了三种收录方式,其中API提交最快捷,因此考虑使用Java实现将Halo博客文章推送到百度收录中
- API提交
- sitemap提交
- 手动提交
- Halo提供了用于获取文章列表的API,因此思路很简单:使用Java定时任务线程池按照固定的时间间隔从Halo API中获取全部的文章链接,然后调用百度收录API,向百度提交文章链接
- 百度收录对于频繁提交旧的链接有一定的限制,如果经常重复提交旧链接,会下调配额,甚至可能会失去API推送功能的权限,如果经常提交新的文章链接,可能适当提高配额。因此需要建立一个简单的缓存,提交链接时滤除旧的已经提交过的链接
- 尽管Google使用站点地图就已经能很好地进行链接的抓取了,不用单独提交,但是Google同样推荐使用indexing API主动提交要收录的链接,具体可参考Halo博客的谷歌定时页面提交
工程搭建
-
建立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' // 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
参数的设置是为了解决后续服务部署在容器中时日志打印时间不是东八区时区的问题
-
配置文件如下:
prefix=https://blog.demoli.xyz postAPI=%s/api/content/posts?api_access_key=%s&page=%d apiAccessKey=*** baiduUrl=http://data.zz.baidu.com/urls? token=***
-
apiAccessKey
是在Halo博客设置中设定的 -
prefix
是Halo博客的首页访问URL -
token
是百度提交平台为用户提供的提交token,在百度提交网站页面中有展示
-
-
日志配置文件如下:
<?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>
-
整个工程只有两个核心类
-
PostScrap
import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject;
-