pushdeer发送markdown错误
如题,在使用pushdeer的时候,发现了如下的问题,先附上代码:import os
from dotenv import load_dotenv
from pypushdeer import PushDeer
from datetime import datetime
import json
import requests
# 加载 .env 文件
load_dotenv()
# 读取配置文件
with open("config.json", "r", encoding="utf-8") as f:
config = json.load(f)
def httpGet(url, params):
try:
response = requests.get(url, params=params)
response.raise_for_status()# 检查请求是否成功
return json.loads(response.content)# 返回 JSON 解析后的内容
except requests.exceptions.RequestException as e:
print(f"GET 请求失败: {e}")
return {"success": False, "message": str(e)}
except json.JSONDecodeError as e:
print(f"JSON 解析失败: {e}")
return {"success": False, "message": str(e)}
# 获取抖音热点热榜
def getDouyinHot():
url = "https://api.vvhan.com/api/hotlist/douyinHot"
response = httpGet(url, {"type": "json"})
if response.get("success"):
data = response.get("data")
douyinHotList = []
douyinHot = ""
for item in data:
index = item["index"]
title = item["title"]
url = item["mobil_url"]
douyinHotListItem = f"{index}. [{title}]({url})"
douyinHotList.append(douyinHotListItem)
douyinHot = "\n".join(douyinHotList)
return douyinHot
else:
print("抖音热榜获取失败")
return ""
# 获取服务器地址和 pushkeys
server = os.getenv("SERVER")
gaoDeKey = os.getenv("GAODE_KEY")
# pushkeys = os.getenv("PUSHKEYS", "").split(",")
pushkey = os.getenv("PUSH_KEY")
# 获取对应方法返回的数据
today = datetime.now().strftime("%Y年%m月%d日")
douyinHotList = getDouyinHot()
def main():
print(type(douyinHotList))
print(douyinHotList)
global pushkey# 声明使用全局变量
pushkey = pushkey.strip()# 去除可能存在的前后空格
# 初始化 PushDeer 对象
pushdeer = PushDeer(server=server, pushkey=pushkey)
# 发送消息
try:
response = pushdeer.send_markdown(f"{today}抖音热榜", desp=douyinHotList)
print("消息发送成功:", response)
except Exception as e:
print("消息发送失败:", e)
if __name__ == "__main__":
main()
运行之后,douyinHotList打印出来是没问题的,有东西,类型也是str,就是发送的这一句,response = pushdeer.send_markdown(f"{today}抖音热榜", desp=douyinHotList)报错,消息发送失败: Expecting value: line 1 column 1 (char 0)
之前用这个pushdeer.send_markdown一点问题都没有,直接发送markdown的图片和链接都可以,这次不知道为什么,大佬帮忙看看 根据您的描述,`response = pushdeer.send_markdown(f"{today}抖音热榜", desp=douyinHotList)`这行代码出现了错误,提示信息是“Expecting value: line 1 column 1 (char 0)”。这是一个经典的JSON解析错误,通常表示服务器返回了一个空响应或者不合法的JSON格式,从而无法解析。
以下是一些可能导致问题以及解决方法的检查点:
1. **API返回数据检查**:确保API `https://api.vvhan.com/api/hotlist/douyinHot`返回的数据是有效的JSON格式,您可以通过直接访问此URL查看返回内容来排除API问题。
2. **PushDeer服务检查**:检查PushDeer的服务器地址、密钥等配置是否正确,并确保PushDeer服务正常工作。可以通过其他简单的测试消息验证推送服务。
3. **空响应排查**:在发生请求错误的时候,打印`response.content`,检查返回是否为空或者非JSON格式:
try:
response = pushdeer.send_markdown(f"{today}抖音热榜", desp=douyinHotList)
print("消息发送成功:", response)
except Exception as e:
print("消息发送失败:", e)
if hasattr(e, 'response') and e.response is not None:
print("返回内容:", e.response.text)
4. **douyinHotList的内容问题**:确保`douyinHotList`的内容是正确格式的字符串。可以在调试时打印它以确认格式是否存在问题。
5. **异常捕获范围**:可能需要增加对其他特定异常的捕获,帮助了解错误的详细信息:
except Exception as e:
print("消息发送失败:", e)
通过这些步骤来诊断和解决问题。如果问题依然存在,可以尝试本地测试PushDeer接口以确保其服务无误,然后根据API返回的数据进一步修正代码逻辑。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 好像找到问题了,附上测试的代码:
import requests
from utils import getDouyinHot
def send_pushdeer_notification(pushkey, title, markdown_content):
# 构建请求URL
url = "https://api2.pushdeer.com/message/push"
params = {
"pushkey": pushkey,
"text": title,
"desp": markdown_content,
"type": "markdown",
}
try:
# 发起GET请求
response = requests.get(url, params=params)
# 检查响应状态码
response.raise_for_status()
# 打印响应内容
print(response.json())
except requests.exceptions.RequestException as e:
# 打印异常信息
print(f"请求失败: {e}")
except ValueError as e:
# JSON解码失败,打印响应文本以便调试
print(f"无法解析JSON响应: {response.text}")
# 示例用法
douyinHotList = getDouyinHot()
pushkey = "xxx"
title = "抖音热榜"
markdown_content = douyinHotList
send_pushdeer_notification(pushkey, title, markdown_content)
报错是请求失败: 414 Client Error: Request-URI Too Long for url: https://api2.pushdeer.com/message/push?
这是官方版本,哎,内容太长了 如默 发表于 2024-11-05 14:08
好像找到问题了,附上测试的代码:
import requests
...
`414 Client Error: Request-URI Too Long` 错误通常表示URL或GET请求的参数太长,从而超出了服务器可以处理的限制。PushDeer的API可能对请求长度有限制。
解决方法是改用POST请求而不是GET请求,因为POST请求可以处理更长的内容体。下面是将请求方式从GET改为POST的示例代码:
import requests
from utils import getDouyinHot
def send_pushdeer_notification(pushkey, title, markdown_content):
# 构建请求URL
url = "https://api2.pushdeer.com/message/push"
payload = {
"pushkey": pushkey,
"text": title,
"desp": markdown_content,
"type": "markdown",
}
try:
# 发起POST请求
response = requests.post(url, data=payload)
# 检查响应状态码
response.raise_for_status()
# 打印响应内容
print(response.json())
except requests.exceptions.RequestException as e:
# 打印异常信息
print(f"请求失败: {e}")
except ValueError as e:
# JSON解码失败,打印响应文本以便调试
print(f"无法解析JSON响应: {response.text}")
# 示例用法
douyinHotList = getDouyinHot()
pushkey = "xxx"
title = "抖音热榜"
markdown_content = douyinHotList
send_pushdeer_notification(pushkey, title, markdown_content)
通过使用POST请求,数据不会放在URL中,而是作为报文体传递,通常能够解决URI过长的问题。希望这能帮助您解决问题!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 5 {:10_254:}{:10_254:} 666 111
页:
[1]