Python 텔레그램(telegram) 채널 데이터 가져오기, Django Create a Model- 2
Language/Python

Python 텔레그램(telegram) 채널 데이터 가져오기, Django Create a Model- 2

뉴비뉴 2023. 2. 6.

 안녕하세요.

저번에는 작성했던 글에 이어서 텔레그램(Telegram) 데이터 가져오기를 구현해보겠습니다.

 

Python 텔레그램(telegram) 설치(Installation), 로그인(Signing in), API 개발 도구(API development tools) - 1

안녕하세요. 오늘은 텔레그램 데이터를 가져오고, 데이터베이스 저장 및 프론트엔드, await 과 async 에 대해서 알아보겠습니다. 텔레그램에서 왜 데이터를 가져오냐 에 대해서는 주식관련 뉴스나

newbiecs.tistory.com

링크에서 발급받은 API_ID 와 API_HASH  값이 없으면 구현할 수 없기 때문에

위 링크를 꼭 봐주시기 바랍니다.

 

Python 을 이용하여 텔레그램 채널 데이터를 가져오고,

가져온 정보를 Django models(ORM) Database 에 저장해보겠습니다.

 

1. Python 초기세팅 & Django setup

Python 에서 Django 의 데이터를 가져오고 싶거나

"독립형" Django 사용을 위해서는 django.setup() 호출이 필요합니다.
django.setup() 에 관한 설명은 링크를 누르시면 됩니다.

 

Django

The web framework for perfectionists with deadlines.

docs.djangoproject.com

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")

import django
django.setup()

이런 식으로 설정하면 models.py 에 정의한 테이블을 가져올 수 있습니다.

2. Django | add a Model

class BaseModel(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True

class Channel(BaseModel):
    channel_id = models.IntegerField(default=0)
    name = models.CharField(max_length=32)

    class Meta:
        verbose_name = 'Channel'
        verbose_name_plural = 'Channels'
        ordering = ['created_at']

    def __str__(self):
        return f"Channel-{self.channel_id}-{self.name}"

class Stock(BaseModel):
    channel = models.ForeignKey("Channel", related_name="channel", on_delete=models.CASCADE, db_column="channel_id")

    title = models.CharField(max_length=255)  # 국내 대체육 시장 200억 ...
    description = models.TextField()  # 상세 설명
    site_name = models.CharField(max_length=32)  # 연론사 뷰, MBC, ...
    url = models.URLField(max_length=255)  # 뉴스 링크
    date = models.DateTimeField()  # 작성 날짜

    class Meta:
        verbose_name = 'Stock'
        verbose_name_plural = 'Stocks'
        ordering = ['-created_at']

    def __str__(self):
        return f"Stock-{self.channel}-{self.title}"

 

 

 

BaseModel 은 보통 다른 프로젝트에서도 많이 사용하곤 합니다.

'abstract = True' 를 명시하여 다른 테이블에서도 가져와 사용할 수 있습니다.

 

Channel 은 텔레그램의 채널을 의미 합니다.

아래 사진에서 보이는 주식 급등일보...가 채널입니다.

 

텔레그램 채널 데이터 가져오기

 

위에 보이는 사진이 채널 안에 들어온 것이고,

이 안에 운영자들이 작성한 글들을 가져오는 것 입니다.

 

@FastStockNews

 

여기서 중요한 건 ID 즉 @FastStockNews 입니다.

 

Stock 은 텔레그램 채널에서 가져온 데이터에서 제공하는 값들을 저장합니다.

저는 기본적으로 아래의 데이터들만 사용하였습니다.

title, description, site_name, url, date 등등 다양한 값이 존재합니다.

 

models 를 만들었다면

 

poetry run python manage.py makemigrations stock
poetry run python manage.py migrate stock
or
python manage.py makemigrations stock
python manage.py migrate stock

 

makemigrations 및 migrate 해주시면 됩니다.

 

오늘은 Telegram(텔레그램) 채널 데이터를 알아봤고,

Python, Django setup 에 대해 구현했습니다.

Model 을 만들고, 텔레그램에서 이런이런 데이터들을 가져오겠다를 만들어 봤습니다.

 

다음 글에서는 직접 구현하여 데이터를 가져오는 것을 하겠습니다.

궁금하신 점이나 고치면 좋겠다는 내용이 있다면 댓글 부탁드립니다.

 

감사합니다.

댓글

💲 추천 글