Post

Twitter Project - Github Actions를 이용 학식 자동 트윗 봇

excerpt

tweeting University Cafeteria’s Lunch Menus in twitter for myself. And learning how to crawl the data with python, and how to use a api.

Info

프로젝트명공주대(천안) 학식봇제작기간2022.04.03 ~ 2022.04.06 (4일)
참여인원1명개발환경Python, Twitter API, Tweepy, Selenium, Github Action
목적
  1. API 및 크롤링 익히기
  2. 자동봇 만들어보기
구현내용
  1. 파이썬을 이용한 크롤링으로 학교 홈페이지 내 데이터 가져오기
  2. 트위터 API와 Tweepy를 사용해 트윗
  3. 깃허브 액션을 이용해 매일 UTC 기준 01:00(한국시간 오전 10시)마다 학식 메뉴 트윗
기타개인 프로젝트결과물@KNU_Lunch_Menu

[Twitter Project] 공주대 학식 자동트윗봇

먼저 이 프로젝트를 처음으로 트위터 api를 사용했다. 꽤 복잡하고 어려웠지만 하다보니 할만했던 것 같다. 밤새 코딩하면서 재미를 느낄 수 있었다.

Twitter Developer

Twitter Developer 화면

트위터 봇을 만드려면 트위터 디벨로퍼의 승인을 받은 트위터 계정이 필요하다. 승인 받는 방법은 구글링을 통해 따로 알아보길 바란다. 트위터 디벨로퍼 승인받은 당시의 소감

Twitter api & Tweepy

봇을 만들기 위해선 4개의 키가 필요하다.

  1. Api Key
  2. Api Key Secret
  3. Access Token
  4. Access Token Secret

나는 이번 프로젝트에서 Tweepy, Selenium, Chrome Driver를 사용하였다. 그런데, 자동봇을 만들기 위해 파이썬으로 코딩하여 트윗을 작성하면 알겠지만 개발자 계정에 트윗이 된다. 매번 봇을 만들 때마다 승인을 받는건 여간 귀찮은 일이 아니다. 따라서 트위터 디벨로퍼에서 발급받은 저 4개의 키를 이용해 자동봇 계정의 Access Token과 Access Token Secret을 만들 것이다. 해당 내용에 대해선 블로그에 자세히 적어놓았다.

Github Environment

내 깃허브 코드를 보면 알겠지만 Api key나 Access token이 드러나있지 않고 Environment를 이용하여 환경에서 변수를 받아왔다. 해당 4개의 키를 그대로 드러내기엔 계정의 중요한 정보라 거부감이 든다.

github secret 화면

따라서 나는 Secret에 인증키들을 등록하는 방법을 사용하였다.

workflow

나는 workflow를 윈도우 버전으로 작성하였다. 매일 UTC 00:00 기준으로 트윗이 올라가게끔 작성하였으며 트윗할 때마다 크롬 드라이버를 다운받아 unzip한 뒤 사용하도록 만들었다. 프로젝트의 더 자세한 코드는 이곳에서 볼 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions

name: Python package

on:
  schedule: 
    - cron: '0 0 * * *'
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:

    runs-on: windows-latest
    #strategy:
      #fail-fast: false
      #matrix:
        #python-version: ["3.8", "3.9", "3.10"]

    steps:
    - uses: actions/checkout@v3
    - name: Set up Python 3.10
      uses: actions/setup-python@v3
      with:
        python-version: 3.10
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
        #if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
    - name: Download chromedriver
      run: |
        (New-Object System.Net.WebClient).DownloadFile('https://chromedriver.storage.googleapis.com/100.0.4896.60/chromedriver_win32.zip', 'chromedriver.zip')
        Expand-Archive .\chromedriver.zip .
        #tar -zxvf [chromedriver.zip] -C [chromedriver]
    - name: Tweets
      run: |
        python3 "main.py"
      env:
        TWITTER_API_KEY: $
        TWITTER_API_SECRET: $
        TWITTER_ACCESS_TOKEN: $
        TWITTER_ACCESS_TOKEN_SECRET: $

동작 화면

트위터 화면 트윗들

This post is licensed under CC BY 4.0 by the author.