Telegram资源整理 开发

作者: 草丛里的黄盖 | 来源:发表于2018-04-25 11:50 被阅读1299次

    本文章仅作为个人笔记

    相信看到文章的应该都知道Telegram是国外一款开源强加密的全平台通讯工具,这里就不多介绍了,直接上个人的一些资源和分析与理解,如果有不对的地方还望大神指正。

    Telegram在很多搜索引擎上搜索都是机器人开发相关的,很少对用户进行操作,为此特地整理一些用户操作相关,还希望能够对一些人有所帮助。

    Telegram官网

    Telegram获取个人开发信息教程

    Telegram开发信息入口(因为Telegram操作用户的开发都需要3个参数,而这3个参数就是从这个网页获取的)

    Telegram的Android开源代码地址(本人尝试过编译运行此代码,但是试了非常久依然无法编译通过,无奈只能放弃,如果有大神能跑起来还望指教一二,在此谢过了。)

    Telegram的AngularJs开源代码地址(本人主攻方向为Android,js相关并不熟悉,所以也只是跑了下,可以运行)

    Telegram的php开源代码地址(这一套代码是可以运行的,本人还特地抽离了工具包封装到了Laravel运行,无奈Laravel每一个请求都是不同的线程,无法复用一个连接实例,导致每次调用Telegram相关api都需要走一遍登录操作,效率非常低,无奈只能放弃,如果有大神有解决方案还望指点。)

    Telegram的python开源代码地址(这一套代码可以运行,而且很多方法调用都是没有问题,本人最终平衡后使用的是这一套代码,结合python的flask框架进行交互)

    Telethon的api文档地址(Telethon就是Telegram的python开源工具代码)

    • 因为文章这样结束显的有些短,就贴一些个人用到的可以调用方法贴出来了。

      • php相关
        • 初始化
            use Illuminate\Support\Facades\Log;
            $app_id = 12345678;//这里填写用户的app_id
            $api_hash = 'xxxxxxxxxxxxxx';//这里填写用户的api_hash
            $phone_number = '+8618888888888';//这里填写用户电话号码
            $this->MadelineProto = new \danog\MadelineProto\API('/tmp/session.madeline', ['app_info' => ['api_id' => $app_id, 'api_hash' => $api_hash], 'updates' => ['handle_updates' => false]]);//创建示例
            $this->MadelineProto->start();//开始登陆
          
        • 发送消息(文中$username为获取的用户username,传入时前面加前缀@,如@test,$message则直接为想要发送的消息)
            $this->MadelineProto->messages->sendMessage(['peer' => $username, 'message' => $message]);
          
        • 加入群组($groupLink为群组加入链接,如https://t.me/testtttttt
            $this->MadelineProto->channels->joinChannel(['channel' => $groupLink]);
          
        • 根据username获取用户详细信息
            $this->MadelineProto->get_full_info($username);
          
        • 根据关键字在全网查找联系人($search为过滤条件,不可为空字符串,$limit为获取个数,最大为1000个。)
            $this->MadelineProto->contacts->search(['q' => $search, 'limit' => $limit])['users'];
          
        • 检查电话号码是否激活($phoneNumber为电话号码,记得添加前缀)
            $this->MadelineProto->auth->checkPhone(['phone_number' => $phoneNumber]);
          
        • 获取当前用户聊天列表(获取聊天列表可过滤群组,变相获取所有群组)
            $this->MadelineProto->messages->getAllChats(['except_ids' => [0]])['chats'];
          
        • 根据群组信息获取群组所有用户信息($groupInfo可以是邀请链接或id,例如'https://t.me/danogentili'/'chat#492772765'/'channel#38575794'
            $this->MadelineProto->get_pwr_chat($groupInfo);
          
      • python相关
        • 初始化
          api_id = 12345  # 用户api_id
          api_hash = 'xxxxxxxxxxxxx'  # 用户 api_hash
          phone_number = '+861888888888'  # 用户号码
          client = TelegramClient(phone_number, api_id, api_hash)
          client.session.report_errors = False
          client.connect()
          if not client.is_user_authorized():
            client.send_code_request(phone_number)
            client.sign_in(phone_number, input('Enter the code: '))
          
        • 发送消息(其中user_id为用户id,message为需要发送的消息)
            client.send_message(int(user_id), str(message))
          
        • 获取当前用户聊天列表(获取聊天列表可过滤群组,变相获取所有群组)
            responses = client.iter_dialogs(10000)
                if responses is not None:
                  for response in responses:
                    if isinstance(response.entity, Channel): # 过滤群组
                      print(response)
          
        • 根据群组信息获取群组所有用户信息
            channel = client.get_entity(PeerChannel(int(in_id)))  # 根据群组id获取群组对象
            responses = client.iter_participants(channel, aggressive=True) # 获取群组所有用户信息
            for response in responses:
              if response.first_name is not None:
                first_name = bytes.decode(base64.b64encode(response.first_name.encode('utf-8')))
              else:
                first_name = None
              if response.last_name is not None:
                last_name = bytes.decode(base64.b64encode(response.last_name.encode('utf-8')))
              else:
                last_name = None
              response.id # 用户id
              response.access_hash # 用户hash值
              response.username # 用户username
              response.phone # 用户电话号码
          

    最后为了方便大家交流,建了个企鹅群,欢迎大家一起加入共同进步 799271038

    相关文章

      网友评论

      • 闪电峡谷:貌似现在获取不到用户手机号码了吧
        草丛里的黄盖:@闪电峡谷 可能获取不到了,现在已经不做这一块了。
      • 闪电峡谷:为啥无法连接 ,提示 RuntimeWarning: coroutine 'connect' was never awaited
        草丛里的黄盖:@闪电峡谷 https://docs.madelineproto.xyz/docs/PROXY.html#socks5-proxy
        闪电峡谷:@makai 我已经翻墙,然后该如何设置呢,能给点实例代码吗,谢谢
        草丛里的黄盖:@闪电峡谷 因为需要翻墙,如果已经用了ss还需要代码设置代理。
      • Gris_征程:你好,请问最后PHP的那个问题解决了吗?
        草丛里的黄盖:@Gris_征程 没有,群里有人解决了,用了不同的方案,重点在于核心工具代码,框架用自己的熟悉的可能不会遇到类似的问题。
      • a3a385b12b9f:我就想问下,有人跑成功么,能不能把结果列出来,还有,结果里能获取到telegram的用户电话号是吧
        草丛里的黄盖:@dev_lip 需要翻墙的,而且普通的翻墙代理软件可能还不行,得从路由器开始翻,或者放海外服务器调试。
        26b6e39dfb0b:@makai 需要翻墙吗?为啥我这报ConnectionRefusedError: [Errno 61] Connection refused
        草丛里的黄盖:@HWT_2b3d 当然是跑成功才贴出来的,电话号码是基本获取不到,至于有没有其他人用其他方式获取就不得而知了。但是根据username等能获取到的信息是可以给用户发消息的。
      • 241c058529b2:请教下 api id 和hash如何获取?
        241c058529b2:@makai 想请教下,申请api的时候,我的项目是Web类型需要填写域名信息,那么你是否知道,我一个域名可以用来申请多个账号的API呢?我是想做一个自动发送消息的小工具,但是服务都是在一个域名下面。
        241c058529b2:@makai 谢谢
        草丛里的黄盖:@super_wu 翻墙后打开网页 https://my.telegram.org/apps 会让你登录(输入手机号码记得前面加+86,如果没有注册要先下载客户端注册),登录完成后你需要根据里边提示创建一个app(只要填写一些信息就好),创建完成后你需要的所有信息就都在这个网页里边展示了,希望有所帮助。

      本文标题:Telegram资源整理 开发

      本文链接:https://www.haomeiwen.com/subject/nyuelftx.html