【问题标题】:Telegram bot returning null电报机器人返回 null
【发布时间】:2020-07-23 03:00:21
【问题描述】:

我正在尝试从此Webpage 修改代码: 修改后的代码如下:

import pandas as pd
from pandas import datetime
from pandas import DataFrame as df
import matplotlib
from pandas_datareader import data as web
import matplotlib.pyplot as plt
import datetime


import requests  
from bottle import (  
    run, post, response, request as bottle_request
)

BOT_URL = 'https://api.telegram.org/bot------------------/' 


def get_chat_id(data):  
    """
    Method to extract chat id from telegram request.
    """
    chat_id = data['message']['chat']['id']

    return chat_id

def get_message(data):  
    """
    Method to extract message id from telegram request.
    """
    message_text = data['message']['text']

    return message_text

def send_message(prepared_data):  
    """
    Prepared data should be json which includes at least `chat_id` and `text`
    """ 
    message_url = BOT_URL + 'sendMessage'
    requests.post(message_url, json=prepared_data)  # don't forget to make import requests lib


def get_ticker(text):  # <-- **added this function and removed a function called `def change_text_message(text)`**;
    stock = f'text'
    start = datetime.date(2000,1,1)
    end = datetime.date.today()
    data = web.DataReader(stock, 'yahoo',start, end)
    plot = data.plot(y='Open')
    return plot


def prepare_data_for_answer(data):  
    answer = get_ticker(get_message(data))

    json_data = {
        "chat_id": get_chat_id(data),
        "text": answer,
    }

    return json_data

@post('/')
def main():  
    data = bottle_request.json

    answer_data = prepare_data_for_answer(data)
    send_message(answer_data)  # <--- function for sending answer

    return response  # status 200 OK by default

我已将修改过的代码用上下空格分开。此时我收到一条文本null,我该如何解决这个问题,所以当我输入股票代码时,它会返回股票代码的图表?我不确定图表是否可以被退回,或者唯一的文本是否可以被退回。如果单独运行,添加的功能确实有效,但不是在这里。

【问题讨论】:

    标签: python pandas function telegram-bot


    【解决方案1】:

    也许我不明白,但主要原因是你的函数(get_ticker) 没有返回任何东西。

    看看:

    answer_data = prepare_data_for_answer(data)prepare_data_for_answer的结果:

    {
        "chat_id": get_chat_id(data),
        "text": answer,
    }
    

    好的。 answer 是什么?是get_ticker 的结果(参见answer = get_ticker(get_message(data)))。

    好的。但是get_ticker 的结果是什么?我没有看到return 声明......所以结果总是None(json null)。这就像:

    def get_message():
        msg = 'hello'
    message = get_message()  # None. Always None(or null in json)
    

    希望这会有所帮助。

    【讨论】:

    • 我已经添加了 return plot 这应该可以解决这个问题,但我遇到了另一个问题,因为事实证明 JSON 不处理图像
    • @newcoder 首先,抱歉,我不会一步一步解决您的所有问题。当然return plot 将不起作用,因为您试图通过json 发送python object。无论如何,主要问题是prepare_data_for_answer。目前,您当前的问题/详细信息与原始问题无关。
    【解决方案2】:

    上面@DanilaG 回答的第一个问题是您没有从prepare_data_for_answer 返回任何内容。 (我建议如果您解决了这个问题,请更新您的问题,以便代码与您的新问题相关)

    您的prepare_data_for_answer 也期望get_ticker 返回一个值,但get_ticker 不返回任何内容,所以它会是Null。一般来说,确保每次将变量设置为函数的返回值时,被调用的函数实际上都会返回一些东西。

    我浏览了 Telegram API 并发送照片,您需要不同的 API call /sendPhoto

    也检查这些 SO 回答的问题:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-18
      • 2020-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-27
      相关资源
      最近更新 更多