jekyll-baidu-push 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/jekyll/baidu_push_generator.rb +93 -0
- data/lib/jekyll-baidu-push.rb +1 -0
- metadata +65 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 6a0ae04978a1b3c76809f9bef7a265018651260a8694cf16cb7d9134165b70ba
|
4
|
+
data.tar.gz: f702bf0a56fa13221344fca01ac9080da16e3e4ccbc476d6b88d52983769c9c0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ed451b4bb4ff1e63fc848794be15924f55533183449da7bc058d08314b134c04d09e1430e73a78401b9158971b997684ef798612bf9b01c7c14a75f7e1f46a2e
|
7
|
+
data.tar.gz: 49f53cda6610f25ab62ab093175eaad8f7b87e01438d69bfe6626ea9c85430c005a1947151521afe49d170ff641311bf8c5adaa9261cd938b264a84c57445687
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'uri'
|
3
|
+
|
4
|
+
module Jekyll
|
5
|
+
class BaiduPushGenerator < Generator
|
6
|
+
priority :lowest
|
7
|
+
|
8
|
+
def generate(site)
|
9
|
+
# 读取配置
|
10
|
+
config = site.config['baidu_push'] || {}
|
11
|
+
push_type = config['type'] || 'all' # 默认推送所有内容
|
12
|
+
limit = config['limit'] || 10 # 默认推送 10 个
|
13
|
+
token = config['token'] || "" # 获取 token
|
14
|
+
base_url = site.config['url'].chomp('/') # 使用 Jekyll 配置的 URL,去掉末尾的 /
|
15
|
+
|
16
|
+
# 获取排除的路径和文件类型
|
17
|
+
exclude_paths = config['exclude_paths'] || [] # 需要排除的路径
|
18
|
+
exclude_types = config['exclude_types'] || [] # 需要排除的文件类型(不带 .)
|
19
|
+
|
20
|
+
# 拼接 API URL
|
21
|
+
api_url = "http://data.zz.baidu.com/urls?site=#{base_url}&token=#{token}"
|
22
|
+
|
23
|
+
# 打印拼接的 API URL 方便调试
|
24
|
+
puts "拼接的 API URL: #{api_url}"
|
25
|
+
|
26
|
+
# 选择推送的内容类型
|
27
|
+
items = case push_type
|
28
|
+
when 'pages' then site.pages
|
29
|
+
when 'posts' then site.posts.docs
|
30
|
+
else site.pages + site.posts.docs # all
|
31
|
+
end
|
32
|
+
|
33
|
+
# 过滤仅包含 Page 或 Post
|
34
|
+
filtered_items = items.select { |item| item.is_a?(Jekyll::Page) || item.is_a?(Jekyll::Document) }
|
35
|
+
|
36
|
+
# 排除不需要推送的路径
|
37
|
+
filtered_items.reject! do |item|
|
38
|
+
normalized_url = item.url.sub(/\/index\.html$/, '/') # 统一 URL 格式
|
39
|
+
exclude_paths.any? { |path| normalized_url == path || normalized_url.start_with?(path + '/') }
|
40
|
+
end
|
41
|
+
|
42
|
+
# 排除指定文件类型
|
43
|
+
filtered_items.reject! do |item|
|
44
|
+
ext = File.extname(item.path).delete('.').downcase # 获取扩展名(无 `.`)
|
45
|
+
exclude_types.include?(ext)
|
46
|
+
end
|
47
|
+
|
48
|
+
# **排除 `jekyll-redirect-from` 插件生成的重定向页面**
|
49
|
+
filtered_items.reject! do |item|
|
50
|
+
item.data.key?('redirect_from') || item.data.key?('redirect_to')
|
51
|
+
end
|
52
|
+
|
53
|
+
# **排除首页**
|
54
|
+
filtered_items.reject! do |item|
|
55
|
+
normalized_url = item.url.sub(/\/index\.html$/, '/') # 统一 URL 格式
|
56
|
+
normalized_url == '/'
|
57
|
+
end
|
58
|
+
|
59
|
+
# 按文件修改时间排序(最近修改的优先)
|
60
|
+
urls = filtered_items
|
61
|
+
.sort_by { |item| File.mtime(item.path) rescue Time.at(0) }
|
62
|
+
.reverse
|
63
|
+
.take(limit) # 只取最近修改的 limit 个
|
64
|
+
|
65
|
+
# 生成待推送的 URL
|
66
|
+
batch = urls.map { |item| "#{base_url}#{item.url}" }
|
67
|
+
|
68
|
+
# 打印待提交的 URLs 方便调试
|
69
|
+
puts "待提交的 URLs: #{batch.join("\n")}"
|
70
|
+
|
71
|
+
# 提交到百度,但不会影响构建
|
72
|
+
push_to_baidu(api_url, batch) unless batch.empty?
|
73
|
+
rescue => e
|
74
|
+
puts "生成百度推送时发生错误: #{e.message}"
|
75
|
+
puts e.backtrace.join("\n")
|
76
|
+
end
|
77
|
+
|
78
|
+
def push_to_baidu(api_url, urls)
|
79
|
+
uri = URI.parse(api_url)
|
80
|
+
request = Net::HTTP::Post.new(uri)
|
81
|
+
request['Content-Type'] = 'text/plain'
|
82
|
+
request.body = urls.join("\n")
|
83
|
+
|
84
|
+
begin
|
85
|
+
response = Net::HTTP.start(uri.host, uri.port) { |http| http.request(request) }
|
86
|
+
puts "百度推送结果: #{response.body}"
|
87
|
+
rescue => e
|
88
|
+
puts "百度推送失败: #{e.message}"
|
89
|
+
puts "构建继续进行..."
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require "jekyll/baidu_push_generator"
|
metadata
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jekyll-baidu-push
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- note4
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2025-07-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: jekyll
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '5.0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '3.0'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '5.0'
|
33
|
+
description:
|
34
|
+
email:
|
35
|
+
- l.zabcv@gmail.com
|
36
|
+
executables: []
|
37
|
+
extensions: []
|
38
|
+
extra_rdoc_files: []
|
39
|
+
files:
|
40
|
+
- lib/jekyll-baidu-push.rb
|
41
|
+
- lib/jekyll/baidu_push_generator.rb
|
42
|
+
homepage: https://github.com/note4/jekyll-baidu-push
|
43
|
+
licenses:
|
44
|
+
- MIT
|
45
|
+
metadata: {}
|
46
|
+
post_install_message:
|
47
|
+
rdoc_options: []
|
48
|
+
require_paths:
|
49
|
+
- lib
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
requirements: []
|
61
|
+
rubygems_version: 3.4.10
|
62
|
+
signing_key:
|
63
|
+
specification_version: 4
|
64
|
+
summary: Jekyll plugin to push URLs to Baidu
|
65
|
+
test_files: []
|