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=: 这个参数未被赋值,通常用于指定要包含在图像中的特殊元素或对象列表。

完整的一个请求就是

XXXXXXXXXXXXXXXXXXXt/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脚本

实现自动抓取

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 在这里推一下我的网站"电子鱼"XXXXXXXXp和XXXXXXXXXXXXXXXXXXXX

已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也

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

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

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}