개인 자료란 (JE)

  서버 커뮤니티

Profile 분열 대표칭호 없음
Profile

강좌 자바 에디션(JE) 플러그인 개발

[ 심화 ] Skript로 파싱을 해보자

2020.03.21 조회 수 2090 추천 수 2
분야 스크립트 
게임버전 모든버전 

해당 강좌는 Skquery 애드온이 필요합니다.


우선 강좌에 앞서 파싱이란,  특정 사이트에서 제공하는 API를 이용하여 데이터를 가져오는 것을 말합니다.

만약 네이버에서 실시간 검색어에 대한 자료 (API)를 제공하였을 경우, 파싱을 이용해 실시간 검색어를 네이버가 아닌 다른곳에서 사용하고, 볼 수 있습니다.


스크립트에선 간단하게 URL에서 텍스트 (html의 body부분을 긁어오는 듯 합니다)를 가져와서 파싱을 할 수 있습니다.

해당 방식과 잘 맞는 api는 json 형태의 api라고 생각되네요 (json은 커맨드나 그런데 많이 사용되는 그거 맞습니다)


먼저 파싱할 대상을 보여드리겠습니다.


http://ip-api.com/json/주소

해당 api는 주소에 입력된 ip에 대한 정보를 나타내는 api 입니다. 주소에다 ip를 넣은후 검색창에 입력하시면 해당 ip에 대한 정보가 json 형태로 파싱이 되시는걸 확인 할 수 있습니다.


만약 127.0.0.1 이라는 ip에 대한 정보를 확인하는 api를 요청하실려면 http://ip-api.com/json/127.0.0.1 을 사용하면 되겠죠?


그다음 스크립트에서 사용할 구문입니다.

Skquery 애드온에 있는 text from url "주소" 라는 구문을 이용하겠습니다. 해당 구문은 url에서 텍스트를 가져와 줍니다.


commad /parse [<text>]:
       trigger:
       #arg-1에 값에다 ip를 입력받아 api를 요청합니다. (arg-1 존재여부 체크는 따로 하지 않았습니다)
             set {_text} to text from url "http://ip-api.com/json/ %arg-1%"
       #각 부분의 값을 가져오기위해 문자열을 split 합니다. json에선 보통 ,를 기준으로 값이 나뉩니다.
             set {_texts::*} to {_text} split by ","
       #그다음 해당 요청이 정상적으로 작동되는지 확인합니다.
       #해당 api에선 status값이 success일경우 정상적으로 작동, fail일경우 실패한걸로 나타나네요.
             if {_texts::1} contains "fail":
                    send "&c아이피 주소값이 잘못되어 있습니다." to player
             else:
             #정상 파싱된경우 json으로 파싱된 부분에서 쓸데없는 부분을 replace해서 날리겠습니다.
                    send "&f" to player
                    loop {_texts::*}:
                            replace all """" and ":" and "{" and "status" and ":" and "country" and "countryCode" and "region" and "reg ionName" and "city" and "zip" and "lat" and "lon" and "timezon" and "isp" and "org" and "as" and "query" with "" in {_texts::%loop-index%}
    #그럼 이제 배열의 첫번째 부분에는 작동여부, 두~세번째 부분에는 국가,  4번째에는 국가코드
    #다섯~여섯번째에는 지역, 그다음 차례대로 위/경도, 해당 국가의 표준시 , isp(서비스 제공자) 등등..
                    send "&6상태 &7: &f%{_texts::1}%" to player
                    send "&6국가 &7: &f%{_texts::2}%" to player
                    send "&6국가코드 &7: &f%{_texts::3}%" to player
                    send "&6지역코드 &7: &f%{_texts::4}%" to player
                    send "&6지역이름 &7: &f%{_texts::5}%" to player
                    send "&6도시&7: &f%{_texts::6}%" to player
                    send "&6위도 &7: &f%{_texts::8}%" to player
                    send "&6경도 &7: &f%{_texts::9}%" to player
                    send "&6표준시 &7: &f%{_texts::10}%" to player
                    send "&6서비스 제공자 &7: &f%{_texts::11}%" to player
                    send "&6조직 &7: &f%{_texts::12}%" to player
                    send "&6추가정보 &7: &f%{_texts::13}%" to player
                    send "&6요청한 IP &7: &f%{_texts::14}%" to player
                    send "&f" to player

이렇게 하면 정상적으로 파싱이 이루어 집니다. (ZIP코드 부분은 안뜨기 때문에 7번부분을 건너뛰었습니다)


#결과화면

2efbe286bafc76ab08cf05464f38bdcf.jpg


다음 강좌 : Async..?




Warning
댓글이 없습니다.

새로운 댓글을 등록해 주세요!

뉴스 및 창작물
/files/thumbnails/483/916/003/262x150.crop.jpg?20241127115329

레드스톤

[노트블럭 커버] 뉴진스 - ETA 2

노트블럭전문가

2024-11-27

0

/files/thumbnails/150/925/003/262x150.crop.jpg?20241123005717

건축

응답하라 1988 ?

팀뉴일리시

2024-11-23

4

/files/thumbnails/761/908/003/262x150.crop.jpg?20241025153749

건축

서울 숭례문(崇禮門) 6

KHC

2024-10-25

2

/files/thumbnails/578/899/003/262x150.crop.jpg?20241010142350

건축

경주 월정교 1

KHC

2024-10-10

2

/files/thumbnails/219/899/003/262x150.crop.jpg?20241009200950

건축

송전탑+도시 2

dbasd12

2024-10-09

2

/files/thumbnails/246/898/003/262x150.crop.jpg?20241008102328

레드스톤

단다단 - 오토노케(オトノケ) | 마인크래프트 노트블럭 커버

노트블럭전문가

2024-10-08

1

/files/thumbnails/348/896/003/262x150.crop.jpg?20241006103035

디도스/봇테러등등을 낚는 방법 5

물귀신

2024-10-06

3