Skip to content

Commit 5d7e913

Browse files
committed
first commit
0 parents  commit 5d7e913

23 files changed

Lines changed: 402 additions & 0 deletions

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
.idea/
2+
venv/
3+
__pycache__/
4+
*.pyc
5+
config.ini

README.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Solapi-Python-Example
2+
3+
[![Python 3.7](https://img.shields.io/badge/python-3.7-blue.svg)](https://www.python.org/downloads/release/python-370/)
4+
5+
## 사용 준비
6+
- [ ] [config.ini](https://github.com/solapi/examples/blob/python/python/config.ini)에 정보 입력
7+
- [ ] ApiKey
8+
- [ ] ApiSecret
9+
- [ ] to (수신번호)
10+
- [ ] from (발신번호)
11+
12+
## 필요한 Library
13+
### main
14+
- [ ] requests
15+
- [ ] configparser
16+
- [ ] json
17+
### auth
18+
- [ ] time
19+
- [ ] datetime
20+
- [ ] uuid
21+
- [ ] hmac
22+
- [ ] hashlib

auth/auth.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import time
2+
import datetime
3+
import uuid
4+
import hmac
5+
import hashlib
6+
7+
8+
def unique_id():
9+
return str(uuid.uuid1().hex)
10+
11+
12+
def get_iso_datetime():
13+
utc_offset_sec = time.altzone if time.localtime().tm_isdst else time.timezone
14+
utc_offset = datetime.timedelta(seconds=-utc_offset_sec)
15+
return datetime.datetime.now().replace(tzinfo=datetime.timezone(offset=utc_offset)).isoformat()
16+
17+
18+
def get_signature(key, msg):
19+
return hmac.new(key.encode(), msg.encode(), hashlib.sha256).hexdigest()
20+
21+
22+
def get_headers(apiKey, apiSecret):
23+
date = get_iso_datetime()
24+
salt = unique_id()
25+
data = date + salt
26+
return {'Authorization': 'HMAC-SHA256 ApiKey=' + apiKey + ', Date=' + date + ', salt=' + salt + ', signature=' +
27+
get_signature(apiSecret, data)}
28+

config-dist.ini

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[AUTH]
2+
# 계정의 API Key와 API Secret을 입력해주세요
3+
api_key = [API KEY]
4+
api_secret = [API SECRET]
5+
6+
[SERVER]
7+
domain = api.solapi.com
8+
protocol = https
9+
prefix =

config.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import os
2+
import configparser
3+
4+
libdir = os.path.dirname(__file__)
5+
6+
config = configparser.ConfigParser()
7+
config.read(libdir + '/config.ini')
8+
apiKey = config['AUTH']['api_key']
9+
apiSecret = config['AUTH']['api_secret']
10+
protocol = config['SERVER']['protocol']
11+
domain = config['SERVER']['domain']
12+
prefix = config['SERVER']['prefix'] and config['SERVER']['prefix'] or ''
13+
14+
def getUrl(path):
15+
url = '%s://%s' % (protocol, domain)
16+
if prefix != '':
17+
url = url + prefix
18+
url = url + path
19+
return url

group/add_group.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import requests
2+
import json
3+
import sys
4+
import os.path
5+
6+
sys.path.append('../')
7+
8+
from auth import auth
9+
import config
10+
11+
if __name__ == '__main__':
12+
res = requests.post(config.getUrl('/messages/v4/groups'),
13+
headers=auth.get_headers(config.apiKey, config.apiSecret))
14+
print(json.dumps(json.loads(res.text), indent=2, ensure_ascii=False))

group/add_group_message.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import requests
2+
import configparser
3+
import json
4+
import sys
5+
import os.path
6+
7+
sys.path.append('../')
8+
9+
from auth import auth
10+
import config
11+
12+
if __name__ == '__main__':
13+
# [INPUT_GROUP_ID] 에 그룹 아이디를 넣어주세요
14+
# ex) G4V20181005122748TESTTESTTESTTES
15+
data = {
16+
'messages': json.dumps([
17+
{
18+
'to': '수신번호 입력',
19+
'from': '발신번호 입력',
20+
'text': '예제 메시지'
21+
},
22+
{
23+
'to': '수신번호2 입력',
24+
'from': '발신번호2 입력',
25+
'text': '예제 메시지2'
26+
}
27+
])
28+
}
29+
res = requests.put(config.getUrl('messages/v4/groups/[INPUT_GROUP_ID]/messages'),
30+
headers=auth.get_headers(config.apiKey, config.apiSecret),
31+
json=data)
32+
print(json.dumps(json.loads(res.text), indent=2, ensure_ascii=False))
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import requests
2+
import configparser
3+
import json
4+
import sys
5+
import os.path
6+
7+
sys.path.append('../')
8+
9+
from auth import auth
10+
import config
11+
12+
if __name__ == '__main__':
13+
# [GROUP_ID] 에 그룹 아이디를 넣어주세요
14+
# ex) G4V20181005122748TESTTESTTESTTES
15+
# [IMAGE_ID] 에 이미지 아이디를 넣어주세요
16+
data = {
17+
'messages': json.dumps([
18+
{
19+
'to': '수신번호 입력',
20+
'from': '발신번호 입력',
21+
'text': '발송 예제 #1',
22+
'imageId': '[IMAGE_ID]'
23+
},
24+
{
25+
'to': '수신번호2 입력',
26+
'from': '발신번호2 입력',
27+
'text': '발송 예제 #2',
28+
'imageId': '[IMAGE_ID]'
29+
}
30+
])
31+
}
32+
res = requests.put(config.getUrl('/messages/v4/groups/[GROUP_ID]/messages',
33+
headers=auth.get_headers(config.apiKey, config.apiSecret),
34+
json=data)
35+
print(json.dumps(json.loads(res.text), indent=2, ensure_ascii=False))

group/delete_group_info.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import requests
2+
import configparser
3+
import json
4+
import sys
5+
import os.path
6+
7+
sys.path.append('../')
8+
9+
from auth import auth
10+
import config
11+
12+
if __name__ == '__main__':
13+
# [INPUT_GROUP_ID] 에 그룹 아이디를 넣어주세요
14+
# ex) G4V20181005122748TESTTESTTESTTES
15+
res = requests.delete(config.getUrl('/messages/v4/groups/[INPUT_GROUP_ID]',
16+
headers=auth.get_headers(config.apiKey, config.apiSecret))
17+
print(json.dumps(json.loads(res.text), indent=2, ensure_ascii=False))

group/delete_group_message.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import requests
2+
import configparser
3+
import json
4+
import sys
5+
import os.path
6+
7+
sys.path.append('../')
8+
9+
from auth import auth
10+
import config
11+
12+
if __name__ == '__main__':
13+
# [INPUT_GROUP_ID] 에 그룹 아이디를 넣어주세요
14+
# [INPUT_MESSAGE_ID] 에 메세지 아이디를 넣어주세요
15+
# ex) G4V20181005122748TESTTESTTESTTES
16+
data = {'messageIds':
17+
[
18+
# 배열로 id를 입력하여 한 요청에 여러개의 메세지를 제거할 수 있습니다.
19+
'[INPUT_MESSAGE_ID]',
20+
'[INPUT_MESSAGE_ID]'
21+
]
22+
}
23+
res = requests.delete(config.getUrl('/messages/v4/groups/[INPUT_GROUP_ID]/messages',
24+
headers=auth.get_headers(config.apiKey, config.apiSecret),
25+
json=data)
26+
print(json.dumps(json.loads(res.text), indent=2, ensure_ascii=False))

0 commit comments

Comments
 (0)