解决每次 unraid 重启以后 immich 账户丢失问题
最近购入了一台天钡 Wtr pro amd 版,安装 unraid 后部署了最新版 immich,但是发现每次重启 unraid 后 immich 的账户都会丢失。经排查发现是 env 文件中 DB_DATA_LOCATION 设置错误导致的。
错误设置为:
1234# The location where your uploaded files are storedUPLOAD_LOCATION=/mnt/user/immich# The location where your database files are storedDB_DATA_LOCATION=/volumn1/...
正确设置为
1234# The location where your uploaded files are storedUPLOAD_LOCATION=/mnt/user/immich# The location where your database files are storedDB ...
解决python-wordpress-xmlrpc上传文章后发布时间为8小时后
上篇文章介绍了如何使用 Python 自动上传更新 Markdown 格式的文章到 WordPress,但是上传后发现发布时间总是在设定时间的8小时以后。搜索了很多方法都不起作用,所以简单粗暴,上传的时候直接时间减8小时即可。
12from datetime import timedeltapost_modified_date = post_modified_date - timedelta(hours = 8)
这样处理似乎通用性欠佳,因为我们能确定这个问题和时区有关,因此可按照本地时区确定 timedelta。
tzlocal.get_localzone().key 获取当前系统时区名
pytz.timezone(时区名) 将时区名转换成时区信息
datetime.now(时区信息).utcoffset() 获取当前时区和 UTC 时区的偏移量 timedelta123import tzlocalimport pytzlocal_timedelta = datetime.now(pytz.timezone(tzlocal.get_localzone().key)).utcoff ...
使用Python自动上传或更新Markdown文章到WordPress
工具
python-wordpress-xmlrpc
python-markdown
python-frontmatter思路Markdown 写文章免除了排版的苦恼,适合简单记录。以前使用 Hexo 发布文章,在开头往往需要打上分类、标签等方便查找。我一般使用 Jekyll-style YAML 格式在 Markdown 文件开头建立元数据,如下图所示。现在我要同时发布文章到 Hexo 和 WordPress,查找了些资料,整理出一个 Markdown 直接发布到 WordPress的思路:
使用 python-frontmatter 库识别 Jekyll-style YAML 格式文件的元数据和内容。
使用 python-markdown 将 Markdown 格式内容转换成 Html 形式。
使用 python-wordpress-xmlrpc 调用 WordPress 的 xmlrpc 接口进行文章上传、修改等操作。代码获取 Markdown 文件数据12345678910111213141516171819import datetimeimport frontmatteri ...
将博客从 Hexo 迁移到 Wordpress
写在前面博客很久没有更新了。一方面是由于本人并不是计算机从业人员,编程只是个人爱好,疫情期间过于忙碌,没有精力做工作以外的任何事情。另一方面是人到中年,有太多更加重要的事情需要去做。最近有些闲暇时间,发现原来的博客在新版 Hexo 下还能很好的运行,遂重新捡起来,写篇博客聊以纪念。
迁移也不能算迁移,因为看到 Wordpress 建站的优点,想尝试一下,又没有内容,所以索性把旧博客的内容搬到 Wordpress,网址是:blog.yeureka.cn。本次迁移参考了 onekyle 的 HexoToWordPress 库。代码非常简单,只需两步:
将 md 中的信息抽取
将获得的信息发布到 Wordpress
onekyle 已经把完全写好了这两步需要用的方法,直接调用即可。需要注意的是,该仓库用到的 frontmatter 库名为 python-frontmatter,注意不要安装错即可。
代码1234567891011121314import osfrom blog_uploader.markdown_parser import parse_markdownfrom blog_ ...
Roam Research图片链接一键替换保存工具
缘由由于Roam的调整,无法加载http链接图片,只能加载https链接图片,而本人RoamResearch中的图片存放在七牛云,https链接需要收费,因此转用又拍云,需要将笔记中所有图片链接转换到又拍云。
功能说明下载RoamResearch的图片并利用Picgo上传到新图床备份,同时用新图床链接替换原有图片链接,生成新的json文件可重新导入RoamResearch中。
依赖
requests
pysimplegui
Picgo使用方法下载安装1234567# 下载并进入文件夹git clone https://github.com/yeureka/RoamTools.gitcd RoamTools# 使用 pipenv 安装虚拟环境pipenv install# 打开python RoamToolUI.py
使用前准备首先需要将RoamResearch文章导出为json格式文件。然后打开本工具。由于RoamResearch原生图片存放在google,众所周知的原因下载这些图片需要使用代理。点击设置按钮可设置代理服务ip。12345678 ...
Python进程+协程——从零开始搭建异步爬虫(2)
在上节中,我们成功的在多进程中利用协程实现了多任务异步执行和多流程按次序执行的目标。本节我们将在原有代码的基础上继续改造代码,增加网页请求功能,实现一个简单的异步爬虫,实现每次爬新网页只需要关注网络请求、网页解析和数据处理,多进程和异步请求部分由爬虫自身处理。
详细流程图
需要用到的库Beautifulsoup:一个可以从 HTML 或 XML 文件中提取数据的Python库。
1234# 安装方法cd AiospiderWorkshoppipenv shellpipenv install beautifulsoup4
创建下载类 Downloader我们以崔庆才崔老师建立的爬虫练习网站 https://scrape.center/ 为练习对象。我们用到的是其中最简单的一个网页 https://ssr1.scrape.center/page/1。阅读本节需要对 Beautifulsoup 库和 aiohttp 库有简单了解。
新建一个 py 文件,验证下载类 Downloader 的功能。
建立一个函数备用,从网页抽取电影名并打印到屏幕上。
1234567from bs4 im ...
Python进程+协程——从零开始搭建异步爬虫(1)
很多人入门 Python 是从爬虫开始的,笔者也不例外。爬取大量网页需要用到多进程、多线程、协程等等特性,而这类代码的编写往往比较繁琐,如果经常需要爬取不同的网页,我们往往会用到 scrapy 等爬虫框架以减少工作量。笔者最近正好需要大量爬取一些内容,本着学习的目的,我们不使用爬虫框架,从零开始搭建一个简单的异步爬虫。
目标
利用协程异步请求网页。
利用多进程加快爬取速度。
提供需要请求的链接,设定好处理流程后,程序自动按顺序处理。
简易流程图
需要用到的库
pipenv 创建虚拟环境,以免影响原有环境
aiohttp 是基于 asyncio 实现的HTTP框架
环境搭建
安装 pipenv(参考官方教程)
打开终端,在合适的位置创建文件夹,并进入文件夹
12mkdir AiospiderWorkshopcd AiospiderWorkshop
创建虚拟环境
1pipenv install --python 3.8
更换 pipenv 源为阿里云源
123456# 打开 Pipfile 文件,修改 source 部分如下[[source]]url = &qu ...
PAT(Basic Level) 1017 A除以B (20)
本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。
项目
要求
时间限制
100 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。
输入格式输入在1行中依次给出A和B,中间以1空格分隔。
输出格式在1行中依次输出Q和R,中间以1空格分隔。
输入样例123456789050987654321 7
输出样例17636684150141093474 3
代码实现C语言1234567891011121314151617181920212223242526272829303132#include <stdio.h>#include <string.h>int main() { char A[1000]; int B, quotient, re ...
PAT(Basic Level) 1016 部分A+B (15)
正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA。例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6。
项目
要求
时间限制
100 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA。例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6。
现给定A、DA、B、DB,请编写程序计算PA + PB。
输入格式输入在一行中依次给出A、DA、B、DB,中间以空格分隔,其中0 < A, B < 1010。
输出格式在一行中输出PA + PB的值。
输入样例13862767 6 13530293 3
输出样例1399
输入样例23862767 1 13530293 8
输出样例20
代码实现C语言1234567891011121314151617181920212223#include <stdio.h&g ...
PAT(Basic Level) 1014 福尔摩斯的约会 (20)
大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。
项目
要求
时间限制
100 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue
大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”,因为前面两字符串中第1对相同的大写英文字母(大小写有区分)是第4个字母’D’,代表星期四;第2对相同的字符是’E’,那是第5个英文字母,代表一天里的第14个钟头(于是一天的0点到23点由数字0到9、以及大写字母A到N表示);后面两字符串第1对相同的英文字母’s’出现在第4个位置(从0开始计数)上,代表第4分钟。现给定两对字符串,请帮助福尔摩斯解码得到约会的时间。
输入格式输入在4行中分 ...