• 목록
  • 아래로
  • 위로

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



안녕하세요?


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자 이상의 문자열인 경우에, 이를 캡쳐하여 이미지로 전송하는 방법이 있겠습니다 ^^


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


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


작성자
이니스프리 95 Lv. (6%) 723020/737280EXP

ཇོ་མོ་གླང་མ

댓글 0

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
23 [Requests-HTML] Requests와 비교할 때의 장점! (네이버 뉴스 등 크롤링) 3 image 이니스프리 이니스프리 20.05.14.19:08 276
22 22. [OpenPyXL] 엑셀 문서 저장하기 / 시트 추가하기 / 셀에 입력하기 14 image 이니스프리 이니스프리 20.02.02.00:46 739
21 21. [OpenPyXL] 엑셀 문서를 열고 시트에서 셀의 값을 얻기 2 image 이니스프리 이니스프리 20.02.01.23:46 430
20 [BeautifulSoup] 자식태그를 제거하기 - .decompose() & .extract() 2 image 이니스프리 이니스프리 20.01.16.00:07 666
[python-telegram-bot] 4096자 글자수 제한을 우회하는 방법 image 이니스프리 이니스프리 20.01.12.11:25 404
18 [Requests] Selenium을 이용한 Cloudflare의 우회 3 image 이니스프리 이니스프리 20.01.08.19:51 653
17 9. [정리] 파이써닉한 파이썬 문법 팁 for COS Pro image 이니스프리 이니스프리 20.01.04.23:47 363
16 [번외편] 네이버 동영상에서 자막을 파일로 추출하는 방법 2 image 이니스프리 이니스프리 19.12.25.22:34 661
15 4. 문자열 처리 (2) - 문자열 조작에 대한 기본함수 및 메서드 1 image 이니스프리 이니스프리 19.12.12.02:27 308
14 6. 리스트와 관련된 기본함수 및 메서드 7 image 이니스프리 이니스프리 19.12.10.21:16 394
13 3. 문자열 처리 (1) - 문자열 접근 및 검색방법 4 image 이니스프리 이니스프리 19.12.09.20:00 864
12 [Selenium] Requests의 session을 Selenium으로 보내기 image 이니스프리 이니스프리 19.12.07.14:17 682
11 1. 반복문 (1) - while 문 5 image 이니스프리 이니스프리 19.12.06.20:50 295
10 (序) Python 강좌를 시작하며... 2 image 이니스프리 이니스프리 19.12.05.21:55 242
9 [Pillow] 파이썬 Pillow 라이브러리를 이용하여 이미지의 배경을 transparent하게 만들기 11 image 이니스프리 이니스프리 19.08.04.13:40 1138
8 [번외편 - 법률] 나무위키의 서술 중 법률용어의 사용에 있어 바로잡아야 할 부분 image 이니스프리 이니스프리 19.07.17.22:44 276
7 [번외편 - 유튜브] Youtube API를 이용하거나 또는 이용하지 않고 채널ID를 추출하는 방법 1 image 이니스프리 이니스프리 19.07.16.17:55 626
6 [Selenium] Selenium에서 send_keys를 막아놓은 경우 해결책 이니스프리 이니스프리 19.07.04.05:52 632
5 [번외편 - 아미나] Basic Youtube Title Widget 1.0에서 처음에 엑박으로 뜨는 경우의 해결책 3 image 이니스프리 이니스프리 18.12.15.23:02 563
4 [번외편 - 아미나] 아미나의 회원 이미지와 관련하여 x2 3 image 이니스프리 이니스프리 18.12.10.19:57 533