Shell脚本和Python向TinyNote 粘贴板发送请求

Shell脚本和Python向TinyNote 粘贴板发送请求

1- Python requests 发送 post 请求的 使用方法,给出例子(发送内容到 TinyNote 的粘贴板) 2- curl 发送post请求 的方法,给出例子(发送内容到 TinyNote 的粘贴板) 3- 参考青龙面板的curl 请求,使用 Python 的 requests 包 获取天气数据 4- 将第 3 步获取的天气数据发送到 TinyNote 的粘贴板

Python requests 发送 post请求的使用方法,给出例子(发送内容到 TinyNote 的粘贴板)

代码:

# 导入requests库,用于发送HTTP请求
import requests

# 目标URL
url = "https://lzw.fukonglzw.cn:5051/submit_ztb"

try:
    # 定义编程笑话,通过双关语表达程序员对Java的幽默态度
    test = """
    当程序员去餐馆吃饭时,服务员问道:“你要点什么?”
    程序员回答:“我要一份意外和一杯咖啡。”
    服务员奇怪地问:“意外和咖啡有什么关系吗?”
    程序员微笑着说:“我喜欢我的代码像我喜欢我的咖啡一样 —— 有点 bug。”
    """
    
    # 构建请求的数据,将编程笑话放入content字段
    myobj = {"content": test}
    
    # 发送POST请求
    x = requests.post(url, json=myobj)

    # 打印状态码和响应内容
    print("状态码", x.status_code)
    print("响应内容:", x.text)

except Exception as e:
    # 捕获异常并打印错误信息
    print("请求异常:", e)

代码运行:

root@armbian:~/tb# ls
1xh.py  2-curl.sh  3-ztb.sh  4-tqztb.py  test.py  weather_data.json
root@armbian:~/tb# vim 1xh.py
root@armbian:~/tb# python3 1xh.py
状态码 200
响应内容: {"content":"\n    \u5f53\u7a0b\u5e8f\u5458\u53bb\u9910\u9986\u5403\u996d\u65f6\uff0c\u670d\u52a1\u5458\u95ee\u9053\uff1a\u201c\u4f60\u8981\u70b9\u4ec0\u4e48\uff1f\u201d\n    \u7a0b\u5e8f\u5458\u56de\u7b54\uff1a\u201c\u6211\u8981\u4e00\u4efd\u610f\u5916\u548c\u4e00\u676f\u5496\u5561\u3002\u201d\n    \u670d\u52a1\u5458\u5947\u602a\u5730\u95ee\uff1a\u201c\u610f\u5916\u548c\u5496\u5561\u6709\u4ec0\u4e48\u5173\u7cfb\u5417\uff1f\u201d\n    \u7a0b\u5e8f\u5458\u5fae\u7b11\u7740\u8bf4\uff1a\u201c\u6211\u559c\u6b22\u6211\u7684\u4ee3\u7801\u50cf\u6211\u559c\u6b22\u6211\u7684\u5496\u5561\u4e00\u6837 \u2014\u2014 \u6709\u70b9 bug\u3002\u201d    \n    \n********************************************************************************\n"}

详细注释:

1. `import requests`: 导入Python的`requests`库,这个库用于发送HTTP请求。

2. `url = "https://lzw.fukonglzw.cn:5051/submit_ztb"`: 定义目标URL,即将POST请求发送到的服务器地址。

3. `try:`: 开始一个try块,用于捕获可能发生的异常。

4. `test = """ ... """`: 定义一个多行字符串`test`,其中包含编程相关的双关语笑话。

5. `myobj = {"content": test}`: 构建一个字典`myobj`,包含POST请求的数据。笑话被放入字典的`content`字段。

6. `x = requests.post(url, json=myobj)`: 发送POST请求,将`myobj`字典转换为JSON格式,并将其作为请求的数据。

7. `print("状态码", x.status_code)`: 打印服务器返回的HTTP状态码。

8. `print("响应内容:", x.text)`: 打印服务器返回的响应内容。

