`我们正在尝试开发一款游戏。此时我们想要实现的就是获取抖音直播信息。评论活动,点赞活动或者礼物活动等这类信息。
到目前为止,我们得到了 ChatGPT 的帮助并编写了这个 python 代码,这些代码基本上为我们提供了点赞、评论和礼物事件。
import asyncio
import websockets
from TikTokLive import TikTokLiveClient
from TikTokLive.events import CommentEvent, LikeEvent, GiftEvent
import logging
import json
# Setup basic logging
logging.basicConfig(level=logging.INFO)
# Create the TikTokLiveClient
client = TikTokLiveClient(unique_id="@NAME OF TIKTOKER")
# Dictionaries to store team assignments, likes count, and gifts count
team_likes = {}
# Set to keep track of connected WebSocket clients
connected = set()
# WebSocket handler function
async def ws_handler(websocket, path):
connected.add(websocket)
try:
await websocket.wait_closed()
finally:
connected.remove(websocket)
# Function to broadcast messages to all connected clients
async def broadcast(message):
message_json = json.dumps(message)
if connected:
await asyncio.gather(*(ws.send(message_json) for ws in connected))
# Handlers for TikTok events that include broadcasting the information
async def on_comment(event: CommentEvent):
nickname = event.user.nickname
unique_id = event.user.unique_id
comment = event.comment.strip().upper()
user_key = f"{nickname} ({unique_id})"
message = {
"nickname": nickname,
"unique_id": unique_id,
"action": "comment",
"comment": comment
}
logging.info(f"{nickname} ({unique_id}) has joined team {comment}")
await broadcast(message)
async def on_like(event: LikeEvent):
nickname = event.user.nickname
unique_id = event.user.unique_id
user_key = f"{nickname} ({unique_id})"
# Lets create a dictionary to count likes of user
if user_key not in team_likes:
team_likes[user_key] = 0
team_likes[user_key] += 1
message = {
"nickname": nickname,
"unique_id": unique_id,
"action": "like",
"total_likes": team_likes[user_key]
}
# Update Log
logging.info(f"{nickname} ({unique_id}) has sent a total of {team_likes[user_key]} likes")
# Broadcast message via WebSocket
await broadcast(message)
async def on_gift(event: GiftEvent):
nickname = event.user.nickname
unique_id = event.user.unique_id
gift_name = event.gift.name
message = {
"nickname": nickname,
"unique_id": unique_id,
"action": "gift",
"gift_name": gift_name,
}
logging.info(f"{nickname} ({unique_id}) has sent '{gift_name}'")
await broadcast(message)
# Add the comment, like, and gift event listeners to the TikTok client
client.add_listener(CommentEvent, on_comment)
client.add_listener(LikeEvent, on_like)
client.add_listener(GiftEvent, on_gift)
# Run the TikTok client and WebSocket server together
async def main():
async with websockets.serve(ws_handler, "localhost", 6789) as server:
tiktok_task = asyncio.create_task(client.start())
await asyncio.gather(tiktok_task) # Await TikTok client task
await server.wait_closed() # This line is no longer needed and should be removed
if __name__ == '__main__':
asyncio.run(main())
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WebSocket Test</title>
</head>
<body>
<h1>WebSocket Test</h1>
<p>Status: <span id="status">Not Connected</span></p>
<ul id="messages"></ul>
<input type="text" id="messageInput" placeholder="Your Message"/>
<button onclick="sendMessage()">SEND</button>
<script>
var ws;
function startWebSocket() {
ws = new WebSocket('ws://localhost:6789');
ws.onopen = function() {
document.getElementById('status').textContent = 'Connected';
};
ws.onmessage = function(event) {
var messages = document.getElementById('messages');
var message = document.createElement('li');
message.textContent = event.data;
messages.appendChild(message);
};
ws.onclose = function() {
document.getElementById('status').textContent = 'Connection Closed';
// Try to reconnect when server is closed \\
setTimeout(startWebSocket, 5000);
};
ws.onerror = function() {
document.getElementById('status').textContent = 'Something Went Wrong';
};
}
function sendMessage() {
var message = document.getElementById('messageInput').value;
if (message && ws.readyState === WebSocket.OPEN) {
ws.send(message);
}
}
window.onload = startWebSocket;
</script>
</body>
</html>
此时我们要做的就是将这些信息转化为API。然后我们要将这些信息整合到UNITY中。
我们怎样才能做到这一点?或者说有可能实现这个目标吗?
如有任何建议或帮助,我们将不胜感激
在 Python 上使用 Flask 创建 Web 服务器并瞧。