oc-p06-product-classification/P6_07_OpenFoodFacts_API.ipynb
2025-11-10 18:19:17 +01:00

1 line
No EOL
5.6 KiB
Text

{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"authorship_tag":"ABX9TyNZ5tcNCnCtbpDZawvTcDRw"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"markdown","source":["Based on : \\\n","https://openfoodfacts.github.io/openfoodfacts-server/api/ (how to use the API) \\\n","https://static.openfoodfacts.org/data/data-fields.txt (fields names and correspondancies) \\"],"metadata":{"id":"izOzjObiXg_8"}},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')\n","import os\n","path = \"/content/drive/MyDrive/Colab_Notebooks/Project_6/\"\n","os.chdir(path)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"hkcvkx0dVBFb","executionInfo":{"status":"ok","timestamp":1747403710586,"user_tz":-120,"elapsed":1136,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"4c4fb1c6-cd42-4e5b-c0cb-647cb936ccba"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"]}]},{"cell_type":"code","source":["save_path = './openfoodfacts_champagne/'\n","os.makedirs(save_path, exist_ok=True)"],"metadata":{"id":"EuIujiSIVEr5"},"execution_count":null,"outputs":[]},{"cell_type":"code","execution_count":null,"metadata":{"id":"saCRzb9sTjpe"},"outputs":[],"source":["import requests\n","import pandas as pd\n","import json"]},{"cell_type":"code","source":["# OpenFoodFacts API URL\n","url = \"https://world.openfoodfacts.org/cgi/search.pl\"\n","# Query parameters with more precise filters\n","params = {\n"," \"action\": \"process\",\n"," \"tagtype_0\": \"categories\",\n"," \"tag_contains_0\": \"contains\",\n"," \"tag_0\": \"champagnes\", # Specific category for champagnes\n"," \"tagtype_1\": \"categories\",\n"," \"tag_contains_1\": \"contains\",\n"," \"tag_1\": \"sparkling-wines\", # Additional category for sparkling wines\n"," \"tagtype_2\": \"packaging\",\n"," \"tag_contains_2\": \"contains\",\n"," \"tag_2\": \"bottle\", # Bottle filter\n"," \"sort_by\": \"popularity\",\n"," \"page_size\": 10,\n"," \"json\": 1\n","}\n"],"metadata":{"id":"rmFSXBGGV_CS"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# Request the API\n","response = requests.get(url, params=params)\n","data = response.json()"],"metadata":{"id":"VcRM2VVyV9TS"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# Check if products have been found\n","if 'products' in data and len(data['products']) > 0:\n"," # Prepare a list to store product data\n"," products_data = []\n","\n"," # Extract the information requested for each product\n"," for product in data['products']:\n"," product_info = {\n"," 'foodId': product.get('code', ''),\n"," 'label': product.get('product_name', ''),\n"," 'category': product.get('categories', ''),\n"," 'foodContentsLabel': product.get('ingredients_text', ''),\n"," 'image': product.get('image_url', '')\n"," }\n"," products_data.append(product_info)\n","\n"," # Create a pandas DataFrame with collected data\n"," df = pd.DataFrame(products_data)\n","\n"," # Save data in a CSV file\n"," df.to_csv(save_path + 'champagne_products.csv', index=False)\n","\n"," print(f\"Extraction complete ! {len(products_data)} champagne products have been recorded in champagne_products.csv\")\n","\n"," # Display extracted data for verification\n"," print(\"\\nOverview of extracted data :\")\n"," print(df.head())\n","else:\n"," print(\"No champagne products were found in the OpenFoodFacts database.\")\n","\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"-fWlTJqwVhtx","executionInfo":{"status":"ok","timestamp":1747403734503,"user_tz":-120,"elapsed":16,"user":{"displayName":"Grégoire","userId":"01249298206117462766"}},"outputId":"1b9946d4-49bc-4336-91f4-ab5d25ac067d"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Extraction terminée ! 10 produits à base de champagne ont été enregistrés dans champagne_products.csv\n","\n","Aperçu des données extraites :\n"," foodId label \\\n","0 3282946015837 Nicolas Feuillatte \n","1 3043700103715 Champagne brut Cordon Rouge \n","2 3256930103817 Champagne Blue Top Brut \n","3 3113910312013 Champagne Alfred Rothschild et Cie brut \n","4 3359952005005 Champagne AOP, brut \n","\n"," category \\\n","0 Boissons, Boissons alcoolisées, Vins, Vins fra... \n","1 Boissons, Boissons alcoolisées, Vins, Vins fra... \n","2 Boissons et préparations de boissons, Boissons... \n","3 Boissons, Boissons alcoolisées, Vins, Vins fra... \n","4 Boissons, Boissons alcoolisées, Vins, Vins eff... \n","\n"," foodContentsLabel \\\n","0 Champagne, Contient des _sulfites_ \n","1 Contient des sulfites. \n","2 Champagne (_sulfites_) \n","3 Champagne brut (contient _sulfites_) \n","4 Champagne brut (_sulfites_) \n","\n"," image \n","0 https://images.openfoodfacts.org/images/produc... \n","1 https://images.openfoodfacts.org/images/produc... \n","2 https://images.openfoodfacts.org/images/produc... \n","3 https://images.openfoodfacts.org/images/produc... \n","4 https://images.openfoodfacts.org/images/produc... \n"]}]}]}