{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Example usage\n", "\n", "To use `chaturbate_poller` in a project:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "data": { "text/html": [ "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Enter your Chaturbate username: </pre>\n" ], "text/plain": [ "Enter your Chaturbate username: " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Enter your Chaturbate API key: </pre>\n" ], "text/plain": [ "Enter your Chaturbate API key: " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">Would you like to enable testbed mode? <span style=\"color: #800080; text-decoration-color: #800080; font-weight: bold\">[y/n]</span>: </pre>\n" ], "text/plain": [ "Would you like to enable testbed mode? \u001b[1;35m[y/n]\u001b[0m: " ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "mountaingod2_grey entered the room\n", "mountaingod2_grey followed\n", "mountaingod2_grey tipped 25 tokens with message: 'WOW!'\n" ] } ], "source": [ "\"\"\"Interactive usage of `chaturbate_poller` to fetch and print events.\"\"\"\n", "\n", "import asyncio\n", "from asyncio import CancelledError\n", "from contextlib import suppress\n", "\n", "from rich.prompt import Confirm, Prompt\n", "\n", "from chaturbate_poller import ChaturbateClient, format_message\n", "\n", "\n", "async def main(username: str, token: str, *, testbed: bool) -> None:\n", " \"\"\"Main event loop to fetch and process events from Chaturbate API.\"\"\"\n", " async with ChaturbateClient(username, token, testbed=testbed) as client:\n", " next_url: str | None = None\n", "\n", " while True:\n", " response = await client.fetch_events(next_url)\n", "\n", " for event in response.events:\n", " if message := format_message(event):\n", " print(message)\n", "\n", " if not (next_url := response.next_url):\n", " break\n", "\n", "\n", "# Interactive user input\n", "username = Prompt.ask(\"Enter your Chaturbate username\")\n", "token = Prompt.ask(\"Enter your Chaturbate API key\", password=True)\n", "testbed = Confirm.ask(\"Would you like to enable testbed mode?\")\n", "\n", "# Run the main function in an event loop\n", "with suppress(CancelledError, KeyboardInterrupt):\n", " try:\n", " await main(username, token, testbed=testbed)\n", " except RuntimeError:\n", " task = asyncio.create_task(main(username, token, testbed=testbed))\n", " await task" ] } ], "metadata": { "kernelspec": { "display_name": ".venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.2" } }, "nbformat": 4, "nbformat_minor": 4 }