如何修复:项目中未使用 Google Sheets API

2024-03-27

我想建立一个问卷调查线聊天机器人并将答案传输到谷歌表。 这是我的代码: ''' 导入操作系统

from flask import Flask, request, abort

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)
from oauth2client.service_account import ServiceAccountCredentials 
import gspread
from datetime import datetime, date, timedelta, time
import time


gsp_scopes = ['https://spreadsheets.google.com/feeds']

SPREAD_SHEETS_KEY = os.environ.get('SPREAD_SHEETS_KEY')
credential_file_path = 'credentials.json'
def auth_gsp_client(file_path, scopes):
    credentials = ServiceAccountCredentials.from_json_keyfile_name(file_path, scopes)
    return gspread.authorize(credentials)

def records(A, B, C, D, E):
    gsp_client = auth_gsp_client(credential_file_path, gsp_scopes)
    worksheet = gsp_client.open_by_key(SPREAD_SHEETS_KEY).sheet1
    worksheet.insert_row([A, B, C, D, E], 2)
    return True

app = Flask(__name__)

LINE_CHANNEL_ACCESS_TOKEN = os.environ.get('LINE_CHANNEL_ACCESS_TOKEN')
LINE_CHANNEL_SECRET = os.environ.get('LINE_CHANNEL_SECRET')
line_bot_api = LineBotApi(LINE_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(LINE_CHANNEL_SECRET)

@app.route("/", methods=['GET'])
def hello():
    return 'hello heroku'

@app.route("/callback", methods=['POST'])
def callback():
    signature = request.headers['X-Line-Signature']

    body = request.get_data(as_text=True)

    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        print("Invalid signature. Please check your channel access token/channel secret.")
        abort(400)

    return 'OK'

user_command_dict = {}

@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    user_message = event.message.text
    user_id = event.source.user_id

    user_command = user_command_dict.get(user_id)

    if user_message == '@問卷' and user_command == None:
        print(user_message)
        reply_message = [
            TextSendMessage(text='這是問卷'),
            TextSendMessage(text='B'),
            TextSendMessage(text='開始')
            ]
        user_command_dict[user_id] = '@問卷1'
    if user_command == '@問卷1':
        answer = user_message
        if answer=='yes':
            time.sleep(3)
            reply_message=TextSendMessage(text='問題一')
            user_command_dict[user_id] = '@問卷2'
    if user_command == '@問卷2':
        global answer1
        answer1 = user_message
        time.sleep(3)
        reply_message=TextSendMessage(text='問題二')
        user_command_dict[user_id] = '@問卷3'
    if user_command == '@問卷3':
        global answer2
        answer2 = user_message
        time.sleep(3)
        reply_message=TextSendMessage(text='問題三')
        user_command_dict[user_id] = '@問卷4'
    if user_command == '@問卷4':
        global answer3
        answer3 = user_message
        Date = date.today()
        today=Date.strftime("%Y/%b/%d")
        time.sleep(3)
        
        print(today, answer1, answer2, answer3)
        reply_message=TextSendMessage(text='問題結束')
        records(today, user_id, answer1, answer2, answer3)
        user_command_dict[user_id] = None
    #else:
        #print(user_message)
        #reply_message=TextSendMessage(text=event.message.text)

    line_bot_api.reply_message(
        event.reply_token,
        reply_message)

if __name__ == "__main__":
    app.run()

''' 我把它推入heroku,但我得到了

2021-08-10T06:00:56.303548+00:00 app[web.1]: gspread.exceptions.APIError: {'code': 403, 'message': 'Google Sheets API 之前尚未在项目 10137149515 中使用过它已被禁用。通过访问启用它https://console.developers.google.com/apis/api/sheets.googleapis.com/overview?project=10137149515 https://console.developers.google.com/apis/api/sheets.googleapis.com/overview?project=10137149515然后重试。如果您最近启用了此 API,请等待几分钟,以便该操作传播到我们的系统,然后重试。', 'status': 'PERMISSION_DENIED', 'details': [{'@type': 'type.googleapis.com/ google.rpc.Help', 'links': [{'description': 'Google 开发者控制台 API 激活', 'url': 'https://console.developers.google.com/apis/api/sheets.googleapis. com/overview?project=10137149515'}]}, {'@type': 'type.googleapis.com/google.rpc.ErrorInfo', '原因': 'SERVICE_DISABLED', '域': 'googleapis.com', '元数据':{'消费者':'projects/10137149515','服务':'sheets.googleapis.com'}}]} 2021-08-10T06:00:56.304235 + 00:00应用程序[web.1]:10.1.7.41 - - [10/8月/2021:14:00:56 +0800]“POST /回调HTTP/1.1”500 290 “-”“LineBotWebhook/2.0”

请帮助并告诉我出了什么问题。谢谢


Google Sheets API 之前未曾在项目 10137149515 中使用或被禁用。通过访问启用它

如果您按照链接访问您的 Google 云控制台帐户,则这是您的 Google 云控制台帐户中的设置问题project https://console.developers.google.com/apis/api/sheets.googleapis.com/overview?project=10137149515当您设置项目时,您需要告诉 Google 您打算使用哪些 API,但您忘记添加您将使用 Google Sheets API。

启用谷歌表格API

去左边的图书馆

在搜索栏中搜索 Google Sheets api 并选择它,然后单击启用

