缘由

不知道为什么,我在使用阿里云图片的时候,识别文章主色总是很慢,于是就觉得能不能生成文章的时候就直接确定主色,于是就有这个文件

代码

我的hexo souce文件是位于:

D:\blog\blogSourceCode\

这个新建文件是位于主题内这个目录下的:

D:\blog\blogSourceCode\themes\anzhiyu\scripts

文件名为 getTopImageColor.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285

// 自动设置文章的 ogImage 和 main_color 两个字段

const fs = require("fs");

const path = require("path");

const axios = require("axios");

const yaml = require("js-yaml");

const https = require("https"); // Make sure to import this module

const { type } = require("os");



const POSTS_DIR = process.cwd() + "/source/_posts";

const RANDOM_IMG = "https://random-img.pupper.cn";



// Define httpsAgent right after your imports and before the function calls

const httpsAgent = new https.Agent({

rejectUnauthorized: false,

});



async function getCoverImage() {

try {

const response = await axios.get(RANDOM_IMG, {

maxRedirects: 0,

validateStatus: (status) => status === 302,

httpsAgent, // Use the agent here

});

return response.headers.location;

} catch (error) {

console.error("Error fetching ogImage image:", error);

}

}



async function getMainColor(url) {

try {

const urlSuffix = "?imageAve";

const aliyun = "aliyun";

//记得去添加自己常用文章图片的关键字,以及获取图片主色的方式

//我这个是由于我用的阿里云的,于是这样写的

if (url.includes(aliyun)) {

urlSuffix = "?x-oss-process=image/average-hue";

const response = await axios.get(`${url}` + urlSuffix);

return response.data.RGB;

}

const response = await axios.get(`${url}` + urlSuffix);

const mainColorData = response.data.RGB; // Access the RGB field

const mainColor = `#${mainColorData.slice(2)}`;

return mainColor;

} catch (error) {

console.error("Error fetching main color:", error);

}

}



function processFiles(dir) {

const files = fs.readdirSync(dir);



for (const file of files) {

const fullPath = path.join(dir, file);



if (fs.statSync(fullPath).isDirectory()) {

processFiles(fullPath);

} else if (path.extname(fullPath) === ".md") {

addCoverAndMainColor(fullPath);

}

}

}



function formatISO8601ToCustomFormat(isoDateString) {

// 检查输入是否已经是目标格式("yyyy-MM-dd HH:mm:ss")

if (/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/.test(isoDateString)) {

return -1; // 如果已经是目标格式,则直接返回

}

const pubDateTime = new pubDateTime(isoDateString);



const year = pubDateTime.getUTCFullYear();

const month = (pubDateTime.getUTCMonth() + 1).toString().padStart(2, "0");

const day = pubDateTime.getUTCDate().toString().padStart(2, "0");

const hours = pubDateTime.getUTCHours().toString().padStart(2, "0");

const minutes = pubDateTime.getUTCMinutes().toString().padStart(2, "0");

const seconds = pubDateTime.getUTCSeconds().toString().padStart(2, "0");



return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;

}



async function addCoverAndMainColor(filePath) {

const content = fs.readFileSync(filePath, "utf8");

const yamlSection = content.match(/---\n([\s\S]*?)---/);



if (!yamlSection) return;



const data = yaml.load(yamlSection[1]);



let updated = false;



if (data.pubDateTime) {

const _date = formatISO8601ToCustomFormat(data.pubDateTime);

if (_date === -1) {

updated = false;

} else {

data.pubDateTime = _date;

updated = true;

}

}



if (data.update) {

const _update = formatISO8601ToCustomFormat(data.update);

if (_update === -1) {

updated = false;

} else {

data.update = _update;

updated = true;

}

}



if (!data.ogImage) {

data.ogImage = await getCoverImage();

updated = true;

}



if (!data.main_color) {

data.main_color = await getMainColor(data.ogImage);

updated = true;

}



if (updated) {

const updatedYaml = yaml.dump(data);

const updatedContent = content.replace(yamlSection[1], updatedYaml);

fs.writeFileSync(filePath, updatedContent, "utf8");

console.log(`Updated: ${filePath}`);

}

}



processFiles(POSTS_DIR);



hexo.on("before_generate", async () => {

console.log("Automatically updating ogImage and main color...");

await processFiles(POSTS_DIR);

console.log("ogImage and main color updated successfully!");

});



//在文件底部添加这段代码

