Started with kahoot-import

This commit is contained in:
Mawoka
2022-03-08 16:43:18 +01:00
parent 9c416b020f
commit 449f227ecc
5 changed files with 130 additions and 0 deletions
+116
View File
@@ -0,0 +1,116 @@
from uuid import UUID
from typing import List, Any, Optional
from aiohttp import ClientSession
from pydantic import BaseModel
class _Access(BaseModel):
groupRead: List[Any | None]
folderGroupIds: List[Any | None]
class _CoverMetadata(BaseModel):
id: UUID
resources: str | None
class _CreatorAvatar(BaseModel):
url: str
id: UUID | None
type: str | None
bitmojiAvatarId: str | None
altText: str | None
contentType: str | None
width: int | None
height: int | None
class _LastEdit(BaseModel):
editorUserId: UUID
editorUsername: str
editTimestamp: int
class _ImageMetadata(BaseModel):
id: UUID
content_type: Optional[str]
width: Optional[int]
height: Optional[int]
resources: Optional[str]
class _SampleQuestion(BaseModel):
image: str | None
imageMetadata: _ImageMetadata | None
title: str
type: str
time: int
class _Card(BaseModel):
type: str
title: str
description: str
slug: str
cover: str | None
coverMetadata: _CoverMetadata | dict[None, None]
draftExists: bool
inventoryItemIds: List[Any]
number_of_questions: int
creator: UUID
creator_username: str
creator_avatar: _CreatorAvatar | dict[None, None] | None
badges: List[str]
visibility: int
locked: bool
writeProtection: bool
last_edit: _LastEdit | None
featured: bool
young_featured: bool
sponsored: bool
draft: bool
combined: bool
compatibility_level: int
sample_questions: List[_SampleQuestion]
number_of_plays: int
number_of_players: int
total_favourites: int
question_types: List[str]
created: int
modified: int
access: _Access
duplication_disabled: bool
uuid: UUID
class _Entity(BaseModel):
card: _Card
class _Response(BaseModel):
entities: List[_Entity]
totalHits: int
cursor: int
pageTimestamp: int
async def get(query: str | None, limit: int | None = 9, cursor: int | None = 1,
search_cluster: int | None = 1, inventory_item_id: str | None = "ANY") -> _Response:
"""
:param inventory_item_id: I dkon't know
:param search_cluster: Doesn't seeem to matter
:param cursor: The position in the result-list (page)
:param query: The search query
:param limit: Less or equals 100
:return:
"""
async with ClientSession() as session:
async with session.get(
f"https://create.kahoot.it/rest/kahoots/?query={query}&limit={limit}&cursor={cursor}&searchCluster={search_cluster}&includeExtendedCounters=false&inventoryItemId={inventory_item_id}"
) as response:
print(
f"https://create.kahoot.it/rest/kahoots/?query={query}&limit={limit}&cursor={cursor}&searchCluster={search_cluster}&includeExtendedCounters=false&inventoryItemId={inventory_item_id}")
return _Response(**await response.json())
+3
View File
@@ -0,0 +1,3 @@
from aiohttp import ClientSession
import pydantic
View File
+11
View File
@@ -0,0 +1,11 @@
from unittest import IsolatedAsyncioTestCase
from get import get
class Test(IsolatedAsyncioTestCase):
async def test_get(self):
res = await get(query="Python")
self.assertEqual(len(res.entities), 9)
await get(query="Test Quiz")
await get(query="Biologie")
await get(query="Chemie")