再次运行代码应该只需要几分钟。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何修复:项目中未使用 Google Sheets API 的相关文章

  • 如何指定聚类的距离函数?

    我想对给定距离的点进行聚类 奇怪的是 似乎 scipy 和 sklearn 聚类方法都不允许指定距离函数 例如 在sklearn cluster AgglomerativeClustering 我唯一可以做的就是输入一个亲和力矩阵 这将非常
  • 2d 图像点和 3d 网格之间的交点

    Given 网格 源相机 我有内在和外在参数 图像坐标 2d Output 3D 点 是从相机中心发出的光线穿过图像平面上的 2d 点与网格的交点 我试图找到网格上的 3d 点 This is the process From Multip
  • 为什么我的混淆矩阵只返回一个数字?

    我正在做二元分类 每当我的预测等于事实时 我发现sklearn metrics confusion matrix返回单个值 难道没有问题吗 from sklearn metrics import confusion matrix print
  • 将 yerr/xerr 绘制为阴影区域而不是误差线

    在 matplotlib 中 如何将误差绘制为阴影区域而不是误差条 例如 而不是 忽略示例图中各点之间的平滑插值 这需要进行一些手动插值 或者只是获得更高分辨率的数据 您可以使用pyplot fill between https matpl
  • 如何删除 PyCharm 中的项目?

    如果我关闭一个项目 然后删除该项目文件夹 则在 PyCharm 重新启动后 会再次创建一个空的项目文件夹 只需按顺序执行以下步骤即可 他们假设您当前在 PyCharm 窗口中打开了该项目 单击 文件 gt 关闭项目 关闭项目 在 PyCha
  • 如何为未捕获的异常处理程序编写单元测试

    我有一个函数可以捕获uncaught例外情况 如下 有没有办法编写一个单元测试来执行uncaught exception handler 功能正常 但测试正常退出 import logging def config logger logge
  • 使用 Pytest 的参数化添加测试功能的描述

    当其中一个测试失败时 可以在测试正在测试的内容的参数化中添加描述 快速了解测试失败的原因 有时您不知道测试失败的原因 您必须查看代码 通过每个测试的描述 您就可以知道 例如 pytest mark parametrize num1 num2
  • 以类型化内存视图作为成员的结构定义

    目前我正在尝试让一个具有类型化内存视图的结构能够工作 例如 ctypedef struct node unsigned int inds 如果 inds 不是内存视图 据我所知 它可以完美地工作 然而 通过内存视图并使用类似的东西 def
  • 如何将 sql 数据输出到 QCalendarWidget

    我希望能够在日历小部件上突出显示 SQL 数据库中的一天 就像启动程序时突出显示当前日期一样 在我的示例中 它是红色突出显示 我想要发生的是 当用户按下突出显示的日期时 数据库中日期旁边的文本将显示在日历下方的标签上 这是我使用 QT De
  • python celery -A 的无效值无法加载应用程序

    我有一个以下项目目录 azima init py main py tasks py task py from main import app app task def add x y return x y app task def mul
  • python 中的 h2o 框架子集

    如何在 python 中对 h2o 框架进行子集化 如果 x 是一个 df 并且 Origin 是一个变量 那么在 pandas 中我们通常可以通过以下方式进行子集化 x x Origin AAF 但使用 h2o 框架会出现以下错误 H2O
  • 在Python中读取tiff标签

    我正在尝试用 Python 读取 tiff 文件的标签 该文件是 RGB 的uint16每个通道的值 我目前正在使用tifffile import tifffile img tifffile imread file tif 然而 img是一
  • Python“非规范化”unicode 组合字符

    我正在寻找标准化 python 中的一些 unicode 文本 我想知道是否有一种简单的方法可以在 python 中获得组合 unicode 字符的 非规范化 形式 例如如果我有序列u o xaf i e latin small lette
  • Flask 应用程序路由中的多个参数

    烧瓶怎么写app route如果我在 URL 调用中有多个参数 这是我从 AJax 调用的 URL http 0 0 0 0 8888 createcm summary VVV change Feauure 我试图写我的烧瓶app rout
  • pygame:使用 sprite.RenderPlain 绘制精灵组的顺序

    我有一个精灵组 需要按一定的顺序绘制 以便其精灵按应有的方式重叠 然而 即使使用运算符模块函数 sorted self sprites key attrgetter y x 对组进行排序 顺序也是错误的 我该如何解决这个问题 直截了当地说
  • 无法在 PyCharm 版本 9.3.3 中安装 NumPy。 Python版本3.8.2

    在 PyCharm 中安装 NumPy 时出错 尝试安装 Microsoft Visual C 14 0 还是行不通 NumPy 正在通过命令安装pip3 install numpy在 cmd 终端中 但是当尝试将其安装在 PyCharm
  • 仅允许正小数

    在我的 Django 模型中 我创建了一个如下所示的小数字段 price models DecimalField u Price decimal places 2 max digits 12 显然 价格为负或零是没有意义的 有没有办法将小数
  • 寻找完美的正方形

    我有这个Python代码 def sqrt x ans 0 if x gt 0 while ans ans lt x ans ans 1 if ans ans x print x is not a perfect square return
  • 高效创建抗锯齿圆形蒙版

    我正在尝试创建抗锯齿 加权而不是布尔 圆形掩模 以制作用于卷积的圆形内核 radius 3 no of pixels to be 1 on either side of the center pixel shall be decimal a
  • 如何使用xlwt设置文本颜色

    我无法找到有关如何设置文本颜色的文档 在 xlwt 中如何完成以下操作 style xlwt XFStyle bold font xlwt Font font bold True style font font background col

随机推荐