用Python下载PHET互动仿真程序
PhET是什么呢?
PhET是一款开放、免费的互动仿真程序。由诺贝尔物理学奖获得者卡尔•威曼于2002年发起,在科罗拉多大学制作、运行。旨在通过自由互动仿真程序,在世界范围内提高人们的科学数学素养。
由诺贝尔奖获得者卡尔·威曼于2002年创立,PhET互动仿真程序计划由科罗拉多大学的团队专项运营,旨在创建免费的数学和科学互动程序。 PhET 是基于拓展型教育的相关研究并且激励学生在直观的、游戏化的环境中进行探索和发现。
PhET官网地址:
为什么要下载PHET互动仿真程序
原因很简单,PhET官网位于国外,要打开这个官网真的需要足够的耐心。最终找到需要的互动仿真程序,没有5分钟是打不开的。PhET官网提供H5互动仿真程序的下载方法,下面的代码的功能就是全自动下载PhET的免费的互动仿真程序。
代码提供的功能
检查更新
程序自动判断下载内容的时间,如果大于7天,则重新检测互动仿真程序的版本号,如果有新的版本,则进行更新下载。
自动下载
全自动的下载PhET的免费的H5互动仿真程序,包括图片和HTML网页。运行中可能会出现超时等问题,这时只需要重新运行代码就可以了。
生成索引页面
会自动生成index.html索引页,打开这个网页,就可以看到下载好的H5互动仿真程序。
Python代码及功能介绍
先上源码
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
PHET网站H5仿真演示实验镜像下载
实现版本对比下载
"""
import datetime
import json
import os
import re
import sys
import time
import requests
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0',
'Connection': 'close'
}
# 在get请求内,添加user-agent
session = requests.Session()
session.keep_alive = False
def down_img(sim_name: str, url: str):
full_path = os.path.join('pub', sim_name+'.png')
if not os.path.exists(full_path):
img = session.get(url, headers=headers).content
with open(full_path, 'wb') as f:
f.write(img)
def file_over_7day(full_path: str) -> bool:
if os.path.exists(full_path):
filemt1 = time.localtime(os.stat(full_path).st_mtime) # 文件修改时间
t1 = time.mktime(filemt1)
filemt2 = time.localtime() # 不带参数就是当前时间
t2 = time.mktime(filemt2)
days = datetime.timedelta(seconds=t2 - t1).days
return days > 7
else:
return True
def get_file_content(full_path: str, url: str) -> str:
if f