go 기반 뉴스 스크래핑 데몬
웹에 존재하는 데이터를 추출하는 기술
- CentOS Linux release 7.9.2009 (Core)
- go version go1.17.3 linux/amd64
매일 업데이트 되는 연재 기사들을 스크래핑해서 slack 채널 및 카카오톡으로 나에게 메시지를 전송한다.
해당 날짜의 기사 전체를 스크래핑해서 채널에 메시지를 전송한다.
카카오톡 메시지 템플릿의 텍스트는 최대 200자까지 표시되므로 버튼에 기사의 링크로 redirect 되도록 함
- Slack Workspace 생성
- Slack App 추가
- OAuth Token 발급을 위해 Workspace에 App을 Install
- 발급된 토큰을
keys.json
에 추가
-
브라우저에서 아래 url 실행
-
redirect된 url에서 code 가져오기
-
토큰 발급, 갱신 등에서 사용
아래 명령을 수행하여 Access Token 및 Refresh Token을 발급 받고 keys.json
에 직접 업데이트한다.
curl -v -X POST "https://kauth.kakao.com/oauth/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=authorization_code" \
-d "client_id=1234567abcdefg" \
-d "client_secret=ABCDEFG1234567" \
--data-urlencode "redirect_uri=http://localhost:9090" \
-d "code=A1B2C3D4E5F6G7"
기동 시 keys.json
의 Access Token을 한 번 갱신하고
Access Token, Refresh Token은 각각 만료 1시간 전에 자동으로 갱신한다.
갱신된 Token은 keys.json
파일에도 자동으로 갱신한다.
{
"slack_key": "abcdefg-1234567",
"kakao": {
"app_id": "12345",
"key": "1234567abcdefg", # REST API Key
"template": "54321", # 메시지 템플릿 ID
"redirect_url": "http://localhost:9090",
"authorization_code": "A1B2C3D4E5F6G7",
"access_token": "abcdefg1234567",
"refresh_token": "a1b2c3d4e5f6g7",
"expires_in": 12345,
"refresh_token_expires_in": 543210,
"client_secret": "ABCDEFG1234567"
}
}
PORT PROXY - 30080
INTERNAL Kube Port NEWYO - 30100 GOSCRAPER - 30200