{ "cells": [ { "cell_type": "markdown", "id": "5301dd10-a5d9-432f-af5d-8fe418594d18", "metadata": {}, "source": [ "# Acceso a información a través de APIs" ] }, { "cell_type": "code", "execution_count": 1, "id": "1ae19edd-dfab-4fbc-af35-b16275f008e1", "metadata": {}, "outputs": [], "source": [ "import requests" ] }, { "cell_type": "markdown", "id": "427722b8-b7fa-4d3b-859a-66f5606237b5", "metadata": {}, "source": [ "### GET" ] }, { "cell_type": "markdown", "id": "6e538ada-12e3-4a21-aa23-7ebc84be94d7", "metadata": {}, "source": [ "**Extracción de datos**" ] }, { "cell_type": "code", "execution_count": 23, "id": "ac7481a0-3a4c-4667-b0d5-8958c4aadc4d", "metadata": {}, "outputs": [], "source": [ "api_url = \"https://jsonplaceholder.typicode.com/todos/1\"\n", "response = requests.get(api_url)" ] }, { "cell_type": "code", "execution_count": 24, "id": "e6380067-6418-4292-8ec7-88f727354f93", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'userId': 1, 'id': 1, 'title': 'delectus aut autem', 'completed': False}" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "response.json()" ] }, { "cell_type": "code", "execution_count": 7, "id": "cd94f436-5334-4d86-879f-81fed40c2f57", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "200" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "response.status_code" ] }, { "cell_type": "code", "execution_count": 8, "id": "1c6c686c-4ee5-4b0d-ad97-155047751562", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'application/json; charset=utf-8'" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "response.headers[\"Content-Type\"]" ] }, { "cell_type": "markdown", "id": "e48de97b-03d1-47c1-b1d2-2df2b933373d", "metadata": {}, "source": [ "### POST" ] }, { "cell_type": "markdown", "id": "18fd54c8-67cc-460f-b668-2d264260891c", "metadata": {}, "source": [ "**Carga de datos**" ] }, { "cell_type": "code", "execution_count": 19, "id": "2844b0bb-48ff-4141-932f-c875bbcd9439", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'userId': 1, 'title': 'Compra leche', 'completed': False}" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "api_url = \"https://jsonplaceholder.typicode.com/todos\"\n", "todo = {\"userId\": 1, \"title\": \"Compra leche\", \"completed\": False}\n", "todo" ] }, { "cell_type": "code", "execution_count": 20, "id": "e91486a7-801d-4316-b825-3c961717da9f", "metadata": {}, "outputs": [], "source": [ "response = requests.post(api_url, json=todo)" ] }, { "cell_type": "code", "execution_count": 21, "id": "bde65e40-cb5e-4e82-bc6a-04536fab4620", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'userId': 1, 'title': 'Compra leche', 'completed': False, 'id': 201}" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "response.json()" ] }, { "cell_type": "code", "execution_count": 22, "id": "e470ae16-7806-4d60-bb07-c0acd6b7b4a8", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "201" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "response.status_code" ] }, { "cell_type": "markdown", "id": "53ab3077-39a8-48ce-8990-f2501bad1ab6", "metadata": {}, "source": [ "Si no utilizamos el argumento de la palabra clave JSON para suministrar los datos JSON, entonces tenemos que establecer el Content-Type correspondiente y serializar el JSON manualmente..." ] }, { "cell_type": "code", "execution_count": 29, "id": "e12ba2e2-accf-4e04-837f-7bd8ccf5707e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'userId': 1, 'title': 'Compra leche', 'completed': False, 'id': 201}\n", "201\n" ] } ], "source": [ "import requests\n", "import json\n", "api_url = \"https://jsonplaceholder.typicode.com/todos\"\n", "todo = {\"userId\": 1, \"title\": \"Compra leche\", \"completed\": False}\n", "headers = {\"Content-Type\":\"application/json\"}\n", "response = requests.post(api_url, data=json.dumps(todo), headers=headers)\n", "print(response.json())\n", "print(response.status_code)\n" ] }, { "cell_type": "code", "execution_count": 28, "id": "8ba41aa6-515b-4b14-be11-7693f4ac0b86", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'{\"userId\": 1, \"title\": \"Compra leche\", \"completed\": false}'" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "json.dumps(todo)" ] }, { "cell_type": "markdown", "id": "bbf2fe7e-60cc-4a2c-aef7-f6254d70f952", "metadata": {}, "source": [ "A través de headers, estamos indicando a la API REST que estamos enviando los datos en formato JSON. El enviar los datos en un formato u otro depende de cómo haya sido configurada la API. headers = {\"Content-Type\":\"application/json\"}" ] }, { "cell_type": "markdown", "id": "4af1ca1a-791b-421a-adf2-ef9df03c7b43", "metadata": {}, "source": [ "json.dumps(todo) --> Serializa los datos para su uso junto con headers. Lo convierte en un string json" ] }, { "cell_type": "markdown", "id": "1ee32774-9d1d-492f-9ae8-a30c3820b4ce", "metadata": {}, "source": [ "Extraemos la respuesta de la API a través de responde.json(). El código de estado 201, nos indica que el nuevo recurso (dato), se ha creado correctamente." ] }, { "cell_type": "markdown", "id": "92e33694-b3b6-4005-ab30-9405f9fa1ea7", "metadata": {}, "source": [ "### PATCH" ] }, { "cell_type": "markdown", "id": "fe3a9efe-a791-4fee-852e-26adeadde5cc", "metadata": {}, "source": [ "**Actualización de datos**" ] }, { "cell_type": "code", "execution_count": 32, "id": "e68bce34-a241-4f50-af3d-70e0c3a487f8", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'userId': 1, 'id': 10, 'title': 'Mow lawn', 'completed': True}\n", "200\n" ] } ], "source": [ "import requests\n", "api_url = \"https://jsonplaceholder.typicode.com/todos/10\"\n", "todo = {\"title\": \"Mow lawn\"}\n", "response = requests.patch(api_url, json=todo)\n", "print(response.json())\n", "print(response.status_code)" ] }, { "cell_type": "markdown", "id": "04380077-1a28-4f17-a0e2-a244c0a23af0", "metadata": {}, "source": [ "Podemos comprobar si se ha actualizado el dato recién parcheado. La web jsonplaceholder es una web para hacer pruebas (es de sólo lectura) por lo que las operaciones de escritura, aunque no dan error, no se ejecutan realmente." ] }, { "cell_type": "code", "execution_count": 35, "id": "696f4e36-54c1-4331-8417-51243cab6e63", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'userId': 1,\n", " 'id': 10,\n", " 'title': 'illo est ratione doloremque quia maiores aut',\n", " 'completed': True}" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "response = requests.get(api_url)\n", "response.json()" ] }, { "cell_type": "markdown", "id": "fb44c300-634f-4fd0-a4db-59bc0ec39adb", "metadata": {}, "source": [ "### DELETE" ] }, { "cell_type": "markdown", "id": "afcc6b18-a0d2-4fd5-9aff-eca02969c4ae", "metadata": {}, "source": [ "**Borrado de datos**" ] }, { "cell_type": "code", "execution_count": 36, "id": "03bbb8be-f2b9-4de6-bec7-de6bb1dded84", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "200" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import requests\n", "api_url = \"https://jsonplaceholder.typicode.com/todos/10\"\n", "response = requests.delete(api_url)\n", "response.json()\n", "\n", "\n", "response.status_code" ] }, { "cell_type": "markdown", "id": "5fa6a13c-b364-45f8-90fc-45e4f4700ac1", "metadata": {}, "source": [ "Se llama a requests.delete() con una URL de la API que contiene el ID de la tarea que se desea eliminar. Ésto envía una solicitud DELETE a la API REST, que elimina el recurso correspondiente. \n", "Después de eliminar el recurso, la API devuelve un objeto JSON vacío que indica que el recurso ha sido eliminado." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.8.12" } }, "nbformat": 4, "nbformat_minor": 5 }