2025-06-09 12:44:03 +02:00

153 lines
4.0 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Führen Sie in einem Jupyter Notebook die folgenden Aufgaben durch:\n",
"\n",
"- Verwenden Sie das requests-Modul.\n",
"- Legen Sie in einer Variable die ID eines Star-Wars-Charakters fest.\n",
"- Verwenden Sie die API unter https://swapi.tech/api, um die Daten dieses Charakters zu laden.\n",
"- Geben Sie den Namen des Charakters aus.\n",
"- Werten Sie den Rückgabewert aus, um die Filme zu finden, in denen der gewählte Charakter mitspielt.\n",
"- Laden Sie über die API diese Filme.\n",
"- Geben Sie die Titel der Filme in einer Liste aus.\n",
"- Erstellen Sie auf https://studio.apollographql.com/public/star-wars-swapi/variant/current/explorer eine Abfrage, mit der Sie dieselben Daten mit einer einzigen Anfrage holen können. Holen Sie dabei nur die minimal erforderlichen Felder ab.\n",
"- Dokumentieren Sie diesen Query im Jupyter-Notebook als mehrzeilige Zeichenkette.\n",
"- Geben Sie im Anschluss diese Datei hier ab."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Character Name: Luke Skywalker\n"
]
}
],
"source": [
"import requests\n",
"\n",
"# Set character ID\n",
"character_id = '1'\n",
"\n",
"# Get character data from SWAPI\n",
"char_url = f\"https://swapi.tech/api/people/{character_id}/\"\n",
"resp = requests.get(char_url)\n",
"resp.raise_for_status()\n",
"\n",
"character_data = resp.json()['result']['properties']\n",
"print(f\"Character Name: {character_data['name']}\")"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Films with Luke:\n",
"['A New Hope', 'The Empire Strikes Back', 'Return of the Jedi', 'Revenge of the Sith']\n"
]
}
],
"source": [
"import requests\n",
"\n",
"films_url = \"https://swapi.tech/api/films/\"\n",
"\n",
"resp = requests.get(films_url)\n",
"resp.raise_for_status()\n",
"\n",
"films: list[dict] = resp.json()['result']\n",
"\n",
"def filter_for_char(film: dict) -> bool:\n",
" props = film['properties']\n",
" characters = props['characters']\n",
"\n",
" return character_id in [character.split('/')[-1] for character in characters]\n",
"\n",
"films_with_luke = filter(filter_for_char, films)\n",
"\n",
"films_titles = [film['properties']['title'] for film in films_with_luke]\n",
"\n",
"print(\"Films with Luke:\")\n",
"print(films_titles)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"GraphQL Query:\n",
"\n",
"query CharacterWithFilms {\n",
" person(personID: 1) {\n",
" name\n",
" filmConnection {\n",
" films {\n",
" title\n",
" }\n",
" }\n",
" }\n",
"}\n",
"\n"
]
}
],
"source": [
"graphql_query = \"\"\"\n",
"query CharacterWithFilms {\n",
" person(personID: 1) {\n",
" name\n",
" filmConnection {\n",
" films {\n",
" title\n",
" }\n",
" }\n",
" }\n",
"}\n",
"\"\"\"\n",
"\n",
"print(f\"\\nGraphQL Query:\\n{graphql_query}\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".venv (3.13.3)",
"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.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}