我正在尝试从此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
,如何解决此问题,所以当我输入股票代码时,它会返回股票代码的图表?我不确定图表是否可以返回,或者不确定是否可以发送回唯一的文本。如果单独运行,则添加的功能可以正常运行,但此处无法运行。
答案 0 :(得分:4)
也许我听不懂,但主要原因是因为您的函数(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)
希望这会有所帮助。
答案 1 :(得分:3)
上面@DanilaG回答的第一个问题是,您没有从prepare_data_for_answer
返回任何内容。 (我建议如果您解决了该问题,请更新您的问题,使代码与您的新问题相关)
您的prepare_data_for_answer
还希望get_ticker
返回一个值,但是get_ticker
不返回任何值,因此它将是Null
。通常,请确保每次将变量设置为函数的返回值时,被调用函数实际上都会返回某些内容。
我浏览了Telegram API并发送照片,您需要使用其他API call /sendPhoto
。
还要检查这些已回答的问题: