RedPlug's Tory

업무를 하던 도중 주소줄여서 적어야 하는 케이스가 간혹 생겨 귀찮이즘에 슬랙봇을 만들어야겠다! 라는 생각을 합니다.

주소 단축사이트에서 웹크롤링을 이용해서 가져오려고 했는데 뭔가 불필요한 부분이 많은것 같아서 API를 찾아보던 중 네이버에서 제공 하는 API가 있어서 그걸 이용하여 만들어 보았습니다.

 

url 단축 API를 사용하기 위해서는 네이버 개발자 센터에 계정등록 > 애플리케이션 등록 > 클라이언트 아이디와 시크릿 값을 받아와야 합니다.

developers.naver.com/docs/utils/shortenurl/

 

단축 URL API 적용 가이드

단축 URL API는 원본 URL을 `http://me2.do/example`과 같은 형태의 짧은 URL로 반환하는 RESTful API입니다.

developers.naver.com

상기 주소에 사전 준비사항 참고하여 필요한 값을 생성합니다.

Client ID, Client Secret 값을 우선 만들어둡니다.

 

 

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
 
 

실제 주소를 줄여주는 코드(개발자 센터 예제에서 필요한 부분만 수정하였습니다.)

 

정상적으로 값을 가져옵니다.