Python

[python] 텔레그램 스크래핑 코딩

끊임없이 개발하는 새럼 2025. 1. 22. 17:44

텔레그램은 파이썬에서 쉽게 사용할 수 있는 API를 제공해 준다

주로 자바만 다루다가 파이썬을 시작하니 좀 두려웠는데, 생각보다 설치도 간단하고 쉬웠다.

새로운 툴을 적응하는 게 어려워서 비주얼 스튜디오 코드를 써야 할지 고민했지만

그냥 노트패드를 열고 수정해도 됐다,,,, 오....

 

하려고 하는 코드는!! 텔레그램의 대화방 스크래핑이다.

뭘 하다보니 대화방 스크래핑이 필요했고 만들어봤다

 

import time
import re
from telethon import TelegramClient, events
import asyncio

# 사용자 계정에 대한 API ID와 API HASH를 입력하세요
api_id = ''
api_hash = ''

# 텔레그램 클라이언트 설정
client = TelegramClient('session_name', api_id, api_hash)

channel_id = ''
channel_name=''

def extract_text_message(text):
    start_time = time.time()  # 시작 시간 기록

    match = re.search(r'([a-zA-Z0-9])', text)
    if match:
        text_message = match.group(0)
        return message, start_time  
    return None, None

async def send_to_channel(text_message, start_time):

    try:
        await client.send_message(channel_username, text_message)
        end_time = time.time()  # 끝 시간 기록
        elapsed_time = end_time - start_time  # 소요된 시간 계산
        print(f"성공적으로 전송했습니다! 메시지: {text_message}")
        print(f"메시지 전송에 걸린 시간: {elapsed_time:.2f}초")  # 소수점 2자리까지 출력
    except Exception as e:
        print(f"오류 발생: {e}")

async def handle_new_message(event):
    message = event.message

    text_message, start_time = extract_text_message(message.text)
    if text_message:
        print(f"새로운 메시지: {text_message}")
        await send_to_channel(text_message, start_time)

async def main():
    # 텔레그램 서버에 로그인
    await client.start()
    channel = await client.get_entity(channel_id)

    # 실시간으로 메시지를 감지
    client.add_event_handler(handle_new_message, events.NewMessage(chats=channel_id))

    print(f"{channel_id} 실시간으로 메시지를 감지합니다...")

    # 계속 실행되도록 대기
    await client.run_until_disconnected()
   

# 비동기 실행
try:
    asyncio.run(main())
except KeyboardInterrupt:
    print("프로그램이 종료되었습니다.")
    # 추가로 필요한 종료 처리 로직이 있으면 여기에 작성
 
 

 

굉장히 많은 모듈이 있었고 라이브러리가 있는 것 같다.

이거 말고 텔레그램 봇도 만들고 싶은데

시간 나면 텔레그램 봇도 만들어서 돌려보고 싶다

+ 안정성을 높이기 위한 코드도 들어가면 좋을 것 같은데, 시간이 중요해서 느려질까봐 못 넣음

+ 속도 향상을 위한 최적화를 진행하고 싶지만 아직 거기까지는 모르겠음.