找回密码
 立即注册

微信扫码登录

搜索
查看: 2494|回复: 16

[技术探讨] 请求 Python 大佬帮帮忙!!!

[复制链接]

3

主题

38

回帖

332

积分

中级会员

积分
332
金钱
291
HASS币
0
发表于 2024-7-3 10:12:52 | 显示全部楼层 |阅读模式
本帖最后由 17620402030 于 2024-7-3 10:26 编辑

请求 Python 大佬帮帮忙!!!

配置情况:在阿里云 Docker 中安装了 Home Assistant(Core 2024.6.4),且已安装并启用 PythonScriptsPro - 1.0.2 集成。

在 Home Assistant 中,新建 Python 文件,旨在将经纬度通过百度转换成中文地址,然后通过 states.set 新建名为“百度地址”的实体并进行赋值。

然而,在进行 http get 操作时总是出错,不清楚究竟是环境问题还是代码问题,诚求大佬帮忙分析。



import requests
import json
import hass.states  
# 假设已经正确导入了 Home Assistant 的 states 模块

# 替换为你在百度地图开放平台申请的 ak,为字符串添加引号
ak = "TwvTSt10wfCiVK5mTQFxb6sX"

def get_chinese_address(latitude, longitude):
    url = f'http://api.map.baidu.com/reverse_geocoding/v3/?ak={ak}&output=json&coordtype=wgs84ll&location={latitude},{longitude}'
    response = requests.get(url)
    if response.status_code == 200:
        data = json.loads(response.text)
        if data['status'] == 0:
            return data['result']['formatted_address']
    return '获取地址失败'

latitude = 39.9042
longitude = 116.4074

# 获取中文地址
chinese_address = get_chinese_address(latitude, longitude)

# 使用 hass.states.set 进行赋值
hass.states.set('sensor.baidudizhi', chinese_address, {'friendly_name': '百度地址'})
回复

使用道具 举报

3

主题

38

回帖

332

积分

中级会员

积分
332
金钱
291
HASS币
0
 楼主| 发表于 2024-7-4 15:23:30 | 显示全部楼层
windowsgood 发表于 2024-7-4 15:02
你这是增加了代码吧,我这执行正常的

没有修改代码,看来是我的环境有问题了
回复

使用道具 举报

6

主题

162

回帖

917

积分

高级会员

积分
917
金钱
749
HASS币
0
发表于 2024-7-4 15:02:30 | 显示全部楼层
你这是增加了代码吧,我这执行正常的
回复

使用道具 举报

3

主题

38

回帖

332

积分

中级会员

积分
332
金钱
291
HASS币
0
 楼主| 发表于 2024-7-4 14:30:32 | 显示全部楼层
windowsgood 发表于 2024-7-4 14:16
gpt大法就好了,代码如下

import requests

日志记录器: homeassistant.components.python_script.my_baidu.py
来源: components/python_script/__init__.py:270
集成: Python Scripts (文档, 问题)
首次出现: 14:29:40 (1 次总计出现)
上次记录: 14:29:40

Error executing script
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/python_script/__init__.py", line 270, in execute
    exec(compiled.code, restricted_globals)  # noqa: S102
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "my_baidu.py", line 5, in <module>
ImportError: __import__ not found
回复

使用道具 举报

6

主题

162

回帖

917

积分

高级会员

积分
917
金钱
749
HASS币
0
发表于 2024-7-4 14:16:22 | 显示全部楼层
gpt大法就好了,代码如下

import requests

def get_formatted_address(ak, latitude, longitude):
    url = "http://api.map.baidu.com/reverse_geocoding/v3/"
    params = {
        'ak': ak,
        'output': 'json',
        'coordtype': 'wgs84ll',
        'location': f'{latitude},{longitude}'
    }
   
    response = requests.get(url, params=params)
   
    if response.status_code == 200:
        data = response.json()
        if data.get('status') == 0:
            return data['result']['formatted_address']
    return None

ak = 'TwvTSt10wfCiU8G8BFMZVK5mTQFxb6sX'  
latitude = 39.9118
longitude = 116.4200

address = get_formatted_address(ak, latitude, longitude)
print(address)
回复

使用道具 举报

6

主题

162

回帖

917

积分

高级会员

积分
917
金钱
749
HASS币
0
发表于 2024-7-4 14:06:13 | 显示全部楼层
17620402030 发表于 2024-7-3 19:18
感谢大佬关注帮助

有效正确ak = "TwvTSt10wfCiU8G8BFMZVK5mTQFxb6sX"

这个请求是正确的,能获取到地址
回复

使用道具 举报

5

主题

45

回帖

806

积分

高级会员

积分
806
金钱
756
HASS币
0
发表于 2024-7-3 22:48:04 来自手机 | 显示全部楼层
用nodered简单点,一个函数,一个请求
回复

使用道具 举报

10

主题

132

回帖

1074

积分

金牌会员

积分
1074
金钱
932
HASS币
0
发表于 2024-7-3 21:20:16 | 显示全部楼层
你这段代码不会是GPT写的吧?
回复

使用道具 举报

yjl 手机认证

8

主题

190

回帖

867

积分

高级会员

积分
867
金钱
669
HASS币
0
发表于 2024-7-3 19:51:49 | 显示全部楼层
17620402030 发表于 2024-7-3 19:18
感谢大佬关注帮助

有效正确ak = "TwvTSt10wfCiU8G8BFMZVK5mTQFxb6sX"

应该是环境问题了,python中要import外部模块(库)时需要先在环境中安装pip install该模块,从报错信息看,应该是缺少外部模块,先安装一下要使用的模块,在逐步排查
总为浮云能避日,长安不见使人愁
回复

使用道具 举报

3

主题

38

回帖

332

积分

中级会员

积分
332
金钱
291
HASS币
0
 楼主| 发表于 2024-7-3 19:18:06 | 显示全部楼层
yjl 发表于 2024-7-3 13:28
1、你没有提供具体的报错信息,我手头也没有python环境,但是将你的Url用浏览器访问了一下,返回值的状态是 ...

感谢大佬关注帮助

有效正确ak = "TwvTSt10wfCiU8G8BFMZVK5mTQFxb6sX"

https://api.map.baidu.com/revers ... mp;location=39.9042,116.4074
浏览器能获取有效反馈

以下最简单py文件,亦错误。
import requests
import hass.states


url = "https://api.map.baidu.com/reverse_geocoding/v3/?ak=TwvTSt10wfCiU8G8BFMZVK5mTQFxb6sX&output=json&coordtype=wgs84ll&location=39.9042,116.4074"
response = requests.get(url)
hass.states.set('sensor.baidudizhi', response, {'friendly_name': '百度地址'})



错误码
日志记录器: homeassistant.components.python_script.ll123.py
来源: components/python_script/__init__.py:270
集成: Python Scripts (文档, 问题)
首次出现: 18:25:58 (1 次总计出现)
上次记录: 18:25:58

Error executing script
Traceback (most recent call last):
  File "/usr/src/homeassistant/homeassistant/components/python_script/__init__.py", line 270, in execute
    exec(compiled.code, restricted_globals)  # noqa: S102
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "ll123.py", line 1, in <module>
ImportError: __import__ not found


回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian ( 晋ICP备17001384号-1 )

GMT+8, 2025-7-8 13:30 , Processed in 0.057181 second(s), 12 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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