โครงการนี้อยู่ในระหว่างดำเนินการ... ? หากคุณมีคำถามใดๆ โปรดส่งปัญหา หากคุณพบว่ามีประโยชน์ คุณสามารถให้ดาวดวงเล็กๆ น้อยๆ เพื่อให้กำลังใจได้
หากสนใจโครงการสามารถร่วมช่องทางพูดคุยและส่งประชาสัมพันธ์ได้
รายการสิ่งที่ต้องทำ: https://github.com/orgs/OrdinaryRoad-Project/projects/1
บันทึกการเปลี่ยนแปลง: https://github.com/OrdinaryRoad-Project/ordinaryroad-live-chat-client/releases
BarrageFly - ปล่อยให้เขื่อนบินได้ ซึ่งเป็นแพลตฟอร์มการส่งต่อ การกรอง และการประมวลผลตามโครงการนี้
*มีความแตกต่างของแพลตฟอร์ม
- ✅: รองรับแพลตฟอร์มและเสร็จสมบูรณ์
- ☑️️: รองรับแพลตฟอร์มแต่ไม่ได้ใช้งาน
- : ขณะนี้ยังไม่รองรับแพลตฟอร์มเวอร์ชันเว็บ
แพลตฟอร์ม | ลูกค้าแชทสด | คุกกี้ | รหัสห้องสดแบบสั้น | ส่งเขื่อน | เหมือนเจ้าบ้านเลย | ข้อมูลห้องถ่ายทอดสด* |
---|---|---|---|---|---|---|
สถานีบิลิบิลีบี | ||||||
โต่วหยู เบตต้า | ||||||
ฮูย่า ฮูย่า | ||||||
โต้วอิน โต้วยิน* | ||||||
ไควโชว ไควโชว | ||||||
ติ๊กต๊อก* |
*ยังไม่รองรับอย่างสมบูรณ์ (Tiktok อยู่ระหว่างการทดสอบ)
*ข้อมูลห้องถ่ายทอดสดในขณะนี้รองรับการรับชื่อห้องถ่ายทอดสดเท่านั้น
แพลตฟอร์ม | เขื่อนกั้นน้ำ | ของขวัญ | ข้อความที่สะดุดตา | เข้าห้อง | ชอบ | การเปลี่ยนแปลงสถานะ | สถิติ | ข่าวสังคม |
---|---|---|---|---|---|---|---|---|
สถานีบิลิบิลีบี | ✅(จำนวนไลค์,จำนวนคนปัจจุบัน,จำนวนคนดูสะสม) | |||||||
โต่วหยู เบตต้า | ||||||||
ฮูย่า ฮูย่า | ✅ (ผู้ใช้ระดับพรีเมียม) | |||||||
โต้วยิน โต้วยิน | ✅(จำนวนไลค์) | ✅(จำนวนไลค์,จำนวนคนปัจจุบัน) | ✅(แชร์ติดตาม) | |||||
ไควโชว ไควโชว | ✅(ข้อมูลของขวัญไม่ครบถ้วน) | ✅(ถูกใจคนแรก) | ✅(จำนวนไลค์,จำนวนคนปัจจุบัน) | |||||
ติ๊กต๊อก | ✅(จำนวนไลค์) | ✅(จำนวนไลค์,จำนวนคนปัจจุบัน) | ✅(แชร์ติดตาม) |
สำหรับวิธีการในตัวของอินเทอร์เฟซข้อความ โปรดดู https://github.com/OrdinaryRoad-Project/ordinaryroad-live-chat-client/tree/main/live-chat-client-commons/live-chat-client- commons-base/src/ main/java/tech/ordinaryroad/live/chat/client/commons/base/msg
การแสดงผลการดำเนินงาน
บันทึกสตรีมไบนารี WebSocket ของเบราว์เซอร์ จากนั้นวิเคราะห์และจำลองพฤติกรรมของเบราว์เซอร์ ข้อดีของวิธีนี้คือ ไม่ต้องมีใบรับรองนักพัฒนา แต่ข้อเสียคือไม่มีเอกสารอย่างเป็นทางการ กระบวนการวิเคราะห์ใช้เวลานานและลำบาก และต้องปรับตัวให้เข้ากับกระบวนการเปลี่ยนแปลงของแพลตฟอร์มต่างๆ (ไม่ได้เปลี่ยนบ่อย)
ในอนาคต เราอาจพิจารณารองรับโปรโตคอลแบบเปิดสำหรับแพลตฟอร์ม
เจดีเค≥8
< dependency >
< groupId >tech.ordinaryroad</ groupId >
< artifactId >live-chat-client-bilibili</ artifactId >
<!-- 参考github release版本,不需要前缀`v` -->
< version >${ordinaryroad-live-chat-client.version}</ version >
</ dependency >
หมายเหตุสำหรับผู้ใช้ Gradle: ตั้งแต่เวอร์ชัน
0.3.2
ในการกำหนดค่าไคลเอนต์ของสถานี B วิธีการบีบอัดจะมีค่าเริ่มต้นเป็นNORMAL_BROTLI
เมื่อใช้ Gradle เพื่อแนะนำ คุณจะต้องแนะนำแพ็คเกจเนทิฟ brotli4j ที่สอดคล้องกับระบบปฏิบัติการด้วย สำหรับรายละเอียด ดู: https://github.com /hyperxpro/Brotli4j?tab=readme-ov-file#gradle
ตัวอย่างเช่น:
val liveChatClientBrotliVersion = " 1.16.0 "
// Windows
implementation( " com.aayushatharva.brotli4j:native-windows-x86_64: $l iveChatClientBrotliVersion " )
implementation( " com.aayushatharva.brotli4j:native-windows-aarch64: $l iveChatClientBrotliVersion " )
// Linux
implementation( " com.aayushatharva.brotli4j:native-linux-armv7: $l iveChatClientBrotliVersion " )
implementation( " com.aayushatharva.brotli4j:native-linux-aarch64: $l iveChatClientBrotliVersion " )
implementation( " com.aayushatharva.brotli4j:native-linux-x86_64: $l iveChatClientBrotliVersion " )
implementation( " com.aayushatharva.brotli4j:native-linux-s390x: $l iveChatClientBrotliVersion " )
implementation( " com.aayushatharva.brotli4j:native-linux-riscv64: $l iveChatClientBrotliVersion " )
implementation( " com.aayushatharva.brotli4j:native-linux-ppc64le: $l iveChatClientBrotliVersion " )
// Mac
implementation( " com.aayushatharva.brotli4j:native-osx-aarch64: $l iveChatClientBrotliVersion " )
implementation( " com.aayushatharva.brotli4j:native-osx-x86_64: $l iveChatClientBrotliVersion " )
หากยังไม่สามารถใช้งานได้หลังจากการแนะนำ โปรดแก้ไขรายการการกำหนดค่า protover เช่น เปลี่ยนเป็น NORMAL_ZLIB
: BilibiliLiveChatClientConfig.builder().protover(ProtoverEnum.NORMAL_ZLIB).roomId("xxx").build()
< dependency >
< groupId >tech.ordinaryroad</ groupId >
< artifactId >live-chat-client-douyu</ artifactId >
<!-- 参考github release版本,不需要前缀`v` -->
< version >${ordinaryroad-live-chat-client.version}</ version >
</ dependency >
< dependency >
< groupId >tech.ordinaryroad</ groupId >
< artifactId >live-chat-client-huya</ artifactId >
<!-- 参考github release版本,不需要前缀`v` -->
< version >${ordinaryroad-live-chat-client.version}</ version >
</ dependency >
< dependency >
< groupId >tech.ordinaryroad</ groupId >
< artifactId >live-chat-client-douyin</ artifactId >
<!-- 参考github release版本,不需要前缀`v` -->
< version >${ordinaryroad-live-chat-client.version}</ version >
</ dependency >
< dependency >
< groupId >tech.ordinaryroad</ groupId >
< artifactId >live-chat-client-kuaishou</ artifactId >
<!-- 参考github release版本,不需要前缀`v` -->
< version >${ordinaryroad-live-chat-client.version}</ version >
</ dependency >
ชั้นเรียนทดสอบประกอบด้วยตัวอย่างหลากหลายสำหรับการอ้างอิง
คุณสามารถแทนที่เมธอดการเรียกกลับ onCmdMsg(收到的所有CMD消息)
หรือ onOtherCmdMsg(框架未处理的CMD消息)
เพื่อกำหนด CMD เพื่อรับฟังประเภท CMD ที่เฟรมเวิร์กได้กำหนดไว้
หากไม่ได้กำหนดคลาสการแจงนับข้อความที่คุณต้องการฟัง คุณสามารถพิจารณาแทนที่เมธอด onUnknownCmdMsg(未知CMD消息)
การโต้ตอบการแปลงชนิด ICMdMsg
@ Override
public void onOtherCmdMsg ( BilibiliCmdEnum cmd , ICmdMsg < BilibiliCmdEnum > cmdMsg ) {
switch ( cmd ) {
case GUARD_BUY : {
// 有人上舰
MessageMsg messageMsg = ( MessageMsg ) cmdMsg ;
...
break ;
}
case SUPER_CHAT_MESSAGE_DELETE : {
// 删除醒目留言
MessageMsg messageMsg = ( MessageMsg ) cmdMsg ;
...
break ;
}
default : {
// ignore
}
}
}
ตัวอย่างไคลเอนต์ Spring Boot
หากคุณต้องการตรวจสอบผลกระทบบนแพลตฟอร์มอื่น โปรดเปลี่ยน
Bilibili
เป็นภาษาอังกฤษที่สอดคล้องกับแพลตฟอร์มอื่น และแก้ไขลายเซ็นฟังก์ชันของอินเทอร์เฟซการโทรกลับข้อความ
public class ClientModeExample {
public static void main ( String [] args ) {
String cookie = System . getenv ( "cookie" );
// 1. 创建配置
BilibiliLiveChatClientConfig config = BilibiliLiveChatClientConfig . builder ()
// TODO 消息转发地址
. forwardWebsocketUri ( "" )
// TODO 浏览器Cookie
. cookie ( cookie )
// TODO 直播间id(支持短id)
. roomId ( 7777 )
. build ();
// 2. 创建Client并传入配置、添加消息回调
BilibiliLiveChatClient client = new BilibiliLiveChatClient ( config , new IBilibiliMsgListener () {
@ Override
public void onDanmuMsg ( BilibiliBinaryFrameHandler binaryFrameHandler , DanmuMsgMsg msg ) {
IBilibiliMsgListener . super . onDanmuMsg ( binaryFrameHandler , msg );
System . out . printf ( "%s 收到弹幕 %s %s(%s):%s n " , binaryFrameHandler . getRoomId (), msg . getBadgeLevel () != 0 ? msg . getBadgeLevel () + msg . getBadgeName () : "" , msg . getUsername (), msg . getUid (), msg . getContent ());
}
@ Override
public void onGiftMsg ( BilibiliBinaryFrameHandler binaryFrameHandler , SendGiftMsg msg ) {
IBilibiliMsgListener . super . onGiftMsg ( binaryFrameHandler , msg );
System . out . printf ( "%s 收到礼物 %s %s(%s) %s %s(%s)x%s(%s) n " , binaryFrameHandler . getRoomId (), msg . getBadgeLevel () != 0 ? msg . getBadgeLevel () + msg . getBadgeName () : "" , msg . getUsername (), msg . getUid (), msg . getData (). getAction (), msg . getGiftName (), msg . getGiftId (), msg . getGiftCount (), msg . getGiftPrice ());
}
@ Override
public void onSuperChatMsg ( BilibiliBinaryFrameHandler binaryFrameHandler , SuperChatMessageMsg msg ) {
IBilibiliMsgListener . super . onSuperChatMsg ( binaryFrameHandler , msg );
System . out . printf ( "%s 收到醒目留言 %s(%s):%s n " , binaryFrameHandler . getRoomId (), msg . getUsername (), msg . getUid (), msg . getContent ());
}
@ Override
public void onEnterRoomMsg ( InteractWordMsg msg ) {
System . out . printf ( "%s %s(%s) 进入直播间n " , msg . getBadgeLevel () != 0 ? msg . getBadgeLevel () + msg . getBadgeName () : "" , msg . getUsername (), msg . getUid ());
}
@ Override
public void onLikeMsg ( BilibiliBinaryFrameHandler binaryFrameHandler , LikeInfoV3ClickMsg msg ) {
IBilibiliMsgListener . super . onLikeMsg ( binaryFrameHandler , msg );
System . out . printf ( "%s 收到点赞 %s %s(%s) n " , binaryFrameHandler . getRoomId (), msg . getBadgeLevel () != 0 ? msg . getBadgeLevel () + msg . getBadgeName () : "" , msg . getUsername (), msg . getUid ());
}
@ Override
public void onLiveStatusMsg ( BilibiliBinaryFrameHandler binaryFrameHandler , BilibiliLiveStatusChangeMsg msg ) {
IBilibiliMsgListener . super . onLiveStatusMsg ( binaryFrameHandler , msg );
System . out . printf ( "%s 状态变化 %s n " , binaryFrameHandler . getRoomId (), msg . getLiveStatusAction ());
}
@ Override
public void onRoomStatsMsg ( BilibiliBinaryFrameHandler binaryFrameHandler , BilibiliRoomStatsMsg msg ) {
IBilibiliMsgListener . super . onRoomStatsMsg ( binaryFrameHandler , msg );
System . out . printf ( "%s 统计信息 累计点赞数: %s, 当前观看人数: %s, 累计观看人数: %s n " , binaryFrameHandler . getRoomId (), msg . getLikedCount (), msg . getWatchingCount (), msg . getWatchedCount ());
}
});
// 添加客户端连接状态回调
client . addStatusChangeListener (( evt , oldStatus , newStatus ) -> {
if ( newStatus == ClientStatusEnums . CONNECTED ) {
// TODO 要发送的弹幕内容,请注意控制发送频率;框架内置支持设置发送弹幕的最少时间间隔,小于时将忽略该次发送
client . sendDanmu ( "666666" + RandomUtil . randomNumbers ( 1 ));
}
});
// 3. 开始监听直播间
client . connect ();
}
}
void connect(Runnable success, Consumer<Throwable> failed)
void connect(Runnable success)
void connect()
void disconnect(boolean cancelReconnect)
void disconnect()
void destroy()
void send(Object msg, Runnable success, Consumer<Throwable> failed)
void send(Object msg, Runnable success)
void send(Object msg, Consumer<Throwable> failed)
void send(Object msg)
void sendDanmu(Object danmu, Runnable success, Consumer<Throwable> failed)
void sendDanmu(Object danmu, Runnable success)
void sendDanmu(Object danmu, Consumer<Throwable> failed)
void sendDanmu(Object danmu)
void clickLike(int count, Runnable success, Consumer<Throwable> failed)
void clickLike(int count, Runnable success)
void clickLike(int count, Consumer<Throwable> failed)
void clickLike(int count)
boolean addMsgListener(MsgListener msgListener)
boolean addMsgListeners(List<MsgListener> msgListeners)
boolean removeMsgListener(MsgListener msgListener)
boolean removeMsgListeners(List<MsgListener> msgListeners)
ClientStatusEnums getStatus()
void addStatusChangeListener(IClientStatusChangeListener listener)
void removeStatusChangeListener(IClientStatusChangeListener listener)
การอ้างอิงBilibiliHandlerModeตัวอย่าง
อ้างถึงตัวอย่างตัวแปลงสัญญาณ
ตัวอย่างของสถานี B แพลตฟอร์มอื่นๆ จำเป็นต้องแก้ไข bilibili
เท่านั้น
เมื่อใช้ Gradle เพื่อแนะนำโมดูลการเข้ารหัสและถอดรหัสของสถานี B โปรดดูที่สถานี #B
< dependency >
< groupId >tech.ordinaryroad</ groupId >
< artifactId >live-chat-client-codec-bilibili</ artifactId >
<!-- 参考github release版本,不需要前缀`v` -->
< version >${ordinaryroad-live-chat-client.version}</ version >
</ dependency >
ขอบเขตที่มีผล: เฉพาะตัวโครงการเท่านั้น จะไม่ส่งผลกระทบต่อโครงการหลักที่อ้างอิงถึงโครงการ
แก้ไข Config socks5ProxyHost("127.0.0.1")
, socks5ProxyPort("1080")
ในโค้ด
การตรวจสอบตัวตน (ยังไม่ได้ทดสอบ)
socks5ProxyUsername("username")
, socks5ProxyPassword("password")
สแกนรหัส QR เพื่อเข้าร่วมช่อง QQ/WeChat หรือคลิกลิงก์เพื่อเข้าร่วมช่อง QQ [OrdinaryRoad]: https://pd.qq.com/s/3id0n7fvs
โอเพ่นซอร์สไม่ใช่เรื่องง่าย การได้รับการยอมรับและการสนับสนุนของคุณคือแรงจูงใจที่ยิ่งใหญ่ที่สุดของฉันในการอัปเดตต่อไป!
วันที่ | ผู้บริจาค | จำนวน | ข้อความ | ช่อง |
---|---|---|---|---|
06-03-2024 | **รุ่ย | 88.88 | เอาล่ะมนุษย์ | แซดเอฟบี |
10-03-2024 | **เฮา | 88.8 | เอาน่าเจ้านาย | แซดเอฟบี |
25-03-2024 | **คลื่น | 188.8 | - | แซดเอฟบี |
02-04-2024 | **เฮา | 30 | - | แซดเอฟบี |
30-04-2024 | *ชม | 100 | บอสเก่งจังเลย | wx |
18-11-2024 | *เล่ย | 200 | - | wx |
- | - | - | - | - |
ข้อสงวนสิทธิ์: สำหรับใช้ในการวิจัยเชิงวิชาการเท่านั้น นักพัฒนาซอฟต์แวร์จะไม่รับผิดชอบต่อการละเมิดใด ๆ ที่ละเมิดกฎหมายที่เกี่ยวข้องและก่อให้เกิดอันตราย
คำสำคัญ: โปรแกรมรวบรวมข้อมูลเขื่อน โปรแกรมรวบรวมข้อมูลเขื่อน