Skip to content

Commit 5f259e7

Browse files
committed
Threads
1 parent 28d9ffd commit 5f259e7

File tree

3 files changed

+141
-1
lines changed

3 files changed

+141
-1
lines changed

ensembledata/api/_async_client.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -946,6 +946,75 @@ async def post_comments(
946946
return await self.requester.get("/reddit/post/comments", params=params, timeout=timeout)
947947

948948

949+
class ThreadsEndpoints:
950+
def __init__(self, requester: AsyncRequester):
951+
self.requester = requester
952+
953+
async def search_keyword(
954+
self,
955+
*,
956+
name: str,
957+
sorting: Literal["0", "1"] | UseDefault = USE_DEFAULT,
958+
extra_params: Mapping[str, Any] | None = None,
959+
timeout: float | None = None,
960+
) -> EDResponse:
961+
params: dict[str, Any] = {
962+
"name": name,
963+
"sorting": sorting,
964+
}
965+
if extra_params is not None:
966+
params = {**extra_params, **params}
967+
params = {k: v for k, v in params.items() if not (v is None or v is USE_DEFAULT)}
968+
return await self.requester.get("/threads/keyword/search", params=params, timeout=timeout)
969+
970+
async def user_search(
971+
self,
972+
*,
973+
name: str,
974+
extra_params: Mapping[str, Any] | None = None,
975+
timeout: float | None = None,
976+
) -> EDResponse:
977+
params: dict[str, Any] = {
978+
"name": name,
979+
}
980+
if extra_params is not None:
981+
params = {**extra_params, **params}
982+
params = {k: v for k, v in params.items() if not (v is None or v is USE_DEFAULT)}
983+
return await self.requester.get("/threads/user/search", params=params, timeout=timeout)
984+
985+
async def user_info(
986+
self,
987+
*,
988+
id: int,
989+
extra_params: Mapping[str, Any] | None = None,
990+
timeout: float | None = None,
991+
) -> EDResponse:
992+
params: dict[str, Any] = {
993+
"id": id,
994+
}
995+
if extra_params is not None:
996+
params = {**extra_params, **params}
997+
params = {k: v for k, v in params.items() if not (v is None or v is USE_DEFAULT)}
998+
return await self.requester.get("/threads/user/info", params=params, timeout=timeout)
999+
1000+
async def user_posts(
1001+
self,
1002+
*,
1003+
id: int,
1004+
chunk_size: int | UseDefault = USE_DEFAULT,
1005+
extra_params: Mapping[str, Any] | None = None,
1006+
timeout: float | None = None,
1007+
) -> EDResponse:
1008+
params: dict[str, Any] = {
1009+
"id": id,
1010+
"chunk_size": chunk_size,
1011+
}
1012+
if extra_params is not None:
1013+
params = {**extra_params, **params}
1014+
params = {k: v for k, v in params.items() if not (v is None or v is USE_DEFAULT)}
1015+
return await self.requester.get("/threads/user/posts", params=params, timeout=timeout)
1016+
1017+
9491018
class EDAsyncClient:
9501019
def __init__(self, token: str, *, timeout: float = 600, max_network_retries: int = 3):
9511020
self.requester = AsyncRequester(
@@ -957,6 +1026,7 @@ def __init__(self, token: str, *, timeout: float = 600, max_network_retries: int
9571026
self.instagram = InstagramEndpoints(self.requester)
9581027
self.twitch = TwitchEndpoints(self.requester)
9591028
self.reddit = RedditEndpoints(self.requester)
1029+
self.threads = ThreadsEndpoints(self.requester)
9601030

9611031
async def request(self, uri: str, params: Mapping[str, Any] | None = None) -> EDResponse:
9621032
return await self.requester.get(uri, params=params or {})

ensembledata/api/_client.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -930,6 +930,75 @@ def post_comments(
930930
return self.requester.get("/reddit/post/comments", params=params, timeout=timeout)
931931

932932

933+
class ThreadsEndpoints:
934+
def __init__(self, requester: Requester):
935+
self.requester = requester
936+
937+
def search_keyword(
938+
self,
939+
*,
940+
name: str,
941+
sorting: Literal["0", "1"] | UseDefault = USE_DEFAULT,
942+
extra_params: Mapping[str, Any] | None = None,
943+
timeout: float | None = None,
944+
) -> EDResponse:
945+
params: dict[str, Any] = {
946+
"name": name,
947+
"sorting": sorting,
948+
}
949+
if extra_params is not None:
950+
params = {**extra_params, **params}
951+
params = {k: v for k, v in params.items() if not (v is None or v is USE_DEFAULT)}
952+
return self.requester.get("/threads/keyword/search", params=params, timeout=timeout)
953+
954+
def user_search(
955+
self,
956+
*,
957+
name: str,
958+
extra_params: Mapping[str, Any] | None = None,
959+
timeout: float | None = None,
960+
) -> EDResponse:
961+
params: dict[str, Any] = {
962+
"name": name,
963+
}
964+
if extra_params is not None:
965+
params = {**extra_params, **params}
966+
params = {k: v for k, v in params.items() if not (v is None or v is USE_DEFAULT)}
967+
return self.requester.get("/threads/user/search", params=params, timeout=timeout)
968+
969+
def user_info(
970+
self,
971+
*,
972+
id: int,
973+
extra_params: Mapping[str, Any] | None = None,
974+
timeout: float | None = None,
975+
) -> EDResponse:
976+
params: dict[str, Any] = {
977+
"id": id,
978+
}
979+
if extra_params is not None:
980+
params = {**extra_params, **params}
981+
params = {k: v for k, v in params.items() if not (v is None or v is USE_DEFAULT)}
982+
return self.requester.get("/threads/user/info", params=params, timeout=timeout)
983+
984+
def user_posts(
985+
self,
986+
*,
987+
id: int,
988+
chunk_size: int | UseDefault = USE_DEFAULT,
989+
extra_params: Mapping[str, Any] | None = None,
990+
timeout: float | None = None,
991+
) -> EDResponse:
992+
params: dict[str, Any] = {
993+
"id": id,
994+
"chunk_size": chunk_size,
995+
}
996+
if extra_params is not None:
997+
params = {**extra_params, **params}
998+
params = {k: v for k, v in params.items() if not (v is None or v is USE_DEFAULT)}
999+
return self.requester.get("/threads/user/posts", params=params, timeout=timeout)
1000+
1001+
9331002
class EDClient:
9341003
def __init__(self, token: str, *, timeout: float = 600, max_network_retries: int = 3):
9351004
self.requester = Requester(token, timeout=timeout, max_network_retries=max_network_retries)
@@ -939,6 +1008,7 @@ def __init__(self, token: str, *, timeout: float = 600, max_network_retries: int
9391008
self.instagram = InstagramEndpoints(self.requester)
9401009
self.twitch = TwitchEndpoints(self.requester)
9411010
self.reddit = RedditEndpoints(self.requester)
1011+
self.threads = ThreadsEndpoints(self.requester)
9421012

9431013
async def request(self, uri: str, params: Mapping[str, Any] | None = None) -> EDResponse:
9441014
return self.requester.get(uri, params=params or {})

scripts/regenerate_clients.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
#!/bin/sh
2-
python -m codegen
2+
python3 -m codegen
33
ruff format
44

0 commit comments

Comments
 (0)