• 목록
  • 아래로
  • 위로

텔레그램에 대한 이미지 검색결과



안녕하세요?


python-telegram-bot(최신버전 12.3.0)을 사용하다보면 4096자 글자수 제한 때문에 에러가 발생하는 경우가 있습니다.


4096자 제한이라고 하면 일반적인 채팅을 기준으로 할 때 상당히 긴 문자열이라고 생각되시겠지만, 크롤링을 한 결과를 전송하다보면 이를 초과하는 경우도 종종 발생합니다 ^^


긴 문자열의 메시지가 에러로 인해 전송이 되지 못한다면, 중요한 정보의 손실이 아닐 수 없겠죠.



이러한 제한을 우회하기 위해서는 결국 4096자를 기준으로 문자열을 잘라서 전송할 수밖에 없습니다.


다만 단순히 4096자 간격으로 자르다보면 읽는 사람의 입장에서 상당히 불편하기 때문에, 어떻게 하면 보기에 좋도록 적절히 자를 수 있는지가 문제됩니다.


아래의 스크립트는 다음 URL의 아이디어를 기초로 작성되었습니다.


https://github.com/python-telegram-bot/python-telegram-bot/issues/768


import telegram

def t_msg(text):
    bot = telegram.Bot(token='토큰을 입력하세요')
    try:
        chat_id = bot.getUpdates()[-1].message.chat.id
    except:
        chat_id = 챗아이디를 입력하세요

    if len(text) <= 4096:
        bot.sendMessage(chat_id=chat_id, text=text)
    else:
        parts = []
        while len(text) > 0:
            if len(text) > 4080: # '(Continuing...)\n'이 16자임을 고려하여 4096-16=4080을 했습니다.
                part = text[:4080]
                first_lnbr = part.rfind('\n')
                if first_lnbr != -1: # 가능하면 개행문자를 기준으로 자릅니다.
                    parts.append(part[:first_lnbr])
                    text = text[first_lnbr:]
                else:
                    parts.append(part)
                    text = text[4080:]
            else:
                parts.append(text)
                break
        for idx, part in enumerate(parts):
            if idx == 0:
                bot.send_message(chat_id, text = part)    
            else: # 두번째 메시지부터 '(Continuing...)\n'을 앞에 붙여줍니다.
                bot.send_message(chat_id, text = '(Continuing...)\n' + part)
            time.sleep(0.5)



테스트 결과 아직까지는 별 문제 없이 잘 작동합니다.


이론적으로는 인덱스를 자르는 기준으로 text[:4081]까지도 가능할텐데 귀찮아서 그냥 4080로 숫자를 모두 통일했습니다 ㅎㅎ


다른 우회방법을 찾자면 크롤링할 대상이 4096자 이상의 문자열인 경우에, 이를 캡쳐하여 이미지로 전송하는 방법이 있겠습니다 ^^


허접한 스크립트를 읽어주셔서 감사합니다!


그럼 즐거운 주말 되세요 :)


gamb1t님 gamb1t 포함 1명이 추천

추천인 1

작성자
이니스프리 119 Lv. (0%) 1876250/115200000EXP

당분간 일신상의 사정으로 쪽지나 댓글로 답변을 드리기 어렵습니다. 죄송합니다.

 

CSVpuymXAAAVVpd.jpg

댓글 0

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
29 [디지털포렌식전문가] 제21회 필기시험 합격 후기 9 image 이니스프리 이니스프리 23.10.29.16:11 2475
28 [Python] GIF 파일에 프로그레스바 삽입하기! (Adding progress bar into GIF) image 이니스프리 이니스프리 22.05.14.13:14 12581
27 [Python] 그누보드 자동 글 작성 + 멀티 파일 업로드 스크립트 1 image 이니스프리 이니스프리 21.05.16.09:32 23690
26 0. 행의 분리 및 결합 / 멀티라인 문자열 image 이니스프리 이니스프리 21.04.18.11:53 447
25 [Selenium] proxy를 사용하지 않고 개발자도구에서 Network 탭의 로그를 얻기 image 이니스프리 이니스프리 21.03.06.23:35 1555
24 [번외편 - 한컴한글] 스마트한 문서 작성을 위한 팁 (작성 중) 이니스프리 이니스프리 20.08.08.13:50 493
23 [Requests-HTML] Requests와 비교할 때의 장점! (네이버 뉴스 등 크롤링) 7 image 이니스프리 이니스프리 20.05.14.19:08 1420
22 22. [OpenPyXL] 엑셀 문서 저장하기 / 시트 추가하기 / 셀에 입력하기 14 image 이니스프리 이니스프리 20.02.02.00:46 5577
21 21. [OpenPyXL] 엑셀 문서를 열고 시트에서 셀의 값을 얻기 3 image 이니스프리 이니스프리 20.02.01.23:46 1269
20 [BeautifulSoup] 자식태그를 제거하기 - .decompose() & .extract() 10 image 이니스프리 이니스프리 20.01.16.00:07 9248
[python-telegram-bot] 4096자 글자수 제한을 우회하는 방법 image 이니스프리 이니스프리 20.01.12.11:25 2049
18 [Requests] Selenium을 이용한 Cloudflare의 우회 8 image 이니스프리 이니스프리 20.01.08.19:51 6245
17 9. [정리] 파이써닉한 파이썬 문법 팁 for COS Pro image 이니스프리 이니스프리 20.01.04.23:47 1009
16 [번외편] 네이버 동영상에서 자막을 파일로 추출하는 방법 2 image 이니스프리 이니스프리 19.12.25.22:34 5598
15 4. 문자열 처리 (2) - 문자열 조작에 대한 기본함수 및 메서드 1 image 이니스프리 이니스프리 19.12.12.02:27 553
14 6. 리스트와 관련된 기본함수 및 메서드 7 image 이니스프리 이니스프리 19.12.10.21:16 2090
13 3. 문자열 처리 (1) - 문자열 접근 및 검색방법 4 image 이니스프리 이니스프리 19.12.09.20:00 1176
12 [Selenium] Requests의 session을 Selenium으로 보내기 image 이니스프리 이니스프리 19.12.07.14:17 4666
11 1. 반복문 (1) - while 문 7 image 이니스프리 이니스프리 19.12.06.20:50 2501
10 (序) Python 강좌를 시작하며... 2 image 이니스프리 이니스프리 19.12.05.21:55 494