hexo.on("before_generate", async () => {

console.log("Automatically updating ogImage and main color...");

await processFiles(POSTS_DIR);

console.log("ogImage and main color updated successfully!");

});

为啥要买房

传统

一般普通人会在什么时候买房那,大部分都是结婚的时候,女方要房子的时候。站在女方的立场上,想要在结婚之后有一个稳定的居所没啥问题,要求房子其实也没啥问题。但是要考虑到当前世界是什么样子的,如今的房价是个人都知道太贵了,基本上要掏空六个钱包才行,确实是要好好考虑一下才行。

那么房子提供给我们的到底是什么那?一个稳定的居所,内心的安定,以及周围的配套设置,还有经典的学区房。所以其实买的不仅仅是一个房子,更多的是这一系列的东西和它捆绑在一起了,那么我们就一个一个来分析,这到底是真的都捆绑在一起吗?还是说是我们观念导致的

稳定的居所,这个确实有,但是问题是你的工作稳定吗?如果没有一个稳定的工作,那么要一个稳定居所有啥用?稳定的居所适合有稳定工作的人,如果你还没有一份稳定的工作,那么抱歉,这个可能你没啥体验。当你换了一份工作的时候,通勤时间比较久的时候,你是否还会感觉开心,而且还不敢休息,不敢失去工作每个月都要还贷款

内心的安定,这个确实是我们深受国家传统观念的影响,即使是我说的可以一直租房,但是其实我内心还是希望拥有一套自己的房子,可是这是在自己的承受范围内,如果拥有这个需要我背负巨额的负债,不敢失去工作,不敢消费,只能做牛马,那其实我感觉租房也可以

周围配套设施,这个确实,但是你要事先考察好周围才行,如果你之后不满意,你也无法改变,只能接受,反倒是租房如果住了一段时间,觉得厌倦了,就可以换个地方,只是搬家比较麻烦,但是现在这个时代,只要你愿意付钱,就会有专门的公司来承接这种服务,直接找房子即可

学区房,在国内好多人买房子的一大重要原因就是房子是和附近学校绑定的,但是从目前大趋势来看,未来随着国内出生率不断下降,人口越来越少,很多东西就会变化,其实目前已经有一些地方来提供租售同权的政策了。那什么是租售同权的?其实就是你租房子和买房子拥有一样的权利了,你租房子的孩子也可以在附近的学校上学了,那么这样一旦放开的话,对房地产又是一个很大的打击,所以说未来来看学区房也是一个伪概念了

房子

最近看b站视频有个很有意思的观点,就是在讨论房子属性的时候,女方说 目前提供建议:以投资为目的的时候可以买房,但是你如果以投资为目的不建议。男方就立马反驳道:房子这个东西本来就是有两种属性的,投资和消费属性的,而且金额还很大,你是无法把他当做一个日常的消费品的,你只要是买房子,那么这就必然是一种投资行为

我听到之后非常认同,房子这东西你但凡是买了,那就必然是一种投资行为,这是无法避免的,即使你嘴上不承认。其实过去的几十年中,那么多人为啥有了钱都买了房子,他们都觉得稳定,稳定的什么?稳定增值啊,但是到如今这个时间点就不太行了,房价大部分都在下跌,好多人都在降价出手了,这明显可以反应出来目前大家都对未来预期不好,都想把握好自己的现金流。

国外

国外其实很多地方也是房价很高的,大部分都是选择租房的,而且他们没有我们中国传统观念的束缚,不是说非要买一套房子才行,只要有地方住就可以了。这才回归到房子的本质,居住。由于国外基本上都实现了租售同权的,所以基本上都是选择租房了,这也就是国内未来发展的一个大趋势。

总结

  • 刚需房,学区房都是伪概念

  • 房子这个东西本来就是有两种属性的,投资和消费属性的,而且金额还很大,你是无法把他当做一个日常的消费品的,你只要是买房子,那么这就必然是一种投资行为

  • 随着国内人口增长率进一步下降,房价大幅涨上基本不太可能,核心城市核心地区当然还是很吃香,但是三四线以及以下城市最好还是不要买房了,否则可能不太好转手卖出去了

  • 如果真的是决定定居在一个城市了,女朋友还非要房子才行,你们也都想清楚了,那我只能说尊重个人选择了

  • 除非你是真的很有钱,可以全款之类的,否则都不建议买房!!!

有两种方式,一种是使用私钥公钥的方式,另一种是使用token的方式来进行的

