Телеграм бот возвращается ноль - PullRequest
6 голосов
/ 10 апреля 2020

Я пытаюсь изменить код с этой веб-страницы : измененный код выглядит следующим образом:

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, как я могу это исправить, чтобы при вводе тикера он возвращал график тикера? Я не уверен, что график может быть возвращен или если единственный текст может быть отправлен обратно. Функция, которая была добавлена, работает, если работает отдельно, но только не здесь.

Ответы [ 2 ]

4 голосов
/ 14 апреля 2020

Может быть, я чего-то не понимаю, но главная причина в том, что ваша функция (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)

Надеюсь, это поможет.

3 голосов
/ 15 апреля 2020

Первая проблема, о которой ответил @DanilaG выше, заключается в том, что вы ничего не вернули с prepare_data_for_answer. (Я предлагаю, если вы это исправите, обновите ваш вопрос, чтобы код соответствовал вашей новой проблеме)

Ваш prepare_data_for_answer также ожидал, что get_ticker вернет значение, но get_ticker ничего не возвращает так было бы Null. В общем, убедитесь, что каждый раз, когда вы устанавливаете переменную для возвращаемого значения функции, вызываемая функция действительно что-то возвращает.

Я просматривал Telegram API и для отправки фотографии вам нужен другой вызов API /sendPhoto.

Также проверьте эти ответы на вопросы:

...