MoreRSS

site iconSunZhongWei | 孙仲维 修改

博客名「大象笔记」,全干程序员一名,曾在金山,DNSPod,腾讯云,常驻烟台。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

SunZhongWei | 孙仲维 的 RSS 预览

Python 获取不同时区的当前时间

2025-05-07 22:19:59

需求背景

需要给处于不同时区的用户,显示不同的当前时间。

如果直接使用 datetime.now() 返回的只是服务器的时间,无法满足不同时区用户的需求。

解决方法 ZoneInfo

参考:

https://docs.python.org/3/library/zoneinfo.html

从官方文档可看到,python 3.9 开始内置了这个库。用法:

Python 3.12.3 (main, Feb  4 2025, 14:48:35) [GCC 13.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from datetime import datetime
>>> from zoneinfo import ZoneInfo
>>>
>>> timezone = ZoneInfo("Asia/Shanghai")
>>> now = datetime.now(timezone)
>>> print(now)
2025-05-07 22:04:43.467295+08:00
>>>
>>> timezone = ZoneInfo("America/New_York")
>>> now2 = datetime.now(timezone)
>>> print(now2)
2025-05-07 10:05:42.687649-04:00
>>>
>>> print(datetime.now())
2025-05-07 22:06:53.280776
>>>

定义目标时区(如 'Asia/Shanghai', 'America/New_York', 'Europe/London'),传入 ZoneInfo 即可。

而且这种用法,不会影响 datetime.now() 的值,非常方便。

Magento 自定义模块实现批量导入产品信息 (一)

2025-05-05 21:39:20

背景

通过 Magento Admin 后台手动批量导入 CSV 太慢(在产品比较多的情况下)。需要等待很长时间。

如果能够通过程序,自动化导入批量的 CSV 文件,那就能大大提升效率,减少繁琐的手动操作及等待时间。

而 Magento 又不支持导入的 RESTful API,也不支持命令行,所以只能使用其他的方案。

Magento 定制化模块

网上找到一个方案,看起来是比较靠谱的:

https://magento.stackexchange.com/questions/359280/import-product-data-programmatically-using-csv

里面推荐使用定制化模块。

什么是 Magento 定制化模块呢?

Magento 2 的定制化模块, 旨在为在线商店添加特定功能或特性。它允许开发人员扩展、定制或修改 Magento 的默认行为,而无需更改核心代码。定制化模块可以引入新的产品类型、支付网关、运输方式或其他功能,以满足独特的业务需求。

模块命名

Magento 定制化模块的命名规则是:VendorName_ModuleName。

  • VendorName 是开发者的名字或公司名
  • ModuleName 是模块的名字。

例如:Sunzhongwei_ProductImport。

对应的,需要在 app/code 目录下创建一个名为 Sunzhongwei/ProductImport 的目录。默认安装下,app 目录下是没有 code 目录的,需要手动创建

# ls app/
autoload.php  bootstrap.php  design  etc

# mkdir -p code/Sunzhongwei/ProductImport

新建定时任务配置文件

在 app/code/Sunzhongwei/ProductImport 目录下新建一个名为 etc 的目录。

新建文件:

app/code/Sunzhongwei/ProductImport/etc/crontab.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd">
    <group id="default">
        <job name="import_products" instance="Sunzhongwei\ProductImport\Cron\ImportProducts" method="execute">
        <schedule>*/5 * * * *</schedule>
        </job>
    </group>
</config>

其作用是,每 5 分钟执行一次导入任务。

参考

  • https://www.mageplaza.com/devdocs/magento-2-module-development/
  • https://magento.stackexchange.com/questions/359280/import-product-data-programmatically-using-csv

高新技术企业资格测评微信小程序

2025-05-05 12:09:46

五一小长假节前给一个客户开发了一套高新技术企业测评小程序。主要功能是方便想申报高新企业的客户了解申报过程中的一些细则,以及通过内置的自评工具,及调查问卷功能,方便辅导机构有针对性地进行指导。以下是一些主要功能界面的截图:

首页界面

常见功能 FAQ 界面

可以查看并检索关于高新技术企业在申报过程中的疑问。里面的资料也都是从政府官方资料中摘取的,非常具有权威性。

专家咨询功能

包括在线微信聊天咨询,及电话等联系方式,以及微信地图导航功能。

研发费用占比计算器功能

研发费用占比=企业近三个会计年度的研发费用总额/企业近三个会计年度的销售收入总额×100%。对于不同销售收入等级的企业,其研发费用占比要求也不同,这里会自动进行计算并判断是否符合要求。同时,计算结果也会保持到服务器后台,方便辅导机构有针对性的进行指导。

财税健康检测功能

这是一个类似调查问卷的功能,在完成十道测评题之后,会给出一个检测结果。由于第一个版本我着急出效果,所以直接沿用了之前开发的情商计算器的界面风格。

后台管理系统

同时,这套系统也包含了对应的后台管理系统,可以方便的进行:

  • 客户信息管理
  • 研发费用占比计算结果查看
  • 财税健康检测功能的题库管理

更多功能

这个客户提了很多功能需求,但是我担心功能过多,周期太长,很容易陷入不断返工的大坑。所以,我决定一周一个版本的策略。目前看到的是第一个版本的效果。

对话机器人 Rasa(三十九):使用 Python 编写自动化测试脚本

2025-05-01 20:41:38

之前使用 Bash Shell 脚本来实现的 Rasa 长对话流程的测试(多轮对话,因为很多 bug 只有在多轮对话的特定流程之后才会复现)。 但是,Shell 变量太难搞了,特别是单引号及双引号混用的情况。

例如,下面这段脚本:

#!/bin/bash

set -e  # or use "set -o errexit" to quit on error.
set -x  # or use "set -o xtrace" to print the statement before you execute it.

# 定义一个变量,值为 test_user_ 加上时间戳
user="test_user_$(date +%s)"

# 打印变量的值
echo "user: $user"

curl --request POST \
	   --url http://localhost:5005/webhooks/some_channel/webhook \
	   --header 'Content-Type: application/json' \
	   --data '{
	  "sender": "$user",
	  "text": "hi",
	  "metadata": {"some_var":"some_value"}
	}'

sleep 1

curl --request POST \
	   --url http://localhost:5005/webhooks/some_channel/webhook \
	   --header 'Content-Type: application/json' \
	   --data '{
	  "sender": "$user",
	  "text": "\/some_intent{\"some_entity\": \"some_value\"}",
	  "metadata": {"some_var":"some_value"}
	}'

sleep 1

这里有几个问题:

  • $user 在单引号中是无法展开的。让 DeepSeek 推荐了几个替代方案,但是各有各的问题
  • 如果 data 中的字段 value 中使用了双引号,还得转义,手写麻烦
  • 如果能做成循环就很方便,但是这么多年我都记不住 shell 的循环语法
  • 接口返回的 json,不方便做格式化打印。平时中 shell 中,我也是基于 python 实现的格式化 json

而使用 Python 就能很轻松地解决上面的所有问题。特别是既然已经使用了 rasa,那么开发环境里就内置了 Python,连 requests 依赖都内置了。 就能直接使用了,环境搭建都省去了。

而且使用 VSCode 中的 Github Copilot AI 直接就能将 Bash Shell 转换为 Python,修修补补就能使用了。

Python 测试脚本

import time
import requests
import json

# 全局变量
URL = "http://localhost:5005/webhooks/some_channel/webhook"
HEADERS = {"Content-Type": "application/json"}
SENDER = "test_user_" + str(int(time.time()))
METADATA = {"some_var": "some_value"}

# 定义 text 参数的列表
texts = [
    "hi",
    '/some_intent{"some_entity": "some_value"}',
    "bye",
]

# 循环发送请求
for text in texts:
    payload = {
        "sender": SENDER,
        "text": text,
        "metadata": METADATA
    }
    # 打印当前时间
    current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    print(f"-------- Current time: {current_time} --------")
    print(f"Sending payload: {text}")
    response = requests.post(URL, headers=HEADERS, json=payload)
    print(f"Response status code: {response.status_code}")
    # 将 response.text 的 json 数据格式化输出
    try:
        response_json = response.json()
        formatted_json = json.dumps(response_json, indent=4, ensure_ascii=False)
        print(f"Response JSON:\n{formatted_json}\n")
    except ValueError:
        # 如果无法解析为 JSON,则输出原始文本
        print("Response is not in JSON format.")
        print(f"Response text: {response.text}\n")
    time.sleep(1)

为了节省高级模型的配额,我仅仅使用了 gpt4o 效果就非常理想了。

查看合集

📖 对话机器人 Rasa 中文系列教程

查看 Magento 批量导入的错误日志

2025-04-29 21:12:09

发现 Magento 批量导入 CSV 之后,网站上显示的产品总量跟 CSV 里的行数对不上。

需要查看哪里报错了。

可以登录服务器,在 Magento 项目目录下,查看

ls var/import_history

会发现,除了上传的 CSV 文件之外,还有一些以 error 后缀的文件,例如:

<时间戳>_filename.csv
<时间戳>_filename_error_report.csv

下载 xxx_error_report.csv 之后,用 WPS 打开,会看到最后一列是 error 信息。按提示修正即可。

参考

  • https://magento.stackexchange.com/questions/314162/magento-2-3-product-import-is-still-in-in-progress

VSCode VIM 插件技巧:使用 Windows 剪切板

2025-04-24 20:43:07

需求背景

需要大量搜索某些字符串时(例如,rasa 项目搜索各种 utter_xxx),使用 VIM 模式复制,然后黏贴到 VSCode 的搜索功能,非常麻烦。 还不如鼠标框选 ctrl + c 来的方便。

好在今天在看一篇关于 VSCode VIM 插件使用经验的文章里看到有个配置,可以将 VIM 模式下复制的内容直接存储到 Windows 系统剪切板。

设置方法一

打开 VSCode 设置,搜索 vim clipboard:

勾选 “Use system clipboard for unnamed register”

设置方法二

setting 文件的配置方法

顶部搜索条里,搜素 setting 打开 settings.json 文件,添加配置:

"vim.useSystemClipboard": true

搜索操作新的流程

然后,就可以这样操作了:

// 复制当前字符串
yw

// 打开 VSCode 当前项目搜索功能
ctrl + shift + f

// 将 VIM 模式复制的内容,黏贴到 VSCode 搜索框
ctrl + v

这样就能快速搜索当前的关键词了。

setting 文件是否可以自动同步

只要登录了 github 账号就能自动同步。

参考

  • https://dev.to/ansonh/10-vs-code-vim-tricks-to-boost-your-productivity-1b0n