对比

私钥公钥的方式比较麻烦,就是你每更换一个电脑,都需要将自己 ssh 链接github的私钥保存在actions的那个 变量里面,而token的方式就是设置一次即可,下次换个电脑只要保证自己可以连接到github上就可以了

下面只演示token的方式是如何进行的

token

在hexo源代码仓库新建一个github action,内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127

name: 自动部署

# 当有改动推送到master分支时,启动Action

on:

push:

branches:

- master

#2020年10月后github新建仓库默认分支改为main,注意更改

permissions:

contents: write

jobs:

deploy:

runs-on: ubuntu-latest

steps:

- name: 检查分支

uses: actions/checkout@v2

with:

ref: master



- name: 安装 Node

uses: actions/setup-node@v1

with:

node-version: "16.x"



- name: 安装 Hexo

run: |

export TZ='Asia/Shanghai'

npm install hexo-cli -g



- name: 缓存 Hexo

id: cache-npm

uses: actions/cache@v3

env:

cache-name: cache-node-modules

with:

path: node_modules

key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}

restore-keys: |

${{ runner.os }}-build-${{ env.cache-name }}-

${{ runner.os }}-build-

${{ runner.os }}-



- name: 安装依赖

if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }}

run: |

npm install --save

- name: Setup Git Infomation

run: |

git config --global user.name 'sunheyi'

git config --global user.email '1061867552@qq.com'

- name: 生成静态文件

run: |

hexo clean

hexo bangumi -u #bilibili番剧更新

hexo generate



- name: 部署到Github

uses: JamesIves/github-pages-deploy-action@v4

with:

token: 你的token 记得将这个仓库改为私有仓库,当然你也可以设置为仓库然后用sercret.token的方式来引用它

repository-name: sunheyi6/sunheyi6.github.io

branch: main

folder: public

commit-message: "${{ github.event.head_commit.message }} Updated By Github Actions"

这里需要注意的是,当你都完成了 代码也推送到github page的时候,你需要去vercel或者你选定的一个厂商中将github page这个仓库部署起来就可以了,否则这个页面一直显示都是空白页面!!! 部署之后需要改这个域名为你自己想要设置的域名,如下图

image-20231127093602904

我因为这个问题搞了一天,哎!

域名供应商查找

前言

之前我总是在找我的一个域名sunheyi.top 是在哪里购买的,忘记那个购买域名的地址了,我搜了半天总是找不到如何去查找这个购买域名地址,今天早上我又查了一个小时吧,终于找到了,在此记录一下

正文

直接访问这个网址,输入自己的域名即可,例如下图

img

红色部分就是那个购买域名的地址了,登录进去就可以看到自己购买的域名了

img

前情提要

简单介绍下我的感情经历,除了高中有一个女孩给我主动表白之后,就没有再谈过恋爱了,大学没有谈过,一直到现在了,如果高中不算的话,其实就是母胎solo 26年,高中那段还结束的很戏剧,哎!

目前是三月份回到河南省一个小县城工作了,至今已经工作了五个月了,相亲了六七个吧,现在突然闲来无事,不如写个文章纪念一下。

中间差不多没有什么值得纪念的事情的话,就直接略过了

女嘉宾

第一位

公务员,网上聊了几个月,感觉还行,回来老家,看了个电影,然后回来之后微信就说不合适了,我调侃了下,说我觉得挺合适的呀,她说你别开玩笑,就这样不了了之了,到现在为止 中间似乎突然找她聊天过,她已经谈恋爱了,是从一个桌游上认识的,她觉得目前的变化就是从一个人的无聊变成了两个人的无聊,我听到后 不知道作何回复了,以为刚开始都是甜甜的恋爱那

她是目前为止就是拒绝之后还继续微信回我消息的人了,我相亲了六七个吧,大部分都是见一面回去微信就不回话了,我也懂得,不回话就是一种拒绝了,不会去自讨没趣,下一个。

中间她还说了拒绝我的一个理由是,不喜欢相亲这种形式,感觉目的性太强了,不舒服。

经验教训

  • 都已经相亲了,不要在网上聊太长时间,大概认识之后,就直接线下见面,可能见一面人家看不上你就直接不用聊天了,浪费时间

  • 你发消息 几天不回复 基本上就是不感兴趣,建议下一个,不要当舔狗,舔狗没有未来

第二位

