ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 매크로 만드는 법] 4. 인터넷에서 데이터 가져오기 WinHttpRequest
    오토핫키/속성 강의 2022. 12. 13. 06:58

    https://apsalman.tistory.com/75


    https://www.youtube.com/channel/UC6hW-NrL9CxDQd2IzWbekYA


    시작

    사실 이 부분은 적을까 말까 고민을 좀 했다. 왜냐면 이미 연습일지를 포함해서 너무도 많은 포스팅을 했기 때문이다.

    하지만 실전에서 사용하려면 조금 더 설명을 해야하지 않을까 생각이 들어 정리를 해보려 한다.

     

    우선은 Winhttp 의 개념을 알아야 하기 때문에 WinAPI 를 배우러 MSDN 에 가라. 라고 하면 너무 날로 먹는 것 같으니까

    간단하게 설명하겠다.

     

    WinHttpRequest 는 Microsoft 에서 제공하는 API 이다.

    API 는 사용자와 서버 혹은 프로그램의 중간다리라고 생각하면 편하다.

    식당에서 주문을 받는 사람 혹은 키오스크 쯤으로 생각하면 된다.


    튜토리얼

    여기부터는 WinHttp 를 식당에 비유하여 설명할 것이다. 맞지 않는 정보가 있다면 MSDN 을 참고하자. (날먹)

     

    어쨋든 메뉴판도 보면 하나의 규격이 있다.

     

    음식이름 | 음식의 설명 | 들어가는 식재료명 | 열량 | 가격 등등이 있다.

     

    물론 가게마다 달라서 여러가지 정보가 생략되는 경우도 있다.

     

    그래서 우리는 먼저 WinHttp 에 음식을 주문하고 음식을 받아야한다.

     

    먼저 식당에 들어간다.

    wh := ComObjCreate("WinHttp.WinHttpRequest.5.1")
    wh.Open("Post", "https://tailstar.net/index.php?act=procMemberLogin")

    ComObjCreate 는 나는 오브젝트 콜이라고 부른다. 객체생성 이라고 하면 될까?

    wh 에 WinHttp 를 지정할거야. 라는 뜻이다.

    wh.Open("Post", URL) 은 내가 지정하는 URL (식당) 문을 열고(Open) 음식을 요청(Post)할 것이라는 뜻이다.

     

    그런데 WinHttp 라는 식당은 예약제였다. ㅅㅂ 신분확인을 해줘야 하는데 이 새끼들이 좀 까다롭다.

    wh.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36")
    wh.SetRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9")
    wh.SetRequestHeader("Referer", "https://tailstar.net/index.php?mid=main&act=dispMemberLoginForm")
    wh.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")

    나 이런 대가리(Header) 를 가진 사람이야 라고 지금 카운터에 존나 쌔게 외쳤다.

     

    보통 Post 할때는 이 4가지 정보

    User-Agent | Accept | Referer | Content-Type 을 헤더로 지정해줘야 한다.

     

    wh.Send("error_return_url=%2Findex.php%3Fmid%3Dmain%26act%3DdispMemberLoginForm&mid=main&vid=&ruleset=%40login&success_return_url=https%3A%2F%2Ftailstar.net%2F&act=procMemberLogin&xe_validator_id=modules%2Fmember%2Fskins&user_id=아이디&password=비밀번호")

    자 이렇게 음식 주문이 들어갔다.

     

    Msgbox, % wh.Status

    주문이 들어갔는지 확인해준다. 200 이 뜨면 들어간 것이다. 잘 들어갔는지는 장담하지 못한다.

     

    wh.WaitForResponse

    음식이 올 때까지 기다려준다.

     

     

    clipboard := wh.ResponseText

    도착한 음식을 내 위장에 담아준다.(복사한거임)

     

    음식이 잘 도착했다. 만약 제대로 도착하지 않았다면 로그인했을 때만 보이는 내 닉네임이 보이지 않았을 것이다.


    본격적인 API 활용

     

    이제 우리는 본격적으로 API 를 사용할 것이다.

    로아에서 Open API 를 제공한다고 한다.
    League of Legends 에서 제공하는 Open API 를 활용한 전적 검색 사이트

    자 위에 2장의 사진을 보자. 이것이 API 이다. 이해가 되는가?

    롤 전적검색 사이트 = 롤에서 제공하는 API

    메이플 캐릭터 검색 = 메이플에서 제공하는 API

    로아 경매장 검색 = 로아에서 제공하는 API

     

    그렇다. 게임들 마저도 API 를 유저들에게 제공한다. 제공하는 이유는 다음과 같다.

     

    쓸데없는 트래픽을 마구마구 주어서 서버에 과부하를 주는 것을 방지

    서비스사의 서버에 직접 접근하여 데이터를 수집 하는 것을 방지

     

    API 는 아까 말했다. 주문 받는 사람 혹은 키오스크라고

    만약에 주방에서 주문도 받고 음식도 가져다주고 결제도 한다면?

     

    존나 정신없고 한 곳에 사람과 움직임이 몰리면서 정체현상이 생길 것이다.

    그것을 방지하기 위해 카운터를 두고 키오스크 (이게 API 임) 를 두는 것이다.

     

    본격적인 내용인 API 활용은 2편에서 만나보자. (내용이 생각보다 길어짐)

    댓글