如何使用 python Telegram Bot API 将文件上传到谷歌驱动器

2024-02-11

我正在尝试将用户发送到我的机器人的文件上传到 Google 驱动器中。
这是我的Python代码

#!/usr/bin/env python

import os
import telegram
import logging
from telegram.ext import Updater
from telegram.ext import Updater, CommandHandler, CallbackQueryHandler ,MessageHandler
from telegram.ext import MessageHandler, Filters
from __future__ import print_function
from apiclient import discovery
from httplib2 import Http
from oauth2client import file, client, tools
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',level=logging.INFO)
logger = logging.getLogger(__name__)




SCOPES = 'https://www.googleapis.com/auth/drive'
store = file.Storage('storage.json')
creds = store.get()
if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets('client_secrets.json', SCOPES)
    creds = tools.run_flow(flow, store)
DRIVE = discovery.build('drive', 'v2', http=creds.authorize(Http()))



def file_handler(bot, update):
  file = bot.getFile(update.message.document.file_id)
  file.download(update.message.document.file_name)

    FILES = ((update.message.file_name, False),(update.message.file_name, True),)

    for filename, convert in FILES:
        metadata = {'title': filename}
        res = DRIVE.files().insert(convert=convert, body=metadata,
                media_body=filename ).execute()
        if res:
            print('Uploaded "%s" (%s)' % (filename, res['mimeType']))



def error(bot, update, error):
  logger.warning('Update "%s" caused error "%s"', update, error)

def main():
  updater = Updater(token='xxxxxxxxxx')
  dispatcher = updater.dispatcher
  dispatcher.add_handler(MessageHandler(Filters.document,file_handler))
  updater.start_polling()

if __name__ == '__main__':
    main()

通过这段代码,我可以下载用户上传到机器人的文件(没有google-api部分)。
但是我如何将这些文件上传到谷歌驱动器......

提前致谢!


通过结合两者将文件从 telegram 上传到 google Drive 非常简单google-drive-api and telegram-bot-api.

这是描述代码如何工作的流程图。

bot.py

def file_handler(bot, update):
  file = bot.getFile(update.message.document.file_id)
  file.download(update.message.document.file_name)

  FILES = ((update.message.document.file_name, False),(update.message.document.file_name, True),)

  for filename, convert in FILES:
      metadata = {'title': filename}
      res = DRIVE.files().insert(convert=convert, body=metadata,
              media_body=filename, fields='mimeType,exportLinks').execute()
      if res:
          print('Uploaded "%s" (%s)' % (filename, res['mimeType']))
          # silentremove(filename) #if u want to remove upladed file from local 
          update.message.reply_text("Uploaded!")

Telegram 机器人 Google Drive API 集成示例 https://github.com/zume2020/Telegram-bot-Google-Drive

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

如何使用 python Telegram Bot API 将文件上传到谷歌驱动器 的相关文章

