상세 컨텐츠

본문 제목

[파이썬] 카카오톡으로 뽐뿌 키워드 알림을 받아보자

코딩

by 땡감 2022. 1. 15. 22:48

본문

반응형

 

[파이썬] 카카오톡으로 나에게 메시지를 보내보자

 

[파이썬] 카카오톡으로 나에게 메시지를 보내보자

파이썬으로 사이트 키워드 챗봇을 만들고 있다. 가장 흔하게 쓰는 텔레그램이 아닌 카카오톡으로 하다보니 인증 방법부터 Json으로 처리하는 방법까지 알아야했다. 아직 내가 목표로 하는 프로

gam860720.tistory.com

[파이썬] 카카오톡 자동 토근 발행 후 나에게 메시지 보내기 (feat.refresh token)

 

[파이썬] 카카오톡 자동 토근 발행 후 나에게 메시지 보내기 (feat.refresh token)

며칠전 파이썬으로 카카오톡을 통해 자신에게 메시지를 보내는 법에 알아봤다. (해당 글은 아래 링크 참조) [파이썬] 카카오톡으로 나에게 메시지를 보내보자 [파이썬] 카카오톡으로 나에게 메

gam860720.tistory.com

[파이썬] 새로운 게시글이 등록되면 자동으로 카카오톡 보내주기

 

[파이썬] 새로운 게시글이 등록되면 자동으로 카카오톡 보내주기

[파이썬] 카카오톡으로 나에게 메시지를 보내보자 [파이썬] 카카오톡으로 나에게 메시지를 보내보자 파이썬으로 사이트 키워드 챗봇을 만들고 있다. 가장 흔하게 쓰는 텔레그램이 아닌 카카오

gam860720.tistory.com

 

위 3가지 포스팅에 이은 4번째 포스팅이다.

이번에는 대한민국에서 가장 유명한 쇼핑정보 커뮤니티 중 하나인 뽐뿌를 가지고 프로그램을 만들어보자.

목표는 내가 지정한 단어를 포함한 게시글이 등록될 경우 나에게 카카오톡으로 알림을 주는 프로그램을 만든는 것이다.

3번째 포스팅인 fmkorea에서 알림을 받는 프로그램과 거의 유사하며 추가된 부분이 있다면 뽐뿌 게시글에서 내가 원하는 단어를 포함한 게시글들만을 가지고 있는 별도의 URL을 따와야한다는 것이다.

크게 정리하면 다음과 같다.

  • 내가 지정한 키워드를 포함한 게시글들을 url 획득
  • 해당 게시글들을 크롤링
  • 크롤링 결과를 이전 크롤링 결과와 비교
  • 비교 후 카카오톡으로 신규 게시글 전달

가장 먼저 URL 획득은 뽐뿌 사이트에 키워드를 포함한 조건을 추가하여 requests를 던지면 된다.

그리고 게시글들 크롤링은 작성시간, 제목, 링크를 크롤링해왔다.

그 이후 과정들은 이전편인 3번째 포스팅과 동일하다.

카카오 인증을 위한 kakao.py와 뽐뿌사이트에서 게시글을 크롤링하고 비교하는 ppompu.py로 작성되었다.

최초 처음에는 비교 데이터가 없기 때문에 키워드로 검색된 최대 20개글을 카카오톡으로 전송해주고 그 이후는 설정한 반복주기를 텀으로 신규로 추가된 게시글만 알림을 준다.

1)kakao.py

import time
import requests
import json

# code url  https://kauth.kakao.com/oauth/authorize?client_id=자신의 rest api key 값&redirect_uri=https://example.com/oauth&response_type=code
url = 'https://kauth.kakao.com/oauth/token'  # 카톡 인증 url
rest_api_key = '자신의 rest api key 값'  # 카톡 rest 키
redirect_uri = 'https://example.com/oauth'  # 카톡 인증용 redirect url
authorize_code = 'code url을 통해 얻은 code 값'  # 카톡 인증용 코드 수행시마다 재발급 필요


