isaackogan/TikTokLive

Not getting event data from the package

Closed this issue · 5 comments

Describe the bug

We are not getting the event data from this package. Say 10 times we run that package we get 1 or 2 times event data without any error.

We faced this error before but since yesterday(06-06-2024) this error is happening frequently.

TikTokLive 6.0.6

We tried the latest version of the package got an error like this.

read_timeout

This way we implemented our code to get event data:

HANDLED_MESSAGE_EVENTS = [
    proto_events.JoinEvent,
    proto_events.JoinEvent, proto_events.LikeEvent, proto_events.GiftEvent,
    proto_events.EnvelopeEvent, proto_events.SubscribeEvent, custom_events.FollowEvent,
    custom_events.ShareEvent, proto_events.EmoteChatEvent
]

class TikTokLiveStreamIterator(TikTokLiveClient):
    def __init__(self, stream_url: str, **options):
        TikTokLiveClient.__init__(self, unique_id=stream_url)
        self.add_listener(ConnectEvent, self._process_connect_event)
        self.add_listener(DisconnectEvent, self._process_disconnect_event)
        self.add_listener(LiveEndEvent, self._process_live_end_event)

        for message_event in HANDLED_MESSAGE_EVENTS:
            self.add_listener(message_event, self._process_message_event)

    @property
    def streaming_url(self):
        _streaming_url: str | None = None
        try:
            record_data: dict = json.loads(
                self.room_info['stream_url']['live_core_sdk_data']['pull_data']['stream_data']
            )
            record_url_data: dict = record_data['data'][VideoFetchQuality.ORIGIN.value]['main']
            _streaming_url: str = record_url_data.get('mp4') or record_url_data['flv']
        except Exception as e:
            print(e)
        return _streaming_url

    async def _process_connect_event(self, event: ConnectEvent):
        print(f"Client connected.")

    async def _process_disconnect_event(self, event: DisconnectEvent):
        print(f"Client disconnected!")

    async def _process_live_end_event(self, event: LiveEndEvent):
        print(f"Stream ended.")

    async def _process_error_event(self, error):
        print("_process_error_event is invoked.")
        if error is not None:
            print(f"Error: {error}")
    async def _process_message_event(self, event):
        try:
            from datetime import datetime
            print(f"User Name: {event.user.unique_id}")
        except Exception as e:
            print(e)

    async def start(self) -> None:
        print(f"Starting iterator for unique id: {self.unique_id}.")
        await TikTokLiveClient.start(self, fetch_room_info=True)
        print("Call done....")

    async def stop(self) -> None:
        TikTokLiveClient.remove_all_listeners(self)
        await TikTokLiveClient.disconnect(self)

TikTokLive 4.5.2

In old version of this package we get different type of error:

no_websocket_response

We tried to get the data with the below code from the package

HANDLED_MESSAGE_EVENTS  = [
    "join", "comment", "gift", "viewer_count_update",
    "like", "emote", "envelope", "question", "subscribe",
    "follow", "share"
]

class TikTokLiveStreamIterator(ABC, TikTokLiveClient):
    def __init__(self, stream_url: str, **options):
        TikTokLiveClient.__init__(self, unique_id=stream_url, **options)
        self.live_ended = False
        self.on("connect", self._process_connect_event)
        self.on("disconnect", self._process_disconnect_event)
        self.on("live_end", self._process_live_end_event)
        self.on("error", self._process_error_event)

        for message_event in HANDLED_MESSAGE_EVENTS:
            self.on(message_event, self._process_message_event)

    async def _process_connect_event(self, event: ConnectEvent):
        print(f"Client connected.")
        print("Client connected!")

    async def _process_disconnect_event(self, event: DisconnectEvent):
        print(f"Client disconnected!")
        if event.webcast_closed and not self.live_ended:
            await TikTokLiveClient.reconnect(self)

    async def _process_live_end_event(self, event: LiveEndEvent):
        print(f"Stream ended.")

    async def _process_error_event(self, error):
        print("_process_error_event is invoked.")
        if error is not None:
            print(f"Error: {error}")

    async def _process_message_event(self, event: AbstractEvent):
        print(f"Received message event: {event.name}")

    async def start(self, session_id=None) -> None:
        print(f"Starting iterator for unique id: {self.unique_id}.")
        await TikTokLiveClient.start(self, session_id)
        print(f"Iterator for unique id: {self.unique_id} started.")

    async def stop(self) -> None:
        print(f"Stopping iterator for unique id: {self.unique_id}.")
        self.live_ended = True
        TikTokLiveClient.remove_all_listeners(self)
        TikTokLiveClient.stop(self)
        print(f"Stopped iterator for unique id: {self.unique_id}.")

Package Version

My version of TikTokLive is 4.5.2 and 6.0.6.

The reason why it failed

{"data":{"message":"Request params error","prompts":"Request params error"},"extra":{"now":1717778102160},"status_code":10011}

The reason why it failed

{"data":{"message":"Request params error","prompts":"Request params error"},"extra":{"now":1717778102160},"status_code":10011}

This occurs when the live is age restricted. Room info cannot be checked when the live is age restricted. This happens for everyone in all libraries. However, it is not needed to connect to the livestream.

The reason why it failed

{"data":{"message":"Request params error","prompts":"Request params error"},"extra":{"now":1717778102160},"status_code":10011}

This occurs when the live is age restricted. Room info cannot be checked when the live is age restricted. This happens for everyone in all libraries. However, it is not needed to connect to the livestream.

This should not happen if you use sessionID
I use it and get this error

The reason why it failed

{"data":{"message":"Request params error","prompts":"Request params error"},"extra":{"now":1717778102160},"status_code":10011}

This occurs when the live is age restricted. Room info cannot be checked when the live is age restricted. This happens for everyone in all libraries. However, it is not needed to connect to the livestream.

This should not happen if you use sessionID I use it and get this error

Add some debug please. I cannot answer this for you. I do not get this issue.

Isaac

Closed due to inactivity