9. `except Exception as e:`: 捕获可能发生的异常,如果发生异常,执行下面的代码块。

10. `print("请求异常:", e)`: 打印异常信息,用于调试或记录错误。

curl 发送post请求 的方法,给出例子(发送内容到 TinyNote 的粘贴板)

代码:

#!/bin/bash
curl -X POST -H "Content-Type: application/json" -d '{"content": "这是一个笑话:Python走进了一家酒吧,酒吧里的人都说:Hello World!"}' https://lzw.fukonglzw.cn:5051/submit_diary

代码运行:

root@armbian:~/tb# ls
1xh.py  2-curl.sh  3-ztb.sh  4-tqztb.py  test.py  weather_data.json
root@armbian:~/tb# ./2-curl.sh
{"content":"\u8fd9\u662f\u4e00\u4e2a\u7b11\u8bdd\uff1aPython\u8d70\u8fdb\u4e86\u4e00\u5bb6\u9152\u5427\uff0c\u9152\u5427\u91cc\u7684\u4eba\u90fd\u8bf4\uff1aHello World\uff01\n********************************************************************************\n"}
root@armbian:~/tb#

详细注释:

  • #!/bin/bash: 这是指定了脚本运行时要使用的解释器,这里是 Bash。
#!/bin/bash
curl -X POST \
     -H "Content-Type: application/json" \
     -d '{"content": "这是一个笑话:Python走进了一家酒吧,酒吧里的人都说:Hello World!"}' \
     https://lzw.fukonglzw.cn:5051/submit_diary
  • curl: 是一个命令行工具,用于进行 URL 数据传输。

  • -X POST: 指定 HTTP 请求的方法为 POST,表示要向服务器提交数据。

  • -H "Content-Type: application/json": 指定了一个 HTTP 头部,它告诉服务器请求的主体内容(body)是 JSON 格式。Content-Type 是标准的 HTTP 头部字段,用于说明请求或响应中包含的数据类型。在这里,application/json 表示请求的主体是 JSON 格式的数据。

  • -d '{"content": "这是一个笑话:Python走进了一家酒吧,酒吧里的人都说:Hello World!"}': 指定了要发送给服务器的数据。这里使用了 -d 选项,后接的是一个包含笑话内容的 JSON 字符串。这个字符串被发送给服务器作为请求的主体内容。

  • https://lzw.fukonglzw.cn:5051/submit_diary: 指定了目标 URL,这是服务器上一个接收笑话的 API 端点。

参考青龙面板的curl 请求,使用 Python 的 requests 包 获取天气数据,将获取的天气数据发送到 TinyNote 的粘贴板

代码:

# 导入 requests 库用于发送 HTTP 请求
import requests
# 导入 pprint 用于格式化输出 JSON 数据
from pprint import pprint

# 设置城市和和风天气的 API Key
city = '深圳·南山'  # 改成自己需要设置的城市
city_code = "101280601"  # 改成自己需要查询的和风天气的城市代码
hefeng_key = '6894024ab3db4e059ced71bda2bd5737'  # 改成自己的和风天气的 key

