鱼C论坛

 找回密码
 立即注册
查看: 172|回复: 7

pushdeer发送markdown错误

[复制链接]
发表于 2024-11-5 13:49:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如题,在使用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的图片和链接都可以,这次不知道为什么,大佬帮忙看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-11-5 14:03:07 | 显示全部楼层
根据您的描述,`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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-5 14:08:26 | 显示全部楼层
好像找到问题了,附上测试的代码:
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?

这是官方版本,哎,内容太长了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-11-5 14:08:45 | 显示全部楼层
如默 发表于 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-11-5 18:15:13 | 显示全部楼层
5
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-11-7 08:38:48 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-11-10 09:15:05 | 显示全部楼层
666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-11-12 08:06:27 | 显示全部楼层

回帖奖励 +10 鱼币

111
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-21 20:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表