2025-04-19 13:26:00
有时候想给网站某标题特定使用一个字体,但是整个字体包可能会有几十MB大小,利用字体编辑器可以提取我们需要的那几个字,直接将字体包压缩到几KB。
首先打开 查看字符编码 ,输入你需要提取的字,如:
右侧的“Unicode编码16进制”可以方便我们定位文字,打开 字体编辑器 ,新建一个项目,导入完整的字体包,点击菜单上的“查找字形”,选择uni编码,粘贴上一步的编码,需要在前方加入“uni”。
回车就会准确定位到我们需要的文字上,接下来就是CV大法了,新建一个项目,把需要的文字复制进去:
搞定之后直接导出成字体文件就可以放进网站使用了。
当然还有更方便的办法,用python可以自动化操作,有需求的自行问GPT。
2025-03-23 22:49:00
曲折的故事起因源于突然不想使用+86手机号使用TG了,至于原因dddd.
偶然在论坛看到有用户发帖“付邮送giffgaff卡”,于是简单的对giffgaff做了一下了解(以下检测gg卡),gg卡是位于英国的移动电话公司产品,并且提供实体 sim 卡且免实名,还可自由切换为 esim,或再换回实体 sim 卡。
拿到卡激活时选择“Pay as you go”套餐,在中国内地的漫游费用即为:收短信免费,发短信 £0.3/条,接打电话 £1/分钟,流量 £0.2/MB。所以此卡的主要作用是只收短信,免实名注册各类境外账号。
我果断的支付6元邮费拿了一张,第二天就收到了卡片,这些人手里或多或少都有从英国寄来的多余卡片,是他们走自己的邀请通道申请的,有人激活后会获得部分奖励,如果你不想走他们的推荐的话可以自己在gg官网免费申请包邮到家,但路途遥远,可能得在一个月后才能收到卡片,所以找他们付个邮费拿一张是最简单的,而且走推荐激活后会赠送5英镑话费,自己直接申请激活的则没有赠送。
简单的在官网操作激活之后,迫不及待的打开TG进行手机号换绑,但TG出了一个谜之操作,换绑提示“我们已经将验证码发送到该帐号(+44 XXXXXXXX)其他设备上的 Telegram应用。”
大致意思就是我的gg号码已经有人注册账号了,并且还在线,验证码发到了登陆者的设备上。
一脸懵逼的我一脸懵逼,给TG发邮件苦等也没有结果,恰好网友说gg可以在官网免费换两次号码,去换一个号码再试试。
于是我马上去官网换号码,但必须在他们的工作时间才能操作换号(页面会有提示在不在更换时间内)。
直接输入密码后页面就会显示新的号码了,这时候手机里的卡会短暂的出现无服务现象,稍等一会后信号就会恢复,这时候就可以使用新的号码了。
可当我拿着新号码去换绑时,TG上依旧显示“我们已经将验证码发送到该帐号(+44 XXXXXXXX)其他设备上的 Telegram应用。”
我突然意识到这可能是TG的一种机制,于是我随机乱输入一些号码,结果都是这个提示,当我尝试更换为其它+86手机号时,正常发送了。
姑且判定是TG不允许+86手机号换绑海外手机了?
于是我直接用新的+44 手机号在我的苹果设备上注册了一个新的TG号,这次直接正常发送短信验证码了,但是注册成功之后不过一分钟就弹出了:“此手机号码已被封禁。”
网上搜索了一下什么情况,大概是设备上登录账号过多(一共登录3个),且短时间内同一IP设备不停的发送验证码,被TG判为刷号给封了,网上给了一些申诉方案,但我觉得麻烦,且不知道要等待多久,于是打算明天消耗掉最后一次更换gg号的机会重新注册(gg在24小时内只能更换一次号码)。
第二天卡点更换了新的号码,这次我拿了另外一部安卓手机,且使用了住宅IP进行注册,从中午注册到现在,账号还是一切正常,应该不会出什么问题了,先在同设备IP挂个一个月沉淀沉淀,之后就着手注销掉两个+86账号了。
补充一句如果你也想入手gg卡,请确保自己有外币卡哈,比如VISA等,因为激活时需要充值10英镑。
参考阅读文章:https://www.hui.ke/posts/giffgaff/、https://dnswiz.com/read-1940-1.html
另外,gg卡默认是开启语音信箱的,也就是有来电时,我们拒接后会转入语音信箱,这时候也会收取我们的话费,所以需要关闭这个功能。
网上说的是在拨号界面输##002#,但其实gg早就关闭这个通道了,需要在gg官网提工单关闭才行。
2024-10-09 13:02:00
以前找moe.one要了一个TG新帖推送插件,我上TG上的少没细心关注,这几天才发现这个推送机器人抽风很厉害,不能做到实时推送,中间会间隔一堆才推一次,看不懂代码逻辑,于是自己在网上找了RSS订阅BOT部署,试了两个用的人多的项目,都是docker部署,我想改改消息格式都不知道怎么下手,实在对docker不懂...默认的消息格式让我强迫症实在难受,于是让AI配合写了如下Python脚本,此文记录一下搭建步骤,避免以后有需要时又要去找AI掰扯。
打开服务器终端,安装Python和所需库
安装 pip
更新包列表:
apt update
安装 python3-pip:
apt install python3-pip
安装完成后,确认 pip 是否正确安装:
pip3 --version
正常会返回 pip 的版本信息。
安装所需库
pip3 install feedparser requests python-telegram-bot
下一步,我们需要去Telegram创建Bot,在TG里搜索@BotFather,进入对话框,输入/newbot以创建新机器人,然后回复一个机器人名字,再回复一个机器人的用户名,需要带bot,可以参考截图设置:
@BotFather会回复你一个机器人的HTTP API,保存它,后面会用到。
进入刚刚创建的机器人对话框,将他拉进一个你需要推送的群,或者直接给你自己推送也行,拉群记得给它管理员和消息权限。
TG搜索@get_id_bot,进入对话框点击右上角,将他拉到刚刚的群里,在群聊对话框输入:/my_id@get_id_bot发送,会得到一个-开头的群聊ID,记录它,包括-符号。
信息获取完成,接下来就是创建脚本了,回到服务器终端
mkdir dalaorss
cd dalaorss
nano rss_bot.py
import feedparser
import logging
import asyncio
import json
import os
from telegram import Bot
from telegram.error import TelegramError
# Telegram Bot Token 和目标聊天 ID
TELEGRAM_TOKEN = 'Bot Token'
CHAT_ID = '群ID'
# 存储已发送的帖子 ID 的文件
POSTS_FILE = 'sent_posts.json'
# 读取已发送的帖子 ID
def load_sent_posts():
if os.path.exists(POSTS_FILE):
with open(POSTS_FILE, 'r') as f:
return json.load(f)
return []
# 保存已发送的帖子 ID
def save_sent_posts(post_ids):
with open(POSTS_FILE, 'w') as f:
json.dump(post_ids, f)
# 从 RSS 源获取更新
def fetch_updates():
feed_url = "订阅地址"
try:
return feedparser.parse(feed_url)
except Exception as e:
logging.error(f"获取 RSS 更新时出错: {e}")
return None
# 转义 Markdown 特殊字符
def escape_markdown(text):
special_chars = r"_*~`>#+-.!"
for char in special_chars:
text = text.replace(char, f"\{char}")
return text
# 发送消息到 Telegram
async def send_message(bot, title, link):
# 转义 Markdown 特殊字符
escaped_title = escape_markdown(title) # 转义 Markdown 特殊字符
escaped_link = escape_markdown(link) # 转义 Markdown 特殊字符
# 使用 Markdown 格式,将标题包裹在反引号中以避免超链接,链接直接显示
message = f"`{escaped_title}`\n{escaped_link}"
try:
await bot.send_message(chat_id=CHAT_ID, text=message, parse_mode='MarkdownV2')
logging.info(f"消息发送成功: {escaped_title}")
except TelegramError as e:
logging.error(f"发送消息时出错: {e}")
# 主函数
async def check_for_updates(sent_post_ids):
updates = fetch_updates()
if updates is None:
return # 如果获取更新出错,则返回
new_post_ids = [] # 用于存储新帖子 ID
for entry in updates.entries:
# 从 guid 中提取帖子 ID
post_id = entry.guid.split('-')[-1].split('.')[0] # 提取 ID
# 检查是否为新帖子
if post_id not in sent_post_ids:
new_post_ids.append((post_id, entry.title, entry.link)) # 存储 ID, 标题和链接
# 如果有新帖子,按 ID 升序排序并发送最新帖子
if new_post_ids:
new_post_ids.sort(key=lambda x: int(x[0])) # 升序排序
latest_post_id, title, link = new_post_ids[0] # 获取最新的帖子
async with Bot(token=TELEGRAM_TOKEN) as bot:
await send_message(bot, title, link)
# 更新已发送的帖子 ID
sent_post_ids.append(latest_post_id)
save_sent_posts(sent_post_ids) # 保存到文件
# 主循环
async def main():
logging.basicConfig(level=logging.INFO)
# 加载已发送的帖子 ID
sent_post_ids = load_sent_posts()
while True:
try:
await check_for_updates(sent_post_ids)
except Exception as e:
logging.error(f"检查更新时出错: {e}")
await asyncio.sleep(60) # 每 60 秒检查一次
if __name__ == "__main__":
asyncio.run(main())
nohup python3 rss_bot.py &
现在就可以去更新rss看看推送状态了,这里的脚本内容以我自己论坛为例,如果你也是xiuno论坛那么照抄就行,如果是博客或者其它程序,可能还需要做一些修改。
推送效果:
个人比较喜欢这种格式,如果你喜欢别的模式比如消息内预览,可以使用docker版本的,网上搜一下就有。
脚本运行后,怎么查看或关闭:
检查当前运行的进程
ps aux | grep python
会得到正在运行的进程,查看到rss_bot那条,最前面有一个ID,命令行输入
kill ID
即可停止。
2024-10-05 12:15:00
国庆的时候,智联IDC联系我说:给你赞助服务器,需要啥开口就行。
于是,我要了一台韩国物理机。
大陆优化,我还是保持套用CDN,昨晚已经将论坛迁移上去了,可能是心理作祟,明显觉得响应速度比之前快了。
第一件事还是搞定时备份,数据库好说,压缩下来也就40多MB,搞了个每两小时备份一次到又拍,但是网站压缩包有5GB大,每次自动备份上传都会因为文件过大失败,所以昨晚研究了一下增量备份。
我的操作很简单,这个备份方式也适用所有人,非常方便,以下教程以宝塔为例,把网站数据从主服务器(网站所在)备份到副服务器(专门备份)
首先,安装 rsync:
确保在两台服务器上都安装了 rsync,可以使用以下命令安装,打开终端输入对应命令:
sudo apt-get install rsync # Debian/Ubuntu
sudo yum install rsync # CentOS/RHEL
然后,在主服务器SSH里连接副服务器:
ssh-keygen
ssh-copy-id 副服务器SSH用户名@副服务器IP
回车根据提示输入密码即可,弹出Enter passphrase (empty for no passphrase):
是让你设置密码短语,直接回车不要设置。
然后,在主服务器根目录下的/root/目录里,创建一个文件:backup.sh,内容写:
#!/bin/bash
# 设置变量
SOURCE_DIR="/www/wwwroot/网站目录" # 主服务器上的网站目录
DEST_DIR="副服务器SSH用户名@副服务器IP:/www/wwwroot/网站目录" # 副服务器上的备份目录
LOG_FILE="/root/backup.log" # 日志文件路径
# 输出脚本开始执行的消息
echo "脚本开始执行" | tee -a "$LOG_FILE"
# 使用 rsync 进行增量备份,排除 .user.ini 系统文件
rsync -avz --delete --exclude='.user.ini' "$SOURCE_DIR/" "$DEST_DIR" >> "$LOG_FILE" 2>&1
# 输出备份完成的消息
echo "备份完成" | tee -a "$LOG_FILE"
因为在上面脚本中我们加入了日志,所以还需要在/root目录下手动创建一个backup.log文件,以便备份日志记录。
再次打开终端,执行
chmod +x ~/backup.sh
赋予它执行权限,现在可以运行脚本。执行以下命令:
~/backup.sh
看到提示信息就说明备份成功了,接下来创建一个脚本来定时执行这个任务。
要定时执行 ~/backup.sh 脚本,在终端中运行以下命令,以打开 crontab 编辑器:
crontab -e
crontab 的格式如下:
第一个 * 表示分钟(0 - 59)
第二个 * 表示小时(0 - 23)
第三个 * 表示日期(1 - 31)
第四个 * 表示月份(1 - 12)
第五个 * 表示星期几(0 - 7,0和7都表示星期日)
比如我每小时执行,就是:
0 * * * * ~/backup.sh
按 Ctrl + O 保存,按 Ctrl + X 退出。
查看当前的定时任务是否创建成功:
crontab -l
或者
直接在宝塔定时任务那里添加shell脚本任务,以root身份执行,脚本内容:
sh ~/backup.sh
增量备份机制:
在备份过程中,会比较源目录和备份目录中的文件,它通过检查文件的大小和修改时间来判断文件是否被修改过,如果源目录中的文件被修改,只传输这些变化的文件,而不是重新传输整个目录,这种机制大大减少了需要传输的数据量,提高了备份速度和效率。
假设在主服务器的 /www/wwwroot/www.dalao.net 目录中有以下文件:
file1.txt(未修改)
file2.txt(已修改)
file3.txt(已删除)
当执行命令后:
file1.txt 会保持不变(未修改)。
file2.txt 会被传输到备份服务器,因为它已经被修改。
file3.txt 会从备份服务器中删除,因为它在源目录中被删除了。
以上是网站文件的增量备份,数据库也大同小异,但我没有去做,因为文件不大,直接备份到七牛了,这样增量似乎也可以实现多源站方案。
2024-08-31 20:02:00
几个月前,为论坛上线了“博文贡献”功能,简单的说就是将你的博客绑定上论坛账号,发布博客后系统可以使用你的论坛账号自动将博文发布到论坛并附上你的原文地址,实现“你为论坛添砖,论坛为你加瓦”。
陆续到现在有30多位用户绑定了博客同步,但实际因功能不完善的原因,每次都只有几个博客完成了同步,前天在家调整了一天,适配兼容Atom和RSS2.0,结果总是“你的同步了,他的又不行了。”
忽然想到之前找叶开拿了一个博客的RSS订阅,似乎能获取大部分的RSS(因订阅的博客较少,暂未发现不能获取的),于是直接把这个订阅器的获取代码部分COPY到了论坛上,经测试,30多个绑定博客,已有20多个能正常获取,其余的几个可能因网络问题和爬虫拦截原因没能获取。
但随着想法的延伸,开始担心有人利用此同步方式查看网站访问日志,获取到源站 IP,与益达和叶开交流后,提出了使用代理获取的方案。
本想将此间过程记录,但碍于自己也是东搜西搜,主要还是GPT帮我完成了此方案,所以就不记录那些随手一搜就有的结果了,只讲一下使用的软件吧。
一开始,我选择的是Tor,通过Tor的SOCKS代理访问网站成功,留下的都是Tor分发出来的IP,每次都不同,但都是欧洲那边的,可能访问国内的博客会导致超时等各种原因,总之我在放进PHP里之后,每次进行获取RSS数据都会异常。
尝试几次之后,决定还是自己搭建HTTP代理服务, 先后试了Squid 和 3Proxy,都是遇到一些莫名其妙的错误,也有安装不上的。
最后是使用了Tinyproxy,完美的安装运行,放进了博客和论坛的获取PHP里面,正常的获取数据,留下了代理服务器的IP。现在,我在几台不同的服务器上都安装了Tinyproxy,进行随机使用。
TIPS:如果遭遇恶意攻击代理服务器,还可选择购买别人的代理服务,专门为爬虫做的代理池,以下是我随便找的一个HTTP代理商,买了个一块钱做测试,付费后体验30分钟,会给一个API和令牌,用它来随机获取代理IP。
(避免广告,不提供地址)
一个月20块钱也可以接受的,我测试这个全是国内的IP,请求海外服务器的网站可能就不行了。
更新: 因部分人使用的是国内服务器并且屏蔽了海外IP,导致无法获取RSS,所以我在网上寻觅了2个小时找到了一个性价比还算可以的国内HTTP代理提供商家,支持按请求次数付费,掏腰包买了一个套餐:
(避免广告,不提供地址)
无时间限制,请求数用完即止,在调试的时候需要区分哪个RSS源用哪个区域IP访问,就用了较简单的思路:默认使用购买的代理池获取,如果国内代理池获取不了,再使用自己搭建的海外HTTP服务器获取。
尝试一遍后,发现存在一个浪费请求数的问题,每访问一个RSS源都去请求了一遍代理池,达到了每个访问RSS的IP都是不同的,提倡节约的原则,又加上了一个新的思路:只在获取RSS的第一次请求代理池IP,并存储下来,遇到不能访问的切换到自建IP,下一条RSS再用存储的IP进行访问。只存储3分钟,3分钟过后如果还有新的RSS获取请求,再从代理池拉新的IP(代理池规定的动态IP存活时间在3分钟左右)。
这或许也并不能完全的隐藏源站IP,但也并不会很直观的就把源站IP暴漏出去。
欢迎你也加入论坛绑定自己的博客,如果绑定后无法同步,请尝试放行 User agent 请求标识:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Dalao/1.0 www.dalao.net
PS:该功能已下线。
关于博文同步:因需要保证同步质量,拒绝绑定水文极其严重的博客,包括说说站点、撰写敏感言论的站点、宗教信仰类站点等。
2024-03-07 13:49:00
之前提到了论坛跳H的问题,给它更换了付费SSL之后没几天,我又给域名解析加了DNSSEC。
原本域名的DNS是在华为云的,因为华为云解析免费,而且支持全球各地分区域解析,但唯独不支持DNSSEC,去年就给他们反馈过希望增加这一功能,但没有下文。
国内常用的解析无非是 华为云、阿里云、腾讯云,除开华为云之后,其它两家都支持DNSSEC,但需要开通付费版套餐才能使用,而且分区域解析也被列入了套餐中,比如开通个人版套餐,给你开放国内的华中华北、国外的亚洲欧洲区域解析,开通专业版再给你开放国内的城市线路和国外的国家细分。
我只为DNSSEC,所以选择开通了阿里云的云解析个人版。
DNS切换到阿里云之后,过了一个多星期都没有人反馈跳H问题了,似乎问题得到了解决。
补充一句为什么DNS选择用国内的,因为使用国外的DNS会影响国内的解析访问速度,而且套上CDN之后,CDN也会根据DNS分配成海外的远距离节点。
前几天,我寻思给论坛的服务器找个赞助商吧,虽然不久前才在狗云给机器续费了一年,但拉个赞助不过分吧?
去年使用的是狗云的香港KC A节点,配置拉到了顶配,8H16G,运行论坛妥妥性能过剩浪费钱,不过我利用充值2000赠送的5折折扣,顶配机器一年折扣下来只花了1300左右。
今年春节后,机器年付到期,想着节约一下成本,给配置拉到了4H8G,5折后年付价格700多。
5折是狗云弹性云用户能拿到的最低折扣。
说回找赞助,心想着肯定得找老牌且口碑不错的商家,于是我联系了一下v.ps的老板,之前也有过几次与他的域名交易,说明来意后他二话不说开了一台荷兰的4H4G机器给我,我测试了一番发现效果不太理想,源站放荷兰的话CDN回源延迟太高,除非放弃国内加速,使用CF众生平等。
我联系他,看能不能换个香港的机器,对大陆访问友好一些,可能觉得我挑来挑去太麻烦,就没继续赞助。
我也不能随便找个机器就把论坛往上搬不是,既然用不上,也就不去浪费资源了,顺手把v.ps账户注销了。
最后抱着试试看的态度问了一嘴狗云的老板德克,德克倒是爽快的很,半夜三点给我把机器从香港KC A节点迁移到了性能更好的C节点,并且将机器配置又拉到了顶配8H16G,还问我要不要给机器加个高防IP。
当然狗云给我的并不是纯免费赞助,只是给了我一个极低的折扣,1折。
之前5折年付顶配需要1300左右,现在只需要300出头,一天不到1块钱,属实爽歪歪。
当然我也不可能白嫖赞助,去年一年给狗云AFF推广,百分之十的提成我拿了近2000元,算回去就是给狗云拉了两万元的单子,互利谁也不亏。