找回密码
 会员注册
查看: 29|回复: 0

Telegram-bot-api向指定频道批量上传本地媒体(LocalBotAPIServer)

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
68585
发表于 2024-9-10 10:34:34 | 显示全部楼层 |阅读模式
Telegram-bot-api向指定频道批量上传本地媒体(LocalBotAPIServer)背景申请TG机器人(TelegramBot)申请TGApplication安装Telegram本地API服务Telegram-bot-api背景目前直接使用https://api.telegram.org服务上传媒体有文件大小的限制,根据TG官方API文档介绍(https://core.telegram.org/bots/api#using-a-local-bot-api-server),使用本地服务上传文件最大可达2000MB申请TG机器人(TelegramBot)登录Telegram,搜索@BotFather发送命令/newbot,输入bot名称、bot用户名,最后会获得一个HTTPAPI申请TGApplication打开https://my.telegram.org输入手机号登陆后自行申请Apptitle:TestApp1Shortname:testapp1URL:N/A(Fillnothingshere)PlatformesktopDescription:N/A(Fillnothingshere)12345如果申请报错ERROR,请使用与登录手机号地区相同的代理,+86的可以使用HK地区的代理。最后获取API-ID以及API-HASH安装Telegram本地API服务可参考https://tdlib.github.io/telegram-bot-api/build.html下载并安装MicrosoftVisualStudio。安装时启用C++支持。下载并安装CMake;安装时选择“AddCMaketothesystemPATH”选项。下载并安装Git。依次执行下面的命令gitclone--recursivehttps://github.com/tdlib/telegram-bot-api.gitcdtelegram-bot-apigitclonehttps://github.com/Microsoft/vcpkg.gitcdvcpkg./bootstrap-vcpkg.bat./vcpkg.exeinstallgperf:x64-windowsopenssl:x64-windowszlib:x64-windowscd..Remove-Itembuild-Force-Recurse-ErrorActionSilentlyContinuemkdirbuildcdbuildcmake-Ax64-DCMAKE_INSTALL_PREFIXATH=..-DCMAKE_TOOLCHAIN_FILE:FILEPATH=../vcpkg/scripts/buildsystems/vcpkg.cmake..cmake--build.--targetinstall--configReleasecd../..dirtelegram-bot-api/bin/telegram-bot-api*1234567891011121314进入bin文件夹,启动本地服务器。如果网络不通可以使用Proxifier代理telegram-bot-api.exe.\telegram-bot-api.exe--api-id=[YOURAPI-ID]--api-hash=[YOURAPI-HASH]--local1Telegram-bot-api首先要把你的bot从官方登出,把url中[BOTHTTPAPI]替换成你上面在BotFather申请的HTTPAPI,复制到浏览器,响应返回true,登出成功。http://127.0.0.1:8081/bot[BOTHTTPAPI]/logOut添加你的bot到TG频道。可以使用python或者直接用官方文档中的api进行操作,以下是使用python的例子获取频道IDimportasynciofromtelegramimportBot#替换成你的BotHTTPAPITOKEN='YOUBOTHTTPAPI'bot=Bot(token=TOKEN,base_url='http://127.0.0.1:8081/bot',base_file_url='http://127.0.0.1:8081/file/bot')asyncdefget_updates():updates=awaitbot.get_updates()print(updates)forupdateinupdates:ifupdate.message:print(f"ChatID:{update.message.chat.id}")asyncdefmain():awaitget_updates()if__name__=='__main__':asyncio.run(main())12345678910111213141516171819从本地文件夹上传媒体需求背景:本地父文件夹中存在多个子文件夹,子文件夹中存在多个图片/视频媒体,要求遍历子文件夹,将相同子文件夹中的媒体合并发送至指定频道,并把子文件夹名称作为发送消息的说明文字首先安装依赖pipinstallpython-telegram-bot1实现:importosimportasynciofromtelegramimportBot,InputMediaPhoto,InputMediaVideofromtelegram.errorimportNetworkError#替换成你的BotHTTPAPITOKEN='YOURBotHTTPAPI'#替换成你的频道ID,一般是负数GROUP_ID='YOURGROUPID'#媒体所在的父目录DIRECTORY='YOURMEDIADIRECTORY'bot=Bot(token=TOKEN,base_url='http://127.0.0.1:8081/bot',base_file_url='http://127.0.0.1:8081/file/bot')asyncdefsend_media(folder_path,folder_name):media_files=[]forfileinos.listdir(folder_path):file_path=os.path.join(folder_path,file)iffile.lower().endswith(('.png','.jpg','.jpeg','.gif')):media_files.append(InputMediaPhoto(open(file_path,'rb')))eliffile.lower().endswith(('.mp4','.avi','.mov')):media_files.append(InputMediaVideo(open(file_path,'rb')))#分批发送媒体文件max_files_per_message=10foriinrange(0,len(media_files),max_files_per_message):media_group=media_files[i:i+max_files_per_message]ifmedia_group:try:awaitbot.send_media_group(chat_id=GROUP_ID,media=media_group,caption=folder_name,read_timeout=1000,write_timeout=1000,connect_timeout=1000)print(f"{datetime.now()}-Sent{len(media_group)}itemsfrom{folder_name}")exceptNetworkErrorase:print(f"Failedtosenddueto{e}")awaitasyncio.sleep(5)#避免过快发送asyncdefmain():root_dir=DIRECTORYforfolder_nameinos.listdir(root_dir):folder_path=os.path.join(root_dir,folder_name)ifos.path.isdir(folder_path):awaitsend_media(folder_path,folder_name)if__name__=="__main__":asyncio.run(main())123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-5 09:18 , Processed in 2.149861 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表