카카오톡 봇 개발하기 #2

in #kr6 years ago (edited)

안녕하세요 @ayogom 입니다.
카카오톡 봇 개발하기 2편을 써보겠습니다. 사실 이 카카오톡봇을 개발하게 된 이유가 정기적인 알람을 주고 싶었기 때문에 만들기 시작했었습니다... 그 주된 기능에 대해서 다뤄 보려고 했는데, 제가 생각하는 동작을 하지 않네요. 따라서 오늘은 웹 파싱하는 방법에 대한 주제를 다뤄볼까 합니다. 사실 이게 정말 재미있습니다!!

image-1542256669412.png

아직 이 글이 어떻게 개발 하는지 모르겠다면 먼저 1부를 보고 오시는 것을 추천 드립니다. 매우 손쉽게 만들 수 있습니다.

1부 보고오기

1부에서는 개발 도구로 "카카오톡 봇"을 사용했는데요, 이게 사실 각 개발자에 따라 사용할 수 있는 라이브러리가 좀 다릅니다. 따라서 이번에는 다른 앱을 사용할 예정입니다. 물론 기본적인 기능은 1부에서 알려드린 "카카오톡 봇"과 동일합니다.

개발 도구

  1. 카카오톡 봇+ (자동응답) 링크

먼저 결과물 먼저 보겠습니다.

네,
오늘 배우실 부분은 업비트의 현재 코인의 시세를 불러오는 방법입니다. 먼저 업비트의 API를 확인 해봅니다.
업비트의 API는 아래와 같습니다.
https://api.upbit.com/v1/ticker?markets=KRW-steem
뒷 부분의 steem을 바꿔주시면, 업비트 내의 코인을 조회할 수 있습니다.




[{"market":"KRW-STEEM","trade_date":"20181119","trade_time":"085647","trade_date_kst":"20181119","trade_time_kst":"175647","trade_timestamp":1542617807000,"opening_price":670.00000000,"high_price":679.00000000,"low_price":576.00000000,"trade_price":579.00000000,"prev_closing_price":670.00000000,"change":"FALL","change_price":91.00000000,"change_rate":0.1358208955,"signed_change_price":-91.00000000,"signed_change_rate":-0.1358208955,"trade_volume":7.58521838,"acc_trade_price":245271639.20471510,"acc_trade_price_24h":366899874.74621509,"acc_trade_volume":391441.43013872,"acc_trade_volume_24h":570944.67596385,"highest_52_week_price":12570.00000000,"highest_52_week_date":"2018-01-03","lowest_52_week_price":576.00000000,"lowest_52_week_date":"2018-11-19","timestamp":1542617807702}]



조회를 해보면 여러가지 업비트 내의 정보를 볼 수 있습니다. 대표적인 예로
opening_price : 시장 시작가
high_price : 당일 고가
low_price : 당일 저가
trade_price : 현재 가

여기서 중요한 코드는 웹을 불러 내는 것입니다.
사용 함수는 Utils.getHtmlFromWeb 을 사용합니다.
그럼 1부에서 배울 내용을 바탕으로 "@@스팀"을 호출 하는 명령어를 넣어 봅시다.


if (msg == "@@스팀") {
 
var steem = Utils.getHtmlFromWeb("https://api.upbit.com/v1/ticker?markets=KRW-steem")

replier.reply(steem);
}



네! 해보셨을까요? 그럼 불필요한 모든 정보가 다 오게 됩니다. 이 내용을 필요한 내용만을 추출을 해야 합니다.

바로 Split 매소드를 사용해서 데이터를 짤라 보겠습니다. Split는 쉽게 생각하면 구분자의 기준입니다, 위의 데이터를 잘 보면, " , " 를 통해 데이터가 구분 되었음을 알 수 있습니다.

steem = steem.split(",")