# 최초 token들 발급하여 refresh token 저장
def f_get_refresh_token():
    data = {
        'grant_type': 'authorization_code',
        'client_id': rest_api_key,
        'redirect_uri': redirect_uri,
        'code': authorize_code,
    }

    response = requests.post(url, data=data)
    tokens = response.json()

    with open('refresh_token.json', 'w') as fd:
        json.dump(tokens, fd)


# refresh token을 이용하여 새로운 access token 발급
def f_reissue_token():
    with open('refresh_token.json', 'r') as fd:
        token = json.load(fd)
    refresh_token = token['refresh_token']
    data = {
        'grant_type': 'refresh_token',
        'client_id': rest_api_key,
        'refresh_token': refresh_token
    }
    response = requests.post(url, data=data)
    tokens = response.json()

    with open('access_token.json', 'w') as fd:
        json.dump(tokens, fd)
    with open('access_token.json', 'r') as fd:
        ts = json.load(fd)
    access_token = ts['access_token']
    return access_token


# 메시지 전송
def f_send_msg(access_token, msg):
    header = {'Authorization': 'Bearer ' + access_token}
    url = 'https://kapi.kakao.com/v2/api/talk/memo/default/send'  # 나에게 보내기 주소
    post = {
        'object_type': 'text',
        'text': msg,
        'link': {
            'web_url': 'https://developers.kakao.com',
            'mobile_web_url': 'https://developers.kakao.com'
        },
        'button_title': '키워드'
    }
    data = {'template_object': json.dumps(post)}
    return requests.post(url, headers=header, data=data)

 

2)ppom.py

### 2022년 01월 15일 오후 10시:45분 수정 내용###

  • 카카오톡에 전송할 때 지정한 키워드도 같이 전송
  • 전송되는 메시지 포맷 수정
import requests
import os
import json
import time
import copy
from bs4 import BeautifulSoup
from datetime import datetime

import kakao

# 변수 선언
site_url = 'https://m.ppomppu.co.kr/new/'  # 사이트 URL
board_list = []
p_board_list = []
keyword ='쿠팡'


# 사이트에 파라미터로 넘길 조건들, 키워드 추가시 +뒤에 키워드 추가
params = {
    'search_type': 'subject',
    'keyword': keyword
}

# 조건 추가하여 사이트 오픈
result_search = requests.get('https://m.ppomppu.co.kr/new/bbs_list.php?id=ppomppu&category=', params=params)
# print(result_search.url)

# 사이트 리스트 가져오는 함수
def f_get_list():
    if result_search.status_code == 200:
        html = result_search.text
        soup = BeautifulSoup(html, 'html.parser')
        times = soup.select('#wrap > div.ct > div.bbs > ul > li > a > div.thmb_N2 > ul > li.exp > time')
        titles = soup.select('#wrap > div.ct > div.bbs > ul > li > a > div.thmb_N2 > ul > li.title > span.cont')
        links = soup.select('a.list_b_01n')

        for i in range(0, len(titles), 1):
            board_list.append('작성시간: ' +times[i].text +'\n제목: ' +titles[i].text.strip() +'\n링크: ' +site_url+links[i]['href'])
    else:
        print(result_search.status_code)

while True:
    f_get_list()  # 게시글 크롤링
    access_token = kakao.f_reissue_token()  # 새로운 액세스 토큰을 발급 받음
    sms_list = list(set(board_list) - set(p_board_list))  # 이전 리스트와 비교하여 다른 값만 문자 보낼 리스트로 저장
    p_board_list = copy.deepcopy(board_list)  # 현재 게시글을 이전 게시글로 저장

     authorization_kakao.f_send_msg(access_token, '뽐뿌 결과\n'  +'키워드 : '+keyword + '\n현재 시간 {} 최신글은 총 {}개입니다.'.format(datetime.now().strftime('%H:%M:%S'),len(sms_list)))

    for i in range(0, len(sms_list), 1):
        kakao.f_send_msg(access_token, sms_list[i])

    board_list.clear()
    sms_list.clear()
    time.sleep(1800)  # 반복 주기

 

kakao.py 경우 한번 별도의 파일로 모듈화 해놓으니 앞으로도 자주 애용할 듯 하다.

이제 어떤 프로그램을 만들어볼까?

반응형

관련글 더보기

댓글 영역