美文网首页
telegram 数据采集-android 数据解析

telegram 数据采集-android 数据解析

作者: niyiwei | 来源:发表于2021-07-21 15:15 被阅读0次

之前基于 telethon 库开发的tg采集,

原本每天采集量都很理想,后面不知道为什么突然采集量就急剧下降,达到每天8万条消息。

后面修改了一下代码逻辑,以及并行采集,后面还是一样的效果,而且,还被封了一批账号。

后面就想到,tg的客户端是开源的,就打算基于客户端进行二次开发

环境配置,这边我就不多说了,也不想凑字数

tg源码

说一下android客户端解析的方式:
1:解析 包名/files/cache4.db 文件

2:直接在消息接收并解码后 hook (目前我使用的是这种)
源码位置在:TMessagesProj/src/main/java/org/telegram/tgnet/TLRPC.java
public static abstract class Update extends TLObject 这个类里面的TLdeserialize函数
(org.telegram.tgnet.TLRPC.Update#TLdeserialize)


image.png

然后判断数据包的类型,判断数据包是不是消息


image.png

然后消息携带的音视频文件的话,可以通过
org.telegram.messenger.FileLoader#getPathToMessage获取

消息怎么解析,就需要你们自己来动手了。

还有不想监听的话,可以设置一个定时任务

        //获取cache4.db的数据库对象
        MessagesController instance = MessagesController.getInstance(UserConfig.selectedAccount);
        SQLiteDatabase database = instance.getMessagesStorage().getDatabase();
        // 查看消息表(这段代码是直接在tg里面拷贝过来,不一定复制就能用,这里只是给一个参考)
SQLiteCursor replyCursor = database.queryFinalized(String.format(Locale.US, "SELECT data, mid, date, uid FROM messages "));
            while (replyCursor.next()) {
                NativeByteBuffer data = replyCursor.byteBufferValue(0);
                if (data != null) {
                    TLRPC.Message message = TLRPC.Message.TLdeserialize(data, data.readInt32(false), false);
                    message.readAttachPath(data, getUserConfig().clientUserId);
                    data.reuse();
                    message.id = replyCursor.intValue(1);
                    message.date = replyCursor.intValue(2);
                    message.dialog_id = replyCursor.longValue(3);

                    addUsersAndChatsFromMessage(message, usersToLoad, chatsToLoad);

                    TLRPC.Message owner = replyMessageOwners.get(message.dialog_id);
                    if (owner != null) {
                        owner.replyMessage = message;
                        message.dialog_id = owner.dialog_id;
                    }
                }
            }
            replyCursor.dispose();

相关文章

网友评论

      本文标题:telegram 数据采集-android 数据解析

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