[Python] 슬랙봇 단축주소 가져오기
언어/Python2020. 10. 17. 11:02
업무를 하던 도중 주소줄여서 적어야 하는 케이스가 간혹 생겨 귀찮이즘에 슬랙봇을 만들어야겠다! 라는 생각을 합니다.
주소 단축사이트에서 웹크롤링을 이용해서 가져오려고 했는데 뭔가 불필요한 부분이 많은것 같아서 API를 찾아보던 중 네이버에서 제공 하는 API가 있어서 그걸 이용하여 만들어 보았습니다.
url 단축 API를 사용하기 위해서는 네이버 개발자 센터에 계정등록 > 애플리케이션 등록 > 클라이언트 아이디와 시크릿 값을 받아와야 합니다.
developers.naver.com/docs/utils/shortenurl/
상기 주소에 사전 준비사항 참고하여 필요한 값을 생성합니다.
Slackchatbot.py
슬랙 봇에서 필요한 부분만 따왔습니다.
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
|
from urlshort import url_short
elif event_message.find(surl) > -1:
channel = slack_event["event"]["channel"]
orignalurl = event_message.replace("주소단축 ","")
print(surl)
if event_message.replace(" ","") == surl:
slack.chat.post_message(channel, f"주소단축 뒤에 주소를 넣어주시면 여울이가 줄여줄게요")
elif event_message != surl:
ssurl = url_short(orignalurl)
username = '여울이가 주소를 줄여줘요!'
icon_emoji = ''
attachement = {
'pretext': '여울이의 ShortUrl',
"fallback": "여울이 ShortUrl",
"text": f"여울이가 주소를 줄였어요. {ssurl}\n",
"fields": [
{
"value": "",
"short": False
}
],
"color": "good",
}
slack.chat.post_message(channel, attachments=[attachement], username=username, icon_emoji=icon_emoji)
return make_response("앱 멘션 메시지가 보내졌습니다.", 200, )
|
urlshort.py
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
|
# -*- coding: utf-8 -*-
import urllib.request
import json
import html def url_short(orignalurl):
replaceurl = html.unescape(orignalurl.replace("<", "").replace(">", "")) # 슬랙에서 링크일 경우 <> 붙여ㅓ 해당 부분 삭제
index = replaceurl.find("|") # http를 넣지 않을경우 |이후 추가적으로 문자열이 찍혀 해당 부분 삭제하기 위함
client_id = "AAAAA" # 개발자센터에서 발급받은 Client ID 값
client_secret = "BBBBB" # 개발자센터에서 발급받은 Client Secret 값
encText = urllib.parse.quote(replaceurl[:index]) # index위치 이후 삭제
data = "url=" + encText
url = "https://openapi.naver.com/v1/util/shorturl"
request = urllib.request.Request(url)
request.add_header("X-Naver-Client-Id", client_id)
request.add_header("X-Naver-Client-Secret", client_secret)
response = urllib.request.urlopen(request, data=data.encode("utf-8"))
rescode = response.getcode()
if (rescode == 200):
response_body = response.read()
shorturl = json.loads(response_body.decode('utf-8'))
returnurl = shorturl['result']['url']
else:
print("Error Code:" + rescode)
print(returnurl)
return returnurl
|
실제 주소를 줄여주는 코드(개발자 센터 예제에서 필요한 부분만 수정하였습니다.)
정상적으로 값을 가져옵니다.