168 lines
6.0 KiB
Python
168 lines
6.0 KiB
Python
# Tweepy
|
||
# Copyright 2009-2023 Joshua Roesslein
|
||
# See LICENSE for details.
|
||
|
||
from tweepy.mixins import DataMapping, HashableID
|
||
from tweepy.utils import parse_datetime
|
||
|
||
|
||
#: All the potential publically-available fields for :class:`Space` objects
|
||
PUBLIC_SPACE_FIELDS = [
|
||
"created_at",
|
||
"creator_id",
|
||
"ended_at",
|
||
"host_ids",
|
||
"id",
|
||
"invited_user_ids",
|
||
"is_ticketed",
|
||
"lang",
|
||
"participant_count",
|
||
"scheduled_start",
|
||
"speaker_ids",
|
||
"started_at",
|
||
"state",
|
||
"title",
|
||
"topic_ids",
|
||
"updated_at",
|
||
]
|
||
|
||
#: All the potential fields for :class:`Space` objects
|
||
SPACE_FIELDS = PUBLIC_SPACE_FIELDS + [
|
||
"subscriber_count",
|
||
]
|
||
|
||
|
||
class Space(HashableID, DataMapping):
|
||
"""Spaces allow expression and interaction via live audio conversations.
|
||
The Space data dictionary contains relevant metadata about a Space; all the
|
||
details are updated in real time.
|
||
|
||
User objects can found and expanded in the user resource. These objects are
|
||
available for expansion by adding at least one of ``host_ids``,
|
||
``creator_id``, ``speaker_ids``, ``mentioned_user_ids`` to the
|
||
``expansions`` query parameter.
|
||
|
||
Unlike Tweets, Spaces are ephemeral and become unavailable after they end
|
||
or when they are canceled by their creator. When your app handles Spaces
|
||
data, you are responsible for returning the most up-to-date information,
|
||
and must remove data that is no longer available from the platform. The
|
||
`Spaces lookup endpoints`_ can help you ensure you respect the users’
|
||
expectations and intent.
|
||
|
||
.. versionadded:: 4.1
|
||
|
||
.. versionchanged:: 4.4
|
||
Added ``ended_at`` and ``topic_ids`` fields
|
||
|
||
.. versionchanged:: 4.6
|
||
Added ``subscriber_count`` field
|
||
|
||
.. versionchanged:: 4.14
|
||
Added ``creator_id`` field
|
||
|
||
Attributes
|
||
----------
|
||
data : dict
|
||
The JSON data representing the Space.
|
||
id : str
|
||
The unique identifier of the requested Space.
|
||
state : str
|
||
Indicates if the Space has started or will start in the future, or if
|
||
it has ended.
|
||
created_at : datetime.datetime | None
|
||
Creation time of this Space.
|
||
ended_at : datetime.datetime | None
|
||
Time when the Space was ended. Only available for ended Spaces.
|
||
host_ids : list
|
||
The unique identifier of the users who are hosting this Space.
|
||
lang : str | None
|
||
Language of the Space, if detected by Twitter. Returned as a BCP47
|
||
language tag.
|
||
is_ticketed : bool | None
|
||
Indicates is this is a ticketed Space.
|
||
invited_user_ids : list
|
||
The list of user IDs that were invited to join as speakers. Usually,
|
||
users in this list are invited to speak via the Invite user option.
|
||
participant_count : int | None
|
||
The current number of users in the Space, including Hosts and Speakers.
|
||
subscriber_count : int | None
|
||
The number of people who set a reminder to a Space.
|
||
scheduled_start : datetime.datetime | None
|
||
Indicates the start time of a scheduled Space, as set by the creator of
|
||
the Space. This field is returned only if the Space has been scheduled;
|
||
in other words, if the field is returned, it means the Space is a
|
||
scheduled Space.
|
||
speaker_ids : list
|
||
The list of users who were speaking at any point during the Space. This
|
||
list contains all the users in ``invited_user_ids`` in addition to any
|
||
user who requested to speak and was allowed via the Add speaker option.
|
||
started_at : datetime.datetime | None
|
||
Indicates the actual start time of a Space.
|
||
title : str | None
|
||
The title of the Space as specified by the creator.
|
||
topic_ids : list
|
||
A list of IDs of the topics selected by the creator of the Space.
|
||
updated_at : datetime.datetime | None
|
||
Specifies the date and time of the last update to any of the Space's
|
||
metadata, such as its title or scheduled time.
|
||
creator_id : int | None
|
||
|
||
References
|
||
----------
|
||
https://developer.twitter.com/en/docs/twitter-api/data-dictionary/object-model/space
|
||
|
||
.. _Spaces lookup endpoints: https://developer.twitter.com/en/docs/twitter-api/spaces/lookup/introduction
|
||
"""
|
||
|
||
__slots__ = (
|
||
"data", "id", "state", "created_at", "ended_at", "host_ids", "lang",
|
||
"is_ticketed", "invited_user_ids", "participant_count",
|
||
"subscriber_count", "scheduled_start", "speaker_ids", "started_at",
|
||
"title", "topic_ids", "updated_at", "creator_id"
|
||
)
|
||
|
||
def __init__(self, data):
|
||
self.data = data
|
||
self.id = data["id"]
|
||
self.state = data["state"]
|
||
|
||
self.created_at = data.get("created_at")
|
||
if self.created_at is not None:
|
||
self.created_at = parse_datetime(self.created_at)
|
||
|
||
self.ended_at = data.get("ended_at")
|
||
if self.ended_at is not None:
|
||
self.ended_at = parse_datetime(self.ended_at)
|
||
|
||
self.host_ids = data.get("host_ids", [])
|
||
self.lang = data.get("lang")
|
||
self.is_ticketed = data.get("is_ticketed")
|
||
self.invited_user_ids = data.get("invited_user_ids", [])
|
||
self.participant_count = data.get("participant_count")
|
||
self.subscriber_count = data.get("subscriber_count")
|
||
|
||
self.scheduled_start = data.get("scheduled_start")
|
||
if self.scheduled_start is not None:
|
||
self.scheduled_start = parse_datetime(self.scheduled_start)
|
||
|
||
self.speaker_ids = data.get("speaker_ids", [])
|
||
|
||
self.started_at = data.get("started_at")
|
||
if self.started_at is not None:
|
||
self.started_at = parse_datetime(self.started_at)
|
||
|
||
self.title = data.get("title")
|
||
|
||
self.topic_ids = data.get("topic_ids", [])
|
||
|
||
self.updated_at = data.get("updated_at")
|
||
if self.updated_at is not None:
|
||
self.updated_at = parse_datetime(self.updated_at)
|
||
|
||
self.creator_id = data.get("creator_id")
|
||
if self.creator_id is not None:
|
||
self.creator_id = int(self.creator_id)
|
||
|
||
def __repr__(self):
|
||
return f"<Space id={self.id} state={self.state}>"
|