随机推荐

  • 合并 git 中没有真正共同祖先的复制存储库的更改

    我有一个项目 DemoA 它是基于 git 存储库 Project1 构建的 不幸的是 DemoA 一开始只是 Project1 文件的副本 然后才变成一个实际的长期项目 我现在想让 Project1 成为 DemoA 的子模块 但更重要的
  • 如何创建命名引用类型元组?

    以下行创建一个命名的ValueTuple var tuple a 1 b 2 c 3 d 4 e 5 f 6 值类型无法有效传递 做C 7提供了一种创建命名元组的方法Tuple type 如果你的意思是是否有办法将其他名称附加到System
  • FaceBook API,应用内登录

    我跟着本指南 http developers facebook com docs guides mobile ios我已经通过 Facebook 集成成功创建了我的应用程序 有什么问题 当用户必须登录时 应用程序会在浏览器中退出 或在 Fa
  • 如何打开Lucene 4.3索引?

    我是 Lucene 新手 我正在尝试使用 Luke 打开 Lucene 4 3 索引 我使用简单的 Lucene 4 3 1 应用程序创建 但它一直给我 该位置的目录无效 请检查控制台以获取更多信息 最后一个异常 java lang Ill
  • 在物理设备上测试

    我是否正确理解 我必须支付 99 美元才能在物理设备上使用我的 Windows Phone 应用程序 我制作了一个小应用程序 想在我的新手机上测试 但它不是我计划发布的应用程序 因此我不会仅仅为了看到该应用程序在物理设备上运行而支付 99
  • 如何使用 xunit.runner.console 指定自定义参数

    我有一个 C Selenium Specflow 测试套件 我正在使用 xunit console exe 使用 Jenkins 运行该测试套件 我需要将这些测试指向不同的环境 测试 QA 产品等 并且想使用命令行参数 我调用的批处理命令是
  • Visual Studio 2017 中实体框架“数据库优先”的替代品是什么

    简单的问题 我正在使用 Visual Studio 2017 虽然我知道 EF 中的 数据库优先 方法已经消失 但我想知道替代方法是什么 我特别想做的是从现有数据库生成类 我看到这个 EntityFramework 反向 POCO 生成器
  • 使用“sudo”重复上一个命令

    我经常忘记运行命令sudo 我正在寻找一种方法来创建 bash 函数 或别名 来重复最后一个命令sudo 就像是 S sudo history 1 有任何想法吗 你可以写 sudo See 9 3 历史扩展 Bash 参考手册 http w
  • 可以使用 ggplot2 在 R 中创建此图表吗?

    假设我有以下内容dataframe in R df1 lt read csv jan csv stringsAsFactors FALSE header TRUE str df1 data frame 4 obs of 5 variable
  • 如何在 .Net MVC 中将文件从磁盘流式传输到客户端浏览器

    我的操作将文件从磁盘返回到客户端浏览器 目前我有 public FileResult MediaDownload byte fileBytes System IO File ReadAllBytes Server MapPath fileP
  • 使用 jQueryUI.autocomplete 和 Backbone JS 的 Javascript 模块

    假设我想使用jQueryUi autocomplete用于制作一个从 a 获取源代码的模块backboneCollection 我为自动完成模块实现了以下代码 1 并且以下为Backbone view 2 实际上 我不喜欢它 因为当用户不输
  • 自定义对话框窗口棱镜

    我已经实现了新的 DialogService 如本期所示WPF 的新 IDialogService https github com PrismLibrary Prism issues 1666 但是 这并没有解释如何编辑对话框本身的窗口
  • Raspberry Pi ARM 的 Mongodb MongoClient.connect() 上出现总线错误

    我尝试在 x64 计算机上执行此节点脚本 它似乎工作正常 然而 相同的脚本在 Raspberry Pi 上运行时报告总线错误 它给出了 6047 715610 未处理的故障 对齐异常错误 该错误作为总线错误报告在下一行 该错误似乎源于 Mo
  • Pyspark toPandas() 越界纳秒时间戳错误

    我正在尝试将 Spark DataFrame 转换为 Pandas 但是 它给出以下错误 OutOfBoundsDatetime Out of bounds nanosecond timestamp 有解决办法吗 如果我删除所有时间戳列 它
  • serde json反序列化任何数字[重复]

    这个问题在这里已经有答案了 我正在尝试结合字符串或结构体 https serde rs string or struct html和手动反序列化结构体 https serde rs deserialize struct html通过解析类似
  • 如何解决git中分支名称和提交哈希之间的歧义?

    我有一个分支名为0726b我想将我当前的工作副本与该分支进行比较 显然还有一个提交的哈希值以该序列开头 因为我得到 git diff 0726b warning refname 0726b is ambiguous 我如何告诉 git 它应
  • 访问 `proc` 文件系统以从系统应用程序读取 `/proc/[pid]/some-file`

    我有一个自定义的 A10 存储库 我正在尝试创建一个能够读取的应用程序 proc pid some file文件例如stat and status 就像ps does 读完这篇文章后answer https android stackexc
  • C# 中条形码图像到 Code39 的转换?

    我有 jpg 格式的条形码图像 想从中提取条形码 请帮忙 我们开发了一个 C 组件 可以从所有尺寸 旋转 质量等的条形码中读取值 它尚未发布 但我们将在以下位置发布有关它的详细信息 http blog lemqi com http blog
  • 将 body 中的 json 数据发布到 Web api

    我总是从 body 得到 null 值 为什么 我使用提琴手没有问题 但邮递员失败 我有一个这样的网络 API Route api account GetToken System Web Http HttpPost public HttpR
  • 如何使用 python Telegram Bot API 将文件上传到谷歌驱动器

    我正在尝试将用户发送到我的机器人的文件上传到 Google 驱动器中 这是我的Python代码 usr bin env python import os import telegram import logging from telegra