Python、Websockets、Api、Unity、游戏开发 [已关闭]

问题描述 投票:0回答:1

`我们正在尝试开发一款游戏。此时我们想要实现的就是获取抖音直播信息。评论活动,点赞活动或者礼物活动等这类信息。

到目前为止,我们得到了 ChatGPT 的帮助并编写了这个 python 代码,这些代码基本上为我们提供了点赞、评论和礼物事件。

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())

HTML 部分

<!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 api unity-game-engine websocket game-development
1个回答
0
投票

在 Python 上使用 Flask 创建 Web 服务器并瞧。

© www.soinside.com 2019 - 2024. All rights reserved.