try:
    # 发送 HTTP 请求并将 JSON 响应存储到变量中
    response = requests.get(f"https://devapi.qweather.com/v7/weather/3d?location={city_code}&key={hefeng_key}")
    
    # 打印 HTTP 响应对象,用于调试
    print("response: ", response)
    
    # 如果请求失败,抛出异常
    response.raise_for_status()

    # 解析 JSON 数据
    weather_data = response.json()
    
    # 使用 pprint 格式化输出 JSON 数据,用于调试
    pprint(weather_data)

    # 提取所需的信息
    temp_max = weather_data['daily'][0]['tempMax']
    temp_min = weather_data['daily'][0]['tempMin']
    text_day = weather_data['daily'][0]['textDay']
    text_night = weather_data['daily'][0]['textNight']
    wind_direction_day = weather_data['daily'][0]['windDirDay']
    wind_speed_day = weather_data['daily'][0]['windSpeedDay']
    uv_index = weather_data['daily'][0]['uvIndex']
    sunrise = weather_data['daily'][0]['sunrise']
    sunset = weather_data['daily'][0]['sunset']
    moonrise = weather_data['daily'][0]['moonrise']
    moonset = weather_data['daily'][0]['moonset']
    moon_phase = weather_data['daily'][0]['moonPhase']
    humidity = weather_data['daily'][0]['humidity']
    precip = weather_data['daily'][0]['precip']
    pressure = weather_data['daily'][0]['pressure']
    visibility = weather_data['daily'][0]['vis']
    cloud_cover = weather_data['daily'][0]['cloud']

    # 构建天气信息字符串
    weather_info = f"""
    城市: {city}
    最高温度: {temp_max}℃
    最低温度: {temp_min}℃
    白天天气: {text_day}
    夜间天气: {text_night}
    白天风向: {wind_direction_day}
    白天风速: {wind_speed_day} m/s
    UV指数: {uv_index}
    日出时间: {sunrise}
    日落时间: {sunset}
    月升时间: {moonrise}
    月落时间: {moonset}
    月相: {moon_phase}
    湿度: {humidity}%
    降水量: {precip}mm
    气压: {pressure}hPa
    能见度: {visibility}km
    云量: {cloud_cover}%
    """

    # 发送天气信息到指定的 URL
    url = "https://lzw.fukonglzw.cn:5051/submit_ztb"
    myobj = {"content": weather_info}
    response = requests.post(url, json=myobj)

    # 处理响应
    print("状态码:", response.status_code)
    print("响应内容:", response.text)

except Exception as e:
    # 捕获异常并打印错误信息
    print("发生异常:", e)

代码运行:

root@armbian:~/tb# python3 4-tqztb.py

详细注释:
这段 Python 代码的作用是通过和风天气的 API 获取某城市的天气信息,然后将获取的天气信息以 JSON 格式发送到指定的 URL。以下是详细解释:

# 导入 requests 库用于发送 HTTP 请求
import requests
# 导入 pprint 用于格式化输出 JSON 数据
from pprint import pprint

# 设置城市和和风天气的 API Key
city = '深圳·南山'  # 改成自己需要设置的城市
city_code = "101280601"  # 改成自己需要查询的和风天气的城市代码
hefeng_key = '6894024ab3db4e059ced71bda2bd5737'  # 改成自己的和风天气的 key

try:
    # 发送 HTTP 请求并将 JSON 响应存储到变量中
    response = requests.get(f"https://devapi.qweather.com/v7/weather/3d?location={city_code}&key={hefeng_key}")
    
    # 打印 HTTP 响应对象,用于调试
    print("response: ", response)
    
    # 如果请求失败,抛出异常
    response.raise_for_status()

    # 解析 JSON 数据
    weather_data = response.json()
    
    # 使用 pprint 格式化输出 JSON 数据,用于调试
    pprint(weather_data)

    # 提取所需的信息
    temp_max = weather_data['daily'][0]['tempMax']
    temp_min = weather_data['daily'][0]['tempMin']
    text_day = weather_data['daily'][0]['textDay']
    text_night = weather_data['daily'][0]['textNight']
    wind_direction_day = weather_data['daily'][0]['windDirDay']
    wind_speed_day = weather_data['daily'][0]['windSpeedDay']
    uv_index = weather_data['daily'][0]['uvIndex']
    sunrise = weather_data['daily'][0]['sunrise']
    sunset = weather_data['daily'][0]['sunset']
    moonrise = weather_data['daily'][0]['moonrise']
    moonset = weather_data['daily'][0]['moonset']
    moon_phase = weather_data['daily'][0]['moonPhase']
    humidity = weather_data['daily'][0]['humidity']
    precip = weather_data['daily'][0]['precip']
    pressure = weather_data['daily'][0]['pressure']
    visibility = weather_data['daily'][0]['vis']
    cloud_cover = weather_data['daily'][0]['cloud']

    # 构建天气信息字符串
    weather_info = f"""
    城市: {city}
    最高温度: {temp_max}℃
    最低温度: {temp_min}℃
    白天天气: {text_day}
    夜间天气: {text_night}
    白天风向: {wind_direction_day}
    白天风速: {wind_speed_day} m/s
    UV指数: {uv_index}
    日出时间: {sunrise}
    日落时间: {sunset}
    月升时间: {moonrise}
    月落时间: {moonset}
    月相: {moon_phase}
    湿度: {humidity}%
    降水量: {precip}mm
    气压: {pressure}hPa
    能见度: {visibility}km
    云量: {cloud_cover}%
    """

    # 发送天气信息到指定的 URL
    url = "https://lzw.fukonglzw.cn:5051/submit_ztb"
    myobj = {"content": weather_info}
    response = requests.post(url, json=myobj)

    # 处理响应
    print("状态码:", response.status_code)
    print("响应内容:", response.text)

