带有 wget 和外部 api 的 Python 脚本

安迪J。

我已经问过这个问题了,但我认为我问的方式不对,或者至少我可能会在问题所在的地方吠叫错误的树。

我有一个带有以下路线的 Python/Flask 脚本:

@app.route('/heatingadjust')
def heatingadjust(hiveSessionId=None, score=None):
        import requests
        import time
        import datetime
        import MySQLdb
        conn = MySQLdb.connect(host="localhost", user = "admin", passwd = "xxxxxxxxxx", db = "mydb")
        cursor = conn.cursor()
        cursor.execute("select score from OccScore")
        data = cursor.fetchone()
        score = data[0]

        url = "https://api.prod.bgchprod.info:443/omnia/users"
        if 'hiveSessionId' in session:
                hiveSessionId = session['hiveSessionId']
                headers = {
                    'Content-Type': "application/vnd.alertme.zoo-6.1+json",
                    'Accept': "application/vnd.alertme.zoo-6.1+json",
                    'X-Omnia-Client': "Hive Web Dashboard",
                    'X-Omnia-Access-Token': hiveSessionId,
                    'Cache-Control': "no-cache"
                    }
                response = requests.request("GET", url, headers=headers)
                data=response.json()
                if 'errors' in data:
                        return redirect(url_for('hivelogin'))
        if (score == 0):
            url = "https://api-prod.bgchprod.info:443/omnia/nodes/xxxxxxxxxx"
            payload = "{\n    \"nodes\": [{\n        \"attributes\": {\n            \"targetHeatTemperature\": {\n                \"targetValue\": 15\n            }\n        }\n    }]\n}"        
            headers = {
                'Content-Type': "application/vnd.alertme.zoo-6.1+json",
                'Accept': "application/vnd.alertme.zoo-6.1+json",
                'X-Omnia-Client': "Dashboard",
                'X-Omnia-Access-token': hiveSessionId,
                'Cache-Control': "no-cache",
             }
            response = requests.request("PUT", url, data=payload, headers=headers)
        else:
            url = "https://api-prod.bgchprod.info:443/omnia/nodes/xxxxxxx"
            payload = "{\n    \"nodes\": [{\n        \"attributes\": {\n            \"targetHeatTemperature\": {\n                \"targetValue\": 18\n            }\n        }\n    }]\n}"        
            headers = {
                'Content-Type': "application/vnd.alertme.zoo-6.1+json",
                'Accept': "application/vnd.alertme.zoo-6.1+json",
                'X-Omnia-Client': "Dashboard",
                'X-Omnia-Access-token': hiveSessionId,
                'Cache-Control': "no-cache",
             }
            response = requests.request("PUT", url, data=payload, headers=headers)

        return str(score)

基本上,我有一个使用 wget 调用的路由,它会嗅探蓝牙设备,如果找到设备并将分数写入 MySQL 表,则作为分数递增。这是看家里有没有人。

如果房子是空的,这条路线会读取分数并使用 Hive api 关闭加热。从 URL 调用,它完全按照它应该做的,我可以看到加热被关闭。

但是,我想要做的是使用 crontab 中的 wget 调用脚本。

crontab 运行,我可以在 syslog 中看到它。apache 访问日志显示正在调用的 URL。

但是加热不会像我通过浏览器调用完全相同的东西那样关闭。

我从我看到的其他方面怀疑这可能是因为 wget 不喜欢调用另一个 URL 的事实。

谁能告诉我我的怀疑是否正确?我已经看到了关于使用 urllib 而不是 wget 的其他内容,但我不知道我需要更改什么才能使用标头调用 URL。

数字工作者

我的猜测是该wget请求不提供会话 cookie,因此hiveSessionIdsession. 因为那时'X-Omnia-Access-token': None对 Omnia 服务的请求被拒绝了。

(我对这两个参数有点困惑,hiveSessionIdscore。如果 hive 会话 ID 存在,它会被会话中的值覆盖,并且分数总是被数据库中的值覆盖。)

旁注:您可以使用json.dumps()来构建有效负载:

payload = json.dumps({
    "nodes": [
        {
            "attributes": {"targetHeatTemperature": {"targetValue": 18}}
        }
    ]
})

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SSH和带有Python脚本的屏幕

来自分类Dev

无法从Python脚本调用wget

来自分类Dev

带有Google Apps脚本的电报API

来自分类Dev

尝试创建使用wget运行Python脚本的Shell脚本

来自分类Dev

带有“。”和“ source”的运行脚本

来自分类Dev

带有许多用于GPIO输入和输出的Elif的Python脚本

来自分类Dev

带有API的Python CGI

来自分类Dev

带有python的GDRIVE API

来自分类Dev

带有src的脚本标签和脚本标签之间的代码

来自分类Dev

带有注释+宏或外部脚本的Scala代码生成?

来自分类Dev

带有Win32API的Ruby Windows脚本

来自分类Dev

在Shell脚本中运行wget和其他命令

来自分类Dev

使用wget和Perl脚本从网页中提取信息

来自分类Dev

rm或wget在基于具有glob变量的脚本中失败

来自分类Dev

带有node.js代理和外部api调用的nginx

来自分类Dev

python脚本和libGLEW相关的错误(menpo.io API)

来自分类Dev

python脚本和libGLEW相关的错误(menpo.io API)

来自分类Dev

带有 MongoDB/Mongoose 的 Bcrypt python 脚本和 JavaScript 不适用于两个单独的项目

来自分类Dev

Wget挂起,脚本停止

来自分类Dev

wget的批处理脚本

来自分类Dev

Wget挂起,脚本停止

来自分类Dev

关于wget的小脚本

来自分类Dev

wget解析标记脚本

来自分类Dev

如何使wget不多次下载同一文件(带有和不带有扩展名)

来自分类Dev

在Python脚本中使用带有OpenSSL的子进程

来自分类Dev

带有Selenium的Python脚本无法单击按钮

来自分类Dev

使用子进程调用带有参数的python脚本

来自分类Dev

带有字典抛出错误的 Python Note 脚本

来自分类Dev

带有保存文件的 Python 脚本的 Windows 调度程序