๊นํ๋ธ ํ๋ก์ ํธ ๋งํฌ๋ฅผ ๋ค์ด๊ฐ์ ํ์ธํ๋ฉด ์ฝ๋๋ฅผ ๋ณผ ์ ์๋ค.
์๋ 3์๋ถํฐ ๋ฉ์์ด์ฌ์์ฒ๋ผ 8๊ธฐ ๋ฉค๋ฒ ๋ชจ์ง์ ํ๊ฒ ๋์๋ค.
๋น์ ์ง์์ ์๋ ์ฝ 90๋ช
์ด์ ๋๋ ์ํฉ ์ด์์ผ๋ฉฐ,
์ ์ฒญ ํผ์๋ ์ฐ๋ฝ์ฒ๋ฅผ ์
๋ ฅ๋ฐ์ ์๋ฅ ํฉ๊ฒฉ, ๋ฉด์ ์๋ด ๋ฑ
์ฌ๋ฌ๊ฐ์ง ๋ด์ฉ์ ๋ํด์ ๋ฌธ์๋ก ์๋ด๋ฅผ ํ์ด์ผ ํ๋ค.
์ด์์ง์ ์ด 4๋ช ์ผ๋ก ์ฌ๋ฌ๊ฐ์ง ๋ฐฉ๋ฒ์ ์๊ฐํด๋ณด์์ง๋ง
๊ฒฐ๊ตญ ์ต์ ์ ๋ฐฉ๋ฒ์.. ์ธ์์ ๋๋ก n๋ถ ํ๋ ๋ฟ ์ด์์ต๋๋ค.
์ค๊ฐ์ ์ฐ๋ฝ์ฒ ์ ์ผ๋ฉด์ ๊บผ๋ฒ๋ฆฐ ์ค์๋ก ์์ฃผ ์ผ์ด๋์ ์ ์ ๋๊ฐ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฌด์๋ณด๋ค ์ฐ๋ฝ์ฒ๋ฅผ ํ๋ํ๋ ์ ์ฅํด์ ์ ๋ฌํ๋ ์์ฒด๊ฐ
๋๋ฌด๋ ๋ฒ๊ฑฐ๋ก์ ๊ณ , ์นด์นด์คํก ์น๊ตฌ๋ก๋ ๋ ์ ๋ถํธํ๋ค...
ํ๋ฝ์๋ถ๋ค๋ ๋ง์๋ฐ.. ์ ๋งค๋ชจํ ์ํฉ..
๊ทธ๋์ ์๋
2020๋
3์๋๋ฅผ ์๊ฐํ์ฌ,
์ด๋ฒ์๋ ์ด๋ ์ ๋ ๋น์ฉ์ ์ง๋ถ ํ์ฌ๋ ๋์ ์จ์ ์์ด ํธํด์ง๋ ๋ฐฉ๋ฒ์ ์ฐพ์๋ค.
์ฌ๋ฌ ๋ฌธ์์๋น์ค ์๋น์ค๋ฅผ ์ฐพ์ผ๋ฉด์ ๋ฐ๊ฒฌํ ์ฌ์ดํธ์ด๋ค.
๋๋ถ๋ถ์ ๋ฌธ์์๋น์ค๋ ์ ๋ฃ๋ก ๋์ด์์ด์ ์ด๋ ์ ๋ ๊ฐ์ํ๋ค.
์ธ๊ตญ์ฌ์ดํธ๋ก Twilio ๋ผ๋ ์ฌ์ดํธ์ด๋ค.
์ ํํ ์ด์ ๋ฅผ ๊ฐ๋จํ ๋์ด ํด๋ณธ๋ค.
1. API ์ฌ์ฉ๋ฒ์ด ๋งค์ฐ ๊ฐ๋จ.
2. ๊ฐ์ธ ๋ฒํธ ์ ์ถํ ์ผ์ด ์์ด ์๋ฒ์์ ์ ๊ณตํด์ฃผ๋ ๋ฒํธ๋ฅผ ์ฌ์ฉ
3. ๊ฒฐ์ ์ต์ ๊ธ์ก์ด ๊ฐ์ฅ ์๋ค. (20๋ฌ๋ฌ ์ ๋)
๊ทธ๋ ๊ฒ ๊ฐ์
์ ํ๊ณ ๋์ API KEY + AUTH_TOKEN ๊ฐ์ ๋ฐ๊ธ๋ฐ์๊ณ ,
Python์ ๊ธฐ๋ฐ์ผ๋ก ํด์ ๊ฐ๋จํ๊ฒ ๊ตฌํํด๋ณด์๋ค.
from twilio.rest import Client
# ๋ฌธ์ API id + token
account_sid = <API_ID>
auth_token = <TWILIO_TOKEN>
client = Client(account_sid, auth_token)
# ๊ฑธ๋ฌ์ง ์ ํ๋ฒํธ๋ฅผ ์ ์ฅํ์ฌ message API ์ฌ์ฉ
message = client.messages.create(
to='+82'+ PHONE_NUMBER,
from_="<SERVER_PHONE_NUMBER>",
body="<๋ฉ์ธ์ง ๋ด์ฉ>"
)
Python๊ธฐ๋ฐ API ํธ์ถ ๊ณผ์
1. API ํค๊ฐ, ์ธ์ฆํ ํฐ์ ์ ๋ฌํ์ฌ ์ธ์ฆ์ ํ๋ค.
2. message์ ๋ณด๋ด๋ ์ฌ๋(from_)์ ์๋ฒ์์ ์ ๊ณตํ๋ ์ ํ๋ฒํธ ๊ฐ์ ์ ๋ ฅํ๋ค.
3. ๋ฐ๋ ์ฌ๋(to)์ "๊ตญ๋ฒ"์ ํฌํจํ ์ ํ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ค.
ํ๊ตญ์ ๊ฒฝ์ฐ +82 ๋ถํ์ฃผ์ด์ ์ ์กํ๋ฉด ๋๋ค.
4. ๋ฉ์ธ์ง ๋ด์ฉ์(body) ๋ฉ์ธ์ง ๋ด์ฉ์ ์ถ๊ฐํด์ ์ ์กํ๋ฉด ๋๋ค.
์ด๋ฐ ๋ฐฉ์์ผ๋ก ์ ์ก ํ ์ ์๋ค.
์ ๋๋ก ์ฌ์ฉํ๊ธฐ ์ํด์ ์ ๋ฃ๋ฒ์ ์ ์ฌ์ฉํด์ผํ๋ค.
๋ฌด๋ฃ๋ก ์ฌ์ฉ ํ ์, ๋ฐ์ ๋ฒํธ๊ฐ ์๋ฒ๋ก๋ถํฐ ์ธ์ฆ๋์ด ์๋ ์ํ์ฌ์ผํ๋ค.
์ด ์ธ์ฆ์ ๋จ์ํ๊ฒ ๋ฒํธ ์ ์ฅ์ด ์๋, ARS์ธ์ฆ ๊น์ง ๊ฑฐ์ณ์ผ๋์
์ฌ์ค ์, ์ ํ๋ฒํธ๋ง ์๋ ์๋์๊ฒ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๊ธฐ ์ํด์๋
์ ๋ฃ ๋ฒ์ ์ ๊ตฌ๋งค ํด์ผํ๋ค๋ ์ ์ด๋ค!
๋๊ฐ์ ๊ฒฝ์ฐ, ์ ๋ฒ ํด์ปคํค์์ ์ฌ์ฉํ๊ธฐ ์ํด ๊ตฌ๋งคํ ํ์์ด ์์ด์
์ปคํผ ํ๋ ์ฌ๋๋ฆฌ๊ณ ์์ด๋๋ฅผ ๋น๋ ค ๋ฐ์์ ์ฌ์ฉํ๋ค. ^-^
์ง๊ธ ํ์ฌ ๊ฐ์ ๊ฒฝ์ฐ,
์ผ์ผํด๋์ค ์ง์์๋ฅผ ํตํด ๋ฐ์ ์ธ์๋ค์๊ฒ ์๋ด ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด์ผํ๋ค.
์ผ์ผํด๋์ค ์ง์์๋ ๊ตฌ๊ธ ์คํ๋ ๋์ํธ์ ์ ์ฅ๋๊ฒ ๋ง๋ค์ด์ ธ์
csv
ํ์ผ ํ์์ผ๋ก ๋ฐ์ ์ ์์๋ค.
๊ทธ๋ ๊ฒ csv ํ์ผ ํ์์ผ๋ก ๋ด๋ณด๋ด๊ธฐ ํ์ฌ,
ํ์ด์ฌ ์ฝ๋๋ก ์ํ๋ ๊ฐ์ธ ์ ํ ๋ฒํธ๋ฅผ ๋ฝ์์ผ ํ๋ค.
๊ทธ๋ฐ๋ฐ ์ ํ๋ฒํธ ํฌ๋งทํ ์ ์ค์ ์ ์ํด์ฃผ์ด์ 2๊ฐ์ง ์ ํ๋ฒํธ ํฌ๋งท์ด ๋ณด์๋ค.
์ด ๋ถ๋ถ์ ๊ณ ๋ คํด์ ํ์ผ์ ์ฝ๊ณ ์ฌ๋ผ์ด์ฑํด์ ๊ฐ์ ์ ์ฅํด๋ณด์๋ค.
# CSV ๋ฐ์ดํฐ์ด๊ธฐ
data_file = open('test.csv', 'r', encoding='utf-8')
reader = csv.reader(data_file)
for line in reader:
# ๋จ์ํ๊ฒ ๊ธธ์ด๋ก ๋น๊ตํ์ฌ ๋๋์๋ค.
if len(line[4]) > 12:
# split์ผ๋ก '-'๋ฅผ ๊ธฐ์คํ์ฌ ๋๋ ๋ฆฌ์คํธ์ ์ ์ฅ.
temp = line[4].split('-')
# ๋ถ๋ฆฌ๋ ๋ฆฌ์คํธ๋ฅผ ๊ณต๋ฐฑ์์ด ํฉ์ณ์ number_array์ ์ ์ฅ
number_array.append(''.join(temp))
else:
# ์ ์์ ์ธ ์
๋ ฅ ์, ๋ฐ๋ก number_array์ ์ ์ฅ
number_array.append(line[4])
๋ ๊ฐ์ง ํฌ๋งท์ ๊ฒฝ์ฐ๋ก๋ง ๊ฑธ๋ฌ์ ธ์ ์ ํ๋ฒํธ ๊ฐ์ด ๋ฐฐ์ด์ ์ ์ฅ๋๋ ํ์.
์ด ๋ ๊ฐ์ง๊ฐ ์ ์ถ๋๋ค๋ฉด, ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋ง์๋๋ก ์ฌ์ฉ ํ ์ ์๊ฒ ๋๋ค.
๊นํ๋ธ๋ ๋ฐ๋ก ์ ์ถ ๋ ๋งํ๊ฒ ์ฌ์ฉํ์ง ์์๊ฑฐ๋ผ๋ฉด ๊ทธ๋ฅ ํ๋ฉด ๋์ง๋ง..
๋ ์ฌ๋ฆด ์์ ์ด๊ธฐ ๋๋ฌธ์, ๋ฐ๋ก ๋นผ์ ์ ์ฅํด๋ณด์๋ค.
{
"auth_token":"<token ํค>",
"my_phone_number":"<์๋ฒ ์ ํ๋ฒํธ>"
}
์ ์ฝ๋๋
secretkey.json
ํ์ผ์ด๋ค.
# Secret.json ์ฝ๊ธฐ
with open('secretkey.json') as token:
json_data = json.loads(token.read())
TWILIO_TOKEN = json_data["auth_token"]
# ํ ํฐ ๊ฐ ๊ฐ์ ธ์์ ์ ์ฅ
MY_PHONE_NUMBER = json_data["my_phone_number"]
# ๋ณด๋ด๋ ์ ํ๋ฒํธ ์ ์ฅ(๋ด์ ๋ฒ)
๊ทธ๋ ๊ฒ
json
ํ์ผ๋ก ๋ฐ์์จ ๊ฐ์ ๊ฐ์ ธ ์ต๋๋ค.
์ด๋ ๊ฒ ๋ง๋ค๊ฒ ๋๋ฉด ํค ๊ฐ์ ์จ๊ฒจ์, ๋ก์ง์ ๊ณต๊ฐ ํ ์ ์๊ฒ ๋ฉ๋๋ค.
์๋ ๊ฐ๋จํ ํ ์ดํ๋ก์ ํธ๋ก ํ ๊ฒ์๊ธ๋ก ๋ง๋ฌด๋ฆฌ๋ฅผ ํ ์ ์์๋ค.
์ต๋ ๋จ์ ์ด๋ ์ญ์ ์ ๋ฃ ์๋น์ค๋ผ๋ ๊ฒ์ด ์๋๊น! ๋ผ๊ณ ์๊ฐํ๋ค.
๋ฌด๋ฃ์๋น์ค๊ฐ ์์ผ๋ฉด ์ข๊ฒ ๋ค๋ง.. ์์ด์ ์์ฌ์ธ ๋ฟ์ด๋ค...
์ถ๊ฐ์ ์ผ๋ก ์ด๋ฅผ ์ด์ฉํด, ๊ฐ๋จํ ํ ์ด ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ฑ ํด๋ณผ ์๊ฐ์ด๋ค.
์ ๋ ์ฐ๋ ต๋๋ค ...