티스토리 뷰
교육과정 중, 교육생 분께서 카카오 api 사용법을 물어보셔서 답변을 드리다가 만들게 된 코드!
아래와 같은 결과물을 보내준다.
(당연하지만, kakao developers에서 api 사용할 수 있도록 설정하는 것 필요!)
hotdeal_eomise.py
import requests
import json
import time
import copy
import re
from bs4 import BeautifulSoup
from datetime import datetime
import kakao_test
site_url = 'https://eomisae.co.kr/fs'
board_list = [] # 크롤링 결과 저장 리스트
p_board_list = [] # 이전 크롤링 결과 저장 리스트
def f_get_list():
result_search = requests.get(site_url)
html = result_search.text
soup = BeautifulSoup(html, 'html.parser')
all_lists = soup.select('.card_el.n_ntc.clear') #전체 게시글 덩어리 크롤링
times = soup.select('div > div.card_content > p > span:nth-child(2)')
titles = soup.select('div > div.card_content > h3 > a')
for idx in range(len(titles)):
title = titles[idx].text #제목 앞에 탭 제거
board_list.append('제목: ' +title +'\n작성시간: '+times[idx].text +'\n링크: ' +site_url +titles[idx]['href'])
# kakao_test.f_get_refresh_token() #최초 refresh token 추출시에만 수행
while True:
print("작동합니다")
f_get_list() #게시글 크롤링
access_token = kakao_test.f_reissue_token() # 새로운 액세스 토큰을 발급 받음
sms_list = list(set(board_list) - set(p_board_list)) # 이전 리스트와 비교하여 다른 값만 문자 보낼 리스트로 저장
p_board_list = copy.deepcopy(board_list) # 현재 게시글을 이전 게시글로 저장
kakao_test.f_send_msg(access_token, '어미새 핫딜 결과\n' +'현재 시간 {} 최신글은 총 {}개입니다.'.format(datetime.now().strftime('%H:%M:%S'),len(sms_list)))
for i in range(len(sms_list)):
kakao_test.f_send_msg(access_token, sms_list[i])
board_list.clear()
sms_list.clear()
time.sleep(1800) # 반복 주기
kakao_test.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키를 입력해 주세요' # 카톡 rest 키
redirect_uri = '인증용 redirect url을 입력해 주세요' # 카톡 인증용 redirect url
authorize_code = '인증용 url을 통해 받으셨던 코드를 입력해 주세요' # 카톡 인증용 코드 수행시마다 재발급 필요
# 최초 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)
'language > python' 카테고리의 다른 글
certificate verify failed: unable to get local issuer certificate (0) | 2023.07.17 |
---|---|
smtp를 이용한 메일 자동화 코드 (0) | 2023.07.14 |
dart api 활용 (0) | 2022.10.04 |
220928 colab으로 웹스크래핑&엑셀로 저장 (0) | 2022.09.28 |
220922. jinja2.exceptions.TemplateNotFound: index.html에러 (0) | 2022.09.22 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Python
- 프로그래머스
- Java
- Redisson
- 인덱스
- EC2
- pessimisticlock
- 항해
- jmeter세션
- 자바
- jmeter부하테스트
- jmeter토큰
- bankersRounding
- jwt
- Spring
- CorrectnessAndTheLoopInvariant
- 부하테스트시나리오
- Lock
- hackerrank
- index
- Redis
- jmeter쿠키
- 동적크롤링
- CheckedException
- jmeter테스트
- jmeter로그인
- jmeter시나리오
- 토큰
- 대규모더미데이터
- 스프링faker
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함