初中教师,吸取之前经验教训,微信加上之后,大概聊天之后,就约了第一次见面,我开车去她学校门口接她,去吃的县城里唯一一家的海底捞,饭桌上,她有些奇怪,她吃火锅不吃酱料,各种都是直接吃的,吃的很少,说是胃里不太舒服,那我也没有强迫她,就自己吃的多了一点,中间吃饭聊天感觉还行,结账两百多,她问我要不要人均,我想着,我第一次请客吃饭,就没有必要aa了吧,于是大气一挥,不用,于是就送她回学校让她骑自己电动车回家了。微信上之后回复也是不合适,本以为这件事就这么结合了,没有想到这件事情还有后续。

家里人有一天突然给我说,这个女的回去和自己的家人说,我第一次请她吃海底捞,就花了两百多,这消费太高了,她感觉消费观不太一样,我大为震惊,第一次听说请客吃饭太贵了,然后觉得不合适的,直接刷新了我的三观。老家这边其实平均工资也就是3k左右,尤其她是教师,说是教师的圈子,大家可能都比较节俭,这我可以理解,但是她是因为这说不合适,也是震惊到我了,当然也可能这只是觉得不合适然后随便给的一个理由而已。

经验教训

我只管做好自己的,至于对面怎么说,不去管他,毕竟啥人都有,各种奇葩理由也是丰富多样。

其实中间还和一些认识的人,说是按照家里这月薪3k的水平,每次去见一个相亲对象的时候,都不要花费一两百这样,直接去买杯奶茶,随便去路边或者一个地方坐坐就行了,要不一个月多见几个相亲对象,一个月工资都没有了。我后来想想也确实,但是一直没有付诸于实践过,有点不好意思。

第三位

幼师,临时工,不是在编的幼师,她是我大靖介绍的,她问我的大靖叫做老姨的,关系很近,聊了几次,感觉也还行,就是感觉没有什么共同的兴趣爱好,家里人让继续聊,我也就继续了,昨天晚上一起吃饭,突然说到 我们这关系太近了,当朋友可以,如果谈恋爱的感觉有些奇怪,其实我也这样觉得,如果分手或者闹矛盾什么的,家里人都来说,就比较尴尬了,看到说的已经这么明确,我已经知道她这就是明确的拒绝了,那挺好,就下一个吧。

经验教训

  • 不要去找关系太近的亲戚谈恋爱,如果有啥矛盾都会搞的人尽皆知,很麻烦

第四位

我姑姑和我表弟在逛街的时候一个卖鞋的老板娘的女儿,要了电话,加了微信,就开始聊天了,她的工作和我的工作有一些相同的地方,因此还算是有些共同话题,约了几次吃饭,崩盘的时刻,在于第三次见面的时候,先去吃了烧烤,然后去一个那种小的放映室一起看 巨齿鲨2,看了一会,由于之前听说什么约了一个月就可以 牵手试试之类的,于是我那个时候有些上头,心里总在想这个事情,那颤动的手,看看她的手距离好远,心想,这氛围不对,强行牵扯好尴尬的,踌躇犹豫了好久,突然就猛的一下决心,手就准备去牵她的手,果不其然,我被拒绝了,她还问我,你干啥,我就趁机说了几句,你觉得我怎么样之类的话,她说还行,真诚,老实,我说那要不我们谈谈试试,她犹豫了一会,说让她想想再说好突然,我那,当时,上头,又强行牵了一次,结果把人家女孩吓到了估计,借口上厕所就走了。之后回去微信就不怎么搭理我了,过了一周之后,就突然怎么都不搭理我了,我也就不想搭理她了,不想当一个舔狗,如果人家真的没有一丁点想法,我又何必庸人自扰那

经验教训

  • 我发现自己可能没有了喜欢的能力,不知道喜欢一个什么样子的女孩,感觉自己是很被动的,然后自己也没有什么特别的才华,或者相貌,家室或者什么,等待女孩来示好也明显不太可能,尬住

  • 这次上头的原因很简单,其实就是最近开始对女性有了这个所谓的性冲动,在之前的二十几年当中,似乎是没有的,或者说是被压抑的,没有自己鲁管过,好像大部分都是一梦无痕吧,精满自溢 吧。

  • 男人还是要把控住自己不要被下半身支配才行,要理智,在合适的氛围做合适的事情才行,要不就会成我这样,被对方当成禽兽,然后从此失去机会

  • 还是要找自己喜欢的才行,至少要有所谓的crush才行,不能强来,即使是性冲动的crush

0%