#!/usr/bin/env python
# coding: utf-8

# # Acceso a datos a través de API 2

# In[4]:


import requests

api_url = 'https://fakestoreapi.com'

response = requests.get(f"{api_url}/products")
print(f"{api_url}/products")
print('\n')
print(response.status_code)
print('\n')
print(response.json())


# Hemos obtenido la lista de todos los productos de fakestoreapi.com, pero podría interesarnos filtrar un poco la información recibida por ejemplo obtener sólo los 5 primeros registros.  En API's lentas, este procedimiento nos puede ahorrar mucho tiempo.

# In[6]:


query_params = {
    "limit": 5
}

response = requests.get(f"{api_url}/products", params=query_params)
print(response.json())


# In[12]:


# Si quisiéramos extraer la información relativa al producto 3 sólamente
response = requests.get(f"{api_url}/products/3")
print(response)
print(response.json())


# **Añadir nuevos datos a la BBDD**

# In[13]:


nuevo_producto = {
    "title": 'Producto de prueba',
    "price": 20,
    "description": 'Bootcamp',
    "image": 'https://i.pravatar.cc',
    "category": 'Varios'
}


# In[15]:


response = requests.post(f"{api_url}/products", json=nuevo_producto)
print(response.json())


# En este caso, el uso del argumento json en requests, nos permite no definir las cabeceras como en el script anterior.  Hacer uso del argumento json automáticamente define el Content-Type como Application/JSON
# -> headers =  {"Content-Type":"application/json"}
# En el ejemplo del script anterior, usábamos el argumento data para la carga de datos y necesitábamos serializarlos en formato string json... lo vemos

# In[ ]:


import requests
import json

api_url = 'https://fakestoreapi.com'

nuevo_producto = {
    "title": 'Producto de prueba',
    "price": 20,
    "description": 'Bootcamp',
    "image": 'https://i.pravatar.cc',
    "category": 'Varios'
}
headers = {
    "Content-Type": "application/json"
}

response = requests.post(f"{api_url}/products", data=json.dumps(nuevo_producto), headers=headers)
print(response.json())


# **Actualizar un dato existente**

# In[17]:


producto_actualizado = {
    "title": 'producto_actualizado',
    "category": 'Otros'
}

response = requests.put(f"{api_url}/products/21", json=producto_actualizado)
print(response.json())


# **Actualización parcial de un dato existente**

# In[25]:


producto_actualizado = {
    "category": 'Electrónica'
}

response = requests.patch(f"{api_url}/products/21", json=producto_actualizado)
print(response.json())
print(response.status_code)


# **Borrar un dato existente**

# In[24]:


response = requests.delete(f"{api_url}/products/21")
print(response.status_code)

