切換語言為:簡體
Spring Boot 整合 sitemapgen4j 實現生成網站地圖sitemap

Spring Boot 整合 sitemapgen4j 實現生成網站地圖sitemap

  • 爱糖宝
  • 2024-05-26
  • 2094
  • 0
  • 0

1.什麼是sitemapgen4j

是一個用於在Java中生成XML網站地圖的庫,比如生成網站的sitemap,如果超出了 5 萬條需要寫入另外一個 sitemap 當中,這個功能 sitemapgen4j 已經替我們實現了,無需擔心。

 sitemap

站點地圖是網站管理員向搜索引擎告知其網站上可用於抓取的頁面的一種簡單方法。 站點地圖最簡單的形式是一個 XML 檔案,其中列出了站點的 URL 以及有關每個 URL 的附加後設資料(上次更新時間、通常更改的頻率以及相對於站點中其他 URL 的重要性) )以便搜索引擎能夠更智慧地抓取網站。

網路爬蟲通常透過網站內的連結和其他網站發現頁面。 站點地圖補充了此資料,以允許支援站點地圖的爬網程式拾取站點地圖中的所有 URL,並使用關聯的後設資料瞭解這些 URL。 使用 Sitemap 協議並不能保證網頁被搜索引擎收錄,但可以為網路爬蟲提供提示,以更好地爬行您的網站。

Sitemap 0.90 根據 Attribution-ShareAlike Creative Commons License 的條款提供,並得到廣泛採用,包括 Google、Yahoo! 和 Microsoft 的支援。Sitemap 是網站管理員向搜索引擎通知其網站上可用頁面的一種簡單方法 用於爬行。 站點地圖最簡單的形式是一個 XML 檔案,其中列出了站點的 URL 以及有關每個 URL 的附加後設資料(上次更新時間、通常更改的頻率以及相對於站點中其他 URL 的重要性) )以便搜索引擎能夠更智慧地抓取網站。

2.程式碼工程

實驗目的:生成網站地圖

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>springboot-demo</artifactId>
        <groupId>com.et</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>sitemap</artifactId>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-autoconfigure</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.github.dfabulich</groupId>
            <artifactId>sitemapgen4j</artifactId>
            <version>1.1.1</version>
        </dependency>
    </dependencies>
</project>

application.yml

server:
  port: 8088

job

package com.et.sitemap.job;
import com.redfin.sitemapgenerator.SitemapIndexGenerator;
import com.redfin.sitemapgenerator.W3CDateFormat;
import com.redfin.sitemapgenerator.WebSitemapGenerator;
import com.redfin.sitemapgenerator.WebSitemapUrl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.io.File;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * @author liuhaihua
 * @version 1.0
 * @ClassName SiteMapJob
 * @Description todo
 * @date 2024年04月25日 17:44
 */
@Component
public class SiteMapJob {
    private Logger log = LoggerFactory.getLogger(getClass());
    //@Scheduled(cron = "0 0 0 * * ?")
    @Scheduled(initialDelay = 1000,fixedRate = 10000)
    public void generateSitemap() {
        log.info("start generate sitemap");
        String tempPath = "D://tmp/";
        File file = new File(tempPath);
        if (!file.exists()) {
            file.mkdirs();
        }
        String domain = "http://www.liuhaihua.cn";
        try {
            WebSitemapGenerator g1 = WebSitemapGenerator.builder(domain, file)
                    .fileNamePrefix("article").build();
            Date date = new Date();
            for (int i = 1; i < 160000; i++) {
                WebSitemapUrl url = new WebSitemapUrl.Options(domain + "/article/" + i).lastMod(date).build();
                g1.addUrl(url);
            }
            WebSitemapGenerator g2 = WebSitemapGenerator.builder(domain, file)
                    .fileNamePrefix("tag").build();
            Date date2 = new Date();
            for (int i = 1; i < 21; i++) {
                WebSitemapUrl url = new WebSitemapUrl.Options(domain + "/tag/" + i).lastMod(date2).build();
                g2.addUrl(url);
            }
            WebSitemapGenerator g3 = WebSitemapGenerator.builder(domain, file)
                    .fileNamePrefix("type").build();
            Date date3 = new Date();
            for (int i = 1; i < 21; i++) {
                WebSitemapUrl url = new WebSitemapUrl.Options(domain + "/type/" + i).lastMod(date3).build();
                g3.addUrl(url);
            }
            List<String> fileNames = new ArrayList<>();
            // 生成 sitemap 檔案
            List<File> articleFiles = g1.write();
            articleFiles.forEach(e -> fileNames.add(e.getName()));
            List<File> tagFiles = g2.write();
            tagFiles.forEach(e -> fileNames.add(e.getName()));
            List<File> typeFiles = g3.write();
            typeFiles.forEach(e -> fileNames.add(e.getName()));
            // 構造 sitemap_index 生成器
            W3CDateFormat dateFormat = new W3CDateFormat(W3CDateFormat.Pattern.DAY);
            SitemapIndexGenerator sitemapIndexGenerator = new SitemapIndexGenerator
                    .Options(domain, new File(tempPath + "sitemap_index.xml"))
                    .dateFormat(dateFormat)
                    .autoValidate(true)
                    .build();
            fileNames.forEach(e -> {
                try {
                    // 組裝 sitemap 檔案 URL 地址
                    sitemapIndexGenerator.addUrl(domain + "/" + e);
                } catch (MalformedURLException e1) {
                    e1.printStackTrace();
                }
            });
            // 生成 sitemap_index 檔案
            sitemapIndexGenerator.write();
            log.info("end generate sitemap");
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
}

DemoApplication.java

package com.et.sitemap;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class DemoApplication {
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
}

以上只是一些關鍵程式碼,所有程式碼請參見下面程式碼倉庫

程式碼倉庫

  • https://github.com/Harries/springboot-demo

3.測試

啟動spring boot應用

檢視生成的檔案

Spring Boot 整合 sitemapgen4j 實現生成網站地圖sitemap

4.參考引用

  • https://github.com/dfabulich/sitemapgen4j

0則評論

您的電子郵件等資訊不會被公開,以下所有項目均必填

OK! You can skip this field.