except Exception as e:
    # 捕获异常并打印错误信息
    print("发生异常:", e)

详细解释:
这段代码是一个简单的天气查询和信息发送的脚本,主要使用了和风天气的API来获取天气信息,并将获取的信息通过HTTP POST请求发送到指定的URL。以下是对代码的详细解释:

  1. 导入模块:
import requests
from pprint import pprint
  • requests 是一个用于发送 HTTP 请求的第三方库。
  • pprint 是 Python 标准库中的一个模块,用于以更美观的方式打印数据,特别是对于 JSON 数据。
  1. 设置城市和和风天气的 API Key:
city = '深圳·南山'
city_code = "101280601"
hefeng_key = '6894024ab3db4e059ced71bda2bd5737'
  • city 是要查询的城市名称。
  • city_code 是和风天气中对应城市的代码。
  • hefeng_key 是和风天气的 API Key,用于进行身份验证。
  1. 发送 HTTP 请求获取天气信息:
response = requests.get(f"https://devapi.qweather.com/v7/weather/3d?location={city_code}&key={hefeng_key}")
  • 使用 requests.get 发送 GET 请求,获取和风天气的3天天气信息。
  • {city_code}{hefeng_key} 是通过字符串格式化的方式将城市代码和 API Key 添加到请求的URL中。
  1. 打印 HTTP 响应对象:
print("response: ", response)
  • 用于调试,打印 HTTP 响应对象,查看请求的状态等信息。
  1. 处理请求结果:
response.raise_for_status()
weather_data = response.json()
  • response.raise_for_status() 用于检查请求是否成功,如果不成功会抛出异常。
  • response.json() 将响应的 JSON 数据解析为 Python 字典。
  1. 提取所需的天气信息:
# 从 JSON 数据中提取天气信息
temp_max = weather_data['daily'][0]['tempMax']
temp_min = weather_data['daily'][0]['tempMin']
# ...(省略其他信息提取)
  • 通过访问 JSON 数据的键值来提取所需的天气信息。
  1. 构建天气信息字符串:
weather_info = f"""
    城市: {city}
    最高温度: {temp_max}℃
    最低温度: {temp_min}℃
    白天天气: {text_day}
    ...
    云量: {cloud_cover}%
    """
  • 使用格式化字符串构建包含天气信息的字符串。
  1. 发送天气信息到指定的 URL:
url = "https://lzw.fukonglzw.cn:5051/submit_ztb"
myobj = {"content": weather_info}
response = requests.post(url, json=myobj)
  • 使用 requests.post 发送 POST 请求,将天气信息作为 JSON 数据发送到指定的 URL。
  1. 处理响应:
print("状态码:", response.status_code)
print("响应内容:", response.text)
  • 打印请求的状态码和响应内容,用于调试和确认请求是否成功。
  1. 异常处理:
except Exception as e:
    print("发生异常:", e)
  • 捕获可能发生的异常,并打印错误信息。

总体来说,这个脚本的功能是通过和风天气API获取指定城市的3天天气信息,然后将提取的信息格式化成字符串,通过 HTTP POST 请求发送到指定的 URL。

LICENSED UNDER CC BY-NC-SA 4.0
Comment