[Java] 트위치 후원 알림 API (Twip, Toonation API)
15 Jan 2021 | java rxjava twitch💸 Donation Alert API
오늘은 내가 만든 트위치 후원 알림 API를 소개하려고 한다.
정확히 말하자면, Twip과 Toonation의 Alertbox 알림을 받아올 수 있는 API이다.
😎 왜 만들게 되었나!
오래 알고지내는 한 마인크래프트 유튜버가 혹시 트윕 후원 내용을 마인크래프트로 보여줄 수 없냐고 물어봐서 만들게 되었다.
그리고 이렇게 쓰였다.
참고로 이 영상의 0:45초에 나오는 염료가 마인크래프트 평행세계의 나다.
그래서.. 사실 만든지는 1년정도 됐다.
그러다가 며칠 전 Twip의 1.1.60 패치 이후에 플러그인을 손 볼 일이 생겼다.
오랜만에 보니까 참 감회가 새로웠는데, 이 도네이션 파싱(?) 기능만 따로 API로 만들어두면 누군가 유용하게 쓸 수 있지 않을까? 라는 생각이 들었다.
그래서 이것저것 떼어내고, 쓰기 쉽게 바꾸고… 하다보니 완성했다!
다 완성하고 나니 다른 라이브러리들처럼 깔끔하게 dependencies에 한 줄만 추가해서 사용할 수 있으면 얼마나 좋을까? 라는 생각을 하게되었고
운 좋게도 나는 예전에 Jitpack이라는 것을 사용해봤으므로 Jitpack을 사용해서 아름답게 배포했다. (그냥 repository만 추가하면 된다.)
🤔 어떻게 만들었나?
먼저 크롬의 개발자 도구로 Alertbox 위젯이 어떤 주소로 웹소켓에 연결하는지, 어떤 이벤트를 수신하는지 등을 살펴봤다.
트윕은 socket.io, 투네이션은 WebSocket(okhttp)을 사용해서 서로 다른 두 가지를 모두 써볼 수 있었다.
(물론 클라이언트만, 그리고 okhttp는 socket.io에 내장되어있다.)
그리고 RxJava라는 멋쟁이들에게만 허용된 라이브러리를 사용했다.
웹소켓에 연결하고, 후원 발생 시 구독한 Observer들에게 이벤트를 전달한다!
웹소켓을 통해 주고받는 메시지는 당연하게도 JSON 형식이라, json-simple 라이브러리를 사용했다.
(마인크래프트의 bukkit이 json-simple을 내장하고 있기 때문에, 처음 만들때부터 json-simple을 사용하고 있었다.)
우선은 내가 필요한 기능들만 구현해 놨는데, 누군가가 필요로 한다면 더 나아가서 Twip과 Toonation의 전체 기능에 대한 API로 확장 시켜보는 것도 재밌을 것 같다.
✨ 소개합니다. Donation Alert API
Twip, Toonation의 후원 알림(Alertbox)을 받아올 수 있는 RxJava 기반 Java API
🚀 Start
Gradle (use Jitpack)
repositories {
...
maven { url 'https://jitpack.io' }
}
dependencies {
...
compile 'com.github.outstanding1301:donation-alert-api:1.0.0'
}
Twip
// Twip Alertbox URL의 마지막 https://twip.kr/widgets/alertbox/<YOUR_TWIP_KEY> 부분을 입력하세요.
Twip twip = new Twip("YOUR_TWIP_KEY");
// 메시지를 구독합니다.
// 연결 알림, 에러 등의 String 메시지를 처리하는 핸들러를 인자로 사용합니다.
twip.subscribeMessage(s -> System.out.println(s));
// 도네이션 알림을 구독합니다.
// Donation 객체를 처리하는 핸들러를 인자로 사용합니다.
twip.subscribeDonation(donation -> {
System.out.println("[Twip] "+donation.getNickName()+"님이 "+donation.getAmount()+"원을 후원했습니다.");
System.out.println("후원 내용: "+donation.getComment());
});
Toonation
// Toonation Alertbox URL의 마지막 https://toon.at/widget/alertbox/<YOUR_TOONATION_KEY> 부분을 입력하세요.
Toonation toonation = new Toonation("YOUR_TOONATION_KEY");
// 메시지를 구독합니다.
// 연결 알림, 에러 등의 String 메시지를 처리하는 핸들러를 인자로 사용합니다.
toonation.subscribeMessage(s -> System.out.println(s));
// 도네이션 알림을 구독합니다.
// Donation 객체를 처리하는 핸들러를 인자로 사용합니다.
toonation.subscribeDonation(donation -> {
System.out.println("[Toonation] "+donation.getNickName()+"님이 "+donation.getAmount()+"원을 후원했습니다.");
System.out.println("후원 내용: "+donation.getComment());
});
📃 Docs
Donation
식별자 | 타입 | 설명 |
---|---|---|
id | String | 후원자 ID |
nickname | String | 후원자 닉네임 |
comment | String | 후원 내용 |
amount | Integer | 후원 금액 |
Platform (Twip, Toonation)
식별자 | 타입 | 설명 |
---|---|---|
subscribeDonation(Consumer |
void | 후원 알림 구독 |
subscribeMessage(Consumer |
void | API 메시지 구독 |
close() | void | 연결 종료 |
getDonationObservable() | Subject |
후원 알림 Subject 객체 반환 |
getMessageObservable() | Subject |
API 메시지 Subject 객체 반환 |
💉 Dependencies
implementation 'io.socket:socket.io-client:1.0.0'
implementation 'io.reactivex.rxjava2:rxjava:2.1.16'
implementation 'org.jsoup:jsoup:1.13.1'
implementation 'com.googlecode.json-simple:json-simple:1.1.1'