그럼 " , " 구분으로 데이터가 쪼개집니다.
위의 데이터는
steem[0] = [{"market":"KRW-STEEM"
steem[1] = "trade_date":"20181119"
steem[2] = "trade_time":"085647"
steem[3] = "trade_date_kst":"20181119"
steem[4] = "trade_time_kst":"175647"
....
steem[9] = "trade_price":579.00000000

우리가 필요한 값은 steem[9] 의 값입니다.
그럼 다시 아래와 같이 9번 배열에 저장되어 있는 값을 불러 봅시다.

steem = steem.split(",")[9]



위와 같이 "trade_price":579.00000000 가 추출이 되었습니다. 우리가 사용할 값치고는 불필요한 정보가 많죠? 그럼 저 위치에서 또 불필요한 값을 제외해보겠습니다.

steem = steem.split(":")



이번에는 " : " 을 사용합니다. " : " 을 기준으로 자르면, 이렇게 됩니다.
steem[0] = "trade_price"
steem[1] = 579.00000000

우리가 필요한건 1번 값에 있는 값이 필요하곘네요?

steem = steem.split(":")[1]



이렇게 다시 호출을 해봅니다.
579.00000000 값이 추출이 됩니다.
여기선 2가지 방법을 생각 할 수 있죠

  1. 위와 같이 " . " 을 추출 해서 구분하는 방법
  2. 소수점을 버리는 방법

여기에서는 1의 방법을 통해 진행하겠습니다.

그럼 다시

steem = steem.split(".")[0]


steem[0] = 579
steem[1] = 00000000

그럼 최종 필요한 것은 [0] 배열값이 됩니다.

위의 코드를 정리 하면,



if (msg == "@@스팀") {
 
var steem = Utils.getHtmlFromWeb("https://api.upbit.com/v1/ticker?markets=KRW-steem")

steem = steem.split(",")[9]
steem = steem.split(":")[1]
steem = steem.split(".")[0]

replier.reply(steem);
}



이렇게 하면 현재 가격을 받을 수 있습니다.
다만 너무 썰렁하니깐,

replier.reply("현재 업비트 기준 스팀 가격은 "+steem+"원 입니다.");



이라고 써주면 더욱 보기 좋겠죠?





코딩은 최대한 쉬운 코드로 작성해봤습니다. 물론 복잡한 프로젝트를 하다보면, 불필요한 코드를 줄이기 위해 하나의 형태로 짧게 쓸 수 있긴 한데, 개인적으로 코딩은 누가봐도 쉬운 코드여야 한다고 생각합니다 ㅋ
물론, 코드가 길어지면, 줄여야 합니다!!!



해보시고, 또 궁금한게 있으면 댓글 주세요!

다음글은 또 뭘 해볼까요...?


Sponsored ( Powered by dclick )
(일상) 하루 생각~

안녕하세요. @jsquare입니다. 지난 금요일에 글 쓰고 나서, 어제까지 글을 올리지 못하다...

Sort:  

와우 너무 멋집니다. 좀더 기능을 붙이면 카톡을 스팀잇용 개인비서로 이용할수 있겠어요.

디스 코드 ㅋㅋ 이용하시면 ㅋㅋ 더 편합니다.. 카톡은... 제약이 크네요 ㅠ

아 이거 자주 쓰이겠네요!
카톡대화하다가 "얼마였지? 잠깐만~" 하고 시세조회 할필요가 없어지겠네요
역시 증인이시라 다르네요~

api만 제공되면,, 더 자주 쓰일것 같아요 ㅋㅋㅋ
근데 요즘 api 제공하는 곳이 많아서 ㅋㅋ 남는 핸드폰으로 개인용 비서를 만들어도 ㅎㅎ

봇 개발은 모르겠구요~~

이걸보니 마음이 아파요...ㅠㅠ

제 마음도 아프네요 ㅠㅠㅠㅠ

스팀이 50% 파격 세일하네요.ㅠㅠ

가격에서 마음이... ㅜㅜ

하, 이제 좀 반등 ㅠㅠ 치즈아ㅠ ㅠㅠ

@anpigon 님을 호출 합니다

호출해주셔서 감사합니다.

뜨아~!
굉장합니드앙~♩♬

스팀 이제 학되는건가용~?
학대하지므앙~! ㅠㅠ

그럼에도
행복한 월욜 보내셔용~^^
디클릭 클릭 함께 응원합니당~!

Posted using Partiko Android

여기저기 응용분야가 다양합니다!!

정말 어려운 것을 너무 쉽게 하시네요. 대단한 실력입니다.

따라해 보시면 정말 간단 합니다!!

아요곰님 정말 대단하십니다. 존경합니다.ㅎㅎㅎ

전 존경 받을 인물이 아닙니다 쭈그리 일뿐 ㅋ

와. 멋있습니다 ㅋㅋ
학창시절 잠깐 배운 실력이 아닌것 같은데요 ㅋㅋㅋ

저도 그렇게 생각합니다. 학창시절 잠깐 배운 실력이라는 말은 농담인것 같아요.ㅋㅋㅋㅋ

실무에서 하는건 전혀 다른걸 하다보니 ㅋㅋ
이런게 다시 재미있네요 ㅠ

ㅋㅋㅋㅋㅋㅋㅋ 아녀요...
제 스승은 구글 네이버 깃허브 죠 ㅋㅋ

처음엔 저 가격이 그냥 예제인 줄 알았는데^^

ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
저도 꿈만 같네요 ㅠㅠㅠ
에휴

Coin Marketplace

STEEM 0.20
TRX 0.14
JST 0.030
BTC 68845.40
ETH 3281.32
USDT 1.00
SBD 2.65