매크로 만드는건 귀찮고 할건없고 이것저것 명령어나 기능들이나 수집하는 1인입니다.
카카오톡 -> 매크로 명령어하달은 만들어도봤지만 안먹길래 때랴쳤구요...
기타 올라온 API 자료는 뭔말인지 모르겠어서 패스....
매크로 -> 푸시불렛 메세지전송 전송은 소스는 보이는데
스마트폰으로 푸시불렛에 명령어입력 -> 매크로에서 수신후 작동상태 적용이 안보이길래 찾아봤습니다..
그냥 검색으로 안나오는거 자료 저장용 게시글 이라고 보시면 됩니다..
대충 비슷해보이는 언어에 기존 메세지전송 소스와 비슷한게보이길래 확인해보니까
Post를 get으로만 바꾸면 되는거더군요..;;;; 그런데도 검색하면 안나와서 대충 만들어봤습니다.
대신 긁어오는데 시간이 걸려서 수시로 읽게하면
매크로?가 자료를 긁어오는동안 멈추기때문에 수십초에 한번 명령된게 있는지 확인하는게 좋아보입니다.
더 좋은방법이있다면 알아서 바꿔서 쓰시겠죠뭐..... 전 언어관련해서 배운게 없어서 아직까진 이게 최선이네요ㅎㅎ..
사용형식은
채팅내용을 전부 긁어와서 Result 에 저장합니다.
내용을보면 최근 채팅내용이 맨 위에 저장이되기에 처음검색해서 나오는 내용을 뽑아서 사용하면됩니다.
채팅내용중 body":"명령어"} 을 명령어 부분만 추출하기위해 RegExMatch로 앞뒤 잘라내서 내용만 Get1에 저장합니다.
기본적으로 폰으로 내리는 실행, 재실행 이런 명령어들을 사용하기 위함인데
한번 보내놓으면 계속 읽어오면서 해당명령어를 계속 수행하려 하기에 명령어 작동전에
푸시불렛 메세지 전송으로 다른명령어 즉, "매크로가 실행되었습니다."같은 메세지를 보내서
폰으로 내린명령어를 밀어버리면 계속 읽어오는일이 없습니다.
global PB_Token:="토큰입력칸"
SETTIMER, GetPushbullet, 30000; 30초에 한번실행
GetPushbullet:
WinHTTP := ComObjCreate("WinHTTP.WinHttpRequest.5.1")
WinHTTP.Open("Get", "https://api.pushbullet.com/v2/pushes", False)
WinHTTP.SetCredentials(PB_Token, "", 0)
WinHTTP.SetRequestHeader("Content-Type", "application/json")
WinHTTP.Send()
Result := WinHTTP.ResponseText
RegExMatch(Result,"\C\Cbody\C:\C(.*?)\C}", Get)
if (Get1="실행")
{
PB_PushNote("작동", "매크로를 시작합니다.")
Goto, Start
}
if (Get1="재실행")
{
PB_PushNote("중지", "매크로가 재실행 되었습니다.")
Goto, Reload
}
return
PB_PushNote(PB_Title, PB_Message)
{
WinHTTP := ComObjCreate("WinHTTP.WinHttpRequest.5.1")
WinHTTP.SetProxy(0)
WinHTTP.Open("POST", "https://api.pushbullet.com/v2/pushes", 0)
WinHTTP.SetCredentials(PB_Token, "", 0)
WinHTTP.SetRequestHeader("Content-Type", "application/json")
PB_Body := "{""type"": ""note"", ""title"": """ PB_Title """, ""body"": """ PB_Message """}"
WinHTTP.Send(PB_Body)
Result := WinHTTP.ResponseText
Status := WinHTTP.Status
return Status
}
저도 대충 저래 비슷하게 만들어 쓰고있는데...
주의할점은 푸쉬불렛 API는 무제한이 아니라 RateLlimit라는 개념이 있습니다
1시간 단위로 리셋되며 일반계정의 RateLimit 제한은 16384입니다 (제 계정 기준입니다... 다른분도 뭐 같겠지요)
RateLimit는 API요청 당 1소모되고 Database 작업당 4 소모됩니다
본문에 나온대로 push내역 확인 요청을 보내면 최근 20개 푸쉬 내역을 가져오는데,
1(API요청) + 4(계정정보 확인) + 20*4(20개 푸쉬 데이터 확인) 총 85의 RateLimit가 소모됩니다
적어보여도 30초마다 한번씩 요청을 보내면 10,200의 RateLimit가 소모되고... 만약 명령 수신에 30초 간격을 두는게 길게 느껴져서 좀 줄인다고 한다면 문제가 되버립니다. 20초로만 줄여도 15300을 소모해서 남은 리미트가 거의 없게 돼요
사실 명령 확인을 위해서는 최신메시지 하나만 가져와도 되기 때문에 Limit파라미터를 주면 리미트 부담이 적어집니다.
Get방식이니 url에 그냥 파라미터를 주면 돼요. https://api.pushbullet.com/v2/pushes?Limit=1 이런식으로
이러면 하나만 가져오게 되고, 총 9의 리미트가 소모됩니다. 3초마다 한번씩 가져와도 시간당 10800으로 기존에 30초에 한번 리셋하는것과 비슷한 리미트만 소비하게 되죠.
푸쉬 확인뿐만 아니라 푸쉬보내기, 이미지업로드 및 보내기 모두 리미트가 소모되는 활동입니다.
생각보다 꽤 많이 소모가 되구요... 참고로 텍스트 메시지 하나 보낼때 제 계정 테스트 기준 37~41정도 소모가 되더군요.
어쨌든 좀 빡빡하긴해도 매크로 하나에서 명령확인하고 푸쉬전송 하는 용도로는 어찌어찌 쓸만한 레이트가 나오긴 하더라구요.
개발하실때 참고하셨으면 합니다