{ "cells": [ { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "\n" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "import requests\n", "import csv\n", "\n", "def get_products(stores_ids, province):\n", " url = \"https://d3e6htiiul5ek9.cloudfront.net/prod/productos\"\n", " params = {\n", " \"string\": \"stevia\",\n", " \"array_sucursales\":stores_ids,\n", " \"offset\": 0,\n", " \"limit\": 50,\n", " \"sort\": \"-cant_sucursales_disponible\"\n", " }\n", "\n", " headers = {\n", " \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0\",\n", " \"Accept\": \"application/json, text/plain, */*\",\n", " \"Accept-Language\": \"en-US,en;q=0.5\",\n", " \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n", " \"Origin\": \"https://www.preciosclaros.gob.ar\",\n", " \"Connection\": \"keep-alive\",\n", " \"Referer\": \"https://www.preciosclaros.gob.ar/\",\n", " \"Sec-Fetch-Dest\": \"empty\",\n", " \"Sec-Fetch-Mode\": \"cors\",\n", " \"Sec-Fetch-Site\": \"cross-site\",\n", " \"TE\": \"trailers\"\n", " }\n", "\n", " response = requests.get(url, params=params, headers=headers)\n", "\n", " productos = response.json()[\"productos\"]\n", "\n", " with open(\"Products.csv\", \"a\", newline=\"\", encoding='UTF-8') as file:\n", " #check if it's empty\n", " writer = csv.writer(file)\n", " if file.tell() == 0:\n", "\n", " writer.writerow(list(productos[0].keys()) + [\"provincia\"])\n", " for producto in productos:\n", " writer.writerow(list(producto.values()) + [province])" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "import requests\n", "import csv\n", "\n", "def get_specific_products(stores, id):\n", " url = \"https://d3e6htiiul5ek9.cloudfront.net/prod/producto\"\n", " params = {\n", " \"limit\": 30,\n", " \"id_producto\": id,\n", " \"array_sucursales\": stores\n", "}\n", "\n", " headers = {\n", " \"User-Agent\": \"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0\",\n", " \"Accept\": \"application/json, text/plain, */*\",\n", " \"Accept-Language\": \"en-US,en;q=0.5\",\n", " \"Accept-Encoding\": \"gzip, deflate, br, zstd\",\n", " \"Origin\": \"https://www.preciosclaros.gob.ar\",\n", " \"Connection\": \"keep-alive\",\n", " \"Referer\": \"https://www.preciosclaros.gob.ar/\",\n", " \"Sec-Fetch-Dest\": \"empty\",\n", " \"Sec-Fetch-Mode\": \"cors\",\n", " \"Sec-Fetch-Site\": \"cross-site\",\n", " \"TE\": \"trailers\"\n", " }\n", "\n", " response = requests.get(url, params=params, headers=headers)\n", "\n", " response = response.json()\n", " producto = response['producto']\n", " with open(\"Store-Products.csv\", \"a\", newline=\"\", encoding='UTF-8') as file:\n", " #check if it's empty\n", " writer = csv.writer(file)\n", " if file.tell() == 0:\n", " writer.writerow(['id_producto','marca_producto', 'nombre_producto','presentacion_producto','id_sucursal', 'precio_lista','promocion','promocion_descripcion'])\n", " for sucursal in response['sucursales']:\n", " if \"message\" not in sucursal:\n", " precios = sucursal['preciosProducto']\n", " precio_lista = precios['precioLista']\n", " if'promo1' in precios:\n", " promocion = precios['promo1']['precio']\n", " descripcion_promocion = precios['promo1']['descripcion']\n", " else:\n", " promocion=None\n", " descripcion_promocion=None\n", "\n", " writer.writerow([producto['id'], producto['marca'], producto['nombre'], producto['presentacion'], str(sucursal['comercioId'])+'-'+str(sucursal['banderaId'])+'-'+str(sucursal['id']), precio_lista, promocion, descripcion_promocion])" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "\n", "# Leer el archivo CSV\n", "df = pd.read_csv(\"sucursales.csv\")\n", "#obtengo todas las provincias\n", "provinces = df['provincia'].unique()" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "#Obtener los ids de sucursales de una misma marca en distintas partes del pais\n", "for province in provinces:\n", " stores = df[df['provincia'] == province]\n", " ids_stores = stores['id'].tolist()\n", " ids_stores_str = ','.join(ids_stores)\n", " \n", " get_products(ids_stores_str, province)\n", " \n", "#ids_stores tiene los ids ordenados por cada provincia\n", "\n", "#obtengo los productos de cada surucsal" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "#Empiezo a trabajar en el dataset de productos\n", "import pandas as pd\n", "df = pd.read_csv(\"Products.csv\")\n", "\n", "#drop \"CLIGHT\" products\"\n", "df = df[df['marca'] != \"CLIGHT\"]\n", "#drop \"CUARTO CRECIENTE\" products\n", "df = df[df['marca'] != \"CUARTO CRECIENTE\"]\n", "\n", "df = df[df['marca'] != \"CUARTOCRECIENTE\"]\n", "\n", "df = df[df['marca'] != \"TRINI\"]\n", "\n", "df = df[df['marca'] != \"ENTRE NUTS\"]\n", "\n", "df = df[df['marca'] != \"VIGENTE\"]\n", "\n", "\n", "\n", "df.to_csv(\"Products.csv\", index=False)\n", "\n", "#remove duplicates\n", "\n", "df = pd.read_csv(\"Products.csv\")\n", "\n", "#remove columns\n", "df = df.drop(columns=['precioMin','precioMax','cantSucursalesDisponible','provincia'])\n", "\n", "df = df.drop_duplicates()\n", "\n", "df.to_csv(\"Products_unique.csv\", index=False)\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "#Obtener los ids de productos de interes\n", "ledesma_200_u = 7799086000198\n", "competitors_ledesma_200_u = [7794940000772, 7792129003507, 7792129003644, 7790150812785]\n", "#recorriendo cada una de esas sucursales, y obteniendo los productos similares\n", "ledesma_100_u = 7799086000051\n", "competitors_ledesma_100_u = [7794940000765, 7792129003637, 7791720030509, 7790150812761]\n", "\n", "ledesma_50_u = 7799086000266\n", "competitors_ledesma_50_u = [7792129003620, 7791720030493, 7794940000758, 7790150812747]" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "#Recorrer cada una de las sucursales de la marca\n", "for province in provinces:\n", " stores = df[df['provincia'] == province]\n", " ids_stores = stores['id'].tolist()\n", " ids_stores_str = ','.join(ids_stores)\n", " #ledesma 200 u\n", " get_specific_products(ids_stores_str, ledesma_200_u)\n", " for competitor_ledesma_200_u in competitors_ledesma_200_u:\n", " get_specific_products(ids_stores_str, competitor_ledesma_200_u)\n", " #ledesma 100 u\n", " get_specific_products(ids_stores_str, ledesma_100_u)\n", " for competitor_ledesma_100_u in competitors_ledesma_100_u:\n", " get_specific_products(ids_stores_str, competitor_ledesma_100_u)\n", " #ledesma 50 u\n", " get_specific_products(ids_stores_str, ledesma_50_u)\n", " for competitor_ledesma_50_u in competitors_ledesma_50_u:\n", " get_specific_products(ids_stores_str, competitor_ledesma_50_u)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#Almacenar los datos en un csv" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#Comparar los productos" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "venv", "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.11.3" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }