加载中
加载中
表情图片
评为精选
鼓励
加载中...
分享
加载中...
文件下载
加载中...
修改排序
加载中...
YourSky请求体分析 逆向API的尝试
ziyangbai2024/11/17原创 软件综合天文与空间科学 IP:浙江

引入

"Your Sky" 是由 Fourmilab 提供的一个在线天文应用,它可以生成基于特定地理位置和时间的实时天空视图。这个工具允许用户输入观察者的纬度、经度以及日期和时间,从而得到一张显示当时天空状态的图片。这张图片会展示出可见的星星、行星、月亮以及其他天体。

"Your Sky" 可以用来模拟不同的天文条件,比如:

观察者的位置(地球上的任何地点)。

特定的时间点(可以是过去、现在或未来)。

天空的视角(例如地平线以上或全天空)。

显示哪些天体(例如只显示行星或包括所有可见的星星)。

该应用非常适合教育用途,对于天文学爱好者来说也是个非常有用的工具。它可以帮助人们了解在给定时间和地点能看到什么样的天体现象。

Fourmilab 是一家位于瑞士的实验室,以其对互联网技术的创新应用而闻名,其中包括开发了许多与天文学相关的项目。"Your Sky" 是其中一个可以让公众通过互联网探索宇宙的应用程序。

我的StarWalker项目需要使用到星图,YourSky明显是最合适的选择,经过我一段时间的研究,这是我的研究结果

请求体结构

使用一个URL就可以请求到附有一张星图的文档,其URL参数大体如下

date=0: 日期设置模式为现在的UTC时间。使用1设置为定义UTC时间,使用2设置为定义儒略日。

utc=1998%2F02%2F06+12%3A42%3A40: UTC时间设置为1998年2月6日12点42分40秒。date为0/2无效。(其HTML实体编码用半角符号亦可)

jd=2450851.02963: Julian日期(儒略日),与上面的UTC时间对应,用于天文学计算。date为1/0无效。

lat=47%B0: 观测地点的纬度为北纬47°(注意 %B0 是HTML实体编码中的度符号)。

ns=North: 指明纬度的方向是北。

lon=7%B0: 观测地点的经度为东经7°。

ew=East: 指明经度的方向是东。

deepm=2.5: 显示深空天体的最大星等。

consto=on: 显示星座轮廓。

limag=5.5: 图像中显示最暗的恒星星等。

starnm=2.0: 图像中不显示比这更亮的恒星(以星等为单位)。

starbm=2.5: 图像中不显示比这更暗的恒星(以星等为单位)。

imgsize=640: 输出图像的宽度为640像素。

fontscale=1.0: 字体大小的比例。

scheme=3: 使用的配色方案编号为3。

elements=: 这个参数未被赋值,通常用于指定要包含在图像中的特殊元素或对象列表。

完整的一个请求就是

http://fourmilab.net/cgi-bin/Yoursky?date=1&utc=1998%2F02%2F06+12%3A42%3A40&jd=2450851.02963&lat=47%B0&ns=North&lon=7%B0&ew=East&deepm=2.5&consto=on&limag=5.5&starnm=2.0&starbm=2.5&imgsize=640&fontscale=1.0&scheme=3&elements=

为了方便抓取其图片,我写了一个Python脚本

实现自动抓取

Python
import requests import bs4 from bs4 import BeautifulSoup import time def starchart(lat, lon,utctime):     url = "http://fourmilab.net/cgi-bin/Yoursky"     #UTCtime format <Year>/<Month>/<Day> <Hour>:<Minute>:<Second>     params = {         "date""1",         "utc":utctime,         "lat": lat + "%B0",         "lon": lon + "%B0",         "ns":"North",         "ew":"East",         "deepm""2.5",         "consto""on",         "liamg":"5.5",         "starnm":"1",         "starbm":"5",         "fontscale":"1.0",         "scheme":"3",         "imgsize""1000",         "elements"""}     for i in range(5):         try:             response = requests.get(url, params=params)             response.raise_for_status()             soup = BeautifulSoup(response.text, "html.parser")             print(soup)             img_url = soup.find("img")["src"]             img_data = requests.get("http://fourmilab.net" + img_url).content             with open("star_map.png""wb"as f:                 f.write(img_data)             break         except requests.RequestException as e:             print(f"请求失败,重试次数:{i + 1}")             if i < 4:                 time.sleep(2)             else:                 raise e starchart("0""0""2023/10/1 12:00:00")

更改末尾调用模块的参数即可更改经纬度和日期

该程序使用MPL-2.0 license

AD 在这里推一下我的网站"电子鱼"efish.top和ziyang-bai.github.io

新版本公告
~~空空如也

想参与大家的讨论?现在就 登录 或者 注册

ziyangbai
进士 机友 笔友
文章
2
回复
6
学术分
0
2024/11/16注册,3个月7天前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:浙江
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的