From cb5450cf3ef68d9a74234e672fa0408670a21b83 Mon Sep 17 00:00:00 2001 From: Marco Vinciguerra Date: Tue, 14 Jan 2025 14:07:32 +0100 Subject: [PATCH 1/4] Create scrapegraph_langraph_tavily_my_sql.ipynb --- cookbook/research-agent/scrapegraph_langraph_tavily_my_sql.ipynb | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 cookbook/research-agent/scrapegraph_langraph_tavily_my_sql.ipynb diff --git a/cookbook/research-agent/scrapegraph_langraph_tavily_my_sql.ipynb b/cookbook/research-agent/scrapegraph_langraph_tavily_my_sql.ipynb new file mode 100644 index 0000000..e69de29 From 2543b5a9b84826de5c583d38fe89cf21aad077e6 Mon Sep 17 00:00:00 2001 From: Marco Vinciguerra Date: Tue, 14 Jan 2025 14:57:15 +0100 Subject: [PATCH 2/4] feat: add integration for sql --- .../scrapegraph_langgraph_tavily_my_sql.ipynb | 1445 +++++++++++++++++ .../scrapegraph_langraph_tavily_my_sql.ipynb | 0 2 files changed, 1445 insertions(+) create mode 100644 cookbook/research-agent/scrapegraph_langgraph_tavily_my_sql.ipynb delete mode 100644 cookbook/research-agent/scrapegraph_langraph_tavily_my_sql.ipynb diff --git a/cookbook/research-agent/scrapegraph_langgraph_tavily_my_sql.ipynb b/cookbook/research-agent/scrapegraph_langgraph_tavily_my_sql.ipynb new file mode 100644 index 0000000..cfe1fca --- /dev/null +++ b/cookbook/research-agent/scrapegraph_langgraph_tavily_my_sql.ipynb @@ -0,0 +1,1445 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "ReBHQ5_834pZ" + }, + "source": [ + "\n", + " \"Open\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jEkuKbcRrPcK" + }, + "source": [ + "## 🕷️ Research Agent with `scrapegraph`, `langgraph`, and `tavily`" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cJrlyZbLwQek" + }, + "source": [ + "![Presentazione senza titolo.pptx (9).png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABxQAAAHsCAIAAAB0Zg8ZAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADcGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4KPHg6eG1wbWV0YSB4bWxuczp4PSdhZG9iZTpuczptZXRhLyc+CjxyZGY6UkRGIHhtbG5zOnJkZj0naHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyc+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpBdHRyaWI9J2h0dHA6Ly9ucy5hdHRyaWJ1dGlvbi5jb20vYWRzLzEuMC8nPgogIDxBdHRyaWI6QWRzPgogICA8cmRmOlNlcT4KICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0nUmVzb3VyY2UnPgogICAgIDxBdHRyaWI6Q3JlYXRlZD4yMDI0LTEyLTIyPC9BdHRyaWI6Q3JlYXRlZD4KICAgICA8QXR0cmliOkV4dElkPmQ3ZGY1Mzc1LTkyNGEtNGZlZi1iMDA1LTQ3ZDZlYjU1ZGUyZDwvQXR0cmliOkV4dElkPgogICAgIDxBdHRyaWI6RmJJZD41MjUyNjU5MTQxNzk1ODA8L0F0dHJpYjpGYklkPgogICAgIDxBdHRyaWI6VG91Y2hUeXBlPjI8L0F0dHJpYjpUb3VjaFR5cGU+CiAgICA8L3JkZjpsaT4KICAgPC9yZGY6U2VxPgogIDwvQXR0cmliOkFkcz4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PScnCiAgeG1sbnM6ZGM9J2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvJz4KICA8ZGM6dGl0bGU+CiAgIDxyZGY6QWx0PgogICAgPHJkZjpsaSB4bWw6bGFuZz0neC1kZWZhdWx0Jz5QcmVzZW50YXppb25lIHNlbnphIHRpdG9sby5wcHR4IC0gMTwvcmRmOmxpPgogICA8L3JkZjpBbHQ+CiAgPC9kYzp0aXRsZT4KIDwvcmRmOkRlc2NyaXB0aW9uPgo8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7F67XuMSpconFZ/dvvXQOIRBLIrCHTv2q5Kq1es5cixjeJp47cMH8carzrN45/imcctfxk89cuRU0xZtVfnly7dk/X+Fp4NHWe3twvlram2hgBKi5NHDZ6pE/I9EmXJVkjJj5jy5k7nzlqlNxA934wSjVozXvycVnu7cdTDxhsaxol9m8BIvwaDBP23dulecuCqfN/9j4mkMT9WksUr7sHC1Vo2fNYanVre9IjwFHER4CnPSHmqkoJ279rx48aJLeI/3X0nVaonnUXfuyFWZvHzXb9hkdX26KBHf5rKCusxfXbBilfpt2brdanPxta7qzF+4WF0jLx7Xr98oW6GqsW3DR45+8vSpqiCeixK1dsCgobK8e4/e8knskyfpM/uIOuIsFi5aKr/iY2NjxWJwyIfv8bPnzouakZFXk+qQajXrifpXr374PbN1+w6x2Kt3X/G8ZOnyapBps5ZtVB7q7ZvXO3se482dmjQPvX//gfHEY2JivmncXK4Vv+4mT50eH//MWGHP3v058vhbdaP9LvppzC/Pnz837kScXVK58Oifx8k6cpSx8OPAIbJk3fqNokl79+2Xi8NGfOhkGUOLR98f3v+RWJyveAlEb8iMeMiwkeL5ilVrtL+H4SKEpwAAuDvt4WnMo+fiB736dRIRcSlxnccxz42jQW/dfPDi3+lk3vxFrKYc3bP3yM+/TF6/fvulSzdVoQpPxd4SH2XchGlqh6GtOxqTym8af5zyTF2rbgxP27brYrW3rVv3qrUqFlQDPDNn9X0W//aTnRN997FxbEXiiFZxJDzdu++o1VaHD59Ua4uXLKsG1QrjJ36cE82YeBrD07NnI612KM5UrRU9IAsJT4HPR3gKc9IeaqSO32f9IbOzEydPbdm6PTr6nlzs0auPrPDJ8HTjpi1v376VJW8SHuLLWtURq548fbpr9141cvP43yfU0af+NkNtePXqtdevX8vF6TNnyQoqPH327EOAKANT+z4Zntr394mTKql8Ghe3bftO0QzjgFPZCS9fvnwf5sbGin478texd+/eychVVhAdKPewecu2yVOni16Si2JvVt1op4tC24apRHXT5q0XLl6Si0mlmeJnp2iJrNOpa/fiJb+WwevtqCj5O00cNCYmxpIw40Fg8VLduveSlbdu36H9rQgtCE8BAHB32sNToVqN+urXSeWqteOevraq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)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IzsyDXEWwPVt" + }, + "source": [ + "### 🔧 Install `dependencies`" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "os_vm0MkIxr9" + }, + "outputs": [], + "source": [ + "%%capture\n", + "!pip install langgraph langchain-scrapegraph langchain-openai \"langchain-community>=0.2.11\" tavily-python" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "apBsL-L2KzM7" + }, + "source": [ + "### 🔑 Import `ScrapeGraph`, `Tavily` and `OpenAI` API keys" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ol9gQbAFkh9b" + }, + "source": [ + "You can find the Scrapegraph API key [here](https://dashboard.scrapegraphai.com/)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "sffqFG2EJ8bI", + "outputId": "7e47aa4d-edca-48f2-df6e-bd7fafabfc9c" + }, + "outputs": [], + "source": [ + "import getpass\n", + "import os\n", + "\n", + "if not os.environ.get(\"SGAI_API_KEY\"):\n", + " os.environ[\"SGAI_API_KEY\"] = getpass.getpass(\"Scrapegraph API key:\\n\")\n", + "\n", + "if not os.environ.get(\"TAVILY_API_KEY\"):\n", + " os.environ[\"TAVILY_API_KEY\"] = getpass.getpass(\"Tavily API key:\\n\")\n", + "\n", + "if not os.environ.get(\"OPENAI_API_KEY\"):\n", + " os.environ[\"OPENAI_API_KEY\"] = getpass.getpass(\"OpenAI API key:\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jnqMB2-xVYQ7" + }, + "source": [ + "### 📝 Defining an `Output Schema` for Webpage Content Extraction\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "VZvxbjfXvbgd" + }, + "source": [ + "If you already know what you want to extract from a webpage, you can **define an output schema** using **Pydantic**. This schema acts as a \"blueprint\" that tells the AI how to structure the response.\n", + "\n", + "
\n", + " Pydantic Schema Quick Guide\n", + "\n", + "Types of Schemas \n", + "\n", + "1. Simple Schema \n", + "Use this when you want to extract straightforward information, such as a single piece of content. \n", + "\n", + "```python\n", + "from pydantic import BaseModel, Field\n", + "\n", + "# Simple schema for a single webpage\n", + "class PageInfoSchema(BaseModel):\n", + " title: str = Field(description=\"The title of the webpage\")\n", + " description: str = Field(description=\"The description of the webpage\")\n", + "\n", + "# Example Output JSON after AI extraction\n", + "{\n", + " \"title\": \"ScrapeGraphAI: The Best Content Extraction Tool\",\n", + " \"description\": \"ScrapeGraphAI provides powerful tools for structured content extraction from websites.\"\n", + "}\n", + "```\n", + "\n", + "2. Complex Schema (Nested) \n", + "If you need to extract structured information with multiple related items (like a list of repositories), you can **nest schemas**.\n", + "\n", + "```python\n", + "from pydantic import BaseModel, Field\n", + "from typing import List\n", + "\n", + "# Define a schema for a single repository\n", + "class RepositorySchema(BaseModel):\n", + " name: str = Field(description=\"Name of the repository (e.g., 'owner/repo')\")\n", + " description: str = Field(description=\"Description of the repository\")\n", + " stars: int = Field(description=\"Star count of the repository\")\n", + " forks: int = Field(description=\"Fork count of the repository\")\n", + " today_stars: int = Field(description=\"Stars gained today\")\n", + " language: str = Field(description=\"Programming language used\")\n", + "\n", + "# Define a schema for a list of repositories\n", + "class ListRepositoriesSchema(BaseModel):\n", + " repositories: List[RepositorySchema] = Field(description=\"List of GitHub trending repositories\")\n", + "\n", + "# Example Output JSON after AI extraction\n", + "{\n", + " \"repositories\": [\n", + " {\n", + " \"name\": \"google-gemini/cookbook\",\n", + " \"description\": \"Examples and guides for using the Gemini API\",\n", + " \"stars\": 8036,\n", + " \"forks\": 1001,\n", + " \"today_stars\": 649,\n", + " \"language\": \"Jupyter Notebook\"\n", + " },\n", + " {\n", + " \"name\": \"TEN-framework/TEN-Agent\",\n", + " \"description\": \"TEN Agent is a conversational AI powered by TEN, integrating Gemini 2.0 Multimodal Live API, OpenAI Realtime API, RTC, and more.\",\n", + " \"stars\": 3224,\n", + " \"forks\": 311,\n", + " \"today_stars\": 361,\n", + " \"language\": \"Python\"\n", + " }\n", + " ]\n", + "}\n", + "```\n", + "\n", + "Key Takeaways \n", + "- **Simple Schema**: Perfect for small, straightforward extractions. \n", + "- **Complex Schema**: Use nesting to extract lists or structured data, like \"a list of repositories.\" \n", + "\n", + "Both approaches give the AI a clear structure to follow, ensuring that the extracted content matches exactly what you need.\n", + "
\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "dlrOEgZk_8V4" + }, + "outputs": [], + "source": [ + "from pydantic import BaseModel, Field\n", + "from typing import List\n", + "\n", + "# Schema for a single news item\n", + "class NewsItemSchema(BaseModel):\n", + " title: str = Field(description=\"Title of the news article\")\n", + " link: str = Field(description=\"URL to the news article\")\n", + " description: str = Field(description=\"Summary/description of the news article\")\n", + "\n", + "# Schema that contains a list of news items\n", + "class ListNewsSchema(BaseModel):\n", + " news: List[NewsItemSchema] = Field(description=\"List of news articles with their details\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cDGH0b2DkY63" + }, + "source": [ + "### 🚀 Initialize `scrapegraph` and `tavily` tools and `langgraph` prebuilt agent and run the `extraction`" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "M1KSXffZopUD" + }, + "source": [ + "Here we use `SmartScraperTool` to extract structured data using AI from a webpage.\n", + "\n", + "\n", + "> If you already have an HTML file, you can upload it and use `LocalScraperTool` instead.\n", + "\n", + "You can find more info in the [official langchain documentation](https://python.langchain.com/docs/integrations/tools/scrapegraph/)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "id": "ySoE0Rowjgp1" + }, + "outputs": [], + "source": [ + "from langchain_scrapegraph.tools import SmartScraperTool\n", + "from langchain_community.tools import TavilySearchResults\n", + "\n", + "# Will automatically get SGAI_API_KEY from environment\n", + "# Initialization without output schema\n", + "# smartscraper_tool = SmartScraperTool()\n", + "\n", + "# Since we have defined an output schema, let's use it\n", + "# This will force the tool to have always the same output structure\n", + "smartscraper_tool = SmartScraperTool(llm_output_schema=ListNewsSchema)\n", + "\n", + "# Initialize tavily tool to look for URLs\n", + "tavily_tool = TavilySearchResults(\n", + " max_results=1,\n", + " name=\"urls_finder\",\n", + " description=\"Use this tool to find webpages urls that satisfy the user request\",\n", + ")\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "W54HVoYeiJbG" + }, + "source": [ + "We then initialize the `llm model` we want to use in the agent\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "id": "ctrkEnltiBCD" + }, + "outputs": [], + "source": [ + "# First we initialize the llm model we want to use.\n", + "from langchain_openai import ChatOpenAI\n", + "\n", + "llm_model = ChatOpenAI(model=\"gpt-4o\", temperature=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "M0WY2Pa8Y8Pk" + }, + "source": [ + "Here we use `create_react_agent` to quickly use one of the prebuilt agents from `langgraph.prebuilt` module\n", + "\n", + "You can find more info in the [official langgraph documentation](https://langchain-ai.github.io/langgraph/how-tos/create-react-agent/)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "id": "Zo1BcIlHhcQP" + }, + "outputs": [], + "source": [ + "from langgraph.prebuilt import create_react_agent\n", + "from langgraph.checkpoint.memory import MemorySaver\n", + "\n", + "# List of tools we want the agent to use\n", + "tools = [smartscraper_tool, tavily_tool]\n", + "\n", + "# We set up the agent's memory to review the different reasoning steps\n", + "memory = MemorySaver()\n", + "\n", + "# Add a configuration to specify where to store the graph states\n", + "config = {\"configurable\": {\"thread_id\": \"1\"}}\n", + "\n", + "# Initialize the ReAct agent\n", + "graph = create_react_agent(\n", + " model=llm_model,\n", + " tools=tools,\n", + " checkpointer=memory,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_UYcJ2Mxip5w" + }, + "source": [ + "Let's visualize the `graph`" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 350 + }, + "id": "2FIKomclLNFx", + "outputId": "3419b941-b409-499e-c1e3-54f2526d467f" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHwAAAFNCAIAAABNLZxVAAAAAXNSR0IArs4c6QAAIABJREFUeJztnXlAU1cW/+/LvrOFNWERVMCdEarFrS4VUeo2VXFrtdqpW6f92dra0aozU63j1Lr+uqFVK1ZUVByZKrVgVRQ3VEDZBNkiBMhGNrLn90f8UUcj8l7uy0sgn79Cknfu4cvlvPvuPfdcxGq1Ag/OhUS0Az0Rj+gE4BGdADyiE4BHdALwiE4AFOgWLRbQXKfTKE1apdlsshh07jEkpTFIDDaJzaNwvSk+QTRc20JgjdMtJlB6s63mvqa+QiuIYtJZZDaP7M2n6XVmKPbxxmoFSqlRqzTTWaTmen3kQHbkAE5IFAOPtuCIfutXWfktlbAPM3IgJzyWBcMxImmTGGvua6Rig1JqHPEGPyCMDte+o6LX3tfkHBYPHuM9fLIfPK9cBdHD9mtnJcERzFEz+RDNOiT6rV9l8hbj2FkBVDoC0SdXo65Ue/FEy9xPwuhMOOMO7KIX5sqNeku37ODPo5Kbjm6rX/z3XlQahO6FUfTcjBYWh/xqSo9QvIP9n9ekrglj88gO2sHy/3LvkoJGJ/U0xQEA89eGH/1XneN2UIv+uKpd0WwYNQPmjcVdYLBJU5aG5B5tcdAOatEvn2odMNLbwVbdl+BejHaNueaBxhEj6ESvvKPyDabxQ/B9YHNxElP8rp2VOmIBnegP76pHvuHvSHtdp6mpqbGxkajLO8E3iBbZn111T43ZAgrRW0V6tcLE9nb03t0VRCLR1KlTS0tLCbn8pQSEMyrvqjBfjkL0RyWaXgPYmFtChclkwjaWtV2F+fIu0msAu+Y+9rCOYpz+331NiSl+0GfgdDrd1q1bL1++DACIi4v7+OOPrVbr1KlTO76QkpKyadMmg8GQlpaWk5PT3NzM5/OnTJny3nvvkclkAMDs2bOjoqKioqIyMjJ0Ot2BAwfmzp37zOVwfQYA5GW09I7jhkUzMVyLYmq3vlKb5BeEoY3OOXDgQHZ29rJly/h8fnZ2NpPJZLFYX3zxxfr165ctWxYfH+/r6wsAIJPJN27cGD16tFAorKio+PHHH3k83oIFC2xGCgoKdDrdjh07tFpteHj485dDh0JD5M16fEU36CwkEkKhwp9jaWxsZDKZixYtolAo06dPt70ZExMDAIiIiBgyZIjtHTKZfOjQIQR54oBIJMrLy+sQnUKhbNmyhclkvuhy6LC9KJo2jLPWXY3pWpXZ8cdfuyQnJ+t0uvfff7+qqqrzb8pksq1bt06fPn3cuHHV1dVS6R/jtgEDBnQo7hzYPIpWacJ2bVdFt1oAnYmL6ImJibt27ZJKpampqV988YXJZP83kUql8+fPv3nz5vLly/fs2RMbG2s2/9HRnKw4AIBCJSEkjP/3XQ0vLC5Z0WrA1sZLSUxMHD58+NGjR3fs2BEcHLxkyZLnv3Py5EmZTHbw4MGgoCAAQFBQUF0dhGkQzKjkRjoL40xvVy+js0hGvcWCw9KbwWAAAJBIpPnz5/v7+5eXlwMAGAwGAKC1tbXjawqFwsfHx6a47cdOxl3PXw4djdLE5mFcYUZxWUQ/tkZp5vpADjIZGRmXLl2aPHlya2tra2trv379AACBgYECgSA9PZ3JZLa1taWmpsbHxx8/fvzbb78dPHhwXl7e1atXLRaLQqHw9rYzEfT85XQ65CU3AIAXn4rtQhT/IFxfanUx9sewFyEUCg0Gw44dO7KyslJTUxcuXAgAQBBky5YtbDb7q6++Onv2rEwmGzdu3NKlS0+cOLFu3Tqj0Xjw4MGIiIhjx47Ztfn85dDdLslvC4/BuBqM4uHocVX7zfOyGasE2FrqTjRUthfmyqYvxygFivAi6M1ESMBksFJevGSVkpKiVtuZCRo0aFBxcfHz73t5eZ05c6brPmAjPz9//fr1z79vtVqtViuJZOff/cKFC1TqC6OHuFbXN46H2R90y3X3LilUMlMnKxhisdhisXTdIIlE6rg34odOp7MbYSwWi8VioVDs9Lzg4OCOB7FnrWks6Vtql26OxOwP6jXSHzfUpH4cxsLnQcktyMtoCYpg9BuOvaejHmmOmuFfdFmBuT13Ryk16bRmRxTHInqfOI7RYCm+0uZIq+7L0X/XT5gX6KARLM9Uo2f6VxWpHVk6cVOOf90w9S8hNIajKUfYk41yfmqOHMDu8yeOgx64C8d3NCQtDPbiQ8hzxv5HS3or8FGJ+tavcsedcHGUUuP3a6tHTfOHojiEBNI7eYqSfEXiG/w+cd2wy7erzdfOSg3t5gnzA6l0aBsoIKRKq2Sma2clep0loh+7V3821xf+RgPnU1+uFdfpiq+0jXjDL3aYQ2OV54G2KUAiMtg2BdAYpOBIJoNFYvMoXB+qyYTiWYlALCarSmHSKs0IAoqvKIR9WH3iONDltgFN9A6kTYaWer26zahVmhES0CghTwc/ePAgLCyMy+XCNctgkehMMptH5vFp4TEsEp4Pf/BFx5ulS5euXLkyLi6OaEew49ldRwAe0QnA/UQXCAS2HCP3xf1Ef/z48dN5AO6I+4nOYrHsLju4Ee7nvVarRbVO4oK4n+g+Pj6enu5s5HK5p6c7G6FQ6Bm9OBuRSOQZvXhAjfuJzuFwPDdSZ6NWqz03UmfD4/E8Pd3ZKJVKT0/3gBr3Ez0oKMgzTnc2YrHYM073gBr3E90zDUAAnmkAD1hwP9FDQ0M94cXZNDQ0eMKLB9S4n+ieFAwC8KRgeMCC+4nuyXshAE/eCwF4ZhkJwDPL6AEL7ie6t7f3i0oluAvuJ3rnhaTcAvcT3TOfTgCe+XQC8PR0AvD0dALw8/Nz957uNpt3k5KSaDQaiUSSyWRsNptKpZJIJCqVmpmZSbRrqHGb4gksFquhocH2ur293fZi2bJlhDqFEbcJL8nJyc88EwmFwjlz5hDnEXbcRvRZs2YJBP9TfHLy5MnQyzI4B7cR3cfHZ9KkSR0/hoaGPn0Gg3vhNqIDAObNmxcaGmp77b7d3M1E5/F4SUlJCIKEh4e7bzfHa/SikptkYoPRAH99J3HwzBu96hITE8XVAADINQpJCMLxpvgG0ig4H68KeZyulBovnZRIGvXhsWyNys2eG+l0sqxZZ7WAPnGc+Nd98GsIpuhqhSnrm8Zx80K4Pm4z/LfLrRwJi0MaPhmXs3qgxnQrOPj32mkrw9xdcQBAQhJfq7bgV3ISmugFv8hGTAuAZY1wEpL4NQ80Oi0uaQfQRG+s1nJ9u9uRmfJmXA68gSa6xYLwfDEezOGa+AUzlHIjHpahia5RGC0W95iw7CIGnRngk9TkTg9H3QaP6ATgEZ0APKITgEd0AvCITgAe0QnAIzoBeEQnAI/oBOARnQC6v+hqtbryYTnRXvwP3V/0pX9JPXcO9yNPUeEGootE9Y5cbjs43KUgbGmtpaV5/4Fvbty4qtGoQ0PD581dPGH8k1wiqVSyZ++/CwtvUKjUoUOHXb6c+/236b16RQEAzvwn8/iJdImkJSgoZPy4SXNmL6TT6Q+rKt7/6ztbt+z+Yd+e6urKwMDg997964gRYwAAqfNS5HJZ1pkTWWdOBAYGZfycTdTv+zSEiW4ym8rLH0yb+qYXz/tyft7mLesFgtDYmP5ms/lv6z6UyaUffLBWJpOk7dsbNyTepvjBQz+cyEyfOSM1PDyyoaH22PGfRI/r/7b2HwAAvV7/93+ufX/VmuCgkAMHv/tiy7qMn7O9vLw3bdz2yaerhgweOuvN+VSaqyxsESZ6SLDg4I8nbDmhycnTZvx5wtWrv8fG9C8ru1/5sHzjhq2vjZkAAKivrz13/j8Gg0GpbDvy84/r120eM3q8zYKfn/+OnV+uWvmx7cf3V60ZN3YiAGDp0lXvLVtQVHxn9KhxMdH9KBSKnx9/4MAhRP2mz0Pkyn1VdeXBQ99XVJQCAMxms0wmBQC0tDYDAEJChLbvCIVhFoulvV1bWHjDZDJt3rJ+85YnR3TbkkckrS22H5kMpu1FYGAwAEAiaSXo13o5hIl+5+6tT9e+Hzck/pM1G9ks9oZNayxWCwBAIAgFAJSU3OvbJwYAUFZ2n8/39/LylsokAIAtm3cG+P/PwbchIcKa2uqn36FSqAAAi8V1U50IE/3w4X0hIcItm3faDjPv6KfRfWMT4of/kLa7ublJ0Sa/eu3S+nWbAQBc7pOz+8LCItC25Wq7TQgbMrYpFb2j+toUNxgM2vY/alu8v2qNUBjWIKrz9vLZu+eALbjHxSUgCHI661iHhY79GJ3DZDClUgluvwcWCOvpQ4bE5+Sc/eXcGR7X68TJIyqVsram2mq1ms3mFavenvXmAoEgFEEQlUqpVqs5HI5QEDpzRurJU0f/tv7/jBzxmlQqyTpz/Mstu2xRqBMGDozLzTv/89GDXC5v2CsjAgIcPZbbcQgT/Z1Fy2VSyZ69/+ZyeSlTZs5+c8HXO7fcvXf7T3EJ8UOHH07fZzKZbN/kcri7d+2PiIhcuWJ1QEDg6dPHbt0q8PPjjxo51p//8pyy9/7yV5lMcjh9n7eXT3R0P1cQHVoC6cFNtZPeEbK9IPwVzWazbdOi1WptbHq89N3U2bMWLF7k7D1d+aebIwewouPhbz1wuWRPvV6/YtXbAQFBgwf9iUqllZTc1el0UVF9ifYLJi4nOoIgE1+fkpeXc+DgdzQarVev3hs3bB09ahzRfsHE5USn0WhzZi+cM3sh0Y7giBvMMnY/PKITgEd0AvCITgAe0QnAIzoBeEQnAI/oBOARnQA8ohMANNF9Q2gutj7jKHQWmUrHpVNCM0qlkqSNOljWXAFRpcY3CJesDWiiRw7iSJv0sKwRjqbN5MWnevvjsh0ZmujRQzlGvbnokgyWQSKxgtyjTa+96Y+Tecj1Xi783EKhknyD6P5CBkSzzgEhISqZUSkzXs9uefvzCK4vXvPe8IthPryrrrmvMRmtksd2oo1er0MQEs2BDDetVkOnM1AVIZXL5TQajc1md/41JpdMoSEhkcxhk/Cq9PIEqxM5e/ZsWlqag0aWLFly584dVJcsWLAgPj7+jTfeyMzMdLB1KLhN2dcOCgoKYmJifHxQlHv68MMPr1y5giAIlUqNiopasWJFYmIinj6+BCc9HInF4m+++QaKqVdffRWV4rYijrYXRqOxtLR03bp1H3zwARRnsOEM0dVqdVpa2ooVK6BYO3LkSF1dHapLwsPDO86jIpFIKpXq6tWrY8aMgeIPBpwhOofD+fzzz2FZu3jxokyGbmDK5/OfuYsymcxLly7BcgktuIv+2Wef1dbWQjS4cePGmJiXpNI9Q0BAAJ1Ot722Wq0BAQFXrlyB6BJa8BV9z54906ZNi4hAnWfbCaGhoUwmE9UlAQEBtktYLFZ6evqgQYMg+oMB9xu9HDx4cNSoUVFRUaiumjlzptlsPnPmDACgrKyMRqOhtQATnIai1dXVBw4cwMPyBx98cOXKFTwsOw1cRNfr9SkpKXhYtlqtVVVVcrncQSNlZWWrV6+G5BFq3C+8wGL//v1RUVGvvfaa85uGL/qDBw+sVuuAAQPgmu0gIyNDKBSOHDkSJ/tOAPLopaamZuPGjfgpDgBobW2tqqqCYqq8vDw/Px+KKXTAjVa3bt1Sq9VwbT6DSCSqq6uDZW3mzJk1NTWwrHURmOFFp9MBABgMd5pJl0gkIpFoyBCnbu2FFl7UavWkSZOcoPi9e/e+/vprWNb4fL6TFYcp+rlz53bv3g3LWicwGIw7d+5ANFhQULBp0yaIBl+Ok8OZ4xiNxqqqKrg233777YaGBrg2OwFOTM/MzExISAgPD4fRDbo/EMJLUVHRL7/84kzFP/vsM5FIBNdmWVkZXIOdAEF0MpkM8c7WFWzP8XBtHjly5Pz583Btvgi3nAZobm5GECQgAOYRHKWlpQUFBUuWLIFo80U4KvqXX345ZMiQ5ORkeC51fxwKLwaD4d69e85XXCaTffXVV9DNXr9+XSwWQzf7PA6JTqPRjh071oUvQsbX1/fixYvQBaqurj59+jRcm3ZxSPSKioouFl2Bzs6dT6rzQGTkyJG+vjjndgHgUEwXiUQrV660LYB5QAX2nl5aWrp48WKozqBApVKtW7cOutnjx4931JnBD+yiT5w4cfr06VCdQQGXyxWJRPfv34dr9vDhwy0tLXBtPg9G0Q0GQ05ODmxn0LF161boITg1NbUjFww/MMb03NzcnJycbdu24eBS9wfjX5VOp7/11luwnUHNmjVrYC3d2cjPz29sbIRo0C4YRR85ciSuC6FdJCEhITsbZs3iY8eOwU0CtA+G6WCTybR7924c5pmJJz09/dGjR3i3guX5oqys7Pbt2zh0ACxUVVX5+fmhzVh/EfPnz4dip3OwhBcGg7Fq1SocnMGCQqH47LPPYFk7f/68UqmEZe1FYBG9d+/eCQkJODiDhfj4+JiYmObmZijWtm3b5oS5biyiZ2VlQV+4cYQPP/wwMBBCXVGz2TxhwgQvLy8YTnUKhvtAcnKyWCzG4QaDnR07dphMJqK96Cqoe7rJZJo3bx6UngURJpO5f/9+B420trZev34dkkedgVp0CoWyYMECfJzBztKlSyMjIx008ttvvzkntRG16NXV1T///DM+zmCHTCZPmDDB9nr06NHjx4/HYEQgEDhnFQz1OL2kpKS6uroLX3Q206ZNa2pqslW+9/LyunXrFtoh1ujRo3Hz7n9ALfqAAQP69++PjzMYefPNN5uamvT6P0oRUKlUDOtK586dmzhxIqqqA9hAHV569+7dp08ffJzBiE6nsyUMd0AikdCKXldXl5aW5gTFsYh+9OhRZyZDdYVTp04lJCQ8rZfFYkE7LU4mkyE+2XYOatFzc3Of6VaEQ6PRvvvuuzlz5jw9A4O2zwqFQqc9ZqMWfe7cub1798bHGYdYvXr1mjVrhEKh1WrFENN/+umn+nqHTibsOu6RVmc0WDUKU1ccFYvFu3btkkgkGzduFAqFXW9i3rx5Bw4c6NjNjgEEAC8+FelCN0Yt+t69e5cvX+6cGw4AoPKOuuiyQtqo9/KnGQ0W3NqxWixWB1dHeT60x1Wa8FjO0PHewZGd7UhBJ7rBYBgzZkxBQYEjznWdoitt9eXt8RP5HG+XO0biRSilxiunmxOn+IXFvLCAATrR9Xp9Xl6ecx7b7l5UNNcbRkyHmZrrNM4fEL2S5Bsey7L7qYvGdK3S/NvRlrGpwUQ7ghGjznr5VNP05SF2P0UXxVpaWrZv3w7Jsc6QNOrNXbpxuihUBiIT6zVt9pPF0IkulUrv3r0LybHOUMpMAaHutB/1eYR92PIWo92P0IkeEhLyySefQPKqM0xGi64dv7GKM1ArTFaL/X9WdKJ7eXkRXhaoG4BO9JKSku+++w43Z3oKqG+kjx49ws2ZngK6h464uDjHV8U8oBPd19fXORtEujfowsv169cPHz6MmzM9BXSii8VitCVXPTwPuvCSmJjo/Ooo3Q90osPdGd5jQRderly5kpmZiZszPQV0Pb2pqckZGxW6O+h6emJi4rRp03BzxlFKy+4/nf2Cgd8v/TZ2fHx9Pb4dC53oQqEwOjoaN2cc4nzO2ZWrFul0xGybRwU60QsKCn755RfcnHEIB/u4M0Enek1NjatlGtn4Lff8zl1bAQDTZ04YOz7+fM5Z2/ulZff/+uHSpOTEaTPG/2vb35WqJ1tbTCZT2r69b86e9HrS8KV/mZt/9Xe7Zq9fz39n6ZxJk0csemfWqdPQ6n2gu5EmJCRotVpYbUMkfuiw2bMWHD+R/uXmnWw2RygMAwDU1j766ONlERFRn6zZ2KaQHzj4XUuLePtX3wIAvtr+xW+55xbMfyciIuq33HOfb/h41460QYPinrap1Wo3/ePTiPDIj1avr6mpkkpbYXmLTnRXy2LswNvbJyRECACIjR3g5eVtezP9yH4SibTtX3u5HC4AgMvlbdm6oajojo+Pb86v2W8tXLro7fcAAGNGj1/w1oyDh77/evv/zFrLFTK9Xj9q1LjXJ0BeiEcXXu7evfv77/b/E12Qe0WFcXEJNsUBAAkJrwIAKipLi4rvAABGjhxrex9BkIT44RWVpc9cHhIs6N9/UPqR/SdPZRgMBoiOoRO9rKyssLAQYvO4otGovb3+yG7kcnkAAImkVaNRAwB8vP+YLuXxvLRarUajefpyBEG2btmdNDHlu+93vrVoZlERtLKn6EQfPHjwiBEjYLWNB09nlPD5AUplW8ePcrkMAMDhcPn8AADA0x/JZFIKhfJ8oWAOh/PhB2sPHTzJZnPWf74a1v0Mnej9+/cfPnw4lIahw2QwbR25453+/QfdKyrsyDG+fDkXADBw4JDY2AEIgly/8WR7kcFguH4jv3//QWQymUalPf33sA1DQ4IFM2ekqjVqsRhOrQYyqtq+paWlNTU1AoEAStudIK7Ttastgt72M6TswmCyzvznRG3dIwQgpWUl0dH9IsIjT546eq+okEqlXb+Rv//AN4MGxr391rs8npdY3HQ66xgAiETS+u23O2pqq9d8vCE4WEChUk9nHSuveBAWFsH3839r0UyJpFUqlZzOOmbQ65e8s6LrycCPilWCKIYX384xsuhEv3DhwoMHD5xw2h4G0Xlcnr9/4O+/XygouKJSKZOSUng8r4ED4m7dLjibfbKismzsaxPXfLzBlpebEP+qRqM+d/5MXl4Om8X++KP1ttssl8MNDgq5c/cWCSHF9hsoEtXnX714JT/Pz89/7SebBAIUacCdiI4ure727dttbW3Y9q6h4t4lhVRsemUSH++G8OPC4caE171Do+30G3Tj9Pj4eHhe9VxQTwMUFxfj5kxPAZ3ot27dclrp5W4MuvASHh7OYqG4uXmwCzrRhw0bhpsnPQh04UUkEj148AA3Z3oK6EQvLCw8efIkbs70FNCFF4FAAHe+rWeCepzuGao7Duq0Oug1hXsg6EQvLS09dOgQbs70FNCJLhAIBg8ejJszPQV0MT06Otpl817cCHQ9XSKROKe0GI1OorNwr2OOK1wfKomM2P0I3S/W1NS0b98+SF51Bs+P2lzjBrlanVBXpvYNotn9CJ3oQUFBr7/+OiSvOiMwjE6m2O8mboFWaQ6KYDA59muFuGhtAABAxW1V6Q3VhAX2t9e7OGf21ie9HegvtF89Bl1P12g0P/30EyTHXkJ0PHfoeO9z+0UtDTq9m+ye1ipN4tr2zB21U5YEv0hx1D1do9EkJydfvnwZkpMvp6lGdzdP8bhaSyIhBj1M6TEUV+scn0Bau8oUHstOSPLl+nQ2LEQ3ZGSz2U6u+RrcixG8JAgAYDbCDINtbW2pqannzp2DaNMCAJXapfuQ68Z0XNHpdIcPH3733XcJaR216CdPnkxOTvasHzkC6qB24sQJJxxKgzd6vT4rK4uo1lGLPmPGjOdz/twOrVa7d+9eolrvoTFdr9fn5+c7IWvKLqhFv3nzppeXl2fayxFQh5fi4uK8vDx8nHEearWawF3IqEUfPXr0wIED8XHGebS0tBByULONHhrT5XJ5YWFhx4kOTga16FKpNCsra8mSJbi51P1BHV44HI7jh9sQTnl5OYGH2KIWnU6nL1++nKhD1GFx/fr1yspKolrvoTH95s2bHA6nX79+hLSORfSCggI/P7++ffvi41L3B8uEcn19PYETF1DYt2+fVColqnUsoo8aNYqof0womM3mH374wc/PjygHemJMVygUBQUFzim9bxeMon/zzTdz5swhsLO4NRgXCdVq9bVr12A74ySysrJKSkoIdABjT29tbW1ra3PNA49eyqRJkw4fPuzv70+UAz0upmu12uLiYmIrHGDPQdi+fXtTUxNUZ5wBi8UivKYEdtHZbHZ2djZUZ5zBP/7xj8ePHxPrA/ZDmxYuXFhTUwPVGdypqKh4+PChE6p4dE7PiulyuZxKpXI4HGLdcEj0zMxMlUq1ePFiqC51fxxK5ktOTs7NzYXnDL6kpaU5J7n+pfSg8JKampqRkUG0FwCC6FqttqWlJSIiAp5L3R9Hc4VZLNbmzZvv3IFWPg8PDAaDS5UIhpCg/emnn7p45Z0NGzZQqXZqaRFF94/pcrm8qqrKaYd2dwU4WxFEItH3338PxRR0fHx8XEpxaKILhUKRSORScdPGrl27nLZJquvADC9qtZrwh72naWho+O9//7ts2TKiHXkWmKIrlUqTyeQ5Z+2lwNxexuPxPv30UxcZPmZmZjrnkGAMQN5/v3fv3urqarg2MZCbm/vo0aO4uLgufJcAuv+Q0QXBpdLE9u3b4W7RREV2dvYz5eddDVxE/+ijjwoLC5ubm20/Tp48GdchxNNbh9auXUun09lsNn7NOQ7u4SUpKUkqlQqFwvT0dDwGlPv27bMde3379m21Wm2xWHg8HvRW4IJjIZuSkpJhw4bZUgZ1Oh1Oh1M/ePDA1m+GDh06ffp011ccX9EXLVpkNpttr+VyOU754NXV1QiC2M4NUSgURO1SRAUuok+aNGno0KE2LWyYzWY8jgKrqKgwmUxPv9PW1vbKK69AbwguuIh+/vz5Xr16cTgci+VJsRCr1VpeXg69obq6OqVS+fQ7AoFg7Nix0BuCC/YUjM7JzMzMzs7OyMgQi8VyuRxBEKVSKRaLg4KCILZSVFTU3t6OIAiJRAoODk5MTJw5c6bLHjvWAV6iAwBSUlJSUlIuXbqUkZFRW1vb1tZWW1sLV/SSkhIKhRISEpKUlDR16tSQEPeoPeXQkFFU2V5T2t7SoNOqTO1qM4IgRr3Z7jetVqvFYiGT7RcSw4zZbEYQhISQwAuK2/gGMdrVRiaH4htED4qgRQ1ks71w7GddBIvoaoXp1gVF2Y02tg+dG8ChMihUOplCJ5MpJOBycwqIUW8y6U1mo0Ul0aqlWq4PdfBor37DuET6hEp0sxlcPNb66L46qC+fw2e+qNijK6NTGWT1bQatfswM/14DiSkVhEL0ugr95VMSli/LL8wNHkA6R68xSmsVPF/S5EU+oktuAAAFcUlEQVQBUKundYmuin7/mvLWBUWvVwhOvYSLXKTSKdRz16A4pwsKXRK9rqL90ilZ2BCYAw8XQSvXa1oVsz5w6rDn5f9aj+5rrmR1T8UBACwfOivA++dtDc5s9CWiqxWm3462CAd1T8VtsL3pTF/ur0danNbiS0T/735x+JBgZzlDGD4CrqzFUnPfSUsfnYlefltpBhQ6x4US0vDDJ9T78mmJc9rqTPT8LKl/ZE/Jp6CzqTQ2vfS6sgvfdZQXil5dpGH7sagMyA/uUDhyYsO/ds2GbtY31Ls4n1DRK++qmTy3L3qJCjqHqlKYVHJTF77rEC8UvbZUzQtw6eVdPODwWY/uq/Fuxf6UW0u93k/AJuFzQIJM3vifczsrq29SKXRBSHTyhGWhgn4AgANH1vjzw8lkyo3bWSazMbbviJlvfMJkPFnLvldy4deL++SKpkD/SKsVrxr2XD9Wqwj3Sln2e7pGZTIacPnFlErJ3rR3tVrltMmrpyStMpuN/3ffe03NT5LCLl09IpM3vrNg+/TJq4vv5+b+fsD2/p2inPTj63kcv+mTP4ruM7xR/BAP3wAAJApJ8liPk/EO7Pd0rdJMpuByC71w6UcO2/e9xXvJZAoAYOjg5K07/3zj9pnpU1YDAPz9wua9+XcEQcKE/YtLL1ZUXU8B7xuN+jO/fB0ZHvfu23tsM/ISaQNOulPoZK0K95huX3STwUJl4TI8L6+8pmhr/ts/X+t4x2w2KpRP0pKoVEbHcravd3BtfTEAoKauSKNVjEpM7VgDIZHwGlNRGRQmF/fnEvuik8iIQYvLH1yllvaLHjll4sqn32TQ7SQhkclUi8UMAJC3iW1/Azz8eQazwaxR4H72p33RWTyKxYTLMzGLydNo2wL8UWyB5LB9AABqrQIPf57BqDczubiv59m/kbK5ZIsJlxtpn8iE2vqihsd/5MDoDS8ZLYQE9UEQ0p0iZ5zibjKYud4EhZeAcIayVYdHe6+PXVpWeTXt0F9Hj5jHZfuWPyywWMyL5/+7k0t8vINe+dMbNwrPmEz66D6vKlWSssqrXA4u5cPaFbrwPvbPPoPIC2I6CYREsVSSdi6fCbc9vp9w1btpZ3N25106CBBEGBwzYvisl141fcpHFArtbnFORdWNXmGDQ4L6qtS4VFXUyLRRAwPxsPw0L1w5un+1reSGLjiWj7cHroNRZ66/07jkn7hvuX/hTSN2mNeNXzu7d2m1yi07Ztj9iO8rlMhEz7/fP2b03D9vxOSnHdp16s3bp9n9iMPytnvjfW3E/AmvvfMig21i9YARzlhz72yN9PovsoYai3+kj91PLRaLok38IrPAXgYMjca0DUWg0IkDJpORQrFzP2QyuEym/YwXqwWU5tWs3O6M+nsvWZj+Zk11zJhwd8xvQYu4Utp3IPVP46D1iU54yXLdxAVBLVVOWk8hEJ3KSLYanaP4y0XvPZgd3ocmqZE7xxtCsFpA9Q3RrA+dl9Lz8hSMV6f4BoeSmx92W90flzQt2tDLmS12KaVsxBs+3j7m5oeEFRzHCb3aeP/XmhkrgtleTl2VRJHLWJireFSq5wbyGFzcn9mcgLReqWlVLlwXjjh9lIAua/dxVXve8VYSlRrQx49Kd8U1664gE6laqmQDEr1HTiMm1wFLfnpFobrkmkopM3L82F5BbCqD4vpjSrPRopa2q1o1WoUuPJY95s98Bsvp2br/H+w7MVpF+od3NY21+pY6LYmEUJlkGpOC09wkZhgcmrJVq9eafYMZXB9K9FB2rwEcKo3gLgJnx7S+3aJVmvQ6K3Cx8g4kCsLikNk8CkJYt7aDpwoGAbhSB+gxeEQnAI/oBOARnQA8ohOAR3QC+H+6fjfnM2J1xQAAAABJRU5ErkJggg==", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from IPython.display import Image, display\n", + "\n", + "display(Image(graph.get_graph().draw_mermaid_png()))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cw-T5CYWkCEN" + }, + "source": [ + "`Run the graph` and stream the agent reasoning.\n", + "\n", + "We are going to ask the agent to extract the content from a `specific webpage`." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Qn1rC2y8kAe9", + "outputId": "15438700-b5ac-4439-b3b5-661de0bfef7c" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "================================\u001b[1m Human Message \u001b[0m=================================\n", + "\n", + "Find latest news related to robotics December 2024\n", + "==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "Tool Calls:\n", + " urls_finder (call_oUmqKXOoRQQAmXlB3lZL6ZNx)\n", + " Call ID: call_oUmqKXOoRQQAmXlB3lZL6ZNx\n", + " Args:\n", + " query: latest robotics news December 2024\n", + "=================================\u001b[1m Tool Message \u001b[0m=================================\n", + "Name: urls_finder\n", + "\n", + "[{\"url\": \"https://www.therobotreport.com/top-10-robotics-stories-of-december-2024/\", \"content\": \"AMP Robotics raised $91 million in corporate equity in a Series D financing in December 2024. The Louisville, Colo.-based company plans to use its latest funding to accelerate deployment of its AMP ONE systems, which uses artificial intelligence and robotics to sort municipal solid waste, or MSW. Read more.\"}]\n", + "==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "Tool Calls:\n", + " SmartScraper (call_xVtyeAQeaW6F4mOQAW13tset)\n", + " Call ID: call_xVtyeAQeaW6F4mOQAW13tset\n", + " Args:\n", + " user_prompt: Extract the key news stories related to robotics from December 2024, including any significant events, advancements, or company news.\n", + " website_url: https://www.therobotreport.com/top-10-robotics-stories-of-december-2024/\n", + "=================================\u001b[1m Tool Message \u001b[0m=================================\n", + "Name: SmartScraper\n", + "\n", + "{\"news\": [{\"title\": \"Huawei invests $413M into robotics subsidiary\", \"link\": \"https://www.therobotreport.com/huawei-invests-413m-into-robotics-subsidiary/\", \"description\": \"Huawei Technologies invested 3 billion yuan (about $413 million) into its subsidiary Dongguan Jimu Machinery, which was established in June 2023.\"}, {\"title\": \"Interact Analysis downgrades mobile robot forecast by 18%\", \"link\": \"https://www.therobotreport.com/interact-analysis-downgrades-mobile-robot-forecast-by-18/\", \"description\": \"The research firm reduced its forecast for the global mobile robot market due to macroeconomic factors affecting demand, expecting no rapid uptick in autonomous mobile robot deployments before 2027.\"}, {\"title\": \"AMP Robotics raises $91M to accelerate deployment of recycling systems\", \"link\": \"https://www.therobotreport.com/amp-robotics-raises-91m-accelerate-deployment-recycling-systems/\", \"description\": \"AMP Robotics raised $91 million in Series D financing to enhance the deployment of its AMP ONE systems, which utilize AI and robotics for sorting municipal solid waste.\"}, {\"title\": \"Microbot Medical submits LIBERTY surgical robot to FDA for approval\", \"link\": \"https://www.therobotreport.com/microbot-medical-submits-liberty-surgical-robot-to-fda-for-approval/\", \"description\": \"Microbot Medical submitted a premarket notification to the FDA for its LIBERTY robotic system, expecting clearance in the second quarter of 2025.\"}, {\"title\": \"Realbotix earns Amazon development subsidy; partners with UOL\", \"link\": \"https://www.therobotreport.com/realbotix-earns-amazon-development-subsidy-partners-with-uol/\", \"description\": \"Realbotix Corp. announced a $100,000 subsidy from Amazon Web Services and a partnership with Compass UOL, along with updates to its Aria offering.\"}, {\"title\": \"Jetson Orin Nano Super developer kit available from NVIDIA\", \"link\": \"https://www.therobotreport.com/jetson-orin-nano-super-developer-kit-available/\", \"description\": \"NVIDIA released the Jetson Orin Nano Super Developer Kit, enhancing AI workload performance significantly while maintaining low power consumption.\"}, {\"title\": \"Pudu Robotics launches PUDU D9 humanoid robot\", \"link\": \"https://www.therobotreport.com/pudu-d9-humanoid-robot-launched/\", \"description\": \"Pudu Technology Inc. unveiled its first full-sized bipedal humanoid robot, the PUDU D9, aimed at commercially viable embodied intelligence.\"}, {\"title\": \"EngineAI releases PM01 humanoid robot for commercial, educational use\", \"link\": \"https://www.therobotreport.com/engineai-releases-pm01-humanoid-robot-for-commercial-educational-use/\", \"description\": \"EngineAI Robotics introduced the PM01, a lightweight and dynamic humanoid robot designed for commercial and educational applications.\"}, {\"title\": \"Apptronik partners with Google DeepMind to advance humanoid robots with AI\", \"link\": \"https://www.therobotreport.com/apptronik-partners-google-deepmind-advance-humanoid-robots-ai/\", \"description\": \"Apptronik has formed a strategic partnership with Google DeepMind to integrate AI with robotics hardware for enhanced humanoid capabilities.\"}, {\"title\": \"Figure AI ships Figure 02 humanoid robots to a paying customer\", \"link\": \"https://www.therobotreport.com/figure-ai-ships-figure-02-humanoid-robots-to-a-paying-customer/\", \"description\": \"Figure AI has begun shipping its Figure 02 humanoid robots, marking a shift from development to commercial use.\"}, {\"title\": \"Figure AI Delivers Figure 02 Humanoid Robots to Commercial Client\", \"link\": \"https://www.therobotreport.com/figure-ai-ships-figure-02-humanoid-robots-paying-customer/\", \"description\": \"In December 2024, Figure AI announced the delivery of its Figure 02 humanoid robots to a commercial client, marking the company's transition to a revenue-generating status.\"}]}\n" + ] + } + ], + "source": [ + "# Inputs for the agent\n", + "inputs = {\"messages\": [(\"user\", \"Find latest news related to robotics January 2025\")]}\n", + "\n", + "# Run the graph\n", + "for event in graph.stream(inputs, config, stream_mode=\"values\"):\n", + " event[\"messages\"][-1].pretty_print()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "id": "_12IqhcrkiHC" + }, + "outputs": [], + "source": [ + "# get last message (assuming the last one is the Smartscraper tool response)\n", + "result = graph.get_state(config).values[\"messages\"][-1].content\n", + "\n", + "import json\n", + "# convert string into json\n", + "result = json.loads(result)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YZz1bqCIpoL8" + }, + "source": [ + "Print the response" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "F1VfD8B4LPc8", + "outputId": "3aebeb27-c529-4bd6-e3a4-6318f9dabc0b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"news\": [\n", + " {\n", + " \"title\": \"Huawei invests $413M into robotics subsidiary\",\n", + " \"link\": \"https://www.therobotreport.com/huawei-invests-413m-into-robotics-subsidiary/\",\n", + " \"description\": \"Huawei Technologies invested 3 billion yuan (about $413 million) into its subsidiary Dongguan Jimu Machinery, which was established in June 2023.\"\n", + " },\n", + " {\n", + " \"title\": \"Interact Analysis downgrades mobile robot forecast by 18%\",\n", + " \"link\": \"https://www.therobotreport.com/interact-analysis-downgrades-mobile-robot-forecast-by-18/\",\n", + " \"description\": \"The research firm reduced its forecast for the global mobile robot market due to macroeconomic factors affecting demand, expecting no rapid uptick in autonomous mobile robot deployments before 2027.\"\n", + " },\n", + " {\n", + " \"title\": \"AMP Robotics raises $91M to accelerate deployment of recycling systems\",\n", + " \"link\": \"https://www.therobotreport.com/amp-robotics-raises-91m-accelerate-deployment-recycling-systems/\",\n", + " \"description\": \"AMP Robotics raised $91 million in Series D financing to enhance the deployment of its AMP ONE systems, which utilize AI and robotics for sorting municipal solid waste.\"\n", + " },\n", + " {\n", + " \"title\": \"Microbot Medical submits LIBERTY surgical robot to FDA for approval\",\n", + " \"link\": \"https://www.therobotreport.com/microbot-medical-submits-liberty-surgical-robot-to-fda-for-approval/\",\n", + " \"description\": \"Microbot Medical submitted a premarket notification to the FDA for its LIBERTY robotic system, expecting clearance in the second quarter of 2025.\"\n", + " },\n", + " {\n", + " \"title\": \"Realbotix earns Amazon development subsidy; partners with UOL\",\n", + " \"link\": \"https://www.therobotreport.com/realbotix-earns-amazon-development-subsidy-partners-with-uol/\",\n", + " \"description\": \"Realbotix Corp. announced a $100,000 subsidy from Amazon Web Services and a partnership with Compass UOL, along with updates to its Aria offering.\"\n", + " },\n", + " {\n", + " \"title\": \"Jetson Orin Nano Super developer kit available from NVIDIA\",\n", + " \"link\": \"https://www.therobotreport.com/jetson-orin-nano-super-developer-kit-available/\",\n", + " \"description\": \"NVIDIA released the Jetson Orin Nano Super Developer Kit, enhancing AI workload performance significantly while maintaining low power consumption.\"\n", + " },\n", + " {\n", + " \"title\": \"Pudu Robotics launches PUDU D9 humanoid robot\",\n", + " \"link\": \"https://www.therobotreport.com/pudu-d9-humanoid-robot-launched/\",\n", + " \"description\": \"Pudu Technology Inc. unveiled its first full-sized bipedal humanoid robot, the PUDU D9, aimed at commercially viable embodied intelligence.\"\n", + " },\n", + " {\n", + " \"title\": \"EngineAI releases PM01 humanoid robot for commercial, educational use\",\n", + " \"link\": \"https://www.therobotreport.com/engineai-releases-pm01-humanoid-robot-for-commercial-educational-use/\",\n", + " \"description\": \"EngineAI Robotics introduced the PM01, a lightweight and dynamic humanoid robot designed for commercial and educational applications.\"\n", + " },\n", + " {\n", + " \"title\": \"Apptronik partners with Google DeepMind to advance humanoid robots with AI\",\n", + " \"link\": \"https://www.therobotreport.com/apptronik-partners-google-deepmind-advance-humanoid-robots-ai/\",\n", + " \"description\": \"Apptronik has formed a strategic partnership with Google DeepMind to integrate AI with robotics hardware for enhanced humanoid capabilities.\"\n", + " },\n", + " {\n", + " \"title\": \"Figure AI ships Figure 02 humanoid robots to a paying customer\",\n", + " \"link\": \"https://www.therobotreport.com/figure-ai-ships-figure-02-humanoid-robots-to-a-paying-customer/\",\n", + " \"description\": \"Figure AI has begun shipping its Figure 02 humanoid robots, marking a shift from development to commercial use.\"\n", + " },\n", + " {\n", + " \"title\": \"Figure AI Delivers Figure 02 Humanoid Robots to Commercial Client\",\n", + " \"link\": \"https://www.therobotreport.com/figure-ai-ships-figure-02-humanoid-robots-paying-customer/\",\n", + " \"description\": \"In December 2024, Figure AI announced the delivery of its Figure 02 humanoid robots to a commercial client, marking the company's transition to a revenue-generating status.\"\n", + " }\n", + " ]\n", + "}\n" + ] + } + ], + "source": [ + "print(json.dumps(result, indent=2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Save output inside a My-SQL db" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Collecting mysql-connector-python\n", + " Downloading mysql_connector_python-9.1.0-cp313-cp313-macosx_13_0_arm64.whl.metadata (6.0 kB)\n", + "Downloading mysql_connector_python-9.1.0-cp313-cp313-macosx_13_0_arm64.whl (15.1 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m15.1/15.1 MB\u001b[0m \u001b[31m3.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n", + "\u001b[?25hInstalling collected packages: mysql-connector-python\n", + "Successfully installed mysql-connector-python-9.1.0\n" + ] + } + ], + "source": [ + "!pip install mysql-connector-python\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[33mWarning:\u001b[0m mysql 9.1.0_1 is already installed and up-to-date.\n", + "To reinstall 9.1.0_1, run:\n", + " brew reinstall mysql\n" + ] + } + ], + "source": [ + "!brew install mysql" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[34m==>\u001b[0m \u001b[1mSuccessfully started `mysql` (label: homebrew.mxcl.mysql)\u001b[0m\n" + ] + } + ], + "source": [ + "!brew services start mysql\n" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ERROR 1524 (HY000) at line 1: Plugin 'mysql_native_password' is not loaded\n" + ] + } + ], + "source": [ + "!mysql -e \"ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'root';FLUSH PRIVILEGES;\"\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Connect to MySQL" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "ename": "ProgrammingError", + "evalue": "1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mMySQLInterfaceError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m~/miniconda3/envs/new_env/lib/python3.13/site-packages/mysql/connector/connection_cext.py:335\u001b[0m, in \u001b[0;36mCMySQLConnection._open_connection\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 334\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 335\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_cmysql\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mcnx_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 336\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cmysql\u001b[38;5;241m.\u001b[39mconverter_str_fallback \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_converter_str_fallback\n", + "\u001b[0;31mMySQLInterfaceError\u001b[0m: Access denied for user 'root'@'localhost' (using password: YES)", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mProgrammingError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[23], line 4\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mmysql\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mconnector\u001b[39;00m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;66;03m# Create a connection to the MySQL server\u001b[39;00m\n\u001b[0;32m----> 4\u001b[0m conn \u001b[38;5;241m=\u001b[39m \u001b[43mmysql\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnector\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[43muser\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mroot\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpassword\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mroot\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhost\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mlocalhost\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;66;03m# Create a cursor to interact with the MySQL server\u001b[39;00m\n\u001b[1;32m 7\u001b[0m cursor \u001b[38;5;241m=\u001b[39m conn\u001b[38;5;241m.\u001b[39mcursor()\n", + "File \u001b[0;32m~/miniconda3/envs/new_env/lib/python3.13/site-packages/mysql/connector/pooling.py:322\u001b[0m, in \u001b[0;36mconnect\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 319\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mImportError\u001b[39;00m(ERROR_NO_CEXT)\n\u001b[1;32m 321\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m CMySQLConnection \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m use_pure:\n\u001b[0;32m--> 322\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mCMySQLConnection\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 323\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m MySQLConnection(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", + "File \u001b[0;32m~/miniconda3/envs/new_env/lib/python3.13/site-packages/mysql/connector/connection_cext.py:151\u001b[0m, in \u001b[0;36mCMySQLConnection.__init__\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 149\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m kwargs:\n\u001b[1;32m 150\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 151\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 152\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m:\n\u001b[1;32m 153\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mclose()\n", + "File \u001b[0;32m~/miniconda3/envs/new_env/lib/python3.13/site-packages/mysql/connector/abstracts.py:1426\u001b[0m, in \u001b[0;36mMySQLConnectionAbstract.connect\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 1423\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconfig(\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 1425\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdisconnect()\n\u001b[0;32m-> 1426\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_open_connection\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1428\u001b[0m charset, collation \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 1429\u001b[0m kwargs\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcharset\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m),\n\u001b[1;32m 1430\u001b[0m kwargs\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcollation\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m),\n\u001b[1;32m 1431\u001b[0m )\n\u001b[1;32m 1432\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m charset \u001b[38;5;129;01mor\u001b[39;00m collation:\n", + "File \u001b[0;32m~/miniconda3/envs/new_env/lib/python3.13/site-packages/mysql/connector/connection_cext.py:340\u001b[0m, in \u001b[0;36mCMySQLConnection._open_connection\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 338\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconverter\u001b[38;5;241m.\u001b[39mstr_fallback \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_converter_str_fallback\n\u001b[1;32m 339\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m MySQLInterfaceError \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m--> 340\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m get_mysql_exception(\n\u001b[1;32m 341\u001b[0m msg\u001b[38;5;241m=\u001b[39merr\u001b[38;5;241m.\u001b[39mmsg, errno\u001b[38;5;241m=\u001b[39merr\u001b[38;5;241m.\u001b[39merrno, sqlstate\u001b[38;5;241m=\u001b[39merr\u001b[38;5;241m.\u001b[39msqlstate\n\u001b[1;32m 342\u001b[0m ) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n\u001b[1;32m 344\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_do_handshake()\n\u001b[1;32m 346\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\n\u001b[1;32m 347\u001b[0m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_ssl_disabled\n\u001b[1;32m 348\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cmysql, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mget_ssl_cipher\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 353\u001b[0m \n\u001b[1;32m 354\u001b[0m \u001b[38;5;66;03m# `get_ssl_cipher()` returns the name of the cipher being used.\u001b[39;00m\n", + "\u001b[0;31mProgrammingError\u001b[0m: 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)" + ] + } + ], + "source": [ + "import mysql.connector\n", + "\n", + "# Create a connection to the MySQL server\n", + "conn = mysql.connector.connect(user='root', password='root', host='localhost')\n", + "\n", + "# Create a cursor to interact with the MySQL server\n", + "cursor = conn.cursor()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Create & Design a Database" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Create a new database named 'articles_db'\n", + "cursor.execute(\"CREATE DATABASE IF NOT EXISTS articles_db\")\n", + "\n", + "# Switch to the 'articles_db' database\n", + "cursor.execute(\"USE articles_db\")\n", + "\n", + "# Create the 'articles_table' table\n", + "cursor.execute('''\n", + "CREATE TABLE IF NOT EXISTS articles_table (\n", + " id INT AUTO_INCREMENT PRIMARY KEY,\n", + " title VARCHAR(500) NOT NULL,\n", + " link VARCHAR(500) NOT NULL,\n", + " description TEXT NOT NULL\n", + ")\n", + "''')\n", + "\n", + "# Always remember to close the cursor and connection when done\n", + "cursor.close()\n", + "conn.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Populate the database" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import mysql.connector\n", + "\n", + "# Connect to the MySQL server and the 'articles_db' database\n", + "conn = mysql.connector.connect(user='root', password='root', host='localhost', database='articles_db')\n", + "cursor = conn.cursor()\n", + "\n", + "# Prepare the news data for insertion\n", + "articles_table_data = [(article[\"title\"], article[\"link\"], article[\"description\"]) for article in result[\"news\"]]\n", + "\n", + "# Insert data using the cursor\n", + "cursor.executemany('''\n", + "INSERT INTO articles_table (title, link, description) VALUES (%s, %s, %s)\n", + "''', articles_table_data)\n", + "\n", + "# Commit the changes\n", + "conn.commit()\n", + "\n", + "# Close the cursor and connection\n", + "cursor.close()\n", + "conn.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Query the database" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import mysql.connector\n", + "\n", + "# Connect to the MySQL server and the 'articles_db' database\n", + "conn = mysql.connector.connect(user='root', password='root', host='localhost', database='articles_db')\n", + "cursor = conn.cursor()\n", + "\n", + "# Execute the SELECT query\n", + "cursor.execute(\"SELECT * FROM articles_table\")\n", + "\n", + "# Fetch all the results\n", + "records = cursor.fetchall()\n", + "\n", + "# Print the records\n", + "for record in records:\n", + " print(record)\n", + "\n", + "# Close the cursor and connection\n", + "cursor.close()\n", + "conn.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2as65QLypwdb" + }, + "source": [ + "### 💾 Save the output to a `CSV` file" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HTLVFgbVLLBR" + }, + "source": [ + "Let's create a pandas dataframe and show the table with the extracted content" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 896 + }, + "id": "1lS9O1KOI51y", + "outputId": "76fb52bc-738a-44b4-ed34-13ce5ac9b26c" + }, + "outputs": [ + { + "data": { + "application/vnd.google.colaboratory.intrinsic+json": { + "summary": "{\n \"name\": \"df\",\n \"rows\": 27,\n \"fields\": [\n {\n \"column\": \"title\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 27,\n \"samples\": [\n \"DoorDash partners with Wing to launch drone deliveries in Dallas-Fort Worth mall\",\n \"Eyeonic Trace Laser Line Scanner offers sub-millimeter depth perception\",\n \"Mcity says open-source digital twin enables cheaper autonomous vehicle testing\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"link\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 27,\n \"samples\": [\n \"https://www.therobotreport.com/doordash-partners-wing-launch-drone-deliveries-dallas-fort-worth-mall/\",\n \"https://www.therobotreport.com/eyeonic-trace-laser-line-scanner-offers-sub-millimeter-depth-perception/\",\n \"https://www.therobotreport.com/mcity-open-source-digital-twin-enables-cheaper-av-testing/\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"description\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 23,\n \"samples\": [\n \"NVIDIA released Jetson Orin Nano Super Developer Kit, lowered the price and dropped an update for existing Nano users.\",\n \"The Mcity test facility has been open since 2015, and autonomous vehicle developers can now test their technology from anywhere.\",\n \"This latest partnership follows Matternet\\u2019s recent launch of a drone delivery operation in Silicon Valley.\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", + "type": "dataframe", + "variable_name": "df" + }, + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
titlelinkdescription
0Matternet adds ANRA's UTM tech to expand drone...https://www.therobotreport.com/matternet-adds-...This latest partnership follows Matternet’s re...
1Helm.ai upgrades generative AI model to enrich...https://www.therobotreport.com/helm-ai-upgrade...Helm.ai said the new model enables automakers ...
2New research analyzes safety of Waymo robotaxishttps://www.therobotreport.com/new-research-an...Waymo shared research with Swiss Re, one of th...
3From AI to humanoids: top robotics trends of 2024https://www.therobotreport.com/from-ai-to-huma...The Robot Report Podcast reflects on the succe...
4Symbotic acquires OhmniLabs, maker of disinfec...https://www.therobotreport.com/symbotic-buys-h...With the acquisition of OhmniLabs, Symbotic sa...
5Sanctuary AI shows new dexterity with in-hand ...https://www.therobotreport.com/sanctuary-ai-sh...Sanctuary AI showed its latest breakthrough wi...
6Apptronik partners with Google DeepMind to adv...https://www.therobotreport.com/apptronik-partn...Apptronik will combine its iterative design ex...
7Alimak Group, Skyline Robotics create autonomo...https://www.therobotreport.com/alimak-group-sk...Skyline Robotics said the joint system can hel...
8DoorDash partners with Wing to launch drone de...https://www.therobotreport.com/doordash-partne...Beginning today, when certain DoorDash custome...
9Mcity says open-source digital twin enables ch...https://www.therobotreport.com/mcity-open-sour...The Mcity test facility has been open since 20...
102024: The year humanoids woke uphttps://www.therobotreport.com/2024-the-year-h...Humanoids empowered by AI are coming, and the ...
11Waymo robotaxis head to Tokyo with the help of...https://www.therobotreport.com/waymo-is-headin...The first all-electric Jaguar I-PACEs for Waym...
12Realbotix earns Amazon development subsidy; pa...https://www.therobotreport.com/realbotix-earns...Realbotix plans to use the funding to directly...
13Eyeonic Trace Laser Line Scanner offers sub-mi...https://www.therobotreport.com/eyeonic-trace-l...Prototype of the Eyeonic Trace Laser Line Scan...
14Slip Robotics picks up $28M for trailer loadin...https://www.therobotreport.com/slip-robotics-p...Slip Robotics plans to use its latest funding ...
15Jetson Orin Nano Super developer kit available...https://www.therobotreport.com/jetson-orin-nan...NVIDIA released Jetson Orin Nano Super Develop...
16Mbodi and T-Robotics are ABB Robotics' AI Star...https://www.therobotreport.com/mbodi-and-t-rob...ABB Robotics is working with Mbodi and T-Robot...
17IEEE Awards announce Daniela Rus as 2025 Ediso...https://www.therobotreport.com/ieee-awards-ann...Currently the director of MIT CSAIL, Daniela R...
18Eureka Robotics raises $10.5M to scale its vis...https://www.therobotreport.com/eureka-robotics...Eureka Robotics provides software and system t...
19Vision-guided cobot automates paint process fo...https://www.therobotreport.com/denso-automates...DENSO deployed a 3D-vision-guided cobot with A...
20Brushed DC motors find use in robot applicatio...https://www.therobotreport.com/brushed-dc-moto...Recent research from Portescap found that brus...
21Diversity and inclusion can accelerate robotic...https://www.therobotreport.com/diversity-and-i...The study outlined seven distinct benefits tha...
22Advanced Precision Strain Wave Gear Offers Tor...https://www.therobotreport.com/advanced-precis...NA
23Innovative motion solutions are supporting the...https://www.therobotreport.com/innovative-moti...NA
24Renishaw and RLS help to drive a robot revolutionhttps://www.therobotreport.com/renishaw-and-rl...NA
25Ask an Expert Podcast: flexible conveyance for...https://www.therobotreport.com/ask-an-expert-f...NA
26Hop Onboard the AMR Revolution: Vision & Local...https://www.therobotreport.com/hop-onboard-the...NA
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "text/plain": [ + " title \\\n", + "0 Matternet adds ANRA's UTM tech to expand drone... \n", + "1 Helm.ai upgrades generative AI model to enrich... \n", + "2 New research analyzes safety of Waymo robotaxis \n", + "3 From AI to humanoids: top robotics trends of 2024 \n", + "4 Symbotic acquires OhmniLabs, maker of disinfec... \n", + "5 Sanctuary AI shows new dexterity with in-hand ... \n", + "6 Apptronik partners with Google DeepMind to adv... \n", + "7 Alimak Group, Skyline Robotics create autonomo... \n", + "8 DoorDash partners with Wing to launch drone de... \n", + "9 Mcity says open-source digital twin enables ch... \n", + "10 2024: The year humanoids woke up \n", + "11 Waymo robotaxis head to Tokyo with the help of... \n", + "12 Realbotix earns Amazon development subsidy; pa... \n", + "13 Eyeonic Trace Laser Line Scanner offers sub-mi... \n", + "14 Slip Robotics picks up $28M for trailer loadin... \n", + "15 Jetson Orin Nano Super developer kit available... \n", + "16 Mbodi and T-Robotics are ABB Robotics' AI Star... \n", + "17 IEEE Awards announce Daniela Rus as 2025 Ediso... \n", + "18 Eureka Robotics raises $10.5M to scale its vis... \n", + "19 Vision-guided cobot automates paint process fo... \n", + "20 Brushed DC motors find use in robot applicatio... \n", + "21 Diversity and inclusion can accelerate robotic... \n", + "22 Advanced Precision Strain Wave Gear Offers Tor... \n", + "23 Innovative motion solutions are supporting the... \n", + "24 Renishaw and RLS help to drive a robot revolution \n", + "25 Ask an Expert Podcast: flexible conveyance for... \n", + "26 Hop Onboard the AMR Revolution: Vision & Local... \n", + "\n", + " link \\\n", + "0 https://www.therobotreport.com/matternet-adds-... \n", + "1 https://www.therobotreport.com/helm-ai-upgrade... \n", + "2 https://www.therobotreport.com/new-research-an... \n", + "3 https://www.therobotreport.com/from-ai-to-huma... \n", + "4 https://www.therobotreport.com/symbotic-buys-h... \n", + "5 https://www.therobotreport.com/sanctuary-ai-sh... \n", + "6 https://www.therobotreport.com/apptronik-partn... \n", + "7 https://www.therobotreport.com/alimak-group-sk... \n", + "8 https://www.therobotreport.com/doordash-partne... \n", + "9 https://www.therobotreport.com/mcity-open-sour... \n", + "10 https://www.therobotreport.com/2024-the-year-h... \n", + "11 https://www.therobotreport.com/waymo-is-headin... \n", + "12 https://www.therobotreport.com/realbotix-earns... \n", + "13 https://www.therobotreport.com/eyeonic-trace-l... \n", + "14 https://www.therobotreport.com/slip-robotics-p... \n", + "15 https://www.therobotreport.com/jetson-orin-nan... \n", + "16 https://www.therobotreport.com/mbodi-and-t-rob... \n", + "17 https://www.therobotreport.com/ieee-awards-ann... \n", + "18 https://www.therobotreport.com/eureka-robotics... \n", + "19 https://www.therobotreport.com/denso-automates... \n", + "20 https://www.therobotreport.com/brushed-dc-moto... \n", + "21 https://www.therobotreport.com/diversity-and-i... \n", + "22 https://www.therobotreport.com/advanced-precis... \n", + "23 https://www.therobotreport.com/innovative-moti... \n", + "24 https://www.therobotreport.com/renishaw-and-rl... \n", + "25 https://www.therobotreport.com/ask-an-expert-f... \n", + "26 https://www.therobotreport.com/hop-onboard-the... \n", + "\n", + " description \n", + "0 This latest partnership follows Matternet’s re... \n", + "1 Helm.ai said the new model enables automakers ... \n", + "2 Waymo shared research with Swiss Re, one of th... \n", + "3 The Robot Report Podcast reflects on the succe... \n", + "4 With the acquisition of OhmniLabs, Symbotic sa... \n", + "5 Sanctuary AI showed its latest breakthrough wi... \n", + "6 Apptronik will combine its iterative design ex... \n", + "7 Skyline Robotics said the joint system can hel... \n", + "8 Beginning today, when certain DoorDash custome... \n", + "9 The Mcity test facility has been open since 20... \n", + "10 Humanoids empowered by AI are coming, and the ... \n", + "11 The first all-electric Jaguar I-PACEs for Waym... \n", + "12 Realbotix plans to use the funding to directly... \n", + "13 Prototype of the Eyeonic Trace Laser Line Scan... \n", + "14 Slip Robotics plans to use its latest funding ... \n", + "15 NVIDIA released Jetson Orin Nano Super Develop... \n", + "16 ABB Robotics is working with Mbodi and T-Robot... \n", + "17 Currently the director of MIT CSAIL, Daniela R... \n", + "18 Eureka Robotics provides software and system t... \n", + "19 DENSO deployed a 3D-vision-guided cobot with A... \n", + "20 Recent research from Portescap found that brus... \n", + "21 The study outlined seven distinct benefits tha... \n", + "22 NA \n", + "23 NA \n", + "24 NA \n", + "25 NA \n", + "26 NA " + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "# Convert dictionary to DataFrame\n", + "df = pd.DataFrame(result[\"news\"])\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "v0CBYVk7qA5Z" + }, + "source": [ + "Save it to CSV" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "BtEbB9pmQGhO", + "outputId": "fe011a56-b28a-4e28-f2d1-4580c8a65596" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Data saved to news.csv\n" + ] + } + ], + "source": [ + "# Save the DataFrame to a CSV file\n", + "csv_file = \"news.csv\"\n", + "df.to_csv(csv_file, index=False)\n", + "print(f\"Data saved to {csv_file}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-1SZT8VzTZNd" + }, + "source": [ + "## 🔗 Resources" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dUi2LtMLRDDR" + }, + "source": [ + "\n", + "

\n", + " \"ScrapeGraph\n", + "

\n", + "\n", + "\n", + "- 🚀 **Get your API Key:** [ScrapeGraphAI Dashboard](https://dashboard.scrapegraphai.com) \n", + "- 🐙 **GitHub:** [ScrapeGraphAI GitHub](https://github.com/scrapegraphai) \n", + "- 💼 **LinkedIn:** [ScrapeGraphAI LinkedIn](https://www.linkedin.com/company/scrapegraphai/) \n", + "- 🐦 **Twitter:** [ScrapeGraphAI Twitter](https://twitter.com/scrapegraphai) \n", + "- 💬 **Discord:** [Join our Discord Community](https://discord.gg/uJN7TYcpNa) \n", + "- 🦜 **Langchain:** [ScrapeGraph docs](https://python.langchain.com/docs/integrations/tools/scrapegraph/)\n", + "\n", + "Made with ❤️ by the [ScrapeGraphAI](https://scrapegraphai.com) Team \n" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "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.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/cookbook/research-agent/scrapegraph_langraph_tavily_my_sql.ipynb b/cookbook/research-agent/scrapegraph_langraph_tavily_my_sql.ipynb deleted file mode 100644 index e69de29..0000000 From f132a2db886bbbe35054970fced294eff4081b23 Mon Sep 17 00:00:00 2001 From: Marco Vinciguerra Date: Wed, 15 Jan 2025 10:04:14 +0100 Subject: [PATCH 3/4] Update scrapegraph_langgraph_tavily_my_sql.ipynb --- .../scrapegraph_langgraph_tavily_my_sql.ipynb | 533 +++++++++++++----- 1 file changed, 402 insertions(+), 131 deletions(-) diff --git a/cookbook/research-agent/scrapegraph_langgraph_tavily_my_sql.ipynb b/cookbook/research-agent/scrapegraph_langgraph_tavily_my_sql.ipynb index cfe1fca..0572567 100644 --- a/cookbook/research-agent/scrapegraph_langgraph_tavily_my_sql.ipynb +++ b/cookbook/research-agent/scrapegraph_langgraph_tavily_my_sql.ipynb @@ -6,7 +6,7 @@ "id": "ReBHQ5_834pZ" }, "source": [ - "\n", + "\n", " \"Open\n", "" ] @@ -70,15 +70,28 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "sffqFG2EJ8bI", - "outputId": "7e47aa4d-edca-48f2-df6e-bd7fafabfc9c" + "outputId": "9eefeb7d-d2cf-484c-b5cb-d73a5aa5e261" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Scrapegraph API key:\n", + "··········\n", + "Tavily API key:\n", + "··········\n", + "OpenAI API key:\n", + "··········\n" + ] + } + ], "source": [ "import getpass\n", "import os\n", @@ -186,7 +199,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": { "id": "dlrOEgZk_8V4" }, @@ -232,7 +245,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": { "id": "ySoE0Rowjgp1" }, @@ -270,7 +283,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": { "id": "ctrkEnltiBCD" }, @@ -296,7 +309,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": { "id": "Zo1BcIlHhcQP" }, @@ -333,14 +346,14 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 350 }, "id": "2FIKomclLNFx", - "outputId": "3419b941-b409-499e-c1e3-54f2526d467f" + "outputId": "9958e65d-9796-4f24-fd3f-12cc55532a2f" }, "outputs": [ { @@ -373,13 +386,13 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Qn1rC2y8kAe9", - "outputId": "15438700-b5ac-4439-b3b5-661de0bfef7c" + "outputId": "1865f1ea-7241-40de-85e5-3743acf222cb" }, "outputs": [ { @@ -388,28 +401,28 @@ "text": [ "================================\u001b[1m Human Message \u001b[0m=================================\n", "\n", - "Find latest news related to robotics December 2024\n", + "Find latest news related to robotics January 2025\n", "==================================\u001b[1m Ai Message \u001b[0m==================================\n", "Tool Calls:\n", - " urls_finder (call_oUmqKXOoRQQAmXlB3lZL6ZNx)\n", - " Call ID: call_oUmqKXOoRQQAmXlB3lZL6ZNx\n", + " urls_finder (call_MIc1FV1MLRIv9QqGzepHKeUD)\n", + " Call ID: call_MIc1FV1MLRIv9QqGzepHKeUD\n", " Args:\n", - " query: latest robotics news December 2024\n", + " query: latest robotics news January 2025\n", "=================================\u001b[1m Tool Message \u001b[0m=================================\n", "Name: urls_finder\n", "\n", - "[{\"url\": \"https://www.therobotreport.com/top-10-robotics-stories-of-december-2024/\", \"content\": \"AMP Robotics raised $91 million in corporate equity in a Series D financing in December 2024. The Louisville, Colo.-based company plans to use its latest funding to accelerate deployment of its AMP ONE systems, which uses artificial intelligence and robotics to sort municipal solid waste, or MSW. Read more.\"}]\n", + "[{\"url\": \"https://www.sciencedaily.com/news/computers_math/robotics/\", \"content\": \"Read up-to-date robotics news from research institutions around the world. ... Jan. 8, 2025 — Facing high ... Keep up to date with the latest news from ScienceDaily via social networks:\"}]\n", "==================================\u001b[1m Ai Message \u001b[0m==================================\n", "Tool Calls:\n", - " SmartScraper (call_xVtyeAQeaW6F4mOQAW13tset)\n", - " Call ID: call_xVtyeAQeaW6F4mOQAW13tset\n", + " SmartScraper (call_iAelivYCYBqwvaxSEaI61QMx)\n", + " Call ID: call_iAelivYCYBqwvaxSEaI61QMx\n", " Args:\n", - " user_prompt: Extract the key news stories related to robotics from December 2024, including any significant events, advancements, or company news.\n", - " website_url: https://www.therobotreport.com/top-10-robotics-stories-of-december-2024/\n", + " user_prompt: Extract the latest news headlines and summaries related to robotics from January 2025.\n", + " website_url: https://www.sciencedaily.com/news/computers_math/robotics/\n", "=================================\u001b[1m Tool Message \u001b[0m=================================\n", "Name: SmartScraper\n", "\n", - "{\"news\": [{\"title\": \"Huawei invests $413M into robotics subsidiary\", \"link\": \"https://www.therobotreport.com/huawei-invests-413m-into-robotics-subsidiary/\", \"description\": \"Huawei Technologies invested 3 billion yuan (about $413 million) into its subsidiary Dongguan Jimu Machinery, which was established in June 2023.\"}, {\"title\": \"Interact Analysis downgrades mobile robot forecast by 18%\", \"link\": \"https://www.therobotreport.com/interact-analysis-downgrades-mobile-robot-forecast-by-18/\", \"description\": \"The research firm reduced its forecast for the global mobile robot market due to macroeconomic factors affecting demand, expecting no rapid uptick in autonomous mobile robot deployments before 2027.\"}, {\"title\": \"AMP Robotics raises $91M to accelerate deployment of recycling systems\", \"link\": \"https://www.therobotreport.com/amp-robotics-raises-91m-accelerate-deployment-recycling-systems/\", \"description\": \"AMP Robotics raised $91 million in Series D financing to enhance the deployment of its AMP ONE systems, which utilize AI and robotics for sorting municipal solid waste.\"}, {\"title\": \"Microbot Medical submits LIBERTY surgical robot to FDA for approval\", \"link\": \"https://www.therobotreport.com/microbot-medical-submits-liberty-surgical-robot-to-fda-for-approval/\", \"description\": \"Microbot Medical submitted a premarket notification to the FDA for its LIBERTY robotic system, expecting clearance in the second quarter of 2025.\"}, {\"title\": \"Realbotix earns Amazon development subsidy; partners with UOL\", \"link\": \"https://www.therobotreport.com/realbotix-earns-amazon-development-subsidy-partners-with-uol/\", \"description\": \"Realbotix Corp. announced a $100,000 subsidy from Amazon Web Services and a partnership with Compass UOL, along with updates to its Aria offering.\"}, {\"title\": \"Jetson Orin Nano Super developer kit available from NVIDIA\", \"link\": \"https://www.therobotreport.com/jetson-orin-nano-super-developer-kit-available/\", \"description\": \"NVIDIA released the Jetson Orin Nano Super Developer Kit, enhancing AI workload performance significantly while maintaining low power consumption.\"}, {\"title\": \"Pudu Robotics launches PUDU D9 humanoid robot\", \"link\": \"https://www.therobotreport.com/pudu-d9-humanoid-robot-launched/\", \"description\": \"Pudu Technology Inc. unveiled its first full-sized bipedal humanoid robot, the PUDU D9, aimed at commercially viable embodied intelligence.\"}, {\"title\": \"EngineAI releases PM01 humanoid robot for commercial, educational use\", \"link\": \"https://www.therobotreport.com/engineai-releases-pm01-humanoid-robot-for-commercial-educational-use/\", \"description\": \"EngineAI Robotics introduced the PM01, a lightweight and dynamic humanoid robot designed for commercial and educational applications.\"}, {\"title\": \"Apptronik partners with Google DeepMind to advance humanoid robots with AI\", \"link\": \"https://www.therobotreport.com/apptronik-partners-google-deepmind-advance-humanoid-robots-ai/\", \"description\": \"Apptronik has formed a strategic partnership with Google DeepMind to integrate AI with robotics hardware for enhanced humanoid capabilities.\"}, {\"title\": \"Figure AI ships Figure 02 humanoid robots to a paying customer\", \"link\": \"https://www.therobotreport.com/figure-ai-ships-figure-02-humanoid-robots-to-a-paying-customer/\", \"description\": \"Figure AI has begun shipping its Figure 02 humanoid robots, marking a shift from development to commercial use.\"}, {\"title\": \"Figure AI Delivers Figure 02 Humanoid Robots to Commercial Client\", \"link\": \"https://www.therobotreport.com/figure-ai-ships-figure-02-humanoid-robots-paying-customer/\", \"description\": \"In December 2024, Figure AI announced the delivery of its Figure 02 humanoid robots to a commercial client, marking the company's transition to a revenue-generating status.\"}]}\n" + "{\"news\": [{\"title\": \"Using Robots in Nursing Homes Linked to Higher Employee Retention, Better Patient Care\", \"link\": \"https://www.sciencedaily.com/releases/2025/01/250108173155.htm\", \"description\": \"Nursing homes are increasingly utilizing robots for various care tasks to address high employee turnover and an aging population, although research on the impact of these technologies is limited. A study indicates that the integration of robots in nursing homes is associated with improved employee retention rates and enhanced patient care quality.\"}, {\"title\": \"Electrohydraulic Wearable Devices Create Unprecedented Haptic Sensations\", \"link\": \"https://www.sciencedaily.com/releases/2025/01/250108144220.htm\", \"description\": \"Scientists have developed compact wearable devices that provide rich and expressive tactile sensations, surpassing the basic vibrations of current consumer devices. New advancements in electrohydraulic wearable technology are reported to produce unique haptic sensations, enhancing user interaction with robotic systems.\"}, {\"title\": \"Artificial Intelligence: Algorithms Improve Medical Image Analysis\", \"link\": \"https://www.sciencedaily.com/releases/2025/01/250102162630.htm\", \"description\": \"AI has the potential to enhance the analysis of medical images, with deep learning algorithms capable of identifying tumor locations and sizes.\"}, {\"title\": \"DNA Nanorobots Can Alter Artificial Cells\", \"link\": \"https://www.sciencedaily.com/releases/2025/01/250113134758.htm\", \"description\": \"Research reveals that DNA nanorobots have the capability to modify artificial cells, showcasing potential applications in biotechnology and medicine.\"}, {\"title\": \"A Smart Ring With a Tiny Camera Lets Users Point and Click to Control Home Devices\", \"link\": \"https://www.sciencedaily.com/releases/2025/01/250109130038.htm\", \"description\": \"This innovative smart ring features a miniature camera that allows users to control various home devices through simple point-and-click actions.\"}, {\"title\": \"Advancements in Neural Implant Research Enhance Durability\", \"link\": \"https://www.sciencedaily.com/releases/2025/01/250107140908.htm\", \"description\": \"Recent research in neural implants has led to improvements in their durability, which could significantly impact the field of robotics and human-machine interfaces.\"}]}\n" ] } ], @@ -424,7 +437,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": { "id": "_12IqhcrkiHC" }, @@ -449,13 +462,13 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "F1VfD8B4LPc8", - "outputId": "3aebeb27-c529-4bd6-e3a4-6318f9dabc0b" + "outputId": "9ddc9298-8295-4efa-f66f-e381b75aa793" }, "outputs": [ { @@ -465,59 +478,34 @@ "{\n", " \"news\": [\n", " {\n", - " \"title\": \"Huawei invests $413M into robotics subsidiary\",\n", - " \"link\": \"https://www.therobotreport.com/huawei-invests-413m-into-robotics-subsidiary/\",\n", - " \"description\": \"Huawei Technologies invested 3 billion yuan (about $413 million) into its subsidiary Dongguan Jimu Machinery, which was established in June 2023.\"\n", - " },\n", - " {\n", - " \"title\": \"Interact Analysis downgrades mobile robot forecast by 18%\",\n", - " \"link\": \"https://www.therobotreport.com/interact-analysis-downgrades-mobile-robot-forecast-by-18/\",\n", - " \"description\": \"The research firm reduced its forecast for the global mobile robot market due to macroeconomic factors affecting demand, expecting no rapid uptick in autonomous mobile robot deployments before 2027.\"\n", - " },\n", - " {\n", - " \"title\": \"AMP Robotics raises $91M to accelerate deployment of recycling systems\",\n", - " \"link\": \"https://www.therobotreport.com/amp-robotics-raises-91m-accelerate-deployment-recycling-systems/\",\n", - " \"description\": \"AMP Robotics raised $91 million in Series D financing to enhance the deployment of its AMP ONE systems, which utilize AI and robotics for sorting municipal solid waste.\"\n", - " },\n", - " {\n", - " \"title\": \"Microbot Medical submits LIBERTY surgical robot to FDA for approval\",\n", - " \"link\": \"https://www.therobotreport.com/microbot-medical-submits-liberty-surgical-robot-to-fda-for-approval/\",\n", - " \"description\": \"Microbot Medical submitted a premarket notification to the FDA for its LIBERTY robotic system, expecting clearance in the second quarter of 2025.\"\n", - " },\n", - " {\n", - " \"title\": \"Realbotix earns Amazon development subsidy; partners with UOL\",\n", - " \"link\": \"https://www.therobotreport.com/realbotix-earns-amazon-development-subsidy-partners-with-uol/\",\n", - " \"description\": \"Realbotix Corp. announced a $100,000 subsidy from Amazon Web Services and a partnership with Compass UOL, along with updates to its Aria offering.\"\n", - " },\n", - " {\n", - " \"title\": \"Jetson Orin Nano Super developer kit available from NVIDIA\",\n", - " \"link\": \"https://www.therobotreport.com/jetson-orin-nano-super-developer-kit-available/\",\n", - " \"description\": \"NVIDIA released the Jetson Orin Nano Super Developer Kit, enhancing AI workload performance significantly while maintaining low power consumption.\"\n", + " \"title\": \"Using Robots in Nursing Homes Linked to Higher Employee Retention, Better Patient Care\",\n", + " \"link\": \"https://www.sciencedaily.com/releases/2025/01/250108173155.htm\",\n", + " \"description\": \"Nursing homes are increasingly utilizing robots for various care tasks to address high employee turnover and an aging population, although research on the impact of these technologies is limited. A study indicates that the integration of robots in nursing homes is associated with improved employee retention rates and enhanced patient care quality.\"\n", " },\n", " {\n", - " \"title\": \"Pudu Robotics launches PUDU D9 humanoid robot\",\n", - " \"link\": \"https://www.therobotreport.com/pudu-d9-humanoid-robot-launched/\",\n", - " \"description\": \"Pudu Technology Inc. unveiled its first full-sized bipedal humanoid robot, the PUDU D9, aimed at commercially viable embodied intelligence.\"\n", + " \"title\": \"Electrohydraulic Wearable Devices Create Unprecedented Haptic Sensations\",\n", + " \"link\": \"https://www.sciencedaily.com/releases/2025/01/250108144220.htm\",\n", + " \"description\": \"Scientists have developed compact wearable devices that provide rich and expressive tactile sensations, surpassing the basic vibrations of current consumer devices. New advancements in electrohydraulic wearable technology are reported to produce unique haptic sensations, enhancing user interaction with robotic systems.\"\n", " },\n", " {\n", - " \"title\": \"EngineAI releases PM01 humanoid robot for commercial, educational use\",\n", - " \"link\": \"https://www.therobotreport.com/engineai-releases-pm01-humanoid-robot-for-commercial-educational-use/\",\n", - " \"description\": \"EngineAI Robotics introduced the PM01, a lightweight and dynamic humanoid robot designed for commercial and educational applications.\"\n", + " \"title\": \"Artificial Intelligence: Algorithms Improve Medical Image Analysis\",\n", + " \"link\": \"https://www.sciencedaily.com/releases/2025/01/250102162630.htm\",\n", + " \"description\": \"AI has the potential to enhance the analysis of medical images, with deep learning algorithms capable of identifying tumor locations and sizes.\"\n", " },\n", " {\n", - " \"title\": \"Apptronik partners with Google DeepMind to advance humanoid robots with AI\",\n", - " \"link\": \"https://www.therobotreport.com/apptronik-partners-google-deepmind-advance-humanoid-robots-ai/\",\n", - " \"description\": \"Apptronik has formed a strategic partnership with Google DeepMind to integrate AI with robotics hardware for enhanced humanoid capabilities.\"\n", + " \"title\": \"DNA Nanorobots Can Alter Artificial Cells\",\n", + " \"link\": \"https://www.sciencedaily.com/releases/2025/01/250113134758.htm\",\n", + " \"description\": \"Research reveals that DNA nanorobots have the capability to modify artificial cells, showcasing potential applications in biotechnology and medicine.\"\n", " },\n", " {\n", - " \"title\": \"Figure AI ships Figure 02 humanoid robots to a paying customer\",\n", - " \"link\": \"https://www.therobotreport.com/figure-ai-ships-figure-02-humanoid-robots-to-a-paying-customer/\",\n", - " \"description\": \"Figure AI has begun shipping its Figure 02 humanoid robots, marking a shift from development to commercial use.\"\n", + " \"title\": \"A Smart Ring With a Tiny Camera Lets Users Point and Click to Control Home Devices\",\n", + " \"link\": \"https://www.sciencedaily.com/releases/2025/01/250109130038.htm\",\n", + " \"description\": \"This innovative smart ring features a miniature camera that allows users to control various home devices through simple point-and-click actions.\"\n", " },\n", " {\n", - " \"title\": \"Figure AI Delivers Figure 02 Humanoid Robots to Commercial Client\",\n", - " \"link\": \"https://www.therobotreport.com/figure-ai-ships-figure-02-humanoid-robots-paying-customer/\",\n", - " \"description\": \"In December 2024, Figure AI announced the delivery of its Figure 02 humanoid robots to a commercial client, marking the company's transition to a revenue-generating status.\"\n", + " \"title\": \"Advancements in Neural Implant Research Enhance Durability\",\n", + " \"link\": \"https://www.sciencedaily.com/releases/2025/01/250107140908.htm\",\n", + " \"description\": \"Recent research in neural implants has led to improvements in their durability, which could significantly impact the field of robotics and human-machine interfaces.\"\n", " }\n", " ]\n", "}\n" @@ -530,24 +518,32 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "S8s1AvWJKNaV" + }, "source": [ "## Save output inside a My-SQL db" ] }, { "cell_type": "code", - "execution_count": 12, - "metadata": {}, + "execution_count": 11, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "123NhcIYKNaW", + "outputId": "c796a664-b201-4a18-dc10-9954b4a31107" + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Collecting mysql-connector-python\n", - " Downloading mysql_connector_python-9.1.0-cp313-cp313-macosx_13_0_arm64.whl.metadata (6.0 kB)\n", - "Downloading mysql_connector_python-9.1.0-cp313-cp313-macosx_13_0_arm64.whl (15.1 MB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m15.1/15.1 MB\u001b[0m \u001b[31m3.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0ma \u001b[36m0:00:01\u001b[0m\n", + " Downloading mysql_connector_python-9.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (6.0 kB)\n", + "Downloading mysql_connector_python-9.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (34.4 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m34.4/34.4 MB\u001b[0m \u001b[31m35.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", "\u001b[?25hInstalling collected packages: mysql-connector-python\n", "Successfully installed mysql-connector-python-9.1.0\n" ] @@ -559,89 +555,335 @@ }, { "cell_type": "code", - "execution_count": 21, - "metadata": {}, + "execution_count": 12, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "R3tflfTDKNaW", + "outputId": "9c2ad012-610e-4714-ef8a-f614981c976d" + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "\u001b[33mWarning:\u001b[0m mysql 9.1.0_1 is already installed and up-to-date.\n", - "To reinstall 9.1.0_1, run:\n", - " brew reinstall mysql\n" + "Reading package lists... Done\n", + "Building dependency tree... Done\n", + "Reading state information... Done\n", + "The following additional packages will be installed:\n", + " libcgi-fast-perl libcgi-pm-perl libclone-perl libencode-locale-perl libfcgi-bin libfcgi-perl\n", + " libfcgi0ldbl libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl\n", + " libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libmecab2 libprotobuf-lite23\n", + " liburi-perl mecab-ipadic mecab-ipadic-utf8 mecab-utils mysql-client-8.0 mysql-client-core-8.0\n", + " mysql-server-8.0 mysql-server-core-8.0\n", + "Suggested packages:\n", + " libdata-dump-perl libipc-sharedcache-perl libbusiness-isbn-perl libwww-perl mailx tinyca\n", + "The following NEW packages will be installed:\n", + " libcgi-fast-perl libcgi-pm-perl libclone-perl libencode-locale-perl libfcgi-bin libfcgi-perl\n", + " libfcgi0ldbl libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl\n", + " libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libmecab2 libprotobuf-lite23\n", + " liburi-perl mecab-ipadic mecab-ipadic-utf8 mecab-utils mysql-client-8.0 mysql-client-core-8.0\n", + " mysql-server mysql-server-8.0 mysql-server-core-8.0\n", + "0 upgraded, 25 newly installed, 0 to remove and 49 not upgraded.\n", + "Need to get 29.6 MB of archives.\n", + "After this operation, 243 MB of additional disk space will be used.\n", + "Get:1 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 mysql-client-core-8.0 amd64 8.0.40-0ubuntu0.22.04.1 [2,715 kB]\n", + "Get:2 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 mysql-client-8.0 amd64 8.0.40-0ubuntu0.22.04.1 [22.7 kB]\n", + "Get:3 http://archive.ubuntu.com/ubuntu jammy/main amd64 libmecab2 amd64 0.996-14build9 [199 kB]\n", + "Get:4 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libprotobuf-lite23 amd64 3.12.4-1ubuntu7.22.04.1 [209 kB]\n", + "Get:5 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 mysql-server-core-8.0 amd64 8.0.40-0ubuntu0.22.04.1 [17.6 MB]\n", + "Get:6 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 mysql-server-8.0 amd64 8.0.40-0ubuntu0.22.04.1 [1,441 kB]\n", + "Get:7 http://archive.ubuntu.com/ubuntu jammy/main amd64 libhtml-tagset-perl all 3.20-4 [12.5 kB]\n", + "Get:8 http://archive.ubuntu.com/ubuntu jammy/main amd64 liburi-perl all 5.10-1 [78.8 kB]\n", + "Get:9 http://archive.ubuntu.com/ubuntu jammy/main amd64 libhtml-parser-perl amd64 3.76-1build2 [88.4 kB]\n", + "Get:10 http://archive.ubuntu.com/ubuntu jammy/main amd64 libcgi-pm-perl all 4.54-1 [188 kB]\n", + "Get:11 http://archive.ubuntu.com/ubuntu jammy/main amd64 libfcgi0ldbl amd64 2.4.2-2build2 [28.0 kB]\n", + "Get:12 http://archive.ubuntu.com/ubuntu jammy/main amd64 libfcgi-perl amd64 0.82+ds-1build1 [22.8 kB]\n", + "Get:13 http://archive.ubuntu.com/ubuntu jammy/main amd64 libcgi-fast-perl all 1:2.15-1 [10.5 kB]\n", + "Get:14 http://archive.ubuntu.com/ubuntu jammy/main amd64 libclone-perl amd64 0.45-1build3 [11.0 kB]\n", + "Get:15 http://archive.ubuntu.com/ubuntu jammy/main amd64 libencode-locale-perl all 1.05-1.1 [11.8 kB]\n", + "Get:16 http://archive.ubuntu.com/ubuntu jammy/main amd64 libfcgi-bin amd64 2.4.2-2build2 [11.2 kB]\n", + "Get:17 http://archive.ubuntu.com/ubuntu jammy/main amd64 libhtml-template-perl all 2.97-1.1 [59.1 kB]\n", + "Get:18 http://archive.ubuntu.com/ubuntu jammy/main amd64 libhttp-date-perl all 6.05-1 [9,920 B]\n", + "Get:19 http://archive.ubuntu.com/ubuntu jammy/main amd64 libio-html-perl all 1.004-2 [15.4 kB]\n", + "Get:20 http://archive.ubuntu.com/ubuntu jammy/main amd64 liblwp-mediatypes-perl all 6.04-1 [19.5 kB]\n", + "Get:21 http://archive.ubuntu.com/ubuntu jammy/main amd64 libhttp-message-perl all 6.36-1 [76.8 kB]\n", + "Get:22 http://archive.ubuntu.com/ubuntu jammy/main amd64 mecab-utils amd64 0.996-14build9 [4,850 B]\n", + "Get:23 http://archive.ubuntu.com/ubuntu jammy/main amd64 mecab-ipadic all 2.7.0-20070801+main-3 [6,718 kB]\n", + "Get:24 http://archive.ubuntu.com/ubuntu jammy/main amd64 mecab-ipadic-utf8 all 2.7.0-20070801+main-3 [4,384 B]\n", + "Get:25 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 mysql-server all 8.0.40-0ubuntu0.22.04.1 [9,464 B]\n", + "Fetched 29.6 MB in 1s (27.0 MB/s)\n", + "Preconfiguring packages ...\n", + "Selecting previously unselected package mysql-client-core-8.0.\n", + "(Reading database ... 123632 files and directories currently installed.)\n", + "Preparing to unpack .../00-mysql-client-core-8.0_8.0.40-0ubuntu0.22.04.1_amd64.deb ...\n", + "Unpacking mysql-client-core-8.0 (8.0.40-0ubuntu0.22.04.1) ...\n", + "Selecting previously unselected package mysql-client-8.0.\n", + "Preparing to unpack .../01-mysql-client-8.0_8.0.40-0ubuntu0.22.04.1_amd64.deb ...\n", + "Unpacking mysql-client-8.0 (8.0.40-0ubuntu0.22.04.1) ...\n", + "Selecting previously unselected package libmecab2:amd64.\n", + "Preparing to unpack .../02-libmecab2_0.996-14build9_amd64.deb ...\n", + "Unpacking libmecab2:amd64 (0.996-14build9) ...\n", + "Selecting previously unselected package libprotobuf-lite23:amd64.\n", + "Preparing to unpack .../03-libprotobuf-lite23_3.12.4-1ubuntu7.22.04.1_amd64.deb ...\n", + "Unpacking libprotobuf-lite23:amd64 (3.12.4-1ubuntu7.22.04.1) ...\n", + "Selecting previously unselected package mysql-server-core-8.0.\n", + "Preparing to unpack .../04-mysql-server-core-8.0_8.0.40-0ubuntu0.22.04.1_amd64.deb ...\n", + "Unpacking mysql-server-core-8.0 (8.0.40-0ubuntu0.22.04.1) ...\n", + "Selecting previously unselected package mysql-server-8.0.\n", + "Preparing to unpack .../05-mysql-server-8.0_8.0.40-0ubuntu0.22.04.1_amd64.deb ...\n", + "Unpacking mysql-server-8.0 (8.0.40-0ubuntu0.22.04.1) ...\n", + "Selecting previously unselected package libhtml-tagset-perl.\n", + "Preparing to unpack .../06-libhtml-tagset-perl_3.20-4_all.deb ...\n", + "Unpacking libhtml-tagset-perl (3.20-4) ...\n", + "Selecting previously unselected package liburi-perl.\n", + "Preparing to unpack .../07-liburi-perl_5.10-1_all.deb ...\n", + "Unpacking liburi-perl (5.10-1) ...\n", + "Selecting previously unselected package libhtml-parser-perl:amd64.\n", + "Preparing to unpack .../08-libhtml-parser-perl_3.76-1build2_amd64.deb ...\n", + "Unpacking libhtml-parser-perl:amd64 (3.76-1build2) ...\n", + "Selecting previously unselected package libcgi-pm-perl.\n", + "Preparing to unpack .../09-libcgi-pm-perl_4.54-1_all.deb ...\n", + "Unpacking libcgi-pm-perl (4.54-1) ...\n", + "Selecting previously unselected package libfcgi0ldbl:amd64.\n", + "Preparing to unpack .../10-libfcgi0ldbl_2.4.2-2build2_amd64.deb ...\n", + "Unpacking libfcgi0ldbl:amd64 (2.4.2-2build2) ...\n", + "Selecting previously unselected package libfcgi-perl:amd64.\n", + "Preparing to unpack .../11-libfcgi-perl_0.82+ds-1build1_amd64.deb ...\n", + "Unpacking libfcgi-perl:amd64 (0.82+ds-1build1) ...\n", + "Selecting previously unselected package libcgi-fast-perl.\n", + "Preparing to unpack .../12-libcgi-fast-perl_1%3a2.15-1_all.deb ...\n", + "Unpacking libcgi-fast-perl (1:2.15-1) ...\n", + "Selecting previously unselected package libclone-perl.\n", + "Preparing to unpack .../13-libclone-perl_0.45-1build3_amd64.deb ...\n", + "Unpacking libclone-perl (0.45-1build3) ...\n", + "Selecting previously unselected package libencode-locale-perl.\n", + "Preparing to unpack .../14-libencode-locale-perl_1.05-1.1_all.deb ...\n", + "Unpacking libencode-locale-perl (1.05-1.1) ...\n", + "Selecting previously unselected package libfcgi-bin.\n", + "Preparing to unpack .../15-libfcgi-bin_2.4.2-2build2_amd64.deb ...\n", + "Unpacking libfcgi-bin (2.4.2-2build2) ...\n", + "Selecting previously unselected package libhtml-template-perl.\n", + "Preparing to unpack .../16-libhtml-template-perl_2.97-1.1_all.deb ...\n", + "Unpacking libhtml-template-perl (2.97-1.1) ...\n", + "Selecting previously unselected package libhttp-date-perl.\n", + "Preparing to unpack .../17-libhttp-date-perl_6.05-1_all.deb ...\n", + "Unpacking libhttp-date-perl (6.05-1) ...\n", + "Selecting previously unselected package libio-html-perl.\n", + "Preparing to unpack .../18-libio-html-perl_1.004-2_all.deb ...\n", + "Unpacking libio-html-perl (1.004-2) ...\n", + "Selecting previously unselected package liblwp-mediatypes-perl.\n", + "Preparing to unpack .../19-liblwp-mediatypes-perl_6.04-1_all.deb ...\n", + "Unpacking liblwp-mediatypes-perl (6.04-1) ...\n", + "Selecting previously unselected package libhttp-message-perl.\n", + "Preparing to unpack .../20-libhttp-message-perl_6.36-1_all.deb ...\n", + "Unpacking libhttp-message-perl (6.36-1) ...\n", + "Selecting previously unselected package mecab-utils.\n", + "Preparing to unpack .../21-mecab-utils_0.996-14build9_amd64.deb ...\n", + "Unpacking mecab-utils (0.996-14build9) ...\n", + "Selecting previously unselected package mecab-ipadic.\n", + "Preparing to unpack .../22-mecab-ipadic_2.7.0-20070801+main-3_all.deb ...\n", + "Unpacking mecab-ipadic (2.7.0-20070801+main-3) ...\n", + "Selecting previously unselected package mecab-ipadic-utf8.\n", + "Preparing to unpack .../23-mecab-ipadic-utf8_2.7.0-20070801+main-3_all.deb ...\n", + "Unpacking mecab-ipadic-utf8 (2.7.0-20070801+main-3) ...\n", + "Selecting previously unselected package mysql-server.\n", + "Preparing to unpack .../24-mysql-server_8.0.40-0ubuntu0.22.04.1_all.deb ...\n", + "Unpacking mysql-server (8.0.40-0ubuntu0.22.04.1) ...\n", + "Setting up libhttp-date-perl (6.05-1) ...\n", + "Setting up libmecab2:amd64 (0.996-14build9) ...\n", + "Setting up mysql-client-core-8.0 (8.0.40-0ubuntu0.22.04.1) ...\n", + "Setting up libfcgi0ldbl:amd64 (2.4.2-2build2) ...\n", + "Setting up libclone-perl (0.45-1build3) ...\n", + "Setting up libhtml-tagset-perl (3.20-4) ...\n", + "Setting up liblwp-mediatypes-perl (6.04-1) ...\n", + "Setting up libfcgi-bin (2.4.2-2build2) ...\n", + "Setting up libencode-locale-perl (1.05-1.1) ...\n", + "Setting up libprotobuf-lite23:amd64 (3.12.4-1ubuntu7.22.04.1) ...\n", + "Setting up mecab-utils (0.996-14build9) ...\n", + "Setting up libio-html-perl (1.004-2) ...\n", + "Setting up mysql-server-core-8.0 (8.0.40-0ubuntu0.22.04.1) ...\n", + "Setting up mysql-client-8.0 (8.0.40-0ubuntu0.22.04.1) ...\n", + "Setting up libfcgi-perl:amd64 (0.82+ds-1build1) ...\n", + "Setting up liburi-perl (5.10-1) ...\n", + "Setting up libhttp-message-perl (6.36-1) ...\n", + "Setting up mysql-server-8.0 (8.0.40-0ubuntu0.22.04.1) ...\n", + "invoke-rc.d: could not determine current runlevel\n", + "invoke-rc.d: policy-rc.d denied execution of stop.\n", + "update-alternatives: using /etc/mysql/mysql.cnf to provide /etc/mysql/my.cnf (my.cnf) in auto mode\n", + "Renaming removed key_buffer and myisam-recover options (if present)\n", + "mysqld will log errors to /var/log/mysql/error.log\n", + "mysqld is running as pid 1748\n", + "Created symlink /etc/systemd/system/multi-user.target.wants/mysql.service → /lib/systemd/system/mysql.service.\n", + "invoke-rc.d: could not determine current runlevel\n", + "invoke-rc.d: policy-rc.d denied execution of start.\n", + "Setting up mecab-ipadic (2.7.0-20070801+main-3) ...\n", + "Compiling IPA dictionary for Mecab. This takes long time...\n", + "reading /usr/share/mecab/dic/ipadic/unk.def ... 40\n", + "emitting double-array: 100% |###########################################| \n", + "/usr/share/mecab/dic/ipadic/model.def is not found. skipped.\n", + "reading /usr/share/mecab/dic/ipadic/Postp.csv ... 146\n", + "reading /usr/share/mecab/dic/ipadic/Adj.csv ... 27210\n", + "reading /usr/share/mecab/dic/ipadic/Noun.proper.csv ... 27328\n", + "reading /usr/share/mecab/dic/ipadic/Conjunction.csv ... 171\n", + "reading /usr/share/mecab/dic/ipadic/Noun.place.csv ... 72999\n", + "reading /usr/share/mecab/dic/ipadic/Noun.others.csv ... 151\n", + "reading /usr/share/mecab/dic/ipadic/Noun.nai.csv ... 42\n", + "reading /usr/share/mecab/dic/ipadic/Adverb.csv ... 3032\n", + "reading /usr/share/mecab/dic/ipadic/Adnominal.csv ... 135\n", + "reading /usr/share/mecab/dic/ipadic/Filler.csv ... 19\n", + "reading /usr/share/mecab/dic/ipadic/Noun.adverbal.csv ... 795\n", + "reading /usr/share/mecab/dic/ipadic/Auxil.csv ... 199\n", + "reading /usr/share/mecab/dic/ipadic/Postp-col.csv ... 91\n", + "reading /usr/share/mecab/dic/ipadic/Noun.number.csv ... 42\n", + "reading /usr/share/mecab/dic/ipadic/Verb.csv ... 130750\n", + "reading /usr/share/mecab/dic/ipadic/Interjection.csv ... 252\n", + "reading /usr/share/mecab/dic/ipadic/Noun.demonst.csv ... 120\n", + "reading /usr/share/mecab/dic/ipadic/Symbol.csv ... 208\n", + "reading /usr/share/mecab/dic/ipadic/Noun.verbal.csv ... 12146\n", + "reading /usr/share/mecab/dic/ipadic/Others.csv ... 2\n", + "reading /usr/share/mecab/dic/ipadic/Suffix.csv ... 1393\n", + "reading /usr/share/mecab/dic/ipadic/Prefix.csv ... 221\n", + "reading /usr/share/mecab/dic/ipadic/Noun.org.csv ... 16668\n", + "reading /usr/share/mecab/dic/ipadic/Noun.csv ... 60477\n", + "reading /usr/share/mecab/dic/ipadic/Noun.name.csv ... 34202\n", + "reading /usr/share/mecab/dic/ipadic/Noun.adjv.csv ... 3328\n", + "emitting double-array: 100% |###########################################| \n", + "reading /usr/share/mecab/dic/ipadic/matrix.def ... 1316x1316\n", + "emitting matrix : 100% |###########################################| \n", + "\n", + "done!\n", + "update-alternatives: using /var/lib/mecab/dic/ipadic to provide /var/lib/mecab/dic/debian (mecab-dictionary) in auto mode\n", + "Setting up mecab-ipadic-utf8 (2.7.0-20070801+main-3) ...\n", + "Compiling IPA dictionary for Mecab. This takes long time...\n", + "reading /usr/share/mecab/dic/ipadic/unk.def ... 40\n", + "emitting double-array: 100% |###########################################| \n", + "/usr/share/mecab/dic/ipadic/model.def is not found. skipped.\n", + "reading /usr/share/mecab/dic/ipadic/Postp.csv ... 146\n", + "reading /usr/share/mecab/dic/ipadic/Adj.csv ... 27210\n", + "reading /usr/share/mecab/dic/ipadic/Noun.proper.csv ... 27328\n", + "reading /usr/share/mecab/dic/ipadic/Conjunction.csv ... 171\n", + "reading /usr/share/mecab/dic/ipadic/Noun.place.csv ... 72999\n", + "reading /usr/share/mecab/dic/ipadic/Noun.others.csv ... 151\n", + "reading /usr/share/mecab/dic/ipadic/Noun.nai.csv ... 42\n", + "reading /usr/share/mecab/dic/ipadic/Adverb.csv ... 3032\n", + "reading /usr/share/mecab/dic/ipadic/Adnominal.csv ... 135\n", + "reading /usr/share/mecab/dic/ipadic/Filler.csv ... 19\n", + "reading /usr/share/mecab/dic/ipadic/Noun.adverbal.csv ... 795\n", + "reading /usr/share/mecab/dic/ipadic/Auxil.csv ... 199\n", + "reading /usr/share/mecab/dic/ipadic/Postp-col.csv ... 91\n", + "reading /usr/share/mecab/dic/ipadic/Noun.number.csv ... 42\n", + "reading /usr/share/mecab/dic/ipadic/Verb.csv ... 130750\n", + "reading /usr/share/mecab/dic/ipadic/Interjection.csv ... 252\n", + "reading /usr/share/mecab/dic/ipadic/Noun.demonst.csv ... 120\n", + "reading /usr/share/mecab/dic/ipadic/Symbol.csv ... 208\n", + "reading /usr/share/mecab/dic/ipadic/Noun.verbal.csv ... 12146\n", + "reading /usr/share/mecab/dic/ipadic/Others.csv ... 2\n", + "reading /usr/share/mecab/dic/ipadic/Suffix.csv ... 1393\n", + "reading /usr/share/mecab/dic/ipadic/Prefix.csv ... 221\n", + "reading /usr/share/mecab/dic/ipadic/Noun.org.csv ... 16668\n", + "reading /usr/share/mecab/dic/ipadic/Noun.csv ... 60477\n", + "reading /usr/share/mecab/dic/ipadic/Noun.name.csv ... 34202\n", + "reading /usr/share/mecab/dic/ipadic/Noun.adjv.csv ... 3328\n", + "emitting double-array: 100% |###########################################| \n", + "reading /usr/share/mecab/dic/ipadic/matrix.def ... 1316x1316\n", + "emitting matrix : 100% |###########################################| \n", + "\n", + "done!\n", + "update-alternatives: using /var/lib/mecab/dic/ipadic-utf8 to provide /var/lib/mecab/dic/debian (mecab-dictionary) in auto mode\n", + "Setting up libhtml-parser-perl:amd64 (3.76-1build2) ...\n", + "Setting up mysql-server (8.0.40-0ubuntu0.22.04.1) ...\n", + "Setting up libcgi-pm-perl (4.54-1) ...\n", + "Setting up libhtml-template-perl (2.97-1.1) ...\n", + "Setting up libcgi-fast-perl (1:2.15-1) ...\n", + "Processing triggers for man-db (2.10.2-1) ...\n", + "Processing triggers for libc-bin (2.35-0ubuntu3.4) ...\n", + "/sbin/ldconfig.real: /usr/local/lib/libtbbbind.so.3 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libtcm.so.1 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libtbbbind_2_5.so.3 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libur_adapter_level_zero.so.0 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libhwloc.so.15 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libtbbmalloc.so.2 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libtbbbind_2_0.so.3 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libur_adapter_opencl.so.0 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libur_loader.so.0 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libtcm_debug.so.1 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libtbbmalloc_proxy.so.2 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libumf.so.0 is not a symbolic link\n", + "\n", + "/sbin/ldconfig.real: /usr/local/lib/libtbb.so.12 is not a symbolic link\n", + "\n" ] } ], "source": [ - "!brew install mysql" + "!apt-get -y install mysql-server" ] }, { "cell_type": "code", - "execution_count": 22, - "metadata": {}, + "execution_count": 13, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "DkHJ0EBXKNaW", + "outputId": "92e43fd6-d4e7-45bf-b0c4-50bdbd2e3e2d" + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "\u001b[34m==>\u001b[0m \u001b[1mSuccessfully started `mysql` (label: homebrew.mxcl.mysql)\u001b[0m\n" + " * Starting MySQL database server mysqld\n", + "su: warning: cannot change directory to /nonexistent: No such file or directory\n", + " ...done.\n" ] } ], "source": [ - "!brew services start mysql\n" + "!service mysql start\n" ] }, { "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ERROR 1524 (HY000) at line 1: Plugin 'mysql_native_password' is not loaded\n" - ] - } - ], + "execution_count": 14, + "metadata": { + "id": "7q8Fd2cAKNaX" + }, + "outputs": [], "source": [ "!mysql -e \"ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'root';FLUSH PRIVILEGES;\"\n" ] }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "ersqowNFKNaX" + }, "source": [ "### Connect to MySQL" ] }, { "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "ename": "ProgrammingError", - "evalue": "1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mMySQLInterfaceError\u001b[0m Traceback (most recent call last)", - "File \u001b[0;32m~/miniconda3/envs/new_env/lib/python3.13/site-packages/mysql/connector/connection_cext.py:335\u001b[0m, in \u001b[0;36mCMySQLConnection._open_connection\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 334\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 335\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_cmysql\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mcnx_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 336\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cmysql\u001b[38;5;241m.\u001b[39mconverter_str_fallback \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_converter_str_fallback\n", - "\u001b[0;31mMySQLInterfaceError\u001b[0m: Access denied for user 'root'@'localhost' (using password: YES)", - "\nThe above exception was the direct cause of the following exception:\n", - "\u001b[0;31mProgrammingError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[23], line 4\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mmysql\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mconnector\u001b[39;00m\n\u001b[1;32m 3\u001b[0m \u001b[38;5;66;03m# Create a connection to the MySQL server\u001b[39;00m\n\u001b[0;32m----> 4\u001b[0m conn \u001b[38;5;241m=\u001b[39m \u001b[43mmysql\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnector\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[43muser\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mroot\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpassword\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mroot\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mhost\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mlocalhost\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m 6\u001b[0m \u001b[38;5;66;03m# Create a cursor to interact with the MySQL server\u001b[39;00m\n\u001b[1;32m 7\u001b[0m cursor \u001b[38;5;241m=\u001b[39m conn\u001b[38;5;241m.\u001b[39mcursor()\n", - "File \u001b[0;32m~/miniconda3/envs/new_env/lib/python3.13/site-packages/mysql/connector/pooling.py:322\u001b[0m, in \u001b[0;36mconnect\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 319\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mImportError\u001b[39;00m(ERROR_NO_CEXT)\n\u001b[1;32m 321\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m CMySQLConnection \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m use_pure:\n\u001b[0;32m--> 322\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mCMySQLConnection\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 323\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m MySQLConnection(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", - "File \u001b[0;32m~/miniconda3/envs/new_env/lib/python3.13/site-packages/mysql/connector/connection_cext.py:151\u001b[0m, in \u001b[0;36mCMySQLConnection.__init__\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 149\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m kwargs:\n\u001b[1;32m 150\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 151\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 152\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mException\u001b[39;00m:\n\u001b[1;32m 153\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mclose()\n", - "File \u001b[0;32m~/miniconda3/envs/new_env/lib/python3.13/site-packages/mysql/connector/abstracts.py:1426\u001b[0m, in \u001b[0;36mMySQLConnectionAbstract.connect\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 1423\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconfig(\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[1;32m 1425\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdisconnect()\n\u001b[0;32m-> 1426\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_open_connection\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1428\u001b[0m charset, collation \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 1429\u001b[0m kwargs\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcharset\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m),\n\u001b[1;32m 1430\u001b[0m kwargs\u001b[38;5;241m.\u001b[39mpop(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcollation\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;28;01mNone\u001b[39;00m),\n\u001b[1;32m 1431\u001b[0m )\n\u001b[1;32m 1432\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m charset \u001b[38;5;129;01mor\u001b[39;00m collation:\n", - "File \u001b[0;32m~/miniconda3/envs/new_env/lib/python3.13/site-packages/mysql/connector/connection_cext.py:340\u001b[0m, in \u001b[0;36mCMySQLConnection._open_connection\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 338\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconverter\u001b[38;5;241m.\u001b[39mstr_fallback \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_converter_str_fallback\n\u001b[1;32m 339\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m MySQLInterfaceError \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m--> 340\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m get_mysql_exception(\n\u001b[1;32m 341\u001b[0m msg\u001b[38;5;241m=\u001b[39merr\u001b[38;5;241m.\u001b[39mmsg, errno\u001b[38;5;241m=\u001b[39merr\u001b[38;5;241m.\u001b[39merrno, sqlstate\u001b[38;5;241m=\u001b[39merr\u001b[38;5;241m.\u001b[39msqlstate\n\u001b[1;32m 342\u001b[0m ) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n\u001b[1;32m 344\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_do_handshake()\n\u001b[1;32m 346\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m (\n\u001b[1;32m 347\u001b[0m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_ssl_disabled\n\u001b[1;32m 348\u001b[0m \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_cmysql, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mget_ssl_cipher\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 353\u001b[0m \n\u001b[1;32m 354\u001b[0m \u001b[38;5;66;03m# `get_ssl_cipher()` returns the name of the cipher being used.\u001b[39;00m\n", - "\u001b[0;31mProgrammingError\u001b[0m: 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)" - ] - } - ], + "execution_count": 15, + "metadata": { + "id": "pGJsLLFSKNaX" + }, + "outputs": [], "source": [ "import mysql.connector\n", "\n", @@ -654,15 +896,19 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "E4lD995lKNaY" + }, "source": [ "### Create & Design a Database" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 16, + "metadata": { + "id": "Iyhy8RswKNaY" + }, "outputs": [], "source": [ "# Create a new database named 'articles_db'\n", @@ -688,15 +934,19 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "F8QgpYWzKNaa" + }, "source": [ "### Populate the database" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 17, + "metadata": { + "id": "srC8jArIKNab" + }, "outputs": [], "source": [ "import mysql.connector\n", @@ -723,16 +973,37 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "BVdHrkJVKNac" + }, "source": [ "### Query the database" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 18, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "vDGbRZGVKNae", + "outputId": "a0dd620d-f5ac-466a-885d-d26dd4638d33" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(1, 'Using Robots in Nursing Homes Linked to Higher Employee Retention, Better Patient Care', 'https://www.sciencedaily.com/releases/2025/01/250108173155.htm', 'Nursing homes are increasingly utilizing robots for various care tasks to address high employee turnover and an aging population, although research on the impact of these technologies is limited. A study indicates that the integration of robots in nursing homes is associated with improved employee retention rates and enhanced patient care quality.')\n", + "(2, 'Electrohydraulic Wearable Devices Create Unprecedented Haptic Sensations', 'https://www.sciencedaily.com/releases/2025/01/250108144220.htm', 'Scientists have developed compact wearable devices that provide rich and expressive tactile sensations, surpassing the basic vibrations of current consumer devices. New advancements in electrohydraulic wearable technology are reported to produce unique haptic sensations, enhancing user interaction with robotic systems.')\n", + "(3, 'Artificial Intelligence: Algorithms Improve Medical Image Analysis', 'https://www.sciencedaily.com/releases/2025/01/250102162630.htm', 'AI has the potential to enhance the analysis of medical images, with deep learning algorithms capable of identifying tumor locations and sizes.')\n", + "(4, 'DNA Nanorobots Can Alter Artificial Cells', 'https://www.sciencedaily.com/releases/2025/01/250113134758.htm', 'Research reveals that DNA nanorobots have the capability to modify artificial cells, showcasing potential applications in biotechnology and medicine.')\n", + "(5, 'A Smart Ring With a Tiny Camera Lets Users Point and Click to Control Home Devices', 'https://www.sciencedaily.com/releases/2025/01/250109130038.htm', 'This innovative smart ring features a miniature camera that allows users to control various home devices through simple point-and-click actions.')\n", + "(6, 'Advancements in Neural Implant Research Enhance Durability', 'https://www.sciencedaily.com/releases/2025/01/250107140908.htm', 'Recent research in neural implants has led to improvements in their durability, which could significantly impact the field of robotics and human-machine interfaces.')\n" + ] + } + ], "source": [ "import mysql.connector\n", "\n", @@ -775,7 +1046,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1362,7 +1633,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" From b052ddbe0d1a5ea182c54897c94d4c88fbc54ab8 Mon Sep 17 00:00:00 2001 From: Marco Perini Date: Thu, 16 Jan 2025 21:50:04 +0100 Subject: [PATCH 4/4] docs: added new image --- .../scrapegraph_langgraph_tavily_my_sql.ipynb | 1716 -------------- .../scrapegraph_langgraph_tavily_mysql.ipynb | 2043 +++++++++++++++++ 2 files changed, 2043 insertions(+), 1716 deletions(-) delete mode 100644 cookbook/research-agent/scrapegraph_langgraph_tavily_my_sql.ipynb create mode 100644 cookbook/research-agent/scrapegraph_langgraph_tavily_mysql.ipynb diff --git a/cookbook/research-agent/scrapegraph_langgraph_tavily_my_sql.ipynb b/cookbook/research-agent/scrapegraph_langgraph_tavily_my_sql.ipynb deleted file mode 100644 index 0572567..0000000 --- a/cookbook/research-agent/scrapegraph_langgraph_tavily_my_sql.ipynb +++ /dev/null @@ -1,1716 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "id": "ReBHQ5_834pZ" - }, - "source": [ - "\n", - " \"Open\n", - "" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "jEkuKbcRrPcK" - }, - "source": [ - "## 🕷️ Research Agent with `scrapegraph`, `langgraph`, and `tavily`" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "cJrlyZbLwQek" - }, - "source": [ - "![Presentazione senza titolo.pptx (9).png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABxQAAAHsCAIAAAB0Zg8ZAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADcGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSfvu78nIGlkPSdXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQnPz4KPHg6eG1wbWV0YSB4bWxuczp4PSdhZG9iZTpuczptZXRhLyc+CjxyZGY6UkRGIHhtbG5zOnJkZj0naHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyc+CgogPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9JycKICB4bWxuczpBdHRyaWI9J2h0dHA6Ly9ucy5hdHRyaWJ1dGlvbi5jb20vYWRzLzEuMC8nPgogIDxBdHRyaWI6QWRzPgogICA8cmRmOlNlcT4KICAgIDxyZGY6bGkgcmRmOnBhcnNlVHlwZT0nUmVzb3VyY2UnPgogICAgIDxBdHRyaWI6Q3JlYXRlZD4yMDI0LTEyLTIyPC9BdHRyaWI6Q3JlYXRlZD4KICAgICA8QXR0cmliOkV4dElkPmQ3ZGY1Mzc1LTkyNGEtNGZlZi1iMDA1LTQ3ZDZlYjU1ZGUyZDwvQXR0cmliOkV4dElkPgogICAgIDxBdHRyaWI6RmJJZD41MjUyNjU5MTQxNzk1ODA8L0F0dHJpYjpGYklkPgogICAgIDxBdHRyaWI6VG91Y2hUeXBlPjI8L0F0dHJpYjpUb3VjaFR5cGU+CiAgICA8L3JkZjpsaT4KICAgPC9yZGY6U2VxPgogIDwvQXR0cmliOkFkcz4KIDwvcmRmOkRlc2NyaXB0aW9uPgoKIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PScnCiAgeG1sbnM6ZGM9J2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvJz4KICA8ZGM6dGl0bGU+CiAgIDxyZGY6QWx0PgogICAgPHJkZjpsaSB4bWw6bGFuZz0neC1kZWZhdWx0Jz5QcmVzZW50YXppb25lIHNlbnphIHRpdG9sby5wcHR4IC0gMTwvcmRmOmxpPgogICA8L3JkZjpBbHQ+CiAgPC9kYzp0aXRsZT4KIDwvcmRmOkRlc2NyaXB0aW9uPgo8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSdyJz8+NbptkAAAIABJREFUeJzs3YdfFMfj//Hvn/AjGrDQFBtiF1EUjTVGJcaOvXdj7/qx9957792YYu8ldmzYC4ooBhUVRAUE7zcycbLeHcdxHCzI6x7Ph4/dudnZ2bkL6Duzs//nn6cnAAAAAAAAAEDr5O5L/6d7JwAAAAAAAAAgoyE8BQAAAAAAAAAzCE8BAAAAAAAAwAzCUwAAAAAAAAAwg/AUAAAAAAAAAMwgPAUAAAAAAAAAMwhPAQAAAAAAAMAMwlMAAAAAAAAAMIPwFAAAAAAAAADMIDwFAAAAAAAAADMITwEAAAAAAADADMJTAAAAAAAAADCD8BQAAAAAAAAAzCA8BQAAAAAAAAAzCE8BAAAAAAAAwAzCUwAAAAAAAAAwg/AUAAAAAAAAAMwgPAUAAAAAAAAAMwhPAQAAAAAAAMAMwlMAAAAAAAAAMIPwFAAAAAAAAADMIDwFAAAAAAAAADMITwEAAAAAAADADMJTAAAAAAAAADCD8BQAAAAAAAAAzCA8BQAAAAAAAAAzCE8BAAAAAAAAwAzCUwAAAAAAAAAwg/AUAAAAAAAAAMwgPAUAAAAAAAAAMwhPAQAAAAAAAMAMwlMAAAAAAAAAMIPwFAAAAAAAAADMIDwFAAAAAAAAADMITwEAAAAAAADADMJTAAAAAAAAADCD8BQAAAAAAAAAzCA8BQAAAAAAAAAzCE8BAAAAAAAAwAzCUwAAAAAAAAAwg/AUAAAAAAAAAMwgPAUAAAAAAAAAMwhPAQAAAAAAAMAMwlMAAAAAAAAAMIPwFAAAAAAAAADMIDwFAAAAAAAAADMITwEAAAAAAADADMJTAAAAAAAAADCD8BQAAAAAAAAAzCA8BQAAAAAAAAAzCE8BAAAAAAAAwAzCUwAAAAAAAAAwg/AUAAAAAAAAAMwgPAUAAAAAAAAAMwhPAQAAAAAAAMAMwlMAAAAAAAAAMIPwFAAAAAAAAADMIDwFAAAAAAAAADMITwEAAAAAAADADMJTAAAAAAAAADCD8BQAAAAAAAAAzCA8BQAAAAAAAAAzCE8BAAAAAAAAwAzCUwAAAAAAAAAwg/AUAAAAAAAAAMwgPAUAAAAA4FtQ0bVpidw1C+Qsm8uxkMP3uQEgPeV28iyQ07dk7lriZ5HuPw/tiPAUAAAAAIDMqk6eX/1cmhbKWeF7xzy6RycAIDk65vXMVbGiS3Pdf0imHuEpAAAAAACZUiXX5kwyBZCROTsWFj+pdP9pmRqEpwAAAAAAZDI/uncqmNP3/2XPpXsyAgCWiZ9UBXP51nTvovtPTtsQngIAAAAAkJlUdm3JTfoAMhcnx3ziZ5fuPz9tQHgKAAAAAECm4evcINv3LrrnIACQUuJnV3nXxrr/FE0pwlMAAAAAADKH0rlrc6s+gEwse+4yzj/r/rM0RQhPAQAAAADIBKq4tvmOOacAMrls37tWcW2t+09U6xGeAgAAAACQ0dVy757bqZDuqQcApF5uJ8/a7t11/7lqJcJTAAAAAAAyugI5y+medwCAvRTOWUn3n6tWIjwFAAAAACBDq+TaQvekAwDsKXvuqpnk5n3CUwAAAAAAMjQ3p+L6Jx0AYFd5cpTU/aerNQhPAQAAAADIuCq4NNY94wCAtFDRtanuP2OTRXgKAAAAAEDGlSdHSd0DDgBIC3lzeOv+MzZZhKcAAAAAAGRQtd27f/e9i+4BBwCkhezfu+v+YzZZhKcAAAAAAGRQ3LMP4NtWybWF7j9pLSM8BQAAAAAggyqcs5Lu0QYApJ1iuarp/pPWMsJTAAAAAAAyKDen4rpHGwCQdvLkKKn7T1rLCE8BAAAAAMigcjkWtHtUUaZcxdo/NyjoVUL30AQAcjsV1v0nrWWEpwAAAAAAZFDZv3ezY0jxQ9WawcEPDYmvzt166h6aAICjY17df9JaRngKAAAAAEAGZd+Q4sLFQMOXF+EpgIzBuY77r7r/sLWA8BQAAAAAgAzKjglFNieXjx8/GgyGP/7cnd+zmNjVOzEBgM8ITwEAAAAAgC3sGE+4eXjKOaf9BgzRPSsBAIXwFAAAAAAA2MKO8YRHwSIyPO3Rq6/uWQkAKISnAAAAAADAFnaMJ4qXLifD0zbtO+uelQCAQngKAAAAAABsYcd4onW7TjI8rVK9lu5ZCQAohKcAAAAAAMAWdgkmcrvl69T115CQxwaDIezZs+w5XHXPSgBAITwFAAAAAAC2sEswUbFKDTnnNCLiVc3adXUPSgBAi/AUAAAAAADYwi7BhApPY2NjO3burntQAgBahKcAAAAAAMAWdgkmsudwrfHTz1evBRkMhsjIyJwuHrpnJQCgEJ4CAAAAAABb2DGeqN+oqZx/yp37ADIUwlMAAAAAAGALO8YTRUuUkeFp2w5ddM9KAEAhPAUAAAAAALawYzzhUbCIDE979Oqre1YCAArhKQAAQHob0nTu2mm7d604cXD7hTP7bwSeuKeXc4dvbZizf2izeQ08++k+LACATMeO8YRb3kIyPB0weJjuWQkAKISnAAAA6WRsp2Un/rr2JiIm5oMhAwo8cW/N1N3dakzQfaAAAJmFHeOJbE4ucXFxBoPhzNnztfzruXl46p6YAIAD4SkAAEA6GNBg1rWzD3WPR620b+PZlmWG6T5oAICMz74JxclTfxu+vDp3s3PjAGAbwlMAAIA01KzUkGO/X9Y9D02pVy8+LB61U/fRAwBkcPZNKIqW9Dl67ERCQgLhKYCMg/AUAAAgrYxovTD8SZTuSajNbgWGchc/AMCCtMgpsudwLehVIperh+6JCQA4EJ4CAACkkU3zDuqefqbei2fvulYnPwUAmKd7qAEAaY3wFAAAwP42zT1gTTQZePzuloWHTu0JevrwdZpmoGGP3mxffGTLgkMPbvyT0mPDn77tVmOi7kMKAMiAdA81ACCtEZ4CAADY2doZe5NNJB/c+KdF6aHao2b0W/9PaJrc479/63ntibYsOGTD/NNOlcfqPrCZ2qBGswcHzP211uSmJQbr3hkAsBfdQw0ASGuEpwAAAPY0pOk8a+LIKb+uNj22f/2Zdk9Oo97ENSjUz+hEj++9TGk7V88Ep2ZYgm+Fq6Z0/4zSTdMSg9dO2/333qA3EbHawXwTEXPrUui6mXuNAvRMYc6QzYEn7kntyo/UvT8A9KV7qKE45c6TwzmvILazObnI7ew5XHXvmFnf53STPfzO0Vnsym3HXO7WtyAPkURrul8R8A0jPAUAALCbRl4DnlhxA/7fe4MaFu5vtoWVE/+wb3gaeOKe6Vl2rThhQ1NLRu+0eWSyYHg6Z8jmiPD3yY6q+CwCig/SvbfW085c7lJtvO79AaAv3UMNJSLilSHxlT2Ha68+A+T2vAWLde+YWb//8ZfsYb2GAaV8Ksjty1euWnm4VzFvg+a147ffdb8i4BtGeAoAAGA3v686mWxYdv1CiOVGnj2OtGN4euX0A9NT7Nt41rbWbL55P0uFpw0L9z936Jb1o/rozvP2fqN077aVCE8BaOkeaiiEpwDSCOEpAACAfbT1HWlNUjZ36BbL7Swbu8uO4algdG91i9JDo17H2dbUoR0XbRucLBWenvjrmtG4hd6POPbHlR1Ljq6dvmfz/IPXL4QYVbh29qHu3bYS4SkALd1DDSU09InBYIiJiRHbHTt3l6ni1OmzdO+YWZs2b5M9rFm7biGvknL79JmzVh6uwtMp02YW9CrhlreQ7lcEfMMITwEAAOxjy0KrHsQ0psNSy+00LjLg8YMIO4and64+bev7b37ao+aku9fCUtOabXMks054On/4Vu1w3Qt6NqL1QtNqw1sueHTneYpS9QyC8BSAlu6hhrJ33wGDwRAUdENsl69YVWaLHTp1E7uueQr6+FYSnHLnEbu1/Ot37tazTt2Gcr1Rre9zuoly8W5As9baRLJkmfLicK9i3qqkcNHSosS7rJ8qcc9XWHsWoWhJnyZNW4nWGgW0yFeoqPZEw0eMlj108/AUuy9fRojtlavXyncLFC4um0pqzVYVno4YNVb3kQe+eYSnAAAAdtC4yICI58kvcCmsnb7n8t8PNszet37WvgldV5htrUOlMfa6ef/8kdtyQ5z0XtAzuR3+9K3NDa6Y+IcN45NFwtMWpYdqnw118djdJkUHJlW5ZZlh2id3iU9c3843Kzl4cJM5gxvP6Vx1XCMv82vyCpvnHzQbnjYrNaRHzUn96s3IjE/BAmAz3UMNZfzEKTExMRs2bnFIfGBUZGSk2PX1qyJ2O3frKaPG1u06BQXdUHe7Xwu6XtCrhGrB/5dGcvqqfL1//2HIsJHyrYOHjoiS0CdPVeWbt27LakVLlJEl6zZskkfldsuXr1DRvfsOfPr0SbUWFxe3dNlK0TFZufbPDUT3Hj58JHcPHDosdvsPHCJ3ly1fJY/SxrVahKdAeiI8BQAAsIPxXVbYEEQ+efg6qQZ71p7yJiImlcnpkd8uiaY2zN6nLbx+PqSRV/8/rFie1aybFx/bMD6pD0/7/Dzt0I6L94KevXj2TrZz4+LjpWN+Cyhm/LSlBp791k7fI43rvFyUzB265eKxO/KosJDIi8fu7lhydHiLBcmcse60TXMPXDv7UGXN4oxTe64Rb41ovVCdQvvsL7GrHas2viMsn6JHzUna+mM7LdO+u3z87/IUQ5rOkyWty/1v/vCtstB0CvCABrPEJ37/+rOX//w7RFfPBC8csb1xkQGmgxl44p40qu3ifvVmnDlw0+iDvnTq/qh2S0z7bDrzdFL3VeKkX3+xX22ce8D0owHw7dE91LCGCk/fRkeHhz8/eOiI+FOWrFm3QdbxLuv3/v0HURId/e7I0eMqRW3XoYt4t3ffgXJXprH5PYupVLRrj96yhbBnz8Tu7j37xPb2nbtkkLpx09YFi5ZeunxFVh49doI1HSY8BTIUwlMAAAA72LrosG1Z5Ki2i5Nqc3DA3NQkpxHP37csM6yBZ7/Q+8aLAHSrMbFBoX4hd1/Y1nKzkoNTOj6pCU+bFB14Zv8NC5c5uv1XGV9A8UHq3dP7b1w9E5zUscd+v2z2jB0rjblw9E5SR+3deGbnsmNqt3mpIerAJw9fqfIdS45ac3Und39eIPWf0Khzh27JqFdRGejGuQf8TUJw8fXQXrKFDr949s5o6YDhLRaody0v43B4Z6BRh7UzT/vXn3nucJKPxnr2ONLmJ4wByCx0DzWsocLTO3fvubgXcEi8oV5OC71y9Zqss3XbDrH78ePHilVqiF2n3HnOnD0nSm7fueuQmJYmJCSI3f+NHCN2O3TqpsLT9Rs3i5JKVX7UZqlPw8LE9p69+2Xj2XO4bti4Ze78RQHNWlvT4WYt286aM19wzVPQbAXCUyA9EZ4CAADYwZXTSSZ0lv2+6qSFZoe3XJDSBm9efDxn8OYhTecNbjxHtLB98VHTOrcvP/FPnPY4ovXCid1WHtx+MUWnMDsh0TKbw9OWZYZZs0jroEaz1SHNSg62/lpM89N+9Wa8evHB8lHae/PVXeo960zR1hHtWHOBrXyGJxVGqzm2G+ceOLwz0KgPKjxt4zsi+Ga45Q4Lvf2n2va9Cjx5T9srbXia7OTo0OBXFhYuAPAN0D3UsIYKT0eNGa8KHz58pL0TPzIyUuye+vu0qtCzd395VPHS5cTu6TNnxfbRYyfE9uq168X2P+Hh4s9Hj0JEybgJU2T26p6vsNi9GHhJxbWLlixr0bq9fZ/pRHgKpCfCUwAAADtIacSp3LoUarnlYc3nR72Js7K10/tvaI/VzsE0YvTcqgX/22Z9n5eN25XS8bE5PN2/9bz21CF3X+zfcn7LwkPnDt0yKleHNC1hJjx9Hha9a8WJtTP2isONnselXXm2QaF+2nVIP8d/9yPWz9q3dvqe35YfNzsaLbyHyWOn9VqrCiOev0/9l+pFWLRs7cGNf0zPq8LTo7sua8sf3Xm+d9NZMURquVvpXlCYalk781S5eiZ4x5Kjf645dePiY6O3Vkz4XR2rDU+VyFexgSfvGd28L4me6PgfJoC0pnuoYQ0Vnnbq+qsqvHL1mih5GhYmtj0KFpEV4uPjo6PfSR8+fJCFjQJaiDrD/vf5EU8xMTG5XD2Cgx+K7YFDhsvpq0VL+pw9d0FsHDl6XDZer2GAXARAvWJjY7fv3JXfs5hdrojwFEhPhKcAAAB2YHN4ak2YOLLNIiubMl1kc8PsfWp1S+Fe0OdZnE8evjI9izUTPKU/15xK6fjYFp728p+qjnoTETOp+yrtux0rjVE3tn8OE5vMkeWmkfGhHReblvhqduf+Lf9lspdO3Vflq6f8pcqj3sQt+N827VFNig7cvf60cXj6Zebp2mm7VWHg8bup/1KpmafK5vkH1RxbOaOzf/2Z2sR2fJevHkHWpdp47eTQPnWnyXKj8PT1y5i+v0zXHtiv3gzt2cVQqK/WpnnG4al2lBp5DVg0aof2XdFO6ocCQIale6hhDRWetmnfWRVevnJVhadqDVOxu3vPPiM/1fnFIfFOf1mn34AhcqOgV4mr14LExtDho+Lj4+Vbqv3SPn7Llq96/DhUG6FeuXrtO0fn1F8R4SmQnghPAQAA7CA14Wmfn6cl2/6Ersk/kOpNREyy7YzttEzUPLUnyPStg9svWNnhc4dupXR8bAtPZ/TboI6a0Xe9aYW1M/aqCktG75SFRjNPzV5sk6IDI8LfqzoNPPvJcm1iaJTVKkHnHpkNT7VPUpKP6kolo/B0ZJtFpnXmDd1iucPaXs0dukUWGoWnYzsuNT1waLN52jorJv4hy41mnoqPwPTYv9b+/dUQfZmcC+Dbo3uoYY1kw1Ph9evXYjfw0mVVwbNIKXkPviKjUvmwqZu3bouSOfMWiu0XL16KPxMSEgp6lZA1czjnrVCpWrFSZcW2+LPbr73v3X+gXQQglQhPgfREeAoAAGAHqQlP5w/bas0ptiw8lGxTpjNPtc+FF+TSmY80N7krd648tbLDNy4+Tun42Hzbfr96M+5eC3vy8LXZdyd2W6ma3b74iCw0Ck9blx1u9tjAk/dUne4/ThQlvTUTXR/c+CepLo1uv8RseLpt8RFV+Nfavy1clIVHgY3ttExV086r3b/lfFKtDWw4S/T20Z3nZt+d0Xe9amTD7H2ycFjz+arwVmCSC0dcOnVfVZPr5PqbhKdGU3qljj+M1dbp8dOklH5hAGQWuoca1rAmPN24aaus06V7L7Gb2y3ftaDrcklT+YwpYfzEKWoO6ZJlK0RJg8bNVMmZs+dltdI+fvLpUqLEMZe7LNy8ZZsMWD0KFkm2w737DpSTXvMW8DJbgfAUSE+EpwAAAHaQmvD03GFrJ3KG3H1huSmjx0818ur/7HGk2ZoTu63U1hzVbon1HbbhnnSbw1NpQIOZartfvRlLx/x2cPsFoxU2d604IStow1NRJ6k2tXfuD2s+X5TMGbJZlaydviepAxt5DfgqPP0yrVJ7y7/lmadDmiYZnmrvu9eGpyPMTTvV6l//vyESw7Vs7K5DOy4aPUhq07yDsoJ25un2xUeTanPlxD+0h8tCbXhqIXh9pPmuDmw4y4YPHUCmoHuoYQ1rwtMS3r6RUVGyWtizZ2p76vRZ6hBfvyoqKm3eqp0oyeniERMTI0uGjxitam7fuUs1dejw0QfBwXJ346at1nR42fJVsr5XMW+zFQhPgfREeAoAAGAHqQlPhZZlrLqveXzn5ck29dvy452rjPNPfIy7+NPowUpK1Ou4hSO3ty73vxbew+YM3pzs8+W1bLgnPZXhqTC249KD2y9a6KcKT5uV/C88tTBJ9s/Vp1S14S0XiJJVk/9LP6f8usZCZ54+fP1fePpl5qn2DnrL+fKQpvOSugrZE0kbnlrzDRnXebn4aLSLnBrZPP9LeNryv/B08aidSTVodo6tdh0As0siSNovnrhe2z50ABmf7qGGNawJT4WKVWqcO39RxaMvX0aMHD3OqKm79+7LCaRuHp6y5MTJU6b34zvmch87fnLok6eqtdevX8+cPdcpdx5rOkx4CmQohKcAAAB2EBr8KjXh6f6tSd6UbeRWYKiVbYbcfdHIq38b3xFRr+NS0zdT62ftS+n4pCY8Hd95+T+hUcn2ymx4ev1CSFLN/rHqpFFkKa5LlUzusdpCl7RLHDQvNUQWyvVkJeufktSgUD/tVXStPkG9pQ1PLTcy5dfV4U/fJjtEZsPT2YM2JdXsgAaztId3qTbe/+uZp4d3BiZ1rFwgQhrajPAU+GbpHmrYXUGvElVr1PYu6/d9TrdUNvWdo3OR4t6iNR/fStlzuNqxk4SnQHoiPAUAALCDA9usfdpSUsw+tMfUmA5LrW9z9/rT/l9ngnZh9Eh3a9gcni4cud1sH66cfrBx7gHtnfKpD08Xj/7vMfHq2UpmPb73UtVUM08Dig3S9tCa54AJgxrNVodEvorVvmVleLp8/O9mh+jSqfvrZu5dO32PKvnvtn3rZp4aLebQLDEm1s48tRCe7t/636oIhKfAN0z3UCNrUuHp7LkLfHwreRYppXuXgG8Y4SkAAIAdaJfLtM2biNhe/lOtOZc2iEzW8T+u2Dc5VSFaitgWnrYrP1J73scPIlZP+Uu7/umI1gvtGJ5O+XWNKtm57JiFjml7pcJT4cLRO6b9sUycSB1ycvc17VvWhKddqo3XdubR3RerJv2pXf9UOx82iTVPjyTV+Apza54SngLQ0j3UyJpUeCpfO377XfcuAd8wwlMAAAA7MHq8uK35aYw29krK7EGbUtTs65cx84ZuaVJ0YMPC/Sd1X6Vdr9MGV88E2zA+toWny8btUkeF3o/QxpTSyDaL7Biedqr834f4+EFEUgcObfbViqXaXo37elHaX2tNtnyBAcUGvYmIVfWNFlq1JjzVTit+dOd5QPFBRhUmdF2hKvx3274mPLUwRIHH76pql07dl4WEpwC0dA81sibPIqWio98pVj6HCoBtCE8BAADsI/DkvdTnp1dOJx9NBhQflKI2+9WboT28W40JqenhzP4bbBgc28JTbb45f9hW0wra6DD14akQFhKpCqf2NP/MKKMP2ijSfXj7uXpLtNbjp0kWLvD8kduqcviTKKN3rQlPtRnljH5mPpqtiw5bDk9NvyHS4CZztHUWj94hywlPAWjpHmoAQFojPAUAALCPyT1Wpz48vXP1qWnLPetMMSpZNnaXlQ2aTQ+P2Xovf0T4+4aF+9swOLaFp9sWH1FHbVlwyOjdIU3navtml/B03cy9qjDqddyC/20zOkqcxWhMjMJT7RqmMYmziUXPO/4w1qidYc3nGz37yzSrtSY81V7F2hl7jd4doZmZayE8ffLwtVF+2uOnSS+evdPWaes7Ur5FeApAS/dQAwDSGuEpAACA3bwIi059ftrCe5hRs78tPx4R/n7/1vPdakxUhUbrUSbl3OFbpv0UDdrWN9ME00opWqdV6llnyqTuq7Qlqyb92b7CqFY+wyd2XXnir2tG9e0SnjYuMuCf0Chtsy//eff3vuvrZ+0T1x5808xVNDdZAXbOYDML4IbcfXHkt0ub5h0UPX/2ONLoXbMppDXh6Yx+67XtLB//e1vfka3L/W9yj9Wi20ZnMbvm6X9jdT7kz9Wndi49dvVMsNFba6ftVmckPAWgpXuoAQBpjfAUAADAbqb3WWdbKKk1e9Amo2avXwiRb71+GdOyzH/Ramjwq2RbexMR08hrgFGDty6F2tCxZ48jbXhUlGRbePr5Gu9HWFnfLuGp0LX6hPAnUVaeNMZk5qlklGlati2JRzZZE5428upv/SK2KvsW12t994xWuSU8BaCle6gBAGmN8BQAAMCeDm6/mNKU8NzhW3OHbhndfsn2xUfFdttyI7QN/lprsrbyo7svRrZZJCqP77KiZ50pUW/ikm3/wLYL2gbnDd2S0h5KI9ossnlYbA5Pu9WYEP70bVJ17gU9U8myvcJToZXP8CO/XUrqpH+uOXX9fIjaTWodg/71Z147+9DyNd6+/MTseqOSNeGpf+KqDtqaRm5dClVZueWZp2b9ve96A89+2tMRngLQ0j3UsIGbh2eV6rV+rPWz7j0BkCkQngIAANhT4yIDQu6+SFFKePHYnaHN5jUvNaS936h1M/eunb6nQaHPcZWcZNqwcP+pPdcMDpi7ef5B20JP4e61sPWz9omWj9u62umG2ftSMywLR2wXZ0+R1mWHy2PbVxh1ak+QUX+unA6WC5JO77NO1h/5Jdtt4NlPNTJn8OakujSq3RJVrWOlMaYVBjSY9fuqkxeP3Q179EacMfJVrBi9Yc3n+2tizag3cZYvXHxw+zaeffXig7bz8hb+0e2XWD52xYTfVQ8t1+xUeezZgze1pxAdu/z3g7lDt4h3Z/bfIBuRnff/eubpP6FRPWpOMg2Lb10Kndhtpem55gzZHHjinqS9nd/Iqsl/qWq9/Kfq8h8jgHSge6iRUkuXrYyLizMYDMHBD3XvDIBMgfAUAADAzjpXGRfx/H2KoskXz949/7Jeqth+dPfF9QshM/ptGN5yweMHn+9bv3YmmTmMaer4H1d0H9X2fqMGB8wVxPDq2xPtg6qun09yZmv661BpjBwi0+dTGdHOPP0nNEoWBhQbNLjxnMFN5nSrMTGg+CDdLwdApqB7qJEijQJaGL68CE8BWInwFAAAwP76/jLdmhvqLXtuj8dPpd7FY3fkTNisoL3fqDmDNx/57VJo8KuAYuYDxMDjd9XgbJizX/c+20A78/TZ40jd+wMg89I91EiRSVOmGwyG+Pj4OnUb5nL10L0/ADIFwlMAAIA0MaL1wtcvY3SPPlNp78Yzuo9kelIrqAqBJ+618f1q/dmBDWedP3JbOz7JzvHMmAhPAdiL7qFGiixassxgMISHP9e9JwAyEcJTAACAtNLGd0TgyXu6B6A2Wzhiu+5jmM4m91htNAhXzwQHnrh3/UJI5KtYo7cObr+Q1v1JI4SnAOxF91AjRZYtX2UwGEI5ek+nAAAgAElEQVRDn+jeEwCZCOEpAABA2lo4cnsGuQHfeldOP+hSbbzuQ6eL0/tvWDNEd64+beTVX/fe2obwFIC96B5qpMimzdsMBsPNW7d17wmATITwFAAAID3MGrgx+Ga47qloso7uujy48Rzdh0tHjbwGmD563sjejWcyb3LqT3gKwH50DzVS5MbNWwaDYf+BQ7r3BEAmQngKAACQfnr5T1016c/Lfz/QPSQ1cvHYneXjf29eaojuQ5RBdKk2fuGI7We+noUafCt8x5KjnauO0717qUR4CsBedA81rFSpyo/LV6w2JL76Dxqqe38AZCKEpwAAAProUm38iDaL5g/funb6nvS3espfM/quH9xkTvsKo3QfCqQzwlMA9qJ7qGGl3Xv2yeR085Zt2ZxcdO8PgEyE8BQAAAAAANhC91DDSio8PXf+orN7ft37AyATITwFAAAAAAC20D3UsFJBrxIjRo2V+emY8ZN07w+ATITwFAAAAAAA2EL3UCNFzp67YDAYjhw9rntPAGQihKcAAAAAAMAWuocaKbJ+42aDwXDr9h3dewIgEyE8BQAAAAAAttA91EiRZctXGQyG0NAnuvcEQCZCeAoAAAAAAGyhe6iRIgsXLzUYDC9fRujeEwCZCOEpAAAAAACwhe6hRopMmDRVPjOqb//B5SpU1r0/ADIFwlMAAAAAAGAL3UONlCUgdRsavryCgx/q3h8AmQLhKQAAAAAAsIXuoUZKDR0+Kjz8OeEpAOsRngIAAAAAAFvoHmrYxi1voQKFi+veDQCZAuEpAAAAAACwhe6hBgCkNcJTAAAAAABgC91DDQBIa4SnAAAAAADAFrqHGgCQ1ghPAQAAAACALXQPNewoh3NewTGXu9j+Pqeb3P3O0dly/ew5XJNt03Kd1PTBiFPuPPIQsZ3NyUV7drltgW0dTpHCRUtX+7FOLf/6Jbx90/SjlEMnRiON2jcaW+2w45tEeAoAAAAAAGyhe6hhL+UrVjUkvs6cPS92t27bIXcDmrdWdVq26eDjW0luF/QqISusXL1W2441dVLTB8siIl7JQ7LncO3VZ4DcnrdgseqJhZeze36vYt5ye9nyVfYd3oZNml8Luq49XeiTp0OHjzKq5pjLfcSosak/3aHDR8UpYmJi0ujbMnDIcHkV02fOEbtPw8LUGKbRGaEvwlMAAAAAAGAL3UMNe7EcXJb28Tt2/KTYreVfT9Y3DUatqZOaPlgjY4anAc1af/r0yexJtSPToHGzB8HB8fHxqT8j4Snsi/AUAAAAAADYQvdQw16Kly4n868jR4+L3VVr1snduvWbiN0x4ybKXRWM5nL1GDFqrFCvYYAsMa2T0vDUch+sERr6RIWGHTt3l4dPnT4rh3PeDp26Ke/evRflr1691hZmz+GaRuGpnHMqTtqzd/+iJcoIvfsOjIuLk+cqW/4HWU0mnpkiPO3Rq6/s/Njxk8XuvfsPZM+/z+mWRmeEvghPAQAAAACALXQPNewoMjLSYDAsWrLMQTO1sKBXCa9i3vMXLpG7nbr0kHflZ3NyERtCgcLFxa7ZOkmFp3nyezUKaNG5W886dRsaxW1J9UG+W7x0OdGyhQVD9+47IOoHBd1w0Mxj7dCpm9krfRoWZlRuFJ76Va4hOtmkaaucLh5GNUW3RefFuwHNWrvlLWRhVL9zdE5ISBBtHj9xSlsuTiHP1bN3f7HrXdbvzNlzMoIU11i0pI8oFC3LQc7tlk8dKC5flIih0LbmlDtPwybNO3X9tUKlag5fh6fiAzJtRChTrqI6UUr9ULWm7HyL1u3F7u9//CW27967r+8XGGmH8BQAAAAAANhC91DDjo4cPR4TE9OjV1+xXbN2XbEd9uyZ2N5/4JDRzebO7vmNglFr6kiDh454Gx2tqj0NC/u5XuNk+yDdvHVbHBIc/DCpSxg/cYo4ZMPGLQ6J8W5kZKTY9fWrYlQt2fB03YZNMhCUr5CQx1Wq11LV/H9pJKe4ytf79x+GDBtpYWBfvXotqsXFxQ0fMdo9X2FZmMvVI09+L/VMp+jod9rRu3zlqihUKw80CmihWhOXL0rEUKiSXxo0ef78hTp2247fTp76W4Wnnbv1lOWjx05Qh4gxkYUrVq6x4avimMs96u1b0X7JMuUdEicdi+3tO3fp/h1GGiE8BQAAAAAAttA91EgHe/bul3Mn5bxI8crtls8oGLWmjoMmyPsnPPzwkWMyxHz37n2xUmWt6Umy4amVkg1PxbVEvX179NiJGzdvyZLAS5dlHe+yfu/ffxAl0dHvjhw9rlLUdh26JHW6eQsWq2Tz48ePFy4Gzpg158daPxt1Sa2LKkZP1HGwLjwVQ6eC18tXrp49d0G1I8PTnC4ekVFRKpCVJk6eJuvU+OnnpLoNKISnAAAAAADAFrqHGunDmvVMranz5GmYTD/dPDzFbpHi3q9fv7Z+/uPQ4aNmzZmf+ufRJxuexsTEeJf1EyXZc7jefxAsSj59+pTL9fPN+/IxVh8/fqxYpYZD4v3y8nb723fuJnU6x1zuq9asM31m1PXrN6rWqK2qma55ak14unDxUlln3IQpsuTXXv204amweu16WaJWPBCnFrvi0nT/aiFTIDwFAAAAAAC20D3USB92CU/VQpmTp85QLW/Zul2UhIY+Sc/LSTY8PXDosCpUyaN4Vx176u/TqkLP3v1lBaN1SI1UqV5rybIVjx+HavPTqLdvZUrrYGt4euPGTZmTapc0lWdR4emPtX6W7cg790v5VJC7EyZN1f2rhUyB8BQAAAAAANhC91AjfdglPG3TvrPcjY2NjY5+J6mHzps+lCntJBuerlqzThUuWrJMFhYrVdajYBG5HR8fry7hw4cPphGnBSW8fYcMG/noUYg8as26DbLctvD05csI0zmkx46f1Ianwp279wxf7twfPXaCIXEurZWrJQCEpwAAAAAAwBa6hxrpwy7habsOXeRuUNCN3Xv2GbH8zHr7SjY8XbZ8lSrUhqf5PYvJbXGs6SX8VOcX03M1adpq+85dJ0/9/UuDJtpyzyKlZFMXAy/JEgvhaeOmLVVh6JOn2vBU9MSQ+EgrbeOnz5w1Ck9lYGpIvHM/8NJlsSHq6P69QmZBeAoAAAAAAGyhe6iRPlT0ZiE8TbaOX+UacnfOvIWq5RLevuk551SyOTwVu3KRVvX8KIfEGNQ9X+GkztWqbUd5+J69+7XlPr6VZPnZcxdkycFDR4zCU7V6adsvT6PK5uQiH1elwtMzZ8+L3bi4uLwFvGSJU+488glR2vC0kFdJ0bIoXL5itWyzV58Bun+vkFkQngIAAAAAAFvoHmqkj+EjRsvErXvPPkVLlMnm5GIaniZb5ztH55CQx2L3zZs3FSpVc0h8cn109LuEhIQ//txtTTcWL12+e8++FavWpvJyUhOebty0Ve526d5L7OZ2y3ct6LrYffQoxMW9gOm5crp4yDvrxWvb9p116jYU196hUzf5HCrxmjh5mqy5d98BNTlUnqtZy7ay5M+/9sgBnDJtpixR4enI0eNkyfadu3K5eojTrVm3QZZow1Nh/4FDhsS79cWfHz580E717TdgyL/zfxMf5CX+lLui3GwFy9au3yhqzp67QPfvLeyF8BQAAAAAANhC91AjfagUT6V7puGpNXXatO8sw7uEhISQkMexsbGGxCfXN2jczJpu3Lx1W9QPDn6YystJTXgqrkvO6xSvsGfP1PbU6bOSOl3bDl3E9RrMve7cvaci1wWLlqry0CdPRYmze37ZVfF6/fr1ixcv4+Pj5WKpKjzN5erxIPjfHFaMZ0xMjDzcNDxt3a6Tan/nrj+0b4kPSJaLj8zB3LRiowqWyZUELlwM1P17C3shPAUAAAAAALbQPdRIH06585w5e07GZ/Hx8dVr+pvma9bUcUhMEuX8U5UeNmnayspuZITwVKhYpca58xfVJbx8GTFy9DjLZ6zXMODCxUBtbBod/W7Nug3qXnuHxHm4MnYUr6i3b79zdBaFjQJaPH/+QhY+eRrWvFW7Hb/9rg1PZbdPnDylmhWdmbdgsWl46pjLPSLilawW0Ky19q20CE/PnD2v19cVdkd4CgAAAAAAbKF7qJGevIp5V672k+Ubt62pI5QsU77aj3WKliij+0XZrKBXiao1anuX9fs+p5uVh4hhqVTlx+o1/cVR2XO4mlbI5uTi41upwg/VnXLnUYWipl/lGuUrVpVxquWRz+Wa5AKyjrnc5QIC4k/r+2ybffsP/vb7n7p/RrAXwlMAAJBi9Qr0aV12eKfKYwEAKdKh0phmJQfr/mMcsBfdQw0gWfkKFc2T32vFyjVy9ui8BYvT9HQt23SIi4tr37Gr7hcOeyE8BQAA1hrabN6ulSeCb4XHfDAAAGwW9TruwtE7qyb92cZ3hO4/24HU0D3UAJL17J9/1HIBkVFRhYuWTrtzfZ/TLTj4oXoKFr4NhKcAACAZzUoOXjHxj8f3XuoeNwDAt+fk7msj2izS/Uc9YBvdQw0gWWqF1hs3btbyr5/Wp3PM5a77JcO+CE8BAECSGhbuv3ba7shXsbqHCwDwbXtw45/BTebo/mMfSCndQw3AGnkLeDm759e9G8ikCE8BAIB5PWpOenj7ue6BAgBkHfs2nq1XoI/uP/8B6+keagBAWiM8BQAAZkzouiLqdZzuOQIAZDVB5x61Kz9S998CgJV0DzUAIK0RngIAAGMjWi+MekNyCgD6uPz3g0ZeA3T/XQBYQ/dQAwDSGuEpAAD4St9fpr9+GaN7dgAAWdnFY3d+yddb998IQLJ0DzXsKIdzXkE+7ef7nG5y9ztHZ7GbPYer3DWqLMqtb1+1aUMHrOGUO49qP5uTi7aHopGUtqYXcfnaIZI9F6Ohe8fsxfS7ZEfyO5Bhh8vow7WBOFxco4PFb3taIDwFAAD/6VhpzIuwaN1TAwDA/q3nf/bopfvvBcAy3eMYeylfsap8IPuZs+fF7tZtO+RuQPPWYnfl6rVyt6BXCbEr/pS7otz6U+zes08eZUMHrBER8Uoekj2Ha68+A+T2vAWLxVudu/WUu23ad7bciF/lGgHNvjqjYy73EaPGps+nIHr+Njo6Pj7eNU9BWTJm3ETR7bnzF+nyrUgLRt8l+4qJiREtHzp8VPfLNGX64aZUjZ9+Fld36fIVB4vf9rRAeAoAAP7VwLPfrcBQ3fMCAIC0ePQO3X81AJbpnsjYC+Gpi3uBFavWJiQkjJ84RRU2aNzsQXBwfHx8+nwKVWvUFp28cvWaKtl/8JAoadqijY7fDfvKsuGp6YebUiNHjxMtzF+4xIHw9GuEpwAApJ+10/fonhQAAJS3kR/b+vLwKGRouicy9lK8dDmZvxw5elzsrlqzTu7Wrd/EwSTwyuXqMWLUWKFewwDrT2E5PLXcAWuEhj4R9WNiYsR2x87d5eFTp89ysC48ldP6xEsbnh46fFSUpFt4Oux/o8XpFi1ZJne/c3R+8+bNp0+f8uT30vG7YV/iOyO/POJbZPfGM3J4avTh2mDP3v2ihRat2ztY/LanBcJTAADwmfj3ufhXuu5JAQBA68Rf13T/BQFYoHsiY0eRkZEq3Bk4ZLg2LTUKT7M5ufj4VhIKFC4ujxXlYre0j59DYrTapGmrzt16lq9YVdu+aXhayqeCbMctbyHLHVBntDBdce++A6J+UNANB8081g6dujl8HZ6Kpvx/adSle6+f6vyijs2T36t9x66yjuiAOFFut3zeZf3OnD0nw1NRUrSkj6jp5uEpeyLayZ7DtUHjZuIU8sKNiPpyHBoFtMhXqKjRu8VLlxONlPD21Rb++dcecbrW7TrJ3Qo/VBe7N27e+j6nmzypNkUVJxUlXsW8VUnhoqXlp1CyTHmzb4krUiXu+QrLNn3K/2B9ZbngppLSjolt8Z1RA+iQuIin3BUDLg7p2Ll7jZ9+1rZfp25DMYYBzVrLL4kRMbAtWrcXn51nkVIOVoenRYp7t2rbsVOXHrX865ldIFX0RJxRdEZ8SWQ/tWdUgyOuWrQjvgBFS5SR77rmKSj6IwrF52vUptGHawM529SjYBHL3/a0QHgKAAA++3P1Kd0zAgCAkQ/vP/WsM0X33xFAUtIoqtDFkaPHY2JievTqK7Zr1q4rtsOePZNvJXvb/tr1G8VuZGRko4AWL19GGL68tm3fqZ7RZBSeqnj08pWrchVICx3wKFhEVhYnSqr/4ydOEYds2LjFITFsFZ0Ru75+VRw04enosRNu3Lylunf6zFmZ+o0YNdbw9Sugeevo6HfaEtFPbbfrN2oaHPxQbn/69GnNug0qhstXqOjefQdEoTo2Li5u6bKV2hju5q3boly0oL2E589fiEIVSfcfNFTsrli5xjGXu0yWt2zdrk4h23/0KEQdLvsjLurgoSNiI/TJU6PTiZeK+dZt2CR237//IIbd+sq53fJpO5zSjpl+l6pUryV3/zdyTGRUlNyuXtNfvOX/SyM5v1K+xNmHDBupPbv41GRaKkdYtJBseCr6v23Hb9qP9cnTsCZNW6kKLu4FxJc2Pj5eVRB9aN6qnaowa858URgbG9uidfu30dGyjqjfu+9AUe3NmzeqRPTHwoebUuUqVBaH375zN9lve1ogPAUAAD07VBrzPjpB94wAAGCKyafIyNIoqshorAxPP378+OHDhzt37x05evz9+w+yTqeuv8o62vC0Rev2CQkJMgySM+kssyY8tUCFp+KkYc+eHTh0WPwpS+bMWygqDB8xWuVloo7YbtK0VWRkpApARcmFi4EOmvBUxlWXr1xVGevsuQvk6bbv3CXDvo2bti5YtPTS5SuywuixE1SXTMNT77J+ouTuvfuqRMZ8cjrhtu07xfbz5y/kW+06dFHpnow4y5SrKHeHDh/Vu+9AuS3TtPyexVTlrj16yxbkCIgPJUWVTcc2RR0z/S6p8FR9YWTqKkZDlojhFV8nlaKK9uWJ2rTvLEtiY2NPnDwlxk2d10J4uv/AIVnnaVjYmbPnxLFiW3xpK1Sq5pA40fVi4CVZ4d27948fh8pt8TVQCz7I8NSQGNfeun3n+IlT8ksSl/gShxw9dkL8hyBLihT3TurDTak+/QYZUrjKsB0RngIAgJ6LR+/QPR0AAJj1+mVM4yIDdP9NAZilS5CR/qwMT8Vr85ZtsqRL916yRD7fxkETnv5Y62eZi4WEPC5ctLQ1Hcjl6jFrznyhVduONvRfhac3btx0ds8vSkqWKS8TrvMXAmUdK9c8VeHpP+HhpXwqOCTekx765KlM8dw8PEXJ07Awsbtn7355SPYcrhs2bpk7f1FAs/8efjV0+ChxOSNGjVUlPXv3F0etWbdBlchm5RCprLBytZ+0n4iKOOWSmp8jy5I++T2LyWxaTn7s0Kmbqrx+42ZRUqnKj+rYFFU2HdsUdcz0u6TCUzHITVu0EZ2pWqO2w5cnhonPqGKVGmLXKXceuYSCmnp5Lei6jDVr+dd3SFwfVgyybCqp8LRm7bqygvgqymnCqmTBoqVid8iwkaqCXJL1pzq/RL19K0pevozI4ZzXQROebtvxm2xWjJIsCQq6kdPl81FTps2UJS3bdEjqw02pLVu3GzT/KyKdEZ4CAICe184+1D0dAAAkZUa/9br/pgDM0iXISH/Wh6fVfqwjS4oU95YlKk5V4am6r/+HqjXTp/8qPB01ZrwqvP8g2KCZ+5nS8HTM+EmqcPTYCbJQzotUsxfv3L23aMmyFq3bm12v04jM/lRAWbSkj0Fz83tut3wfPnxOnMdNmKI6/094uIo4jx47YfiytoBw+sxZsSsKxfbqtetVZdmgaERGk+75Cqe0spGUdiyp8FQ+KEyRqwGc+vu0KpH5o3gVL10ubwEvuX3m7DlVQT1zLKnwdPrMObJCzdp1VaH43NWCrfKDi4uL065Rq46ST2pS4Wn9Rk1lBZUOi++GLAlo3lqW9B801OyHa4OQkMcGzUIK6YzwFACArO7nvL14VBQAZGR7N53V/ZcFYJYuQUb6sz48VTNJXdwLyJKt23bIEhWeqtfc+YvSp/8qPO3YubsqDAq6IUoePw6VuykNTxs3bakKm7dqJwvl5M16DQPUTejyFRsbu33nrvyexSx0Mjj4oUwGtX3etHmbqiAftn7m7DkxyCqtMyRO4M3tlk8u9zl2/GRZWSZ6ojCXq4dsWVSWN5gXLelz9twFbV6ZosqmUtSxpMJT7WPo1SoNYuSjo99JMqIVr0YBLXz9qsjt1WvXa3siZxMnFZ7K2azab6mR169fi3fvPwjWFjZr2VYeJVddUOGpeh5avwFDZIlaGlV8AdQ4mP1wU0oObGjok/T578UU4SkAAFldC++huucCAAALgm+F6/7LAjBLrywjnVkfnqoFTJ3d88sS0/D03bv3V68FyUhR3vme1lR4qlaudEh1eKp9ypC6dV3dhl/ax2/Z8lVq0Uz5unL1mnp8lhE5pE+ehhmNec/e/VVJt197GxJngA4a+j9D4rRWNw9PuVTr4KEj5Cl8fCvJynLiqnipaE+cQg770OGj5FHiLRsqm0pRx5IKT6dMm6kaVOuuPg0LE18bIz/V+UV8bWQF+cQkKZuTiwx8kwpPN23eJo/yLutntoJcbyEk5LG2sO2XVVyH/W+0gyY8VVekBq1RQAtZYhSemn64KSXXUlBP5Up/hKcAAGR1XaqO0z0XAABY8D46QfdfFoBZemUZ6cy+4Wm9hgG+flVkuKYWBk1T1oSn1Wv6m4an8rH1ZsNT7QoA6s7u9h27it0cznkrVKpWrFRZsS3+7PZr73v3H8gKSc09lAmdWkZTuHX7jlHMlye/l5xZGR7+XPy5bPkqURh46bLYfvHipUGzHqgk009Z+eat26JkzryFqnJCQoL8NG2obCRFHUsqPNUOu8OXSaCiEVXiWaSUWjcgl6tHXFycqCC6rSr8WOvf+Dup8HTM+Emygnbl0MNHju3dd0BOGT556m/5cWs/pqXLVsqjfq7X2MGm8NT0w02p5StWixb69Btkx/8oUoTwFACArK6X/1TdcwEAgGV18/XW/fcFYEqvLCOd2Tc8lbur1qxTWWqyHXBxLyBnHQ4YPMyG/lsTnv5Qtaass37j5rwFvGROt3ffAVlYwttXhqEqPA179kwmm+LP589fGBKnXubJ71Xax08+f+nM2fOOudxl45u3bJMRpBqfxUuXi8tZsWqt2hUV+g/8d3anaOfTp0/qEfbKseMnDV9e8tlZM2fPVSXTZ87RVh4/cYp6a8myFaKkQeNmqkR0z7bKtfzryc9CbNjQMSvD042btsryLt17OSSurCqfEPXoUYj4MoiS/QcPyQqDh474ztG5kFfJS5evyBIVnvYbMER2VT7Iq2z5H2SF+w+CxXY2J5f+g4bKErloQI9efeXu2XMXSpYpLz6+rj16y5T27r37sk0bwlOjD9d0DEX35K6a3mvU8+vXP39XRZ+t+baLs8tjK1X50Yb/WMwiPAUAIKvrX3+m7qEAAMCyegX66P77AjBlr2wig0uL8LRA4eJvo6PF7o2bt7I5uVjugFoEU5zIhv5bE56q6ZPy9WuvfqJwwaKlqiT0yVMHTXgaHx+fkJAQGvpE3iouXrNmz5NNbd+5S5aEPXt26PDRB8HBcnfjpq3q7Ddv3TZoHld15eo1g2YZzaYt2ojd3//4y+hCBgweJpsSp5aPOapbv4nqodEDuNTCoIYvy3HmdPGQK5CK1/ARo22rLG8hFy+xYUPHrAxPS3j7RkZFqWFU21Onz5IVKlSqprr37t17cd4PHz7IZ5Gp8NToXMKKlWtUr2TGbUh8vFWR4t4OiTf+y7nGRhWio9+pJ6HZEJ4afbimY2j6H5S25255C4meiEuz8tveq88Ao/6kHuEpAABZ3cBGs3UPBQAAljUo1E/33xeAKXtlExlcWoSnDl8e427QPJQ8KekQngrzFixWwZlcvdS7rJ9cB1O8ot6+/c7RWYWn/QcOkXemy/Bu5uy5aj1Tx1zuY8dPDn3yVLX2+vVrUcEpdx51Lm146uJeID4+/tWr1+pdecv84KEjjC7Es0gpmdVeuXpNlog25cOptBei3L13X4aAcgKjcOLkKdkl0wUErKxsNjy1vmNWhqdCxSo1zp2/qMbw5cuIkaPHaSvUqdtQBdNitBs2aX75ylWDxfA0m5PLtBmzZWovX0ePnfD1q6LaFN2ePnNORMQrVUEMQoUfqqsKKQ1PTT9c0zG0HJ42adpKbPz51x4rv+0qPLVmTreVCE8BAMjqCE8BIOMjPEXGZK9sAhmEe77Clav9pH0aezYnFx/fShV+qC6jTxWeymSqlE+FSlV+dHbPb9rUd47ORYp7V61RWxyePYerhZMW8io5ZtzETl16qJK2HbqIkqIlyug+ILor6FVCjKF3Wb/vc7qZHeTPn06lakk9icssx1zu4hDxwamY2Ij4vMqUqyi+Cep/BtjM9MNNqeo1/UUL2kUSkiV6Lr6i5SpUttenQHgKAEBWR3gKABkf4SkyJntlE8gsjMJTIKPxKFjk0OGjRk8PSyXCUwAAsjrCUwDI+AhPkTHpHpQgnRGeIoPrP3BIUNCN0j5+dmyT8BQAgKyO8BQAMj7CU2RMugclSGedu/UMDn4o1KxdV/fOAKYsrxFhG8JTAACyOsJTAMj4CE+RMekelABAWiM8BQAgqyM8BYCMj/AUGZPuoQYApDXCUwAAsjrC0wwiNubLdsy/27ExmkIAWRvhKTIm3UMNAEhrhKcAAGR1hKc6io01fPz4KSHhk+HT52cvfPr0yfTPTwmfN0W12JhPuncYgF4IT5Ex6R5qAEBaIzwFACCrIzxNf3GJmWliKvpJG5VaeKlqpKhA1kR4ioxJ91DDjnI45xUcc7mL7e9zusnd7xyd0+GkafGIG8Epdx7ZvtjO5uSS0nMZDYJ2fNSuIs5lx6sQTameZ0xiTGQPxSjp3hkLUvkdgER4CgBAVkd4mp5iY4wzU/mKj49//3SqBWgAACAASURBVP59ZFRURMSr589fCC9fRkRGRolC8ZaqpslSDUSoQJZCeIqMSfdQw17KV6wqf8OeOXte7G7dtkPuBjRvbd8TtWzTwce3ktz2KuYtz7Js+aq0uCjxlwrZfvYcrr36DJDb8xYstvLw3//4Sx5Sr2FAKZ8KcvvylaviLTcPT7P/rzfq7dvjJ07Vrd8kpV3N71lM9FDtrl2/UTboUbBI+n8ZrDFh0lTZw/Dw5xk5P03ldwAS4SkAAFkd4Wn6iI0xfPpyb742M711687UaXMaNW5buap/hYo/lfOtXqZsVaGsb3WxW7nqz/Ubtpo4aeaVK0EqRVVzURMSPsXF6n9pANIB4SkyJt1DDXtJh/C0tI/fseMnRZu1/OvJkm8vPJUv8TeWRgEtrO/n0OGjIiMjxeCokowfnj56FKKut037zrr3JymEp3ZBeAoAQFZHeJoOPsZ9Nc/048ePgZeuTJ46p2athvkLlipU2CdZBQp5V67iP37CtLPnLn78fM//J80/UfS/QABpjfAUGZPuoYa9FC9dTv5WPXL0uNhdtWad3LVhEmVSxoybKNtMt/A0NPSJaDwmJkZsd+zcXZ5r6vRZVh6+afM2eUjN2nULeZWU26fPnHXQhKe379zt0Kmb1L1nn9179snyK1evWd9P0UNxSCYKT+s3aqoNi48eO6F7l5KSyu8AJMJTAACyOsLTtPb5eVCJLxmbPnkS1rRZh/wFS1uTmZoq6FnGv27A7dt3P36M185CjY3R/0oBpB3CU2RMuocadhQZGSl+pS5askxsDxwyXP6GLehVQlUoWaZ80xZtuvbo3axl22KlymqPLeRV0se3krof3yFx1U5ZUqBwcYfEnHT+wiWyzU5desiaRuGpX+Uanbv1bNK0VU4XD9PuueYpWK9hgKgg/hTb2rfy5PdSZ69YpUbHzt1L+/iJ7b37DojGg4JuOGim1nbo1E0eVbx0OXFICW/fpAZk+IjR8hA3D0+x+/JlhNheuXqtgyY8PfX3aaOjgoMfivJ3794blYvTtWzTQfRN9FAV5nDOK/oQGxsrDjl3/qLYzleoqMPX4amze34x4J26/lqmXMWkuuqYy12OgKAW9BQHyhJx6mQrpOirsnPXH6JvCQkJV65ek38NE98Naz4RqcIP1Vu17SgK/X9pZGFdVzHIshHtZ5Tfs5j6XiVbIdnvAKxEeAoAQFZHeJp24mIN2uVNw8KedezUy6uob0HPMrYlp0qxEhVatuocEhKqnYLKLfzAN4zwFBmT7qGGHR05ejwmJqZHr75iu2btumI77Nkz+VZOF4+/du81fP0SJU6588gK6jZ/lYUZBaP7DxwyOtzZPb+qs27DJnWPvHiFhDyuUr2Wtm/jJ06JevtWVRDbokS9O2LUWFneu+9AuREZFeWYy13UEVexYeMWh8SHBUVGRopdX78q8qibt26LmsHBD5MakNo/NxD1Hz58JHcPHDosdvsPHOKQdHgqTvo0LEyldapw/cbNCQkJqv8XLgYWKe4t3hKXaTQs8o5yFZ526d5L3Xgu/s6zfMVqs139ztH5xMlTstq4Cf+OjMwNxWvIsJHJVrD+e5K3gJecKiu+MGou56w587V1kvpEqtaoff36De31vnnz5tde/cyeqEDh4s+fv5AXLmcru+Ut9OTp5+GNi4sTQ5dsBfnNsfAdgJUITwEAyOoIT9OITE7l32jFX2H37D3oW+HHVGamRlNQS3n/sHXbLvGvEXWij3H6XziAtEB4ioxJ91AjfSxfsVpGXZevXN1/4FB4+HO527f/YFkh2fB0z979Kj2MT3zldsun6oi3ot6+PXrsxI2bt2RJ4KXL6uwLFy9VBz58+Ojjx49yd8myFbKCiurev/8gN2RYZlmy4akFKjwVhw8dPkqaOHma6LbsZ+OmLVVllYTevnP3+IlT4l2xff36jew5XCtX+0nuyr/GiO3ZcxdoDxEjc+v2nQOHDr97916WNGnaymyXxGC+fv3akHiLeplyFXv27i/ri2OtrGAlcaXywM7deuZ08ZATlp8/f6F9bJTZTySbk4tMNsWfK1auWbpspdwVr+o1/c2eK6BZa1nhzt17TrnzbNm6Xe6OHjvBygqwC8JTAACyOsLTtBAXa1D/EoiNjZ00ZZYdY1OjtVA7d+n77t07NcWV/BT4JhGeImPSPdRIH/MXLrkYeGnNug1y17NIKflbftWadbIk2fDUweKapzExMd5lP9/WnT2H6/0HwfLvD7lcP9+8X7FKDfn7/d79B/Lu8sJFS6uMVc4uVFFd6JOn5StWLeHtq71JPClDh4+aNWe+ONaGAbH8wKgJk6aqmuK6ZP9/+/3P7xydHTR5X7sOXWQdC2uert+4WZZ07dFblsyaPS+pXrVp31nWuXT5ipyo+/z5i/yexayvYA05+G+jo3O75RO7q9eul222/XI5SX0i6qFbw/43WlYrUtz7z7/2TJ46Q7uUgREV3B8/cUptyJG0sgJSj/AUAICsjvDU7tScU8PnGQfvu/Xon/r79C1PQW3Vuuvbt9H/TXTl/n3gm0N4ioxJ91AjnX2f061K9Vqjx06Qv3O3bd8py1MZnmonP6owTrwrdmfPXSB3W7Rur+rUaxggC+UKrSqqGzt+cvqMgwpPP378GBHxSnj16rXMQOVLDIjM79TCqf6/NFKHyxmXmzZvk7sWwtNqP9aRJSqwFm9Z6NiGjVtUH8RnpJ0Aa2UFy2r89LM8VnX+pzq/yBJt/81+Ii7uBeSsYXHeM2fPTZ46Q4yJdr6qWTldPG7dvqP6LIa6cNHSKaqA1CM8BQAgqyM8tTv5hCjxN2PxD4kuXfukaXKqNG/Z6e3btyo/jfnwSfdxAGBHhKfImHQPNdLH9znd+vYffOrv0x8+fDBoXtt2/CYrpDI8VTNYhUVLlslC+UyqP//aI3c9i5RSdVzzFJSFBw8dcdBEddqANU0lteZpmXIVz52/KN/q2Lm7KBGXL3ffv/8QHf1OkisYXLgYKI+yEJ4W8ippdMaNm7Za6Jize/6wZ8+MPp0UVbBMdezAocPzFiyW4uLi5N++SvlUkNWS+kTGTZhi+Pr15s2baTNmq2dYmfVD1Zqqfp9+g2yogFQiPAUAIKsjPLUvOeVU/AVa/MNg0OBR6RCbKo0D2sXF/bsOWkI84SnwTSE8Rcake6iRPnbv2Sd/vZ6/EDhl2sy69ZvIlTpNZ57mdPGQJSW8fa0PT1UdB5PwVLVctKSPqpOvUFFZuGfvfgdNVPdzvcbpMyBJhadCk6at5Fty3dUVK9fI3WPHT4ph1Fq6bKU8xEJ46lGwiNEZLYentfzrq7Vl37x5I2fvpqiCBbnd8r2NjjYk/ZILtlr+RETJb7//KU6tPXDh4qUWzquNXMU30DRpTbYCUonwFACArI7w1I4+xv2bnIp/U02dNtfTq2x6hqcFPctMmz5XPT/qYxz5KfDtIDxFxqR7qJEOKvxQXcZSCxb9m3DlcM4rS7Zu2yFLNm/ZJkvyFSoqS2rWrmsUjI4eO8GG8HTSlOlyt0v3XqpO63adZOGUaTMdNFGdajmtWQhP1fPlV69dL3aHDBspd7UPeipTrmI2Jxe1K+fzpj48dc1TMCTksSFxMQFZ+cTJUymqYJl6xlTYs2c3b93WkoHsixcvHXO5W/hExFVU+7GOW95C3zk6+1WuMXzE6Ojod6JaaOiTpE5audpPcmar6vPkqTNSVAGpR3gKAEBWR3hqR/L16dOnixcvFyvhl57JqVS4SNlTf59VUypiY/QfEwB2QXiKjEn3UCMd1PKvJ3+rLl66XJaoOaTbd+6SJQsWLZUlQ4ePckhc3fLAocNGwaha/bN7zz5FS5TJ5uRiTXhaskx5+f9E/wkPr1O3oTiqZu26oU+eGhIfMyUfIWVbeCouZ/eefStWrbVhTFSUeffefXE5Uu++A2fNma/mZrZu18khcQau7P+ly1fc8xUWJZ269JCd/9/IMbI1+ewm0ZRb3kJydQLbwtNNm/+NsPsNGHL4yDG5rX0iluUK9RoGyCmxlar8aLb98xcC5SHlK1Y1euvgoSPyrfYduyb1iajsde78RbLEMZf7g+DPzwe7ceOm2TPmdPG4c/eeqBAXF+f/SyPxHRDb8fHxNX762coKsAvCUwAAsjrCU3v5+PHfh0TFxsZWrV43/ZNTqXIV/1evXhv+nQCr/7AAsAvCU2RMuoca6cDFvUBExCv5K/7v02cuXb4iNuT/pxS7sk4t//qGL6+nYWHR0e/+CQ+XMaIKRpu1bGvQvEp4+1oTngpjx09WR6n/PypeAwYPkxVsC09v3rotDgkOfmjDmKgoM6nXocNH1QPfly5bKQtjYmIePQqR2+Hhz9V6plevBakDN2/5/CAmG8JTNRv3+InPk0mLligjM1nxtzK/yjWsqdCrzwBZoVFAC9P2y1WoLN+9FnTd9N12HbpoGzf7ieR2yyejUvESg3/s+Mnnz1/I3e49+5i9KLVi7MTJ08RuyzYd5K741Jzd81tTAXZBeAoAQFZHeGov8vXp06e58xanz0OikrJg4XL15CgmnwLfBsJTZEy6hxrpw/+XRo8fh8pf9FFv344cPU4u5fnx40eV7o0ZP0k9bv7CxcByFSqHhz83aIJRp9x5zpw9JyvEx8dXr+lvZXgqdO7WU+VuhsRJmnJep5RBwtOEhAQxOKLZ8ROn5HL1UJW/c3SeMm1mZFSUqnns+Envsn6qQpv2ndWTuPYfOOSQ8vC0kFdJGXBHR79T49ZvwBCVVIpCyxVyOOdV4Wm9hgGmp1CTi4ePGG36rvhw1f+6Lu3jl9QnUqBw8VVr1snQVr4ePQrRLsig1bBJc1knKOjG9zndZOGO336Xhes2bEq2Qvr/l/KtIjwFACCrIzy1i49xn+QrLu5j1eq/6JicCp5eZZ8k3tCX+O86Vj4FvgWEp8iYdA810k02Jxfvsn6VqvzolDtPUnVc3AtUqV5LG3qa8irmXbnaT24enjb0oWhJn6o1ahctUUb30bDB9zndfP2qiGtXeahWDue8FavU0CaquhDdE393KlehcpqexTGXeymfCp8/Ss1DwJCREZ4CAJDVEZ7ahZrpuX7DVn2nnRZKfHLU5Cmz/01zP+k/OABSj/AUGZPuoQZgLx4Fixw6fPT2nbu69wQZDeEpAABZHeFp6sXFGmROGRX11rfCj/omp1LNWg0TEhJkpBsbw+RTINMjPEXGpHuoAdhL/4FDgoJulPbRefYrMiDCUwAAsjrC09SLj/93tdMLFy97FfXVPTkVChTyPv//2TsPt6aWrQ//Defe+51y76k2ROwCgth7QcWCWLCAvYGIqIiIIogoFlDEgg17xYqoIMUuKgjSRDrSe00l38CEybBTSELZgaw878OTrGlrZuJh8ztr1kR9xpKuUADiKQB0ekA8BTQT1kUNAGgr/vPrn6z7AGgmIJ4CAAAAgLYD4mnrEQrr8T0JJ0+dU+/MPmol3VAH/dRFRfrq6afLrNfhO3nr60E8BYBOD4ingGbCuqgBAADQ3oB4CgAAAADaDoinrQefjhcKhRYLrFXVTAf0nzh/8pkdi/N3LM410p9PF80Ys3/X0vLN8xNMR7v10Ruhqiw7cPDI8vJyfG0Ul8v+KgEA0BpAPAU0E9ZFDQAAgPYGxFMAAAAA0HZAPG0lXI74Yqbq6uo+fY2UFzcHDZhmPsFv30qh23JEPWLm2EOktE+fYdsWpWI7quC8tGjcMLt+/cYqL6H2GzAsMTG5STyF4FMA6NyAeApoJqyLGgAAAO0NiKcAAAAAoO2AeKqYutp6LlfE59ULBA0BphKEDalOeaiIX4+Pxn+O/tKj12BlZM2+fUctM73rvKSEyKbuK0To/bTRrlS1oZvnJyJjY5FYQnW0zJk+el9v3aHKjNKnr9HLV2+xbzxeg3ja6G2DwwIxIh5PxOWwv8gAALQIiKeAZsK6qAEAANDegHgKAAAAANoOiKcywYJpvVB8JB9LkCI5Lxx5evvOfcVhoTp9DPQHzVo45eKupWVYNiXCqPPSUotJp/v1G0cf2x86xGKl2VO35Xxcs6my0GHBd7OxB/X0hrcYhXrn7oN66iXP/8acA/VYC2Z95QEAkAmIp4BmwrqooSTjJ5mOmzitu05f1j0BAKDTAeIpAAAAAGg7IJ4y4PHEOiktmyp4kTo+x04pljLNxh1yX0GHmja8cVlWtXxmkG6fYXKSouoPGjDVziJ2jxWneUPhHqsqw8HmihOq+p06h++MUjwRWh1GP/kNYapwzB8ANAsQTwHNhHVRQ0ni4uLR7zg+n3/2fMC/fv6ddX8AAOhEgHjaBVk+cs8tv9DPL7/P1bMnxu3zfZ7e+PDk2jti2Tzz0AXPR8rgu/MWaXVq911in6Pbjg9w5zwe4lHQm7bt2cXqJJnChskeLO7UYkMn4skRh6ssegIAgJYD4ilBIJARTyoUCmtq6lJT02/fub/X7eAGm63rNzjs3OV+MeBaUlJKbW0tqoBrurl76erJPVDfS3fI1kXpRABt1EB5FpP8Bw+Y1ltX8aVS6KeR4WDzDXPfuS0XUCGo9Uum3dTR1Vcgnh708iHuCQSCysqqrKycz9FfwsNfvXr1LjHpW0FBIYfDETTWkZo7XDMFABoEiKeAZsK6qKEkWDzFryVWK1n3BwCATgSIp12NHYuOV5Ry0dNV1vcSYrzg+Qg/cj28+IoYgy6/VfJB7UNoEm6ycIgjMRbl1bTfLFaPcyMDpcbnq92PmY7dxQOPV45xpY0xb9JI51tmH2Zxsw7aBhBPnt/+2PoOLQ12BPpHsDUdj7Xn3NecZXE9AQBQGxBPEXweUzbl8/kJicknT51bscqmT1+j7j0bkpnq6g3V1TNsBL0Z2qPXYFS0YaPD2XOXUJM9rp4KNNBeukO2L8rG0mcj9dYzHg4ZZKb0BVBDhw9dvmVBEt2D1XRFiQJQkYfnkaqq6oePgvd7Hp0+c0GPXkO69xzUq7c+KkL01BnSrcdANIWFlisPHfaNiHhVW1tHYlHxT6EQkqICgEYA4imgmbAuaijJb390n2I6i8vlol9tPsf9WPcHAIBOBIinXYp5/R0Kc6vRo9Wzm1HWI3Zj45bZh+tq66srBad23zXv50AqJ8f8UPJB7crRp7jJrmUnifHts4T2m4gXpSoG3/igXidOlr7pSYUVZbwZ3W2IcUYPW2TBPddWC9s1eLZF7p4JJ9M86XKnNV2hOZ5wvl1aWPc+NLHjJ7JqzN4PoUloFvaz2BSjAQBQGxBPBQLJeXahUFhXV/ch6vNQo/G9essN6mSgbzgGNdzveVRXYbVNFl8YZ/bdVtRbTPLX0xupMOzUcED/ievnvCZpUsnJ/dnjjyg+tn/46Ik3bz706Wuk5ES69xx8xj+grKxCgK/HanqBfgoArAPiKaCZsC5qqER6egb6pRZw+SrrngAA0IkA8bRLcdo1ED1XfXmbThtfBcUh41Xvp7RxTh/72moheRSrKOWWl8hlt/Up3CrAK4g0Qe/bbyL3/CPIQHTSACVZpO8YFhiNm8e8SaOLNk71JD0nReewu1+x79KJM62JgbWZ5pn4ORv3Q5TujmFGd5vLR4KrK/ho6JoqITzTA0AnRcvFU4FAkvGTy+UeOeo3foKZ8rIpxtBonFAoPOMfoLjaoAFTLSad2bucy9BAnZYUWU0P1O1jLN3EWH/xJouYPVa1jISnO5cUjjPZ3EdvuGLx9MLFq1Efo1WaC2o1WH/UQsuVSUnfhE3H+dFPHo/9zQIAbQYetADNhHVRQyUSk5LRL7Vr12+x7gkAAJ0IEE+7FHHvM9BzVVhg9BGHqxYDtiKLed8tNVUNIunlI8H7118gNem/kxtiM3vYKtP/EqOdayfuw1j039reE8HYzfRStbmfyx3S/M6pMLro6NZrpOjRpTcsbtbMnraV5eIY2FbKjpGPYsmkXFec7shZbJiynwzNuhgNAIDaaLN4yuNKbkmKi4tftHiVrp4KOiNhwKDhAoHgeUh4T50WVFcdXYOB/SctNb3tsqyiUQyVRKG6rxAO019MV549/qg7DlClZNNtC9PnTTzZR89EGceCn4a+fv1eQSZWBej1M/I5dqqkpJQsEQfiTwGAPUA8BTQT1kUNlfgQ9Qn9Rnvw8DHrngAA0IkA8bTrMEd3M9ZJOdSBdKdFvuR569PLFFL51J5AYo9+ndoe/lgM2Go9Yjd9aZVMZnS3WWbsvNjQiVhm9rStaoxkRFRXCmbp2Kk69PNbUWR2nhsv0kWPL70hRUe3XsNGs16bkA9LjHYq07mlwY7lI/fMH7itletjY3qAeCJPdsSOoWXEUrg8cjPKSVcKZmHRv2FHkP/Tu9ko6A2D6iwcvB3NFNVXUO2ow1UydBuK0Wh0NK71cBf0ZWixskrzahPflFkZAOhcaLN4Wl8vPrCfnZNraDReDYUR06u3fnp6ZkZmVo9eg5VtpTt05cygPVY15DA++jlr3GFSoY+eybZFaW5N4ulea8HuZWXTRu3p1VvZIfr2N/4Q9Tko6Lna89LRNZhjvoTD4ZD8p6xvGQBoLSCeApoJ66KGSty99wD9OktLS2fdEwAAOhEgnnYdHOYcIY9WRIwjV0Uhbp4IJZVD734i9lt+L5Tp33rEbtQt5vWTr8TuvOQEsXttujSnjz0aND2pEHdeWy0MuxctU2pcauT8+NKb0sI6XLOsmHP7ZNhcPXvb6RJVMeFjlkqLgOaF3Cgv4ZIekCfIglzCFehMrxunetqbHXoVFEciQHPSyjzWnpPZM6ocfONDUV4NaZ75rejM3ntmvTapt18+26+Trh4FvKaLUJ8+jjfi3mcQNRz7dsM3hA74RWuV+DkbzY5+qsYbsXPxCVLN0mAHapiVUkzqFOZW3z/3Up72d8Dm4vvQRKJf462JfBTLSCxw2jUQDZSfXUmq5WVVIAuqqdI6oK0h35+1E9ythu16ePEVTt2Lh758JFimKqrMvPatOUc6tzLZRTf33HiRFHmsO08Xoe8hKXJccEzVlQGAzogWi6f1TZqgcMGiFUpf3CRbZAy4dJ3P5w8bPkmVVvr6g8xmjzviao1P5QunjHSmKgxtzJEqbDzXXzBphGPfvqNVcrJv/2FZWTkn/M6qPS88tV27PcTBp8J6trcMALQXEE8BzYR1UUMlNtra41w9N27eHjthKuv+AADQKQDxtOtAn1UnYhx9oJtWiGjJiaEcycNzwwXSJPx+DLHf8A0h9nP7HmSllkg/6kWFJTN6szc7VFJYK10zKTrH3+0++fjgwivlV2CWjl01JWzReG+7btoYnEsyvaI3j6goVEJtTf02c29Gz+f3P6yrlf3nIpqaevrpkytvSSdHHK4Su6XBjoSPWfIemtMSC4gSvX2+j7xqq8bsxXWcl5yQuc6I7NRS6+EutEvm/RyiX32X1ydageNON0nlzy9l1wy581GldfjalKKhpkro43iDXOdFQ7RvgpLz2m19iti3mh8lzad3s0ErSYrOut8nRVYmLkSzTk8qxLeNqbQyANAZ0VrxlMcT34aUlf2je89BrVEYETNnLeLzBQ5bd6kqwuroGvbvN2HhlPOLpl5k5DAd2H/S4mlX5oz36S0rHWqLjBo9jcvlWi3f0MqpjZ9oVlfHEaeFhZP7mkdWgSj0qyg5F6TtLg6Ip4BmwrqooRL//uWPq9du4t/+IaFhrPsDAECnAMTTrsOuZScDvIIwm2cewsbjTjeJkUTkLRi0jX4O27n4xOqxe2WycrQr6f/2yTDSxN9NIjZ9ikwhdqwwlhTUImNeVgU9yvrJHqSJ7fQDZcUcUlRdwU+O+UEsdLjl4S1XlF+BLbMPy3vW3DBlv6kcdSDhUzZ9cRMi7F403e3Di69IEfIt5k3a1/cZtEqr3h1N377kStxrWpzp3Wy+vJU4g9bkU8Q35F5tjeTPoWvHnuPK5/c/lDlZtP64gufGi3RDNOKnlym05sjI2BD58AspSor58exmVMSDGBIEiqe/ckzDV2JGD1uZKifCz+WO8otg1msTWUkiT2enlaJZV5RKwoeRD3Qr5eeFvnXESOf8dVvtT/t8+UgwKQqkLivz2nRJ1ZUBgE6K9oqnXPFVUfHxSd17Kn3cXm6Yp1FeXsGTYHXPyOu2anRZmqzBseOn6uo4ev3UEV5pTEZMrqmpwWsF4qmmkVMkMvMWrTovOhLCexonYN0foP0A8RTQTFgXNVTitz+6h0e8BPEUAACVAPFUG3FeckLJR7SkmB+kVfTrVGLfZuGDjdO72ZQV1dFN7p2NxHlOzftu+ZFeRux7V/njJjO625Cr4RGvguIWDGoIpTTv5/D2WQLDAVpybZFZOnaWBjtungglzdF7ZCGqMZ3pFZGeWLip6Taq066BMmftvuYssWellqweK47oXDdpHzmxXlpYhzPMKs+cPvYkBrailIvDGxnDITdIkCmdu/Zj+DdsRCuGpvblbRq9yMiC19N6uAvZmuoK/p7l4oukUJ/0VpIj58tH7iHGJ1ff0auK9gjbczMrvGwDTJtykqLhSBPkBl5qM1Vy1G6acZDeEeSn97br+JD+xqmedBFZCpXmhb6ExIJ2n4xL30iGuHM6HNsXDt5ORFsSdqrSygBAJ0WLxVPxbVGlpWWtObOP0dUb+iIsMiMjq2//YW0rg6rHwMEjKioqr9+40/qpjZtgVldXB5GnmsnW66KJB0WrG8VTRHoBxJ92WUA8BTQT1kUNlXBy3o2V073unjp6A1n3BwCATgGIp9rIxQOPlXxEC7r8FjeZ0d2GiEq1NfXm/Rywfe0Ed7o+42r796GJpMhx4XFsPLzlCjEmfMqmtTZLgx10ulJaVVSe10++kh52W5+ii0IDP5Oiorwa+m4lOmqVxC1O72ZD9N+62nqHuUfp3uh8stvmMU/6K2aruUSniH71ndhn9rRdauRsM83TeckJcvTetFEnJfXfPI0nduQhSRqLPJzX34EUhdz5SJowEJ/sYgAAIABJREFUjr3TKkmAVxA27lrqR4xh96LplV84eDuaINZkaWjFWcnMuQyOO92kvz+uK07TpSQoFX3lSG4EVedVnF/D8HCbBTPdAfmeBxx6Qowk7FSNlQGATofWiqccjvjYfn19/e49ngpCOIePnLxmrd2+/YcfPgx+//7ji7CX5y9ccdi6a6nV2kFDRpFqGzZuFQqFlktWs66cIlautuXx+EuWraXl3WnTLVat2bTRdtsOp707nd3st+xcvXaz6XQLBQIrKrJ32InmhddKXh4bgBWefmlQTmnx1P8lr7qGfceA9gDEU0AzYV3UUIngp8/R77K4uHhi0dEb+DgoGLF6nQ3r7gEAoJmAeKqN0PKiYny2X8dNNlDHn79/zSNdedldJvactLJZzaMO6chTolR+DP9GjE6Wvgzf6OBTxqFyJaGvMFoy1IkuojO9+u26TRcdspdIuuTW+B2LjhPjl7dpjIF2LTtJSlFzlZxsLjuGKqhp3s9hw5T9l48Ek/pE6UOsGS8Rr9MTCyWt+m4hx+qrKvjoI93nnD72pFXwjQ/YaGMquaeL05g59Jbfi23zvBXo1y8oMdpzwwUFs5DHk2vvSA+MbAkrRkniPdOTCtWeV8IncZhzaOBnbHn3XPwdIxGsLxqLUHNyEp+Enaq3MgDQ6dBe8bROJBDU41dlZdXEybOlpUO9fsZPgkOqq6uFQmG91IvH41dWVl69dgsfje+pM+Tbt9QfuXmsK6eIwMBH5eUVAwePQO979TZYt2FLSUlpbW0tkUGxaoxeyFhWVj7PwkpmPybDJ3G5XByii5aL9S0DCEVlotk+TPEUEZIAh/e7JiCeApoJ66KGSsR8iUW/zu4E3ieWwYYm+HfiEe/jrLsHAIBmAuKpNkLLi+f2Pdi5+IQ8SEjdEYerpMmTa5KTy/fPvST268ef06NYGuwgRQU5VdhoMWArOa6em1kh7Rt9idPtk2Eqzcu08bYf0pzR/8LB20lRg+7Wz4EupROb+jjewMZbfi+IMTnmx+NLb2hoDVrV+4LoGFjGhV0bpuy/duz5u+cJaYkFdN5Pwqndd0llWrx+fltyUxN9UVLhjyqG54+pRQ4LlEiW8VEyLqrKy6pA/iwc4ig9C/pyMPUyfn7/mkd6cF5ygi7av15yQdmLJt1TjXlFPIjBFhzhS/43QF1tPUkai4N5/XbdJs1J2Kl6KwMAnQ5tFk+5HBFRQktLy06dvmA0bEJvPUNjk4lu7l5PgkNqamqwbijvhUqFQmFdHefp09D1G7asW2/P5/OXWa9nVzk1m7WotrZu7Tr7iZNm37n7oKysnExT5hTwKzY2/uTp8ybDJ/foNbinzhAdXQOnnW45OT9IBTizr1HsvSdWThniKSKrCGTuLgiIp4BmwrqooRLfUr6jX3xXr90kFiKeeh32Zt09AAA0ExBPtQ4rk130Q9gifaWkH1pbPLbjBrF//ZBJ7Nvn+9BNaJ3rTfBXbNw004sYSSQgTfj9GFKBvuFHSfatOUeav3wcSxfRh6/fhyYyGpL4RISN6QFsDLsXreSz7AGbiyr5mfVdIjtaj9iNjTO629C3csnDYc4R0g8tXp+kbmo6vvOWkp4/bgqzRSw2dJJ3p3xpYR1aQHoKC4c4ktKSwlo1vormfbeQe5+qK/iMsGVauT7jek/ted3yE+fAzUopRh+f3xaf+n8VFGdvdgi/R7Oe0cM2O7UUf6TDTtVYGQDojGizeIrg80VEUqTfCARChtRINEShUCgQCLhcXl0dh8/no/dCYYMRvYqLS3g8/tt3H/r0HcqWctpvwLCYmLi8vILbdx8Im17Iz4rKypKS0urqGuQyHUjLEILxT1SNfMSlaKFY3yyA8DJRopxKi6fnXsm+1xHo1IB4CmgmrIsaKpGZmYV+o10IuEwb//Xz7xUVFfZbHVl3DwAAzQTEU62DcQOSkq1obXHTjIPYaKZjR7JSVlcKGM9z9EnzgIOPsXHP8tPEKDNLZk6a5KT/ilF7VJ0dfVsUIyEm8kHiT1NCTMwsNJFK8QG3qgo+Sa/56WUKaZKWWJASmyuPDVP2K+8kHQNL3yN/5ehTYq+rrY9+nXrDN8Rr0yV7s0PkKnnGOtMRkXRKVjp354/0MgWeH3W4ynBv11K/yEexVU07S6go41mZuJBqLlaSrAVRYclqfBXp3KPSKRposXKbubfa8/Jt0lvRjKyHu5DA580zD60c7YrfJ37OPmgbQHpmhJ2qujIA0BnRcvEUwecpCC2VqIroVVVVder0BZMRk3r3Mew/0GTAoBH9BgzT7TN0wcLliUnf+Hw+ER+PHPVr/U1N6rF6jZ2gMR8BcoPD5R4/4Y9c1etnPHDwyEFDRqGfen2NDYaOO+1/kcPhCJoyF8iUicl7Ho/9bQIIZZUi8+OKxFPEy2Q4vN/VAPEU0ExYFzWUxMBoxOp1Nug3NfrVdvioD7H/8r9/Dh3x5nK5fQfos+4kAACaCYinWscN3xDyBEYf2VaAPG2RDiNN+JjFaEUySyJIaJ7nBslZ7PvnXjKaOMw5QkqL82vUmN3nlxLFjXEM/E2w5JT9rmUn6aLNMw+Rorj3GcROR56qJI8qho6BffssARtndLchCmlZMQdfFo+xmeYpc53pfamtqZ+rZ0+K6AhNPyoiVXnm9Xfwsg2IepFEP7LTwa2XDkt0TEbGBiU5s/ce6YGR+BWtBrk6jJ6aGvOiI6DJZVNY7bXovxV/zEguSo75gd9Lh52qujIA0BkB8bSRegEVgsqQTb9/T3N22TfVdF6PXoPlSZa9eusbDB3rvMs9NzcfNSktLRs/0azjldPpM+eXl1cgB54+e7FmnZ1iAbd7z0FzzZfuP3C0qKiEDjIlQbiNEbj1PC7ruwM041BQM+VUpniKyC2Fw/tdChBPAc2EdVFDSeLi4snvuFlz5xO7kcnovPz8+YuWsu4hAAAaC4inWsenCMl9TeQ0tGLI6WZOc22RVrIeXHjFaEXu3kEsHLwdG50sfYkxKTqHrj+jh23061RSKn2yXhmI4oawNNhBFxXkVJEiRrICX2oigf4RxE7rg4e3NLsSymLA1gCvII9159dP9jBrft68RZrFwB56go10OoXw+zF0ffpsPr3OtHidmlBAN9k+XxLU+bTp6iTCadfAQ/ZXNs88hBO/LjZ0cl1x+pzHw+e3oki+VwJqTrqig3nfPI0ndkbaViWhtWlGD+sm7SNFKbG56s1LuisCSTFB1GcCHXaq3soAQGcExFNCXW09PsVPjud//Zq4crWtAs1UpiJ56fINHo/340duQwbVDlROBwwc/iHqU3FxyYqVNr1666vk805nt+Tk70RCRT/5PJDeNJGEbKZyilglSzy9+4l5WkIbePjw6ZWrtwoLyln3pM0B8RTQTFgXNZQEi6d5+fnOLq6Mop//+zfr7gEAoMmAeKpdTO9mQ24Y51CnoRVzwllykQ6tLQZff0/sjOvmrUfsJkVZ30uIfZG+I/q7lBT5u93HdvN+DiQqEHPl6FNVZ7fM2JnuwWLAVlJEXySVnVrKaBhMqWBetgHEvnrsXmJPTywkkit6cqXjWKVlNcXIjIG1GiYRTzOSi+boih+OnSx9aYHPb9dt0g990jwp5gc9xIzuNrkZ4r8ZUPNNM71I0cUDEukWp53du8qfWNDXg6R8NW0Mbv3yNo2UulhJInYzvxURu+vKM2p8G0mOUQ6V+BWDvk6k6MlVyQVlKs0LM1fPnvGHR+y7dFJKX57GkQo7VW9lAKAzAuIpgc+TnFUXCoV7XD0HDh6hxul7Xb2hK1bZcLjcF2GRPXWGdIxy2qfv0JiYuMzMbIOh49RojqY5cPDIwHuP6dP6kOdUAwmJVVY8PatlmU/LyupMZ87uO2AwYtiIMd9Tstt7xA4GxFNAM2Fd1FCSnrr9//xHh3U3AADojIB4ql2sGe9OHr8YB70V8FSOtpgan0/s6ybto5t4rJVc3MS4GOp9aCL9FJieWPgx/Ftxfg3j6dB1xWlVZ7d6nBvdQ1ZqSdSLpOM7b5k2v0gq7B4zWQE9EdQJXfTk6jtSlJtZ8fjSm/vnXv5IlyRm/RSZoviUtzTyYmBpIS83o/zN0/ik6BzGsqCJkPo+jjfoosTP2Wgl7WeJz/t7bbpEiirLeWgXbp8MS/goyZGK3Fhs6GTaKKnTF39VVwoiH8XePBH66NIbeqYpcXmopkxvSwpqo8KS6bunWgRNnDSnE79iHpyXBNsytGnl50Uoymv27dptfYoUffuSSxcxsp2qtzIA0BkB8RTD50tEw5ycH0ut1qkUvCmtRW6yc6yqqgoKejZYf1QHiKc3bt7NzMyeOHl2azpBU966zaXZPVGQ7VTDqKgS2V5WSjyNShey7m1HcjfwMVZOMW5uB1h3qW0B8RTQTFgXNQAAANobEE+1Cy+7y+Txiz4NrZjUhALSavXYvdho3s+BxJCWl3AZAiJ9cdNp10C6aO3EfRWlXOnHwaK8muw0SSjiEqOdqs7OrNcmWpfE4PPgtD8k3FV6IqWFdYw+5/Sx/xSZIu0tJvZdOh3fqgx0DCzjwi4/lzvSQ5QV1dEOeKyViKcbp3pK16eTFdCzZpCfXYmak5rLjJ3TEgvkVeY0CseM+7tePo5l1JFO3aAA+r4pkviVQF+EZTv9AKNU+XlhaGk1uXmILp3FQma2UzVWBgA6IyCeIng8yVH9nB+5Q43Ht4mgudFma01NTUTEa0MjdaJBFYmzlEo7YNDw4Kehyckpev2M2qTz8RPMysrKiX4Kt0VpIHGZoqjvoiuvmeLp6UheWn49orSiI9zYf+DokmUrMA8fPm3v4RRz//4TWjw9dkyc97ysrI44iSgqqmw/H9oVEE8BzYR1UQMAAKC9AfFUu7h3NpI8fj258laZJvP6y9YW6avSP7/8zmhF31O/1fwoo3TzzEPfv+aRCqj/l49jrUxcSDBjbmaFehPcNs87K7WEfsrE58Fpf0i+S+mJfAz/Jt3njO42/m73aWGX0yjSnfN4SO7OUh73NWdJJy+ax+SaNqZDpS9zR/6snbiPjrUM8Aqi6/vuvFVWzCGlyElGh64rz9BCJKKilPvo0htGQljTxuPtAYee5KSV0ZU5jWGh9/wjpDXipUbOdI5ajlTqBsWgsUjDS4ef0EVmci4oU29eps2Tq+5ff4EuQltAihhhp2qvDNDxLDZ0ehQQ+fpJzP7159p7rK4KiKc8nuR+pMrKKpMRk9tM4tQ1mD1ncVlZ+YuwyHYSTwcNGfUt5fvnz1+GGo9XI8OAPCZNmVNbW0f0U9b3CJDJ62TmhVHnX3foUf0Vq9YTsdL/bEB7D6eYstJa+th+Xp744a2kuJoWVYm90wHiqcZyfMf19yFxN44/ZZx/0hJYFzUAAADaGxBPAdZYP9nDdcXpnYtPtO1DxvRuNqjnXUv9di07aUflxGx9t2snuKNukc8bpuxX9ai+8swfuA2tyW7rU1Ymu5Spjx6j7c0OuVidRK1WjnGVWcfKxGX7fB+31f4Oc46QbKryWD5yj5Olr/uas6jDhpn2sFVQ2Xq4i9MiX+TtVvOjLfbc5qg0r9aj0soAHcbCIY5FuWXk7tS4dykyNXRAMVounnI55BskSs/IavsQUV0D0+nzV66ybXxv2Fu37cTTxt569dbftn23vuGYtnUbsdByJRFPhUK4PEoTAfFUxpq8ikIU5Ev+ryeIp0C7cvHAA/JLhMfle9ldZN2lDoZ1UUMN/uquO2b8lIlTprPuCQAAnQIQTwEAAIBOzL2zYaLmr4rSaqdFx1h3rHOh5eJpY3rPhheHw1m8dI2qwqjKNdtKPNVthAipyvmgamjqBputvKaMBoLOfHnU1/cZbqv9CR7rzpcU1NIVYt+l0xVOutyhr7jUWEA8VQaGeJqbW9LeI7YTIJ5qIIsNnQR8IeNR5Pmtd7N07Fj3rcNgXdRQldNnzqFfbWin0tLSWXcGAIBOAYinAAAAQCcm5nWySNbr+rFguMhLebRZPOVx63FwpVAodNzhqqS22K3HIAPDsfv3H7l9576f39lJU+b83W2Art7QNpFZW4Ipwuq0JJ720hnSvedgJ2e3kJDwl6/e+hw7NdR4fI9eg5XUW+/fDyI5Dbgc9rdMbZyXnKC/9kccrpKiilLuytGS0xvovx4KMp5rFCyKp0e9/ZYsW2FsMoqIkpOmTCd5RX/kFNGVCwvK/c8GLLRcNmLUuMEGRrPNF7h7eMXFNWQef/nyA2m1Y+duZCkvq1tmvZoYQ0JfynQg4NINUmf7DhdsXGq9ihgzM8U3gsqMPN2y1YnU3OO6X940V65aT6oFB79gd7tBPNVAHBf4yHwOyUzOJXdFdHlYFzVUYq7FIrJNIJ4CAKAkIJ4CAAAAnZirR4Nk/tGCXl/ff4cj/EqiteJpXa34THp9ff2X2PjB+qNaVBJNp1t4HvDOzy8QNn/V1tbevHVvylRzmSKpPOMy6/V7XD0XLFreq7c+giGGNrZqaIiKeugMmTFzgZOz2/yFy2X7JtNnXYM1a+3i45MEAoGwKcIWO5yXl3/goPfI0VNbVHVNRkzOzc0TR+fWs79rapOfXblI35H+5hOF9LjTTdp+zuMh694qCYvi6UbbLbQiySAt7QepGRn53mjYSJnV3NwPPngQTD7Omm2Bm6xes5EYN9jYy3RgiulMUsfbR3wRJd35t+RMbJQpnvr6nqGNRGmleR4SSdfJz2MmQO9gQDzVQMz7buHU8WQ+h3BquVpyhJ91UUMlPDy90O6gX4vTZsz575/dWfcHAIBOAYinAAAAQCdmRg/byIef5Omn5cVVOxb6tLcPXQCtFU8FArFyyuPxh5lMUqwh6vUzvhhwDf25RdKA0i+hUJiUnNK3/zDlxVOTEZOLioobjsMLBDwe7+vXBB1dfWnxdNSYafEJSVwuF6uflZVVffoaKR/ZiipnZeXI9Llx4rwNNltldkizYqUNGh234nLZ3zi1ef3kK/3NXznGtbKcF/UiiTZumulVUyVk3VVlZ6Tx4ml4+BsF1RDzFy6VFk8fPnxKjIMNjMrL6hijx339RneS+j0b25UXT9FP2njy1DnFc9zmuIv17QbxVDPZOu9oTWWdvEeRp9ffdPkj/KyLGirhd+oM2peCgkLWPQEAoBMB4ikAAADQ6Tmz9w6fJ5D5R4tQWH/N5wkc4VeM1oqnREM8f+GK4gBMY5OJsbHxJHiT1iJxLOf163d09RSFrEob55gvETTKt6TPxUtWN6/TIJ5ucXCmFVv0Zu16e+kOFfg/1Hhc8rfv8vRT5PzdwEeK9dP+A01ycn40Hd5nf+NaAyPI1HfnrWXGzuSjed8tGclF7e1DG6Lhx/aLi6pGjpnAUEtRk9nmC2QKqWaz5uHOK8o5BkYmxP7o0TPG6Ee8T5DSRYutiV0Z8ZTkPLW120qMEyebMoYoKqqkW335ksj6doN4qrEsH+Hy/Wu2PP00O7Wgax/hZ13UUIkz/ucbNiU7h3VPAADoRIB4CgAAAHQF7My8CnNK5f3dEv8BjvArQjvFUwFfrB7yeLyJk+cokA4HDBoeEfGali8FgobmJFnq46BnihOeymTK1Ll1dXWkWz6fP37iLOlqa9ZuxqItGX2O+VJVx9LRNYiLiyf98HjiqNum/8cgvHrtdv+BJgp6WLBoJY/Hx/V5nTn4tLKct2a8u7x/C8HX37PuoUpo1oVR/hcZpWfOXKT1R4sFS2Jjk3FRRTnnwYNgg6HD6Aok8hSx03kvsdvZb2f0PHnaDFJ67fodYlc+8rRh9V5F0fboz/H0EBcvXac9Z32vOSCeajZmvTY9uhgh7zmEy+HtX3+OdSfbCdZFDZW4dv0W2pGExCTWPQEAoBMB4ikAAADQRZjX3+Hd81h5f7dUlFQ5LoAj/LLRTvGUaJEXA64pCNvU1Rsa+fINObQuEDTcwM7liMgdSklJ3wYOHtGidilt1Otn9PFjNIlmDQ9/JbNtn75GmZlZpNqLsMieOvpKDkFjbDKRw+EQt/FV8rQm67H/iIJOUNGHqE/irKkC9revNSRF55jJOkXrse48676pioaLp9PN5tD6Y5nU6fuQ0JcyI08R7959JvYhhsb0yf34hO/0of7SkhpSpFLkKae5COu6t9m1UeYWi0jR3cDHrO81B8TTzoDHurO1VXKP8D+/9a5LHuFnXdRQifiERLQXT5+FsO4JAACdCBBPAQAAtA4bU8/Yt9+6KrkZhbJOJ4vlITjCLxMtFE+5XPFh+erqmtFjpyvQHFeussWaY0PAKb8eNxcKxbJjcXEJat6icCmvQr8BJhs2Ohw+4mtrt13fcIy85gMGDbfbvOO472nbTdsNjcapNARdYeUqGw6H2xToKl4K/O8FTaeionKqqbmCHvZ7HhVruMJ61newldzyC2X8K7Ay2VVSWMu6Y6rSSvG0rjSZk/+GW6P+xJuJp2cD6KKioipasgwJiZTZw6LF1jLFU8SY8ZNIEX3TvbfPSXlBqaqKpxcuXqXyCYwk9qTEdIl9+GjWNxrTlcTThxcjWH9gaCcSP6fVVXPk6add8gg/66KGkowcM9H/7AW8EfZbHVn3BwCATgSIpwAAAFqH4wIfec/02vCKfPgJ9FMGWiie8nli8VRx3KjRsAklJaVNx/OJYiiJ1nR22adYssT06q3fuyVxszXo4CFaqtanr9HzkHASbcrlNEyHjqL98uVr3/7G8ppPnDyb5HvFbTsvFWW8ef0d6H8FnTHslNM68bQ2615tojuiJvkwpzhOPQcURJ4mJqTRkmVRUaXMHvz8zso8ts9pLpLaO+wgdtOZs4k99MUruolKx/Y5UgovkWg99h8mxkNHjrO+0ZiuJJ7GR6Wy9BTA/qu2mrNhigfrW9CGsC5qKMnjoGC8Bddv3Pr3L3+w7g8AAJ0IEE8BAAC0Di0XT9HroO0F1ndBo9BC8RSfwm+8K+mhgphNn2OniNRI2oqaQjXLy8v79G0h1Wmv3vpmsxbtdfNqP+W0d2NugUuXb0yeOleZyhUVlXhGgqbgUx5P1JQLlTduwkx5DXvqDElLy8A1+fzOHXzqt+u29D+E8PsxrDumKq+TRdOPiJzviK6/Fb1MFiCi0oVKtq1JOoTFUzEZ1zjVsvVNBSgQT9++/UzrkvJ6uHPnobzI09TUHFJkYGSCT+7TMaEjR49n9EaPmJycgY3FzRVSOvIU4ei0mxRttN2CjahnYsxIz2N9ozEgnnaZV1ZKHutb0IawLmooCRFP33/4+PvfPVn3BwCATgSIpwAAAFoHiKcBXg9Z3wWNQgvFUxJrudneSZ542qPXkJSUVMaBfW7TWUyBQLDUaq3iJKHTplt8if0qFAq/paT21BnSfuJp956D09IyuFxeRMTr0WNNFVc+feaiUIinL1kQoghHvnwjL4gVzcj/bIA47WlnPrn/ITRJ5j+EBYO25WZWsO6eSmQViApK1Wxbm3ywmXiKSDpQV/hBpU4UHNtPTs5oFnlaKHttz5wNIHVmzjJnlC5espyUBgWFIosPFY564CDzv13KiKc/corpJh8/xpGigUMMi4oqQ55HEsv6jXas7zIBxNMu8+JyeKxvQRvCuqihJDp6A51dXPEW7HHzYN0fAAA6ESCeAgAAaB0gnm7sWsflWo+2iafkoLpQKBw1Rq7UONd8Cb4nClXmNt0vz28K0szMyh6sP1qBRjnDbGFpaVmT1CicOWth+4mnk6fOEQjErn6O/iIvL6p4XvOW1Te9yOl7LreeuDpuvNzg05WrN5G2rO+jehTl1Swx2km+/DN62NL/FpwsffFVWp2J0lqB3bb6UeP59jvQ+wZLZUFtXmTLMJRTQup5TmWRkqMriDwtK62lJcuHD5/K7GH5yrUKxNObN++R0s2N6U3pK56SktIZ9dUQTxEzzOaS0ivXbtvaOZCPkZHv2d/iJkA87TKvV4+jWd+CNoR1UUMl3r2PQlvwIiyCdU8AAOhEgHiq1aA/GM7vf3jB8xHC3+0+6/5oLNvn++BVQtibHWLLjVO77xI35uh20NOzeT8HMuhJlzvYuGHKfmLcu8qf9Q0CVEXLxdNz++6xvgWahtaKpxUVlfJUwl699QPvPZLKdioSCMQK4/PnYQoEyn4DhhUXl5IMoejn5as320k5Ra5GR8eSgZBvUVHRev2MFDQpKCjE9cnJfU5T8Clqvsluh7yG06ZbcLlcPBDr+6ge+9aco7/8oXc/2c86TFvunA5n3UkVKK4WLF5eb2iCEZ46x6nkcmr5zCP5apCr1DqsWWtDdMaTaPTmpUutVpLSCZOnlZUyb6Z6EfaaljUZOU85jQrsEENjXIreRH+OJ5UtFiyR9kfVnKeYGzcCSensufPJe9OZs9nfYgoQT7vGKyMpl/5fOF0A1kUNlbh89TrahcSkZNY9AQCgEwHiqVazcaoneRpL/JzNuj/ysDTYEegfwaIDLx/HkoXas/w0K1NeOMSR+FCUV9Nhc3dcKLkkIfrVd2y8eSKUGAO8gljcGkA9LAZsdVzg0yVxXXEqKTpD3p8rlWU1qA7r66+BaJ14Kr5wXpT87Xv3noNkqoS6ekNzc/OaMoFKhEL8Qvat210UnNm/dPkGvpgeV0Y/8/MLUZ/tIZ7OnbeUjCUSx8lyrZdvkFcfuX3y1Pmm+FHJsggE4mhcn2On5LUdPdaUpEztjHdGBd/4QH/z3decRcbUhIJZOnbEiN6nxGlKjssWvsmFlcIFSyXKqddR0emzgoi3qKgu40ZrxVNE+pUWfdjjup9IjctXrWOU3r37iFYtzedbZmZI1jY4+IWh8XDF4ili63ZnibJpvkASInr1lnRl9cTT8rI6hicKhmCRriSe2ph6sv7M0E5cORLE5fDkPYo8v/WO/g9O14B1UUMlzvifRxuRnZ3DuicAAHQiQDzVary3XSdPY48CXrPujzQzutuccL5dWlj3PjSRRTfoDGhLhjqxMuVdy04SH94+S+iwuZ91v0/GveUXio1M8dpQAAAgAElEQVSfIlOI0XnJCRa3BgBo7My8ivPK5P25Ev/hu6XBDtad1Ey0TTzlccWC5tt3UfJSkeobjqmsrMRaJK/pzD5JeCoUCkeOnipPYUR9/viR2xS1KtFbA+89ag/99Enwc7FyWi8ZKyYmTl7qUsT8hcuJ3kqWRSAQN792/Y68hsNHTi4pKRVLtJ1NPM1KLZnX34F87RcO3p6fLb4f6frx5/S/iA1T9ldX8Fl3WDHc/DKhuSVDOUUIHz9r+JJnXK1L2td6uJU5it24eOk6rTYaGg9fvHT5kmUrfuSID/4vXGzFUCQtlzRUoE/KKzi2j4iMfC9dEycnla6s3rF9xF43T8YQQ4eNKGu8okpz6EriaZfETMcu6Morec8hXA5v//pz7e0DK7AuaqjEiZOn0XYUF5ew7gkAAJ0IEE+1mqDLb8nT2FGHq6z7w8Bmmmfi52zs3pWjT9lyY5mxM1ml3IxytqYc4BVE3OjIYE/66mGPtQ0PfNO72ZQVif+WqKutnz9wG1tbAwA0Z/cFCvhCmX+uCIX113yeoK8u605qLNonnopP0wc/DZWnMI4eO72mppYRYklupS8uLlUgTc6aY0mkSdSWzxcLmgKBcMGiFW0om+roGuzffwRnO0UvPk+sC+PD+xMmzZLX0GTEZDS7ptSl4rhaPk8svoaEhstraGwyMT+/sDOKp7U19VvNj9Jf+9C7nySl1cJNM73o0jOu91j3udmX9sMXTnEN+cj9USycu4Aop/UHjmDlFMFPTG3YzbdjhM9/aiWCyH4tOlZWVjdu4lRpcTMt7Qeu8D0le/iosdIVCHTWVJmRp4hxE6YwWm3e4iizpnqRp4ikxHTGEO77vFjfdwYgnmoyy0e4pCf+kKecZqcWrB67l3Un2wnWRQ2VcPc4gDfFzn6bkclo1v0BAKBTAOKpVpMc84M8jW2Ysp91fxhEPpIclndd0RGH5WWyd5U/cQO5xNaUlxjtXDtxH8ai/9YOm777mrPn9z/ELuH0THN0N/tsvx58veH+hKSYH2ztCwAQ5vV3iAqLl/fnSkVJFRzVbxFtE0/5Tecp791/LO/o/dRp8+rqOFLiqVhe/BqfKO+8f6/e+gEB1xjJUvHt9qLGa6YmTp6t4Ly/SsyaY4nvpGoYSyAeq+n/GQg32zvJa2gwdGxRcQmuScRToil/jv4iLyDXaNiE3Nz8poadCUZsKf3LHZMSm2vWaxOpML2bzaeIb6y7Lf7GHvDGIqng5Hn0kZtVKDQzl8ScUsopDjvllia0Xjnlv5/CLc9Uxr3Y2OSZZubyxFNETnaR5ZLlMpXTmzfvPXgQ3KJ4eujIcUbDiPC3MmuqLZ4illqvoqulfMtifesZgHiqsXisO1tb1fTfX6lXlzyqT8O6qKGaAjJjDtmatLR01v0BAKBTAOJp1wQ98S82dFoxao+CM6pz+tjXVgvxo1hFGQ/fNoueyayHuyzSd1RyINT/8pF7Fgxql9jD3Ixy8rCodlZ1NC8rk11osjJXwMrEZZmxs+KnmWvHnhM3zu9/SCaO2ir5GKTkQK2fMuofTRZhpoRj6EuycPB2tH0tHmT2c7mD/PnyNo02vgqK40DCU0ADQF/g7NQCeX+uwFF9JdFC8RSrhIGBj+TJi7PnLOZwxLlROU3iqYAv/mq9efNenrzYq7f+x08xjOuYeI094UjPxKRvI0ZOab1+OmuOZW1tHUl1ShTeeqFYPD1w0Fte2yEGY/Ly8kXiBKlNTjZpyqmp6fKk4UbxNA835HSqyNPOCzc9TxJhamjCP+AtnDlXopwePCpRTh89E29l9m1eskeLyFVOX/zOS2eKyy0SHv7m2vU7x31Pe/ucREifqY+OTjjg5b3RdsuSZSsQ7h5eCfENQbJf41NwE4S8HKMZ6XmkDsLX94w8N44dP0WqFRZIHqvo5vIO4+/dKzm5v3rNRta3XhoQTzWTs/sC5T2HdOGj+jSsixqq4ujkUlBQCOIpAADKA+JpV2PXUr83wV8rSrnkMau0sO757Y+rxjDPiWw1l/ypHPMmzX7W4fchidWVAmzJ+l7ive26vFFcrE6+CoorK+aQHgpyqp5cfSfzNIr1cJek6BzMy8fMyM0bviGkFGfPnKtnn/g5G32kHxZxhZ2LFaXX3DzzEOnqkP2VOX3s75wOryznoeZoXmsnuONqi/Qdrxx9mpZYUFcrjrWprRZ+/ZB51OEqVpAZfAyXBJ64rjgdcPAxkTirK/hh96KtTFxk+qP8QC1O2XrEbjK110++MgYy07E7vvPW1/cZRA1H840KS3ZceFymYwdsLr4PTayisrmhrYx8FLtl9mFGzVk6dl52l/FG77Y+hY2WBjtunwxraFVUB7IUwDpBl1/K/HMFjuqrhBaKp/j14OETeSKmxQJrXpOaKGnIFyuV4eEve8o5tt+rt/7n6C/Sd9kTxVYoFObnF0yZZq62bIp8nmu+tKSkVHzlk0hEsrIihE33PnkekCue6huO+fGDaKDiX1Jcjnh2ubn5//QYKE88xaqrqHNeGNUZ4d8PpsVTGuHhY0Q5FTwJUbVn4YvfpZVT3idLbkXnuC+rbWHcGRUS8pJ1l6QB8VQDWTjEUZ5y2rWP6tOwLmqox1/devfqM4B1NwAA6BSAeNp1mNHdBp+klklZMceueTKvU3sCSWlBThUR+GiuejMzjc7R3Rx2L1reKJXlPJwWk2b/+gukQmjgZ0ZpelIhKV09zg1Zts/3kde/tARMc2avJD2Z+5qzX96mkY9f3qbjOk6WviWFtfL6/xSZYt7PgdFtaaEkPIHcLEGTl1VhNWwXo5VKA7U4Zc8NkjUMvx9DD7R85B55lwKjPfV3u09XRoNGv/oubyxU/7jTTbr+laNPcdGd0+HE+PVDwyG4qgq+68ozrH/tAeDzy0TpP1cqSqudFh1j3bdOhLaJpyTE8nHQM3ni6fyFK2SIp03H9t++/aAg8vTmrXuMo/SM5qg0P79wu+PuPn2NVFVO+w0wOXzkBM5Yirvi85vNrl4oFk/tt+xUIJ7m5xeImkeeEvEU+dZNjnhqbDIxr6kh6/uoJfDdvVpWTp+FqdGz8MUfzTKchuvwfjxmfb5scf78FaKcTpo6Q+aDMeuAeKqBbLM4KlM5fXr9Tdc+qk/DuqgBAADQ3oB42nW44SuJOKitFsa+S/8U8a28RBKCiix0/dDAz4wHstT4/C9v03CoJgY9OG6c6kmaoCe2+Khm6Z9qqoRFeTW0pbqCb2N6gB7olt8LUnpqTyBdNH/gNlJUWliHjSTDJoOSglrFK0Crum+fJdBt9yxvyB/queECic3EFOfXkGBbDEOaXD3OjeFGWVHd55ffs1JLaGPkwy90K1UHanHKONITQ+uh6ybtY6w/akJfEIx2kL4fA/lJipJifjy7GRXxIKYwt5re0JVjXEn9QP+IF4GfScypaeNhfzT9e2cjsdINAKzj73aX8edK3LsUiIlWFW0TT0kQ6POQcHn3PlnMt+JypcVT8dcs+VtKj16D5UmTK1bakNP0zKH5Ev1UKBR+jo41nTFfr59xi6f4UYUBg0aYTrdITk4hAaeixkui6P65HHFyAPSaajpPXm9DjceVlZUzAkh54iwFopycXHni6bDhkwoLixgNgXZFuGBpC8ppSIR6PfM/mEoynMbZc6pl/B9iLaG2Rjhm/CQinp47d4V1l2QC4qkGMkd3c3lxFf0cwuPyvewusu5YR8K6qAEAANDegHjaRVgy1KmmSqzWlRVzyO1PyE6ksdpqIX2CNeu7RP6rKONhedG0MZIxI7mIFAX6R5AmtIRXXSk4tScQ/w/VZcbOtFiJ3tO+fX4pCXVEf5/TRTsXnyBFUWHJ2Gjez8HSYAcdN7p3lT+ytJhZNTu1Wfp/5GHwjQ/e266f2n0XO0nHkMa+S98w2cO0MSnqAZuLtMpMh+h6bbpE9/kqKI5cLn/xgCQ6o7amniSKVWOgFqcc/TqVFG2zEF99Y9ZrE33lV0psru30BtnaTMfu4cVXxE6EXbSzxPjk6jsyR7SJOIEpIjezwss2gPXvMwAoD/qH8CkioUlFElz1hqP66qBt4ilRCaM+RvfoJTuAdLb5Ei63KeepVMPaurq+/YfJFzoNy8srmv6KZsavEekWS5y1tXWxsfFOzm44alVXbyjdFfrYo9dgvX7GR7z9kpK+cXk8oo2Kmp/Wx+CEp6g0NS1dgSA7ecpcPp+PO6mTXBglnl1aWka3HrJzno4YNaW0tEwcsgriaQdQzpURdnrEV6Kcvnildufc8kz+1238qHm8gjfsz5RVHj8OIcqp/tBhxUVVrLskExBPNROXZSf4XHFK7PTEH1pyVJ+GdVEDAACgvQHxtIswvZvNIn3HdZP2OS445jDnCF2U8CkbP29VlPGIceEQR/pRjKGX7bY+RYq+fsjExpVjXGtrJH8BetldppuY991CjrTXVAnRR+IYkQtrq4WMi5to/fGqzzN6OkR/rKutn9efeZReGkuDHfSMivNrGGkKnt2MIqXfvuQSDzH0kX/6Qt57ZyOJPSUuj/HMmvBREoe7a9nJ1gykYMozutuQJLZoC8h5/wuej0hXeVkViw2dSJM5uptxoGtJYe2nyBRs3LXUj9QPuxeNupV8HwZv3zbPu50u/gKA9mZmT1uP9WdPutxS+2Y5QNvEUy5XLF8WFhXJUxgtF6/i8/nS0aNE97SyXt9bTlvUZ0hoRFOG03o+j6lycjkigUASPYrF0JqamqSklDt3H/ie8D/odczr0LGTJ889ePgkNTWdw+HQ0aYN3QqYgZ88njgtAKomEAjtNjspCGL1POBNJiLpgSv2pLi4RF5Sgqmm87AzEHnaMfBef1SgnLZSPAUIiyyXEfHUZbc76/7IA8RTjWXdRHd/98Cdi2XfN9DlYV3UaEN+/b0b4uf//o3e/99vf+GP//r5d8X1//Prny32qbhOa3xg8Mv//sFN0Pt///KHgtH/+2d3Q+ORU6fPHjFmwm9/dGd98dtq+5Rf6taAdgQPh/ZIupSsPHqjXv/K7yPQMYB42mWZpWO3crSr58aL5BB35rciUkrraN++5DLazuvvQEpz0sqwMeCgROiMfvVdesTw+zGkAhEu106QPIAmx/xgNHn95CsppRNorhkvaZWeWKjMfF2sTtIPlySQFtNwoIYK+XRcwEyGuG7SPlJKR85+fZ9B7O5rzjJa0aG4h7dcac1ACqa8YbIHKfr+NQ8bp3ezyc2sIHaf7czbvaxMXBhStY3pAXqJslNLb/m92DbPm1ZRAQDQTrROPOVINNDFS1bLVAl9jp0i6ifdVtiUUfTW7XvSwiuyIPT6Gdtv2UnUTnnJSbmcetQbLYnSWqo8O2rCbS7FCgSS0sY3ovz8gomTZ/ftbyxPP83IyML1UVuZy7J85UaZDb29/aiMBJqYFLKLITh1vply6t1MOcXwX39g3c9OzadPcUQ5RSTEp7b3iGoD4imgmbAuarQVw0aMxb/g3r77gD7evHUHf7RYuITUsVy63NB4JH6vozcQVzh3IYDuR5k6rfFBMSUlpbjJf37902bTFvz+mO9Jus64idMePHwswA8QjS8ul/vwUdDQYaNY3wWVaM1StxJ3jwN4uIKCQmn91GG7Ey7dvGW7ev0rs49ARwLiaddhyVCnM3vvhd+PSY75UVIg46qiV0FxpHKAVxCxn9//kNHVjO42JMg063sJNtLZTmWe7H56Q/Ls7mTpi41edpeJ8fGlN4wm9P1LdMgY3er57Y/KTP/S4SekScybNEYpLa1mpRRLN6ePtJPbpcx6bSLSc0UpF31ktAo4JBnUa9MltQdSPOUjDldJ0ZNr4uP2tBJaUcZTMiE9I2UtJi+r4tqx5wuHOLL+HQYAgC20TTzlNB5vx+phUlLKgEEjGALo8hUba2vrpOVFTkPSUnHDtPSMwUNGMbTFHr0Gb3fcnZCQVFFRyefXlxaKyooaxM36ejGi+oYQUbrDxijUZgf55WmpAj4z2FPAxxXEIEtBtggNKuALkQMxX+JsbLfr6DKTulossBY2qrbS0aMCgdiN/PzCkaOnMhous1pX1xQDy1gWoJ0QbLBXrJxiuBUc1l3tvNht3kaU02XWq1n3RwEgngKaCeuiRluhWLgcYjg8POIl+jjF1AzXl1brlKnTGh+UoUXRDRnJlZiMV3V1zeRpM1nfCGVo/VK3koyMTLJuS61XMUpBPO16gHjaRThoG0AHPMrkgucjUv/N03hi3zbPm9HbkqFOpJQIkfTFRMuMnaV9+BTxjVQgqQPu+UsuMTi69Rpd33q4CynKzSini+6fe0mKTrrcUWYF6KSrhzZfZpT67rxFSoMuv5Vuvs3cm1SIepGEjZtmehEjOfxO8yjgNamwY9FxtQdSPGU6gemxHTew8ZC95CoDki62RRYbOkW/kqSgpSktrNu11I/drzEAAGyhheIpzu+JdcDYuPgNGx2Gj5wyaMhI0xnz97odLCsrJ5Ilsy1HLC9yuTyLBda05Dpx8uw3bz5UV9R/CKk/s1vksUrktrwBj9Uif1fRhxARt1b8kM245Yn0zOc33Cgl4NcLBQ0H89EbgaBBrpV5QJ7cPVVSIIp8IPJ1FLmvEI+4f40owFMU87KexxXcvx80YlQzGdT/7CUS28rokw4+zcnJdd7lPn3mApMRk2fNtnR1O1BSWkr0XNZ3UEuoHz1BfEOUj5885bRBPC2T8X/NASV59+7z61dRmIz0PNb9UQCIp4Bmwrqo0VYMGGKEf829CItAH89fvIQ/zpg1D33cs3cf/kjUuv/+2d3ZxRVhNscCW6TrqKroKfZBGbKzc1B9DoeD3q9YtQ43P+B1BJdOMZ3VdLBGGHD56lyLRWPGT1m9ziYhMQnXTEtL7xRnw5XZjvZj1tz5tOgcFh7JqNB68VTxPgIdD4inXQGnRb51tZI/Y1ITCu6djTy244bjgmPvQxOJnT5CXpAjSYQvndR835pzpPTpjQ+mjXcQEQsaa0YPW0YT9DBXUcYjdcjtSbHv0olx41RPugl9FxPjtno6QJJxx5Q86CvjpS/avur9lJReOvxEujkdinv/3EtsPO50kxhD736SbvX9q+QJe/nIPWoPpHjKJGstYtOMg9h41v0+MT4KeK3SF2bXUr/IR7FVTUG1BLSDViYu7H6ZAQBgBS0UTzmNB/CJUIje42BMEpKJ7TJVTqK6fo1PIif3TadbcDjc4rz6w7YN8qX7CiZYRS3KbQg+Fcm660klsHKKPE35Itq3WsZweEQfh/qK0gZ1WFfPCLuKfhYUFjVpuDI0UGHTGb6mLAENL4FASEfFyhZ/gbaGm54nVk4PH5Mnmwrv3Bd8jGXdVaBjAPEU0ExYFzXakIqKhvse/U6d+YnSv3T0Bur11z9+4hT+uHL1enxU/N+//IHeIHr1GYA+yqwjTzz9p6feXItFq9ZunDZjDuPQtzwfcOmAIUao54H6xvKm8CT4GaofFxf/ExXHunzlWlwaH5/AsGD+/EcnLS294Vc8nz9+kildhEa0XLp8xap1I8ZMoO3/+fVPPP2/e/RBH41MRqM68xct/d9fPaS9GjV2EhpxidXKfgMNaPuvv3fDnaBWaAFRDxMmTyelgwyGoQ7XrLddYLms/+ChxK7MdqC26P0Qw+H0cGipcZ3eeoNanKAC7t57gAXomC+x+JEJDUdXaL14qngfgY4HxNOuAJ059ITzbWKf0cO2OF8cLkrfQUSHfCI2Nb9YCRH5SPIUjhN9Tu9mgy8gwkjf4EQHQpIkqjO621SWixVV9IYhuX4ITSJNzu17QOyzdOzIWLU19XP17GXOmsZ6xG7SFckzQEPfrXTL7wWjFDmWkVxEKrit9sf24OvvifHN03hGq41TPUlpSmxuawZSMGW6qKqCT1IH0OLp7ZNh9CiWBjuuej/13HBhw2QPBcf50SZ62QZEvZDsAkfpOF8AALoY2imeciihkH4RiVCevkmiVoXCxmuj+hgOGDg8LT0zL7P+kE29TB2TcNhWlCGO7WgI81QPHk+sbEa/bAgyVTziMQdRaaEwOia2/0ATHV2DK1duSa6KknPjE6/p4imZK8PlQthpB8FNzmwQTw96NxNMz10UPnwieP+Zl57LqRa0tw+ARgHiKaCZsC5qtCEvwiI4HM56Gzv0ftLUGeh9bl4eev/0WQjjd+Lvf/dkCKPK1MFsc3Suqq4m1X7k5k43M2/RBwwOEU1LS5c3Bbd9nqjJlas3fmrUEysqKtBH4+Fj0EeTUePxiB8/fZZuOHz0hNHjJv/yv3+I5ef//n356nWhUEhcjfr4qe8AfVyq118fG13d9gfef0jqFBUVTzGdRTrp02/I+w8f6WW5eu0mvg4LMWb8FGzcuWtPRWUlfj9+kulvf3R/9PgJYz2RBbunzFKTjAd0IteVazZgo62dQ4sTlEe3XnpoSUWN0cEkJvSI93G6TuvFUwX7CLACiKddgazvJfiJqiivhrbTAaSpCQXE7rH2HP0cds6jWc7TLbMPkzjWsqK6Obrip7T0xELS5GDznKcLB2/PTislpX67xALuqjF7iZFxW9TeVf60D3RULH1YnnZbAR7rzpMmYYHR0hU8N1yg+2TIuGf23iOl+dmVZk2CY2p8PrEX5lab991Ct3r3XJIogKREUG8gBVO2NztEiuLeZxA72gJip7PZIgKpVAm4aLGhk+uK02ijn9+K8nG8wVgcOlktndsBAADtQWvFUwSXW08SfZLD7NJ32TPA10ahqq9evdPrZ3w38GFZUf3B9S3omBi/nSJunQxpkn7VK3zhCtnflRoOceUQmpHQbvOOqdPMKyurcCd8viINlMttWAShUDJoQ3BuQ55TUE47FMHDp6LTZ+svXBIGPRd8juPlFLX3iIAmA+IpoJmwLmp0AEFPnhKJTdD4+t9fPRhqnTJ1EKvWbsSW/IKC0BfhOM60pqaWjqxUQIviqQLstzrioT08vZSpH3D5Kq6flPwtIvIVvmDq69d4fK6fiKdV1dW1tXUvwiKSv6VgS2paGu7h/377C7XFzy1v373/EhuHK/ifvYArEPEU9YDfZGRkIjuqgD9Gx3x5+iykoKAQf7Sz36bkUk8xnSUta4aFR2KHf/+7Z4sTlIejkwtuhbbytz+64x0sLCyiI4hbL54CmgaIp12BrJRi/ERVW1O/epwbNloPd8lKLSEPW/S5+JsnQunnsNLCui2zD+Miu5le9B3up10DSavLR4KJPS+rYu3EfeKBRuymr6RPis4h0ZGoW2IvyKkiD3zb5nmXFUtuNqirrTfvJwllpWXBpOaSqzxu+UlmdGbvPekKqP+KUklO2Nsnw4is6bvzFrkdC+Gx9hxpQidDQDy/FYWnZqZjR6coRStG/FdjIMVTPuF8mxQF+kcQ+zJjZ9JbbbXQcWFDxlU01rl9D+iFtZ/VsLO0VF1WVGdjeoD0M0vH7svbNFLqYnWS9e8zAAAdjzaLpxI4LQimNPymixaEwvrrN+6WlpaF3m4h5pQ+TR95vyF8VVk4UnAbXL3ho6x4ikbMSBJ9if365u0HItoqP1kAADQEEE8BzYR1UaNjUCafqTJ1cn7kYvXzr+666GPfAfplZWXIcvbcRWXccHRyOeJ93NnFVY0peB32xs7guEvMvPmLUYc0yILs+kOH42eGwPsP//Xz78hisWAJbm61fPVPlHhaV1c3bMTYnxql0m8p37Hxj797/dR4ORX+6LDdCQ/nc9wPK5744DwRT5Fl/qKlPXX7j50wFdmPnzj18dPni5eu4Fa6fQfjaucvXlJ+qROTktFHtODYf7TUWHLFnbQ4QXnEJyRiBRYnKLgQcBm3Wka1AvG06wHiaVcgLDCaPFSVl3DfhyRGv06tbp7Rkk6v+fml+Mqg0sI6fKy+pkoY+y49PiqrtlpImiR8zKIDJy0NduRlSXRVVPPrh8yv7zPogcqK6oioaiqVHyDxc/bNE6FvnyUwRMnU+Hx6Oj6ONxitPoZ/wyKgPOhLkKTvv8IEHHxMd4vm8ini24/0Mtr45Oo7Un/7fB9iz8+uJK2iwpLJR06jQElO36s3kOIp02GhXs0DfkPufKTdSE8qJFkaMOQ4//RuNmiziL26UhD5KBbtxaNLb2jHUuLyUE3Wv88AAHQ8IJ6qgUBQT65cEArrfbYoK2UiPFaL/JwaOLFDCRyZ+G5vYN8qFUY8vk3sMPaZz2d/AQEAUBUQTwHNhHVRo2NoE/F01NhJ+OP+A4dIzzdu3kaW7Oyc9p7CAa8jePQdO3cT4zHfk6LmL3ylu5PzbvzRdOZcUhkrv9eu3/qJEk+fhYSSCpeuXMNGnJUVJ+7k8/kkKnOQwTBcAeclIOIpviBLGtQQ1dnt6o4fYG7dvqv8dmzfsQtbZs2djz7udffEH1GHykxQJhMmT8etSJ3J02ZiS3jES1INxNOuB4inXYFNMw7SCUkJr4LiyPsH58Xi6YzuNuUl4tDIN8Ff6dvhaRI+Zi0YtI0xkP2sw4U/quQ9z2V9L6GVU0zMmzTpmshbOo41+Pp7ugmdS5QgfQcUgZ5RbU0943A9YXo3G1qIlOaGbwgtHdJJRR0XHs/8JuOgHBrukP2VVg6keMqpCQXEwrjaa/7AbXRiAQZPrr1DK0MqLzN2TkssUOBVbmbFilF7WP8yAwDACiCeqgGXI/4bAz3M52WI9lqrEAcq80YpVVGpE9dlorIicgcU+6sHAIAagHgKaCasixodQ5uIp0utV+GPXC63uroGw+OJz7P89kf3dp2Cnf02PNCpM2eJ0WWP27eU74gfubm0eHrG/zz+WFtbR1zFkZtRHz/9RImnJD70p8aIUWwcbGjyU1OSAfQiPSCwBZ+mJ+IpviCL8H+//YW8ffX6TV1dnYh63boTqPx2/N2jD84GcOPmbfTxe2oaev8lNg6XtjhBmZCT/s9CQtFCYfAOokcsPOufQDztioB42kXYs/w0HQ6ZnlSILFYmu4jlU2QKrrlu0siXO7wAACAASURBVD5iDDj4GFkOb7lCt60o4905HS5PgrQ02PHo0puSwlr6SQ41v3bsucWArdL1rYbtSvgouUe+pkr48nHsmvHu7mvOEuNxp5uMVr47b9Hn+rPTShXMnZ7R9695ihfKc8MFOgaT0yiAfgz/tmPRcUbN8PsxuAK+pglN/M3TeDpmNik6h07VqvZACqY8r78kdUBpYZ10K4v+Wx9efFXVPMo4JTbXY9156cpz9ewDDj3JSWsWA8tpTOd6zz9C5vYBAKAlgHiqHjyuOHVp3BtVxNNGWi+eqqq0/kjDUm89HNgHgE4KiKeAZsK6qNExtIl4arV8Nf4YFxf/OCiYwV/derfrFIYOG4VH/5GbS65sIixaYk2Lp2fPXcQfwyNeMvw8febcT5R4esb/POmExLFiGREnPOVwONKTxdlLiXjqefAw7QyqgO0foj6hohmz5uGEpCpFniKuXruJLJVVVVOnz8al9g5iNbPFCUrzv7960Dd9Sb+O+vjimiCedj1APO06mOnYbTU/6rryzIbJHiq37bVp88xDqO02Cx9lbrdHY62btM9pkS9i1Zi9LZ713jjVc+8qf8cFx6SjWeWBng7tzQ65WJ3cufjEyjGubbtWS4Y62c86vGvZyS2zD8/r76B8Q6thu5A/e5afRrNu84HUnvIc3c0Oc4+iFd611M96xO4W6y8fucfJ0td9zVk00IYp+xm3WgEAoIWAeKo2+LqCL69Fbh0feaq6eFpfX8/jwY1PANBZAfEU0ExYFzU6ht2u7i2qdS3WGT56Av7ofewE6XmgvnF7x5wSomO+YAdc9rgxinbu2kOLp+TMO06BijEwGvHvX/7A75URTx89fiJqzGeKU6Ai/vxHBzUk9Yl46rbPkxhNRo3HRl+/09jy6+/dsOXmrTvKbwdi4hTxKXt8V1V1dQ1yABe1OEFpNtra4ya5eXkJiUk0OGS1qKgYq9IgnnY9QDwFAAAAAG0HxFO1EQgaFMmsFNFeqw4XT5eroJ+6LhOVFuCwUxBPAaCzAuIpoJmwLmp0DCRF5rqNm/oNNPj3L39Iq3Ut1vnXz79nZmahj+Xl5SYjx/3UeG0RPi3+4OFjZdw4edr/cVDw2fMBqvqPGTthKg7hRI8EV67eMJ9vOW7itBWr1kVEviLhk1g8HahvjI/XfI6O+btHH2RZuXq9qDGMdOeuPT8pJ56idcAfLwRcxpcynb94CX2sqKycNHXGT3LE0ymmZtiIJostJM709t17ym8HJj4+gUzt0pVrxN7iBKX5EPUJ94MvyKJ5HvICF1mvWPOTLPEUrRLaOLJWaI44yhWLv39118UflRFbzeZY4Mojx0xk8V+EtgHiKQAAAABoOyCeqg2P15BFVMAXHdigmni6e4kSLBXtYbBMjOtS1RTYA+tFyEnkKgfO7ANApwXEU0AzYV3U6BgWWC4TUa+B+sbSap0ydZZaryIXTmZmZnG5XFHjlUqzzRco4wbOIpqWlq72RFasWsdIJEq/Yr7EksSdp8+cw0YOh5ORkYnfFxQU9tYb9JNy4un//fYX6hBbysvL8/Lz8fvXb97i+jLF0z/+7lVSUkpqfo6OwctFN1RmqTFbtu0g1SZMnk4XKZ4gAyOT0bhCbNxX6VKSkCEi8tVPssTTbynf0Uf0E39cvnItroDe/CQnbFYeNpu24MpzLRax+49CqwDxFAAAAAC0HRBP1YbLwbcwiYICVBBPH10Q1VY3UMegphmcWkUEHFBhxK/vRI1/eEDYKQB0YkA8BTQT1kWNjuGX//3z9t17LFoJBILxk0ylBS9l6iCWLV+N40/xK/lbCn1yXDGtF08RJiPHXbt+i5ZQ0fsXYRHIMfrQ+r9+/t3z4OGKykpSLTzipf7Q4bhUGfEU0a2X3u279/h8PrZzudyAy1d//7snLpUpniJMZ87NysrGRZVVVbt278UpSlE/3XX6Kr/UPzUmCsC3VMXHJzDWQfEEGfj6ncZ1nJx3y/x6lJaWiRpDeocYDu8Y8dRsjkWHff8BEE8BAAAAQNsB8bQ1CIUND8q5GSKP1UpJmUfsRLVV4pum6pV40dXwszJ+k/hJWfHU3xU1aWjFh4SnANCZAfEU0ExYFzU6Er3++qPHTf6ru24r6yAGGQwbN3Fav4EGbM3lP7/+iUYfO2Gq/tDhv/zvH3nV/u+3v4yHj0Ezwqqlevzxd69RYyeZjBxHZNMW+fcvfyDHRo6ZqMA3JZdaMW0ywQ4GeYseBY1MRrPuifYA4ikAAAAAaDsgnrYGLgcLmqL0RJH7yhZ0zL3WooSohghQfOt9Xa06aiaPKw4jffNEicP7K0VFP7Dmyv5aAQDQGkA8BTQT1kUNANAquuv0DQkNS0r+xronWgWIpwAAAACg7YB42kpwOlGhsP7La5HXRrmCpscqUfx7cegon9eqEYUNlz2I+Lz6V4/kRrwiN7ztRZnJ4khVHpf9hQIAoDWAeApoJqyLGgCgVdg7bI+Lix9iKDu9ANBOgHgKAAAAANoOiKeth8/H5+tFZUWiGz4NquW+lSI36wYFc98qkc8W0R0/UU2VqCk5VxuMiNMFoBHzMkUBnqKjdg1BpnjE/WtEx7eJnl7Dqm5DNR4XDuwDQKcHxFNAM2Fd1AAAreI/v/7Jug9aCIinAAAAAKDtgHjaJvB5JJOpqKZSVJwr+h4nSv0qKs5rkE0FAnHG0lbGnNIIBBI1trpCVJgjSo1rCDUtK2q4b6pRNsXKKfuLAwBA6wHxFNBMWBc1AAAA2hsQTwEAAABA2wHxtK3gcuqbAkLFKiq+5AlbhIKGBKltOyKPS0JQxcPSIwraYUQAANgCxFNAM2Fd1AAAAGhvQDwFAAAAAG0HxNM2h8up5/NFYngNH9t5uAYVlcerF0hGZH8RAABoW0A8BTQT1kUNAACA9gbEUwAAAADQdkA8BQAA0HxAPAU0E9ZFDQAAgPYGxFMAAAAA0HZAPAUAANB8QDwFNBPWRY025NffuyF+/u/f6P3//fYX/vivn3//qfGWHvyRUVml23tIn2o4oAy//O8f0v+/f/mD9hB1ompvbIGmTy8R9hytBuuOtRXS36U2BH8HNHa5GJurPIzvM/1V7xhAPAUAAAAAbQfEUwAAAM0HxFNAM2Fdjmkrho0Yi69hfPvuA/p489Yd/NFi4RL08dyFAPxRR28g+oh+4o/IrvwQj4OCcSs1HFCGkpJS3OQ/v/5ps2kLfn/M9yQqWrV2I/641HqV4k6Gj55gsaDZiD//929nF9eO2QXkeVV1tUAg+PMfHWzZs3cfctvnuB8r34r2gPFdals4HA7qOSQ0jPVpSiO9ucrjsN0JL5rXYW/08UduLv74+989O8b5/2/vPtyiOB4/jv8LP5LYQVDsiBVQFDX23o29YMWKUWPUGHuLxthiiRo19t5i771FjYWvXbGj2BAFu95vZMy4OY7zODlmyb3veT0+t7Ozu7Nzl7vLh9lZwlMAANwd4SkAmB/hKcxJeyKTUghPvXxyzZoz7+3bt8NHjlaF9b5pciUy8s2bN6nzKpSrWE008uSp06pky7btoqRxs1Ya3xspy23D08QvruMIT+0jPAUAwOUITwHA/AhPYU7aE5mUUrBocRnH7Ny1RyzOmTtfLtaq29AjUeCVOavvgEFDhTr1Gzl+CPvhqf0GOOLmzVui/osXL8Tzdh06y83HjB3v4Vh4WrFKTVnHGJ5u37FLlKRaePrDj4PF4aZNnykXv0jv+fjx43fv3mXL6afxvZGyxHtGvnnEuyjFd27m8NTqxU2WLuE95Jtz6PCfxOKly1fk2zLVJiggPAUAwN0RngKA+RGewpy0JzIpKDY2VoU7aqSbTEutwtMvM3gFBZcWcuUrKLcV5WKxaFCIR0K02rBxiw6dupUoVc64/8ThaZGgknI/3tnz2G+AOqKd4YqbNm8V9SMizngYxrG2bd/J49/hqdhVjdoNwjqHV6leW22bLadfm3YdZR3RAHGgLN45AoqFHDp8RKZUosS/cJCo6e2bV7ZE7OerjFnrfdNEHEKeuBVRX/ZDg0bNcuTxt1pbsGhxsZNCAcHGwnXrN4rDtWzdXi6WLFNBLJ45ey5dJm95UGOKKg4qSvwKBKiSfP5F5atQOLCEzVXijFSJT458cp9BJco4XjlDlmzGBie3YeK5eM+oDvRImOhWLooOF5u069C5YpWaxv1Xr1Vf9GGjJi3lm8SK6NhmLduI1y5v/iIeDoen+QsGtAht1z6sS9UadWzmj6Il4oiiMeJNIttpPKLqHHHWYj/iDeBfKFCuzZott2iPKBSvr9U+rV7cZClTrrJ8c4qdi8W1f64Xzy9euuzErpxDeAoAgLsjPAUA8yM8hTmlWniRCnbu2vPixYsu4T3E88rVaonnUXfuyFWfvGx/3oJFYjE2NrZBo2YPHjy0/PNYvmKVukeTVXiq4tETJ0/JWSDtNMA3d35ZWRwoqfYPHzlabLJw0VKPhLBVNEYsBoeU9TCEp4OHjjhz9pxq3sFDh2XqN2DQUMu/H42atoyLizeWiHYam123QePIyKvy+bt37+bOX6hiuBx5/Ddt3ioK1bavXr2aMXO2MYY7e+68KBd7MJ7CvXv3RaGKpHt9308szpo9N31mH5ksL122Qh1C7v/atetqc9kecVLbtu8UT27eum11OPFQMd/8hYvF4rNnz0W3O145i3cOY4OT27DE76WyFarKxR8HDol98kQ+r1C5hlhVo3YDOZpYPsTR+/4w0Hh08arJtFT2sNjDJ8NT0f7lK1cbX9Zbt6MaNm6hKnj55BJv2jdv3qgKog1NW7RWFcZPnCwKX7582axlm6dxcbKOqN+9R29R7fHjx6pEtMfOi5ssop+fPH0qzq5wYAmPhJlwxfMVq9ak1H/7n0R4CgCAuyM8BQDzIzyFOaVaeKGXg+Hp69evnz9/fuHipZ279jx79lzWad+xq6xjDE+btWzz9u1b8fz8hYu+ufN/sgGOhKd2qPBUHDTqzp2t23eIf2XJxF+nigr9BwxWeZmoI543bNwiNjZWBaCi5Oix4x6G8FSGsydOnlIZ64RJU+ThVqxaI8O+RYuXTZk24+8TJ2WFwUNHqCYlDk8DioVY/j2cUMZ8cvDs8hWrxPN79+7LVa3bhql0T0acgcVLycV+/Qd179FbPpfZcc68BVTljl26yz3IHhAvSrIqJ+7bZDUs8XtJhafqDSNTV9EbskR0r3g7qRRV7F8eqFWbDrLk5cuXe/ftF/2mjmsnPN2ydbusczsq6tDhI2Jb8Vy8aUuWLu+RMND12PG/ZYX4+Gc3btyUz8XbQE34IMNTS0Jce+78hT1798s3yauEh9hk1+694j8EWZK/YEBSL27aQngKAIC7IzwFAPMjPIU5aQ81UoeD4al4LFm6XJaEdQ6XJZOnTpclKjytVLWmzMWuX7+Rz7+oIw3InNV3/MTJQovQdk60X4WnZ86clffYKRxYQiZcfx09Lus4OOepCk/vRkcXCSrpkXBN+s1bt2WK5+2b1+Of+/ls3LRFbvJVxqwLFy2dNHlaoyYfb37Vr/8gcToDBg1VJd269xJbzZ2/UJXI3couUlnh1+WrGF8RFXHKKTXfR5aFg3LmLSCzaTn4sW37TqrygkVLREnpspXUtsmqnLhvk9WwxO8lFZ6KTm7crJVoTLmK1Tz+uWOYeI1Kla0oFjNkySanUDh/4aI87umI/8lYs2qNuh4J88OKTpa7Sio8rVytlqwg3opymLAqmTJthljs+8NAVUFOyVqleu0nT5+KkgcPHmb0zO5hCE+Xr1wtdyt6SZZERJzJ5PV+q9E/j5MlzVu1TerFTVsITwEAcHeEpwBgfoSnMCftoUbqcDw8LV+puizJXzBAlqg4VYWn6rr+MuUqp077VXg6aMhwVXj5SqTFMPYzueHpkOGjVOHgoSNkoRwXqUYvXrh4adr0mc1atrE5X6cVmf2pgNK/cJDFcPF7Fu8cz5+/T5yHjRitGn83OlpFnLt277X8M7eAcPDQYbEoCsXzP+YtUJXlDsVOZDTpkyNfcitbSW7DkgpP5Y3CFDkbwP4DB1WJzB/Fo2DR4tlz+cnnhw4fURXUPceSCk/HjpsoK1SuVksVitddTdgqX7hXr14Z56hVW8n5RlV4WrdBY1lBpcPivSFLGjVtKUt6fd/P5oub5hCeAgDg7ghPAcD8CE9hTtpDjdTheHiqRpJ6+eSSJcuWr5QlKjxVj0mTp6VO+1V42q5DZ1UYEXFGlNy4cVMuJjc8/aZxc1XYtEVrWSgHb9ap30hdhC4fL1++XLFqTc68Bew0MjLyqkwGjW1evGS5qrBx0xYZF4pOVmmdJWEAbxbvHHK6T3k3do9/Ej1RmDmrr9yzqCwvMPcvHHT4yFFjXpmsyoklq2FJhafG29CrWRpEz8fFxUsyohWPBo2aBYeUlc//mLfA2BI5mjip8FSOZjW+S63ExMSItZevRBoLmzQPlVvJWRdUeKruh9bzu76yRE2NKt4Aqh9svrhpDuEpAADujvAUAMyP8BTmpD3USB2Oh6dqAlNPn5yyJHF4Gh//7NTpCBkpyivfXU2Fp2rmSo/PDk+NdxlSl66ry/CLBoXM/H2OmjRTPk6eOq1un2VFdumt21FWfd6tey9V0qlrd0vCCNDv+/1oSRjW6u2bV07V2qffAHmIoODSsrIcuCoeKtoTh5Dd3q//ILmVWOVE5cSS1bCkwtPRP49TO1Tzrt6OihJvGytVqtcWbxtZQd4fTPoyg5cMfJMKTxcvWS63CigWYrOCnG/h+vUbxsLQf2Zx/eHHwR6G8FSdkeq0Bo2ayRKr8DTxi5vmEJ4CAODuCE8BwPwIT2FO2kON1JGy4Wmd+o2CQ8rKcE1NDOpSjoSnFSrXSByeytvW2wxPjTMAqCu727TrKBYzemYvWbp8gSLFxHPxb6eu3S9dviIrJDX2UCZ0ahpN4dz5C1YxX7acfnJkZXT0PfHvzN/niMLjf58Qz+/ff2AxzAcqyfRTVj577rwomfjrVFX57du38tV0orKVZDUsqfDU2O0e/wwCFTtRJXnzF1HzBmTO6vvq1StRQTRbVahU9UP8nVR4OmT4KFlB3cRM2LFz96bNW+WQ4X37D8iX2/gyzZg5W25Vs843Hk6Fp4lf3DSH8BQAAHdHeAoA5kd4CnPSHmqkjpQNT+XinLnzVZb6yQZ4+eSSow6/6/ODE+13JDwtU66yrLNg0ZLsufxkTrdp81ZZWCggWIahKjyNunNHJpvi33v37lsShl5my+lXNChE3n/p0OG/0mf2kTtfsnS5jCBV//w243dxOrPmzFOLokKv3h9Gd4r9vHv3Tt3CXtm9Z5/ln4e8d9a4CZNUydhxE42Vh48crVZNnzlLlNT7pokqEc1zrnLVGnXkayGeONEwB8PTRYuXyfKwzuEeCTOryjtEXbt2XbwZRMmWbdtlhT79BnyR3jOPX+G/T5yUJSo87fldX9lUeSOvYiXKyAqXr0SK519m8Or1fT9ZIicN6BLeQy4ePnK0cGAJ8fJ17NJdprQXL12W+3QiPLV6cRP3oWieXFTDe61abp/4r0/UnDBpihP/aTiI8BQAAHdHeAoA5kd4CnNyXVphKq4IT3PlK/g0Lk4snjl77ssMXvYboCbBFAdyov2OhKdq+KR8dA3vKQqnTJuhSm7euu1hCE/fvHnz9u3bmzdvyUvFxWP8hF/lrlasWiNLou7c2b5j15XISLm4aPEydfSz585bDLerOnnqtMUwjWbjZq3E4to/11udyHd9fpC7EoeWtzmqVbehaqHVDbjUxKCWf6bjzOTlK2cgFY/+AwY7V7lt+06yUDxxomEOhqeFAoJjnzxR3aiejxk7XlYoWbq8al58/DNx3OfPn8t7kanw1OpYwqzZc1WrZMZtSbi9Vf6CAR4JF/7LscZWFeLi4tWd0JwIT61e3MR9mPg/qMQtt0PONnD02HEn/tNwEOEpAADuzmzh6d07MevWbZs4acbwkb+MGTvp91kLDhw4Hh/3RnvDTOJJ7Ms9e4/MmDlv9M8TR4waN3nK7xs27oi6/Uh7w+y4eeP+iRPnpHvRsdrbA6RFhKcwJ9elFabiivDU45/buFsMNyVPSiqEp8KvU35TwZmcvTSgWIhMpsTjydOnX6T3VOFpr9595ZXpMrwbN2GSms80fWafocN/unnrttpbTEyMqJAhSzZ1LGN46uWT682bN48exai18pL5Pv0GWJ1I3vxFZFZ78tRpWSL2KW9OZTwR5eKlyzIEVAMY9+7bL5uUeAIBByvbDE8db5iD4alQqmzFI38dU3344MHDgYOHGStUr1VfBdOit+s3bHri5CmL3fD0ywxeP/8yQab28rFr997gkLJqn6LZY8dNfPjwkaogOqFkmQqqQnLD08QvbuI+TJHw1GooccoiPAUAwN2ZJzyNvvu4U5ee6TJ5J/7JIn45jRo9IebRc+2N1OjG9Xu9vv/R5uVLX2XM2qBhi4MH/9beSJuGjxirmrpg4Qrt7QHSIsJTmJPr0gpo4ZMj39flqxjvxv5lBq+g4NIly1SQ0acKT+VsA0WCSpYuW8nTJ2fiXX2R3jN/wYByFauJzcUPFTsHzeNXeMiwke3DuqiS0LZhosS/UKD2DtFO/AYWfRhQLMTmL2TRye9fndLlk7oTl03pM/uITcQLl9RF8eL1CixeSrwT1B8DnJb4xXWFzVu2rV67znX7JzwFAMDdmSQ8vXz5Vv4CAfZ/uJQuW/nWzQfam6rFunXb5FVgdojfzT+P/VV7UxMjPAU+H+EpzMmlgQhMyCo8BbRr3qrtq1ev5M3KXITwFAAAd2eS8LRSlVrG3ygZsmTzLxSkbiqqNGoaqr2pqW/FivWfnA1NmTV7ofYGWyE8BT4f4SnMSXtuglRGeApTSZfJOzLy6siffnbpUQhPAQBwd2YITw8dOqF+neT2K7RmzebYxy/kqosXrtdv2Nz48yUi4pL2Bqemc+cis3jnUKefyct3wMARf/11+sGDuEcPnx09GvFtz77GaNXbN+/dOzHam21EeAp8PsJTmJP26ASprEOnbpGRV4XK1Wq5+liAI9Jn9nH1IQhPAQBwd2YIT6dOna1+nfwyfqrV2ocP4vPmL6IqTJs2R3uDU1Ozlu3UuefKV9Bmdrxs+TrjXFdm6yLCU+DzEZ7CnLTnJgDgaoSnAAC4OzOEpz//Mln9OunYpUfiCmPGTqpdr3GjpqGt23RasWJ94grbt+/v3LVXiVLlc+UrmM+/aKUqtYYMHX3lSpRVtYGDRoZ/20eYPmNefNwbUadwYMmCRYPFbo8ejZB1nsW/Xbx0TYvQDgHFSuXI4y8UCihRp36TcROmRd99bNyb2ETuTZCZpmibaKeff0BQcJkOHburfSZ24MDxsM7fykOINjRo2GLW7IVPn7yyqnbp0k1jKipOM6kdNmvZ7quMWYNDyrUPC1+7dosq/2PuEtnCPn0Hi8Uly9aGfF1RdJFo58qVG1S1PXv/6hreW6zK7Vcoey4//4KBlavW/nHA8HPnIq0ONPKn8XKHokPEYmRkVN9+g8Vx8+YvIjaZOnX2o4fPrDaxCk9Fz8+YOa9Ktbp5/Ar7Fwpq2qLtxo07tb8JAZMjPIU5aQ81AMDVCE8BAHB3ZghPV67cYPyBEtb52+PHzji4bcyj5y1CO9j8oZM5q++ixauMldXdYxs3a92zd39j5dWrN4kKDx7EVatRP6lfTmJz48DP5cs/3tZz/YbtNpshE0YrI38ab3P/xUuWvXzltrHmpF9nqLXlK9Ww0w/37j1Rcx0YtW3fVW7unT2PscFC7z4DZZ2+/QYndcoZsmQTWxl3KBopV1WuWnvbtn2Jb2MVHFLu8uVbxk2M4emUqbMqVKqZ+EADBo7Q/j4EzIzwFOakPdQAAFcjPAUAwN2ZITx98CAuRx5/q58p/oWCwjp/O3/B8mvX7trZtkHDFnZ+63yZwWvHjo+jNVV4msevsLFatpx+T2Jfigodu/Sw/+OpTv0mam/GLDIouExSm8ybv9zY4HETptnZf9GgkMcxz1VlYyA7dNgYJ/pWhacZsmSzCjoPHz4pKojm2T9l7+x5Yh59bJIKT/38A7x8ctncJLB4aWOSawxPM3n5JnWgY8f+p/2tCJgW4SnMSUuQAQCpifAUAAB3Z4bwVFi9epOdG8pXrFxz1uyF8XFvrLaav+Bj8Jctp98fc5dcvnL77+NnWrfppMqDQ8qp+io8lUqUKt/jux+qVq/XvUdfsfbKlSh1jbyouXXr3ui7j69duzvnj8VfZcwqyzNn9X0W/1buzWogp6gzZOjoI0dO7dx1sG6DpsaG3YuOlZuIQ4g9yPJMXr4zf58v9n/q1IU2bTur+j+NmagaXLJMRVXu3GyhKjyVcvsV6tb9++at2otzlxWKBIbIVekyef8+a8HNG/dv33q4bds+P/8AtdX+/cfVDlV4KpX6utKaNZtPnDg3depsT5+cqnzkT+PVJsbwVGjWsp2of+/ek0OHTgQWL63KnUuHATdBeApz0h5qpKCMntkFefMZ8Z0oF42T57juoOpnRsrKkCWb3L9Hwp+Tk3ssq04w9o9RkaCSVarXrlS1Zs68BdJcFznHqjON/Yz/JMJTAADcnUnCU2Hz5t3GwC6x4JByFy9cN25SplwVtXbLlj2qPD7uTbESX8vyQgElLl28IcuN4WmFSjXlaFNBDpOMuv1o/oLlffsNrlG74fr1240HqlmnodrwxvV7stAqPP1j7hJVP+7pa+PF6XPnLZPlQ4aOVoVTps5S9Z8/e6fq+xcMFIuy3L9wMVV/zZrNVj3WKjSsZJmKiVWsXFPVMYanXj65IiOjjKcsOmrVqo3Dhv/cqGno8JG/GHc+avQEteGSZWtVuTE8Fc8fPIhTq0SnqVUFihRX5cbwNLdfIePUrkuX/6lWNW/VXvubEDAtwlOYk/ZQI6WUKFXOkvA4dPgvsbhs+Uq52Khpy5Q9oEObZwAAIABJREFUUPNWbYOCP/zh0K9AgDzKzN/nuOKkHj58JPf/Vcas4d9+J5//OuU3Bzdf++d6uUmd+o2KBJWUz0+cPKUq9Os/6NbtKIvhIdY2aNQsBU/B1V3knN59+8tWjR03USzejvrQCca/IuO/hPAUAAB3Z57w9EXCBKa//fZHuYrVkxro4V8wUGWXd6JiPpYXLma1q8OHTx48+PfDB/HGQmN4umjJakea9CT25c5dB0uUKq82VFGsMTwtEhiiEk/JZiwY8vXHkaR378QY60+c9HF60xN/n5WFhQJKqEJjgikZx6UaZfHOoeoYw9Nu3b935JTFiYgGtAoNUxvOnbtUrTWGpwsXrbTa1jh9wYkT52ShMTzt2bu/sX5ExCW1qkbthtrfgYBpEZ7CnLSHGiklFcLTokEhu/fsE/usWqOOLEnT4enEX6dabD3evXvXPqxLSp0C4SnMgPAUAAB3Z6rwVLkTFbNq1cZe3/+oLipXuob3lnX27juqCr9p1NKR3RrD0/PnriZV7V507PLl63r3GVipSq3EF2FdOH9NVjOGp5279rLaycUL19XaMuWqyEJ1sduXGbzE/o2Mk7eqK/TLV6qhCidMmm51iOSGp7PnLErqlJ8+ebVt275hw3+uU79J4ntAzfljsappDE+vXImy2k+Hjt3V2nXrtslCY3g66dcZxvqRkVFqVeWqtbW/8QDTIjyFOWkPNVJKwaLFZf61c9ee9198c+fLxVp1G6bUIYYMGyn3mWrh6c2bt8TOX7x4IZ6369BZHmvMWNt3rUxs8ZLlcpPK1Wrl8Sssnx88dFis8s2d/9WrV2Lx8pXI+g2b5vYrFFAsZPrMWbLOnbt3U2q6A3OGp13Ce8hWDR3+k1i8dPmKeP7mzZt0mby1tw2uQHgKAIC7M2d4anTo0AljhuiTI58sN14k3qxlO0d2ZQxPrQalSlG3H3Xq0tP+b1+bI08HDhpptavou4/VWj//AKsS+34ZP1XuJKzzt6owtHVHq0P8NGZi+Ld9JLFW1UwqPLWai0B6Fv92zNhJiQNTo6RGnhrvCiX17jNQrVVZrTE8nb/gX7fPun49Wq0iPAXsIDyFOWkPNVJQbGysxWKZNn2mh2FoYW6/QqpC4cASjZu16tile5PmoQWKFDNum8evcFBwaXU9vkfCTOiyJFe+gh4JIeDkqdPlPtuHdZE1rZLBkK8rdujUrWHjFjZvrpg1W+469RuJCuJf8dy4SnyJq6OXKluxXYfORYPe/+150+atYucREWc8DENr27b/MC98waLFxSaFAoKT6pD+AwbLTbx984rFBw8eiuez/5gnnlevVV+uGjFqjHGTM2fPyXLRV6owQ5Zsor5oVZt2HavVrJd41lSx/9r1GopTEx0rW6443kXZc/nV+6ZJWOfwFqHtSpetZOeFLhJUUnaX6sYv0nvKEiGjZ3b1XE206umTU5aITvN4/0fxyrJVzVq28fhniO7FS5e1v4fhIoSnAAC4O+3h6dWrdzp07F67XuMSpconFZ/dvvXQOIRBLIrCHTv2q5Kq1es5cixjeJp47cMH8carzrN45/imcctfxk89cuRU0xZtVfnly7dk/X+Fp4NHWe3twvlram2hgBKi5NHDZ6pE/I9EmXJVkjJj5jy5k7nzlqlNxA934wSjVozXvycVnu7cdTDxhsaxol9m8BIvwaDBP23dulecuCqfN/9j4mkMT9WksUr7sHC1Vo2fNYanVre9IjwFHER4CnPSHmqkoJ279rx48aJLeI/3X0nVaonnUXfuyFWZvHzXb9hkdX26KBHf5rKCusxfXbBilfpt2brdanPxta7qzF+4WF0jLx7Xr98oW6GqsW3DR45+8vSpqiCeixK1dsCgobK8e4/e8knskyfpM/uIOuIsFi5aKr/iY2NjxWJwyIfv8bPnzouakZFXk+qQajXrifpXr374PbN1+w6x2Kt3X/G8ZOnyapBps5ZtVB7q7ZvXO3se482dmjQPvX//gfHEY2JivmncXK4Vv+4mT50eH//MWGHP3v058vhbdaP9LvppzC/Pnz837kScXVK58Oifx8k6cpSx8OPAIbJk3fqNokl79+2Xi8NGfOhkGUOLR98f3v+RWJyveAlEb8iMeMiwkeL5ilVrtL+H4SKEpwAAuDvt4WnMo+fiB736dRIRcSlxnccxz42jQW/dfPDi3+lk3vxFrKYc3bP3yM+/TF6/fvulSzdVoQpPxd4SH2XchGlqh6GtOxqTym8af5zyTF2rbgxP27brYrW3rVv3qrUqFlQDPDNn9X0W//aTnRN997FxbEXiiFZxJDzdu++o1VaHD59Ua4uXLKsG1QrjJ36cE82YeBrD07NnI612KM5UrRU9IAsJT4HPR3gKc9IeaqSO32f9IbOzEydPbdm6PTr6nlzs0auPrPDJ8HTjpi1v376VJW8SHuLLWtURq548fbpr9141cvP43yfU0af+NkNtePXqtdevX8vF6TNnyQoqPH327EOAKANT+z4Zntr394mTKql8Ghe3bftO0QzjgFPZCS9fvnwf5sbGin478texd+/eychVVhAdKPewecu2yVOni16Si2JvVt1op4tC24apRHXT5q0XLl6Si0mlmeJnp2iJrNOpa/fiJb+WwevtqCj5O00cNCYmxpIw40Fg8VLduveSlbdu36H9rQgtCE8BAHB32sNToVqN+urXSeWqteOevraq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)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "IzsyDXEWwPVt" - }, - "source": [ - "### 🔧 Install `dependencies`" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "id": "os_vm0MkIxr9" - }, - "outputs": [], - "source": [ - "%%capture\n", - "!pip install langgraph langchain-scrapegraph langchain-openai \"langchain-community>=0.2.11\" tavily-python" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "apBsL-L2KzM7" - }, - "source": [ - "### 🔑 Import `ScrapeGraph`, `Tavily` and `OpenAI` API keys" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ol9gQbAFkh9b" - }, - "source": [ - "You can find the Scrapegraph API key [here](https://dashboard.scrapegraphai.com/)" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "sffqFG2EJ8bI", - "outputId": "9eefeb7d-d2cf-484c-b5cb-d73a5aa5e261" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Scrapegraph API key:\n", - "··········\n", - "Tavily API key:\n", - "··········\n", - "OpenAI API key:\n", - "··········\n" - ] - } - ], - "source": [ - "import getpass\n", - "import os\n", - "\n", - "if not os.environ.get(\"SGAI_API_KEY\"):\n", - " os.environ[\"SGAI_API_KEY\"] = getpass.getpass(\"Scrapegraph API key:\\n\")\n", - "\n", - "if not os.environ.get(\"TAVILY_API_KEY\"):\n", - " os.environ[\"TAVILY_API_KEY\"] = getpass.getpass(\"Tavily API key:\\n\")\n", - "\n", - "if not os.environ.get(\"OPENAI_API_KEY\"):\n", - " os.environ[\"OPENAI_API_KEY\"] = getpass.getpass(\"OpenAI API key:\\n\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "jnqMB2-xVYQ7" - }, - "source": [ - "### 📝 Defining an `Output Schema` for Webpage Content Extraction\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "VZvxbjfXvbgd" - }, - "source": [ - "If you already know what you want to extract from a webpage, you can **define an output schema** using **Pydantic**. This schema acts as a \"blueprint\" that tells the AI how to structure the response.\n", - "\n", - "
\n", - " Pydantic Schema Quick Guide\n", - "\n", - "Types of Schemas \n", - "\n", - "1. Simple Schema \n", - "Use this when you want to extract straightforward information, such as a single piece of content. \n", - "\n", - "```python\n", - "from pydantic import BaseModel, Field\n", - "\n", - "# Simple schema for a single webpage\n", - "class PageInfoSchema(BaseModel):\n", - " title: str = Field(description=\"The title of the webpage\")\n", - " description: str = Field(description=\"The description of the webpage\")\n", - "\n", - "# Example Output JSON after AI extraction\n", - "{\n", - " \"title\": \"ScrapeGraphAI: The Best Content Extraction Tool\",\n", - " \"description\": \"ScrapeGraphAI provides powerful tools for structured content extraction from websites.\"\n", - "}\n", - "```\n", - "\n", - "2. Complex Schema (Nested) \n", - "If you need to extract structured information with multiple related items (like a list of repositories), you can **nest schemas**.\n", - "\n", - "```python\n", - "from pydantic import BaseModel, Field\n", - "from typing import List\n", - "\n", - "# Define a schema for a single repository\n", - "class RepositorySchema(BaseModel):\n", - " name: str = Field(description=\"Name of the repository (e.g., 'owner/repo')\")\n", - " description: str = Field(description=\"Description of the repository\")\n", - " stars: int = Field(description=\"Star count of the repository\")\n", - " forks: int = Field(description=\"Fork count of the repository\")\n", - " today_stars: int = Field(description=\"Stars gained today\")\n", - " language: str = Field(description=\"Programming language used\")\n", - "\n", - "# Define a schema for a list of repositories\n", - "class ListRepositoriesSchema(BaseModel):\n", - " repositories: List[RepositorySchema] = Field(description=\"List of GitHub trending repositories\")\n", - "\n", - "# Example Output JSON after AI extraction\n", - "{\n", - " \"repositories\": [\n", - " {\n", - " \"name\": \"google-gemini/cookbook\",\n", - " \"description\": \"Examples and guides for using the Gemini API\",\n", - " \"stars\": 8036,\n", - " \"forks\": 1001,\n", - " \"today_stars\": 649,\n", - " \"language\": \"Jupyter Notebook\"\n", - " },\n", - " {\n", - " \"name\": \"TEN-framework/TEN-Agent\",\n", - " \"description\": \"TEN Agent is a conversational AI powered by TEN, integrating Gemini 2.0 Multimodal Live API, OpenAI Realtime API, RTC, and more.\",\n", - " \"stars\": 3224,\n", - " \"forks\": 311,\n", - " \"today_stars\": 361,\n", - " \"language\": \"Python\"\n", - " }\n", - " ]\n", - "}\n", - "```\n", - "\n", - "Key Takeaways \n", - "- **Simple Schema**: Perfect for small, straightforward extractions. \n", - "- **Complex Schema**: Use nesting to extract lists or structured data, like \"a list of repositories.\" \n", - "\n", - "Both approaches give the AI a clear structure to follow, ensuring that the extracted content matches exactly what you need.\n", - "
\n" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "id": "dlrOEgZk_8V4" - }, - "outputs": [], - "source": [ - "from pydantic import BaseModel, Field\n", - "from typing import List\n", - "\n", - "# Schema for a single news item\n", - "class NewsItemSchema(BaseModel):\n", - " title: str = Field(description=\"Title of the news article\")\n", - " link: str = Field(description=\"URL to the news article\")\n", - " description: str = Field(description=\"Summary/description of the news article\")\n", - "\n", - "# Schema that contains a list of news items\n", - "class ListNewsSchema(BaseModel):\n", - " news: List[NewsItemSchema] = Field(description=\"List of news articles with their details\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "cDGH0b2DkY63" - }, - "source": [ - "### 🚀 Initialize `scrapegraph` and `tavily` tools and `langgraph` prebuilt agent and run the `extraction`" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "M1KSXffZopUD" - }, - "source": [ - "Here we use `SmartScraperTool` to extract structured data using AI from a webpage.\n", - "\n", - "\n", - "> If you already have an HTML file, you can upload it and use `LocalScraperTool` instead.\n", - "\n", - "You can find more info in the [official langchain documentation](https://python.langchain.com/docs/integrations/tools/scrapegraph/)\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "id": "ySoE0Rowjgp1" - }, - "outputs": [], - "source": [ - "from langchain_scrapegraph.tools import SmartScraperTool\n", - "from langchain_community.tools import TavilySearchResults\n", - "\n", - "# Will automatically get SGAI_API_KEY from environment\n", - "# Initialization without output schema\n", - "# smartscraper_tool = SmartScraperTool()\n", - "\n", - "# Since we have defined an output schema, let's use it\n", - "# This will force the tool to have always the same output structure\n", - "smartscraper_tool = SmartScraperTool(llm_output_schema=ListNewsSchema)\n", - "\n", - "# Initialize tavily tool to look for URLs\n", - "tavily_tool = TavilySearchResults(\n", - " max_results=1,\n", - " name=\"urls_finder\",\n", - " description=\"Use this tool to find webpages urls that satisfy the user request\",\n", - ")\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "W54HVoYeiJbG" - }, - "source": [ - "We then initialize the `llm model` we want to use in the agent\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "id": "ctrkEnltiBCD" - }, - "outputs": [], - "source": [ - "# First we initialize the llm model we want to use.\n", - "from langchain_openai import ChatOpenAI\n", - "\n", - "llm_model = ChatOpenAI(model=\"gpt-4o\", temperature=0)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "M0WY2Pa8Y8Pk" - }, - "source": [ - "Here we use `create_react_agent` to quickly use one of the prebuilt agents from `langgraph.prebuilt` module\n", - "\n", - "You can find more info in the [official langgraph documentation](https://langchain-ai.github.io/langgraph/how-tos/create-react-agent/)\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "id": "Zo1BcIlHhcQP" - }, - "outputs": [], - "source": [ - "from langgraph.prebuilt import create_react_agent\n", - "from langgraph.checkpoint.memory import MemorySaver\n", - "\n", - "# List of tools we want the agent to use\n", - "tools = [smartscraper_tool, tavily_tool]\n", - "\n", - "# We set up the agent's memory to review the different reasoning steps\n", - "memory = MemorySaver()\n", - "\n", - "# Add a configuration to specify where to store the graph states\n", - "config = {\"configurable\": {\"thread_id\": \"1\"}}\n", - "\n", - "# Initialize the ReAct agent\n", - "graph = create_react_agent(\n", - " model=llm_model,\n", - " tools=tools,\n", - " checkpointer=memory,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "_UYcJ2Mxip5w" - }, - "source": [ - "Let's visualize the `graph`" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 350 - }, - "id": "2FIKomclLNFx", - "outputId": "9958e65d-9796-4f24-fd3f-12cc55532a2f" - }, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "from IPython.display import Image, display\n", - "\n", - "display(Image(graph.get_graph().draw_mermaid_png()))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "cw-T5CYWkCEN" - }, - "source": [ - "`Run the graph` and stream the agent reasoning.\n", - "\n", - "We are going to ask the agent to extract the content from a `specific webpage`." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "Qn1rC2y8kAe9", - "outputId": "1865f1ea-7241-40de-85e5-3743acf222cb" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "================================\u001b[1m Human Message \u001b[0m=================================\n", - "\n", - "Find latest news related to robotics January 2025\n", - "==================================\u001b[1m Ai Message \u001b[0m==================================\n", - "Tool Calls:\n", - " urls_finder (call_MIc1FV1MLRIv9QqGzepHKeUD)\n", - " Call ID: call_MIc1FV1MLRIv9QqGzepHKeUD\n", - " Args:\n", - " query: latest robotics news January 2025\n", - "=================================\u001b[1m Tool Message \u001b[0m=================================\n", - "Name: urls_finder\n", - "\n", - "[{\"url\": \"https://www.sciencedaily.com/news/computers_math/robotics/\", \"content\": \"Read up-to-date robotics news from research institutions around the world. ... Jan. 8, 2025 — Facing high ... Keep up to date with the latest news from ScienceDaily via social networks:\"}]\n", - "==================================\u001b[1m Ai Message \u001b[0m==================================\n", - "Tool Calls:\n", - " SmartScraper (call_iAelivYCYBqwvaxSEaI61QMx)\n", - " Call ID: call_iAelivYCYBqwvaxSEaI61QMx\n", - " Args:\n", - " user_prompt: Extract the latest news headlines and summaries related to robotics from January 2025.\n", - " website_url: https://www.sciencedaily.com/news/computers_math/robotics/\n", - "=================================\u001b[1m Tool Message \u001b[0m=================================\n", - "Name: SmartScraper\n", - "\n", - "{\"news\": [{\"title\": \"Using Robots in Nursing Homes Linked to Higher Employee Retention, Better Patient Care\", \"link\": \"https://www.sciencedaily.com/releases/2025/01/250108173155.htm\", \"description\": \"Nursing homes are increasingly utilizing robots for various care tasks to address high employee turnover and an aging population, although research on the impact of these technologies is limited. A study indicates that the integration of robots in nursing homes is associated with improved employee retention rates and enhanced patient care quality.\"}, {\"title\": \"Electrohydraulic Wearable Devices Create Unprecedented Haptic Sensations\", \"link\": \"https://www.sciencedaily.com/releases/2025/01/250108144220.htm\", \"description\": \"Scientists have developed compact wearable devices that provide rich and expressive tactile sensations, surpassing the basic vibrations of current consumer devices. New advancements in electrohydraulic wearable technology are reported to produce unique haptic sensations, enhancing user interaction with robotic systems.\"}, {\"title\": \"Artificial Intelligence: Algorithms Improve Medical Image Analysis\", \"link\": \"https://www.sciencedaily.com/releases/2025/01/250102162630.htm\", \"description\": \"AI has the potential to enhance the analysis of medical images, with deep learning algorithms capable of identifying tumor locations and sizes.\"}, {\"title\": \"DNA Nanorobots Can Alter Artificial Cells\", \"link\": \"https://www.sciencedaily.com/releases/2025/01/250113134758.htm\", \"description\": \"Research reveals that DNA nanorobots have the capability to modify artificial cells, showcasing potential applications in biotechnology and medicine.\"}, {\"title\": \"A Smart Ring With a Tiny Camera Lets Users Point and Click to Control Home Devices\", \"link\": \"https://www.sciencedaily.com/releases/2025/01/250109130038.htm\", \"description\": \"This innovative smart ring features a miniature camera that allows users to control various home devices through simple point-and-click actions.\"}, {\"title\": \"Advancements in Neural Implant Research Enhance Durability\", \"link\": \"https://www.sciencedaily.com/releases/2025/01/250107140908.htm\", \"description\": \"Recent research in neural implants has led to improvements in their durability, which could significantly impact the field of robotics and human-machine interfaces.\"}]}\n" - ] - } - ], - "source": [ - "# Inputs for the agent\n", - "inputs = {\"messages\": [(\"user\", \"Find latest news related to robotics January 2025\")]}\n", - "\n", - "# Run the graph\n", - "for event in graph.stream(inputs, config, stream_mode=\"values\"):\n", - " event[\"messages\"][-1].pretty_print()\n" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "id": "_12IqhcrkiHC" - }, - "outputs": [], - "source": [ - "# get last message (assuming the last one is the Smartscraper tool response)\n", - "result = graph.get_state(config).values[\"messages\"][-1].content\n", - "\n", - "import json\n", - "# convert string into json\n", - "result = json.loads(result)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "YZz1bqCIpoL8" - }, - "source": [ - "Print the response" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "F1VfD8B4LPc8", - "outputId": "9ddc9298-8295-4efa-f66f-e381b75aa793" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{\n", - " \"news\": [\n", - " {\n", - " \"title\": \"Using Robots in Nursing Homes Linked to Higher Employee Retention, Better Patient Care\",\n", - " \"link\": \"https://www.sciencedaily.com/releases/2025/01/250108173155.htm\",\n", - " \"description\": \"Nursing homes are increasingly utilizing robots for various care tasks to address high employee turnover and an aging population, although research on the impact of these technologies is limited. A study indicates that the integration of robots in nursing homes is associated with improved employee retention rates and enhanced patient care quality.\"\n", - " },\n", - " {\n", - " \"title\": \"Electrohydraulic Wearable Devices Create Unprecedented Haptic Sensations\",\n", - " \"link\": \"https://www.sciencedaily.com/releases/2025/01/250108144220.htm\",\n", - " \"description\": \"Scientists have developed compact wearable devices that provide rich and expressive tactile sensations, surpassing the basic vibrations of current consumer devices. New advancements in electrohydraulic wearable technology are reported to produce unique haptic sensations, enhancing user interaction with robotic systems.\"\n", - " },\n", - " {\n", - " \"title\": \"Artificial Intelligence: Algorithms Improve Medical Image Analysis\",\n", - " \"link\": \"https://www.sciencedaily.com/releases/2025/01/250102162630.htm\",\n", - " \"description\": \"AI has the potential to enhance the analysis of medical images, with deep learning algorithms capable of identifying tumor locations and sizes.\"\n", - " },\n", - " {\n", - " \"title\": \"DNA Nanorobots Can Alter Artificial Cells\",\n", - " \"link\": \"https://www.sciencedaily.com/releases/2025/01/250113134758.htm\",\n", - " \"description\": \"Research reveals that DNA nanorobots have the capability to modify artificial cells, showcasing potential applications in biotechnology and medicine.\"\n", - " },\n", - " {\n", - " \"title\": \"A Smart Ring With a Tiny Camera Lets Users Point and Click to Control Home Devices\",\n", - " \"link\": \"https://www.sciencedaily.com/releases/2025/01/250109130038.htm\",\n", - " \"description\": \"This innovative smart ring features a miniature camera that allows users to control various home devices through simple point-and-click actions.\"\n", - " },\n", - " {\n", - " \"title\": \"Advancements in Neural Implant Research Enhance Durability\",\n", - " \"link\": \"https://www.sciencedaily.com/releases/2025/01/250107140908.htm\",\n", - " \"description\": \"Recent research in neural implants has led to improvements in their durability, which could significantly impact the field of robotics and human-machine interfaces.\"\n", - " }\n", - " ]\n", - "}\n" - ] - } - ], - "source": [ - "print(json.dumps(result, indent=2))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "S8s1AvWJKNaV" - }, - "source": [ - "## Save output inside a My-SQL db" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "123NhcIYKNaW", - "outputId": "c796a664-b201-4a18-dc10-9954b4a31107" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Collecting mysql-connector-python\n", - " Downloading mysql_connector_python-9.1.0-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (6.0 kB)\n", - "Downloading mysql_connector_python-9.1.0-cp310-cp310-manylinux_2_28_x86_64.whl (34.4 MB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m34.4/34.4 MB\u001b[0m \u001b[31m35.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", - "\u001b[?25hInstalling collected packages: mysql-connector-python\n", - "Successfully installed mysql-connector-python-9.1.0\n" - ] - } - ], - "source": [ - "!pip install mysql-connector-python\n" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "R3tflfTDKNaW", - "outputId": "9c2ad012-610e-4714-ef8a-f614981c976d" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Reading package lists... Done\n", - "Building dependency tree... Done\n", - "Reading state information... Done\n", - "The following additional packages will be installed:\n", - " libcgi-fast-perl libcgi-pm-perl libclone-perl libencode-locale-perl libfcgi-bin libfcgi-perl\n", - " libfcgi0ldbl libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl\n", - " libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libmecab2 libprotobuf-lite23\n", - " liburi-perl mecab-ipadic mecab-ipadic-utf8 mecab-utils mysql-client-8.0 mysql-client-core-8.0\n", - " mysql-server-8.0 mysql-server-core-8.0\n", - "Suggested packages:\n", - " libdata-dump-perl libipc-sharedcache-perl libbusiness-isbn-perl libwww-perl mailx tinyca\n", - "The following NEW packages will be installed:\n", - " libcgi-fast-perl libcgi-pm-perl libclone-perl libencode-locale-perl libfcgi-bin libfcgi-perl\n", - " libfcgi0ldbl libhtml-parser-perl libhtml-tagset-perl libhtml-template-perl libhttp-date-perl\n", - " libhttp-message-perl libio-html-perl liblwp-mediatypes-perl libmecab2 libprotobuf-lite23\n", - " liburi-perl mecab-ipadic mecab-ipadic-utf8 mecab-utils mysql-client-8.0 mysql-client-core-8.0\n", - " mysql-server mysql-server-8.0 mysql-server-core-8.0\n", - "0 upgraded, 25 newly installed, 0 to remove and 49 not upgraded.\n", - "Need to get 29.6 MB of archives.\n", - "After this operation, 243 MB of additional disk space will be used.\n", - "Get:1 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 mysql-client-core-8.0 amd64 8.0.40-0ubuntu0.22.04.1 [2,715 kB]\n", - "Get:2 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 mysql-client-8.0 amd64 8.0.40-0ubuntu0.22.04.1 [22.7 kB]\n", - "Get:3 http://archive.ubuntu.com/ubuntu jammy/main amd64 libmecab2 amd64 0.996-14build9 [199 kB]\n", - "Get:4 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libprotobuf-lite23 amd64 3.12.4-1ubuntu7.22.04.1 [209 kB]\n", - "Get:5 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 mysql-server-core-8.0 amd64 8.0.40-0ubuntu0.22.04.1 [17.6 MB]\n", - "Get:6 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 mysql-server-8.0 amd64 8.0.40-0ubuntu0.22.04.1 [1,441 kB]\n", - "Get:7 http://archive.ubuntu.com/ubuntu jammy/main amd64 libhtml-tagset-perl all 3.20-4 [12.5 kB]\n", - "Get:8 http://archive.ubuntu.com/ubuntu jammy/main amd64 liburi-perl all 5.10-1 [78.8 kB]\n", - "Get:9 http://archive.ubuntu.com/ubuntu jammy/main amd64 libhtml-parser-perl amd64 3.76-1build2 [88.4 kB]\n", - "Get:10 http://archive.ubuntu.com/ubuntu jammy/main amd64 libcgi-pm-perl all 4.54-1 [188 kB]\n", - "Get:11 http://archive.ubuntu.com/ubuntu jammy/main amd64 libfcgi0ldbl amd64 2.4.2-2build2 [28.0 kB]\n", - "Get:12 http://archive.ubuntu.com/ubuntu jammy/main amd64 libfcgi-perl amd64 0.82+ds-1build1 [22.8 kB]\n", - "Get:13 http://archive.ubuntu.com/ubuntu jammy/main amd64 libcgi-fast-perl all 1:2.15-1 [10.5 kB]\n", - "Get:14 http://archive.ubuntu.com/ubuntu jammy/main amd64 libclone-perl amd64 0.45-1build3 [11.0 kB]\n", - "Get:15 http://archive.ubuntu.com/ubuntu jammy/main amd64 libencode-locale-perl all 1.05-1.1 [11.8 kB]\n", - "Get:16 http://archive.ubuntu.com/ubuntu jammy/main amd64 libfcgi-bin amd64 2.4.2-2build2 [11.2 kB]\n", - "Get:17 http://archive.ubuntu.com/ubuntu jammy/main amd64 libhtml-template-perl all 2.97-1.1 [59.1 kB]\n", - "Get:18 http://archive.ubuntu.com/ubuntu jammy/main amd64 libhttp-date-perl all 6.05-1 [9,920 B]\n", - "Get:19 http://archive.ubuntu.com/ubuntu jammy/main amd64 libio-html-perl all 1.004-2 [15.4 kB]\n", - "Get:20 http://archive.ubuntu.com/ubuntu jammy/main amd64 liblwp-mediatypes-perl all 6.04-1 [19.5 kB]\n", - "Get:21 http://archive.ubuntu.com/ubuntu jammy/main amd64 libhttp-message-perl all 6.36-1 [76.8 kB]\n", - "Get:22 http://archive.ubuntu.com/ubuntu jammy/main amd64 mecab-utils amd64 0.996-14build9 [4,850 B]\n", - "Get:23 http://archive.ubuntu.com/ubuntu jammy/main amd64 mecab-ipadic all 2.7.0-20070801+main-3 [6,718 kB]\n", - "Get:24 http://archive.ubuntu.com/ubuntu jammy/main amd64 mecab-ipadic-utf8 all 2.7.0-20070801+main-3 [4,384 B]\n", - "Get:25 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 mysql-server all 8.0.40-0ubuntu0.22.04.1 [9,464 B]\n", - "Fetched 29.6 MB in 1s (27.0 MB/s)\n", - "Preconfiguring packages ...\n", - "Selecting previously unselected package mysql-client-core-8.0.\n", - "(Reading database ... 123632 files and directories currently installed.)\n", - "Preparing to unpack .../00-mysql-client-core-8.0_8.0.40-0ubuntu0.22.04.1_amd64.deb ...\n", - "Unpacking mysql-client-core-8.0 (8.0.40-0ubuntu0.22.04.1) ...\n", - "Selecting previously unselected package mysql-client-8.0.\n", - "Preparing to unpack .../01-mysql-client-8.0_8.0.40-0ubuntu0.22.04.1_amd64.deb ...\n", - "Unpacking mysql-client-8.0 (8.0.40-0ubuntu0.22.04.1) ...\n", - "Selecting previously unselected package libmecab2:amd64.\n", - "Preparing to unpack .../02-libmecab2_0.996-14build9_amd64.deb ...\n", - "Unpacking libmecab2:amd64 (0.996-14build9) ...\n", - "Selecting previously unselected package libprotobuf-lite23:amd64.\n", - "Preparing to unpack .../03-libprotobuf-lite23_3.12.4-1ubuntu7.22.04.1_amd64.deb ...\n", - "Unpacking libprotobuf-lite23:amd64 (3.12.4-1ubuntu7.22.04.1) ...\n", - "Selecting previously unselected package mysql-server-core-8.0.\n", - "Preparing to unpack .../04-mysql-server-core-8.0_8.0.40-0ubuntu0.22.04.1_amd64.deb ...\n", - "Unpacking mysql-server-core-8.0 (8.0.40-0ubuntu0.22.04.1) ...\n", - "Selecting previously unselected package mysql-server-8.0.\n", - "Preparing to unpack .../05-mysql-server-8.0_8.0.40-0ubuntu0.22.04.1_amd64.deb ...\n", - "Unpacking mysql-server-8.0 (8.0.40-0ubuntu0.22.04.1) ...\n", - "Selecting previously unselected package libhtml-tagset-perl.\n", - "Preparing to unpack .../06-libhtml-tagset-perl_3.20-4_all.deb ...\n", - "Unpacking libhtml-tagset-perl (3.20-4) ...\n", - "Selecting previously unselected package liburi-perl.\n", - "Preparing to unpack .../07-liburi-perl_5.10-1_all.deb ...\n", - "Unpacking liburi-perl (5.10-1) ...\n", - "Selecting previously unselected package libhtml-parser-perl:amd64.\n", - "Preparing to unpack .../08-libhtml-parser-perl_3.76-1build2_amd64.deb ...\n", - "Unpacking libhtml-parser-perl:amd64 (3.76-1build2) ...\n", - "Selecting previously unselected package libcgi-pm-perl.\n", - "Preparing to unpack .../09-libcgi-pm-perl_4.54-1_all.deb ...\n", - "Unpacking libcgi-pm-perl (4.54-1) ...\n", - "Selecting previously unselected package libfcgi0ldbl:amd64.\n", - "Preparing to unpack .../10-libfcgi0ldbl_2.4.2-2build2_amd64.deb ...\n", - "Unpacking libfcgi0ldbl:amd64 (2.4.2-2build2) ...\n", - "Selecting previously unselected package libfcgi-perl:amd64.\n", - "Preparing to unpack .../11-libfcgi-perl_0.82+ds-1build1_amd64.deb ...\n", - "Unpacking libfcgi-perl:amd64 (0.82+ds-1build1) ...\n", - "Selecting previously unselected package libcgi-fast-perl.\n", - "Preparing to unpack .../12-libcgi-fast-perl_1%3a2.15-1_all.deb ...\n", - "Unpacking libcgi-fast-perl (1:2.15-1) ...\n", - "Selecting previously unselected package libclone-perl.\n", - "Preparing to unpack .../13-libclone-perl_0.45-1build3_amd64.deb ...\n", - "Unpacking libclone-perl (0.45-1build3) ...\n", - "Selecting previously unselected package libencode-locale-perl.\n", - "Preparing to unpack .../14-libencode-locale-perl_1.05-1.1_all.deb ...\n", - "Unpacking libencode-locale-perl (1.05-1.1) ...\n", - "Selecting previously unselected package libfcgi-bin.\n", - "Preparing to unpack .../15-libfcgi-bin_2.4.2-2build2_amd64.deb ...\n", - "Unpacking libfcgi-bin (2.4.2-2build2) ...\n", - "Selecting previously unselected package libhtml-template-perl.\n", - "Preparing to unpack .../16-libhtml-template-perl_2.97-1.1_all.deb ...\n", - "Unpacking libhtml-template-perl (2.97-1.1) ...\n", - "Selecting previously unselected package libhttp-date-perl.\n", - "Preparing to unpack .../17-libhttp-date-perl_6.05-1_all.deb ...\n", - "Unpacking libhttp-date-perl (6.05-1) ...\n", - "Selecting previously unselected package libio-html-perl.\n", - "Preparing to unpack .../18-libio-html-perl_1.004-2_all.deb ...\n", - "Unpacking libio-html-perl (1.004-2) ...\n", - "Selecting previously unselected package liblwp-mediatypes-perl.\n", - "Preparing to unpack .../19-liblwp-mediatypes-perl_6.04-1_all.deb ...\n", - "Unpacking liblwp-mediatypes-perl (6.04-1) ...\n", - "Selecting previously unselected package libhttp-message-perl.\n", - "Preparing to unpack .../20-libhttp-message-perl_6.36-1_all.deb ...\n", - "Unpacking libhttp-message-perl (6.36-1) ...\n", - "Selecting previously unselected package mecab-utils.\n", - "Preparing to unpack .../21-mecab-utils_0.996-14build9_amd64.deb ...\n", - "Unpacking mecab-utils (0.996-14build9) ...\n", - "Selecting previously unselected package mecab-ipadic.\n", - "Preparing to unpack .../22-mecab-ipadic_2.7.0-20070801+main-3_all.deb ...\n", - "Unpacking mecab-ipadic (2.7.0-20070801+main-3) ...\n", - "Selecting previously unselected package mecab-ipadic-utf8.\n", - "Preparing to unpack .../23-mecab-ipadic-utf8_2.7.0-20070801+main-3_all.deb ...\n", - "Unpacking mecab-ipadic-utf8 (2.7.0-20070801+main-3) ...\n", - "Selecting previously unselected package mysql-server.\n", - "Preparing to unpack .../24-mysql-server_8.0.40-0ubuntu0.22.04.1_all.deb ...\n", - "Unpacking mysql-server (8.0.40-0ubuntu0.22.04.1) ...\n", - "Setting up libhttp-date-perl (6.05-1) ...\n", - "Setting up libmecab2:amd64 (0.996-14build9) ...\n", - "Setting up mysql-client-core-8.0 (8.0.40-0ubuntu0.22.04.1) ...\n", - "Setting up libfcgi0ldbl:amd64 (2.4.2-2build2) ...\n", - "Setting up libclone-perl (0.45-1build3) ...\n", - "Setting up libhtml-tagset-perl (3.20-4) ...\n", - "Setting up liblwp-mediatypes-perl (6.04-1) ...\n", - "Setting up libfcgi-bin (2.4.2-2build2) ...\n", - "Setting up libencode-locale-perl (1.05-1.1) ...\n", - "Setting up libprotobuf-lite23:amd64 (3.12.4-1ubuntu7.22.04.1) ...\n", - "Setting up mecab-utils (0.996-14build9) ...\n", - "Setting up libio-html-perl (1.004-2) ...\n", - "Setting up mysql-server-core-8.0 (8.0.40-0ubuntu0.22.04.1) ...\n", - "Setting up mysql-client-8.0 (8.0.40-0ubuntu0.22.04.1) ...\n", - "Setting up libfcgi-perl:amd64 (0.82+ds-1build1) ...\n", - "Setting up liburi-perl (5.10-1) ...\n", - "Setting up libhttp-message-perl (6.36-1) ...\n", - "Setting up mysql-server-8.0 (8.0.40-0ubuntu0.22.04.1) ...\n", - "invoke-rc.d: could not determine current runlevel\n", - "invoke-rc.d: policy-rc.d denied execution of stop.\n", - "update-alternatives: using /etc/mysql/mysql.cnf to provide /etc/mysql/my.cnf (my.cnf) in auto mode\n", - "Renaming removed key_buffer and myisam-recover options (if present)\n", - "mysqld will log errors to /var/log/mysql/error.log\n", - "mysqld is running as pid 1748\n", - "Created symlink /etc/systemd/system/multi-user.target.wants/mysql.service → /lib/systemd/system/mysql.service.\n", - "invoke-rc.d: could not determine current runlevel\n", - "invoke-rc.d: policy-rc.d denied execution of start.\n", - "Setting up mecab-ipadic (2.7.0-20070801+main-3) ...\n", - "Compiling IPA dictionary for Mecab. This takes long time...\n", - "reading /usr/share/mecab/dic/ipadic/unk.def ... 40\n", - "emitting double-array: 100% |###########################################| \n", - "/usr/share/mecab/dic/ipadic/model.def is not found. skipped.\n", - "reading /usr/share/mecab/dic/ipadic/Postp.csv ... 146\n", - "reading /usr/share/mecab/dic/ipadic/Adj.csv ... 27210\n", - "reading /usr/share/mecab/dic/ipadic/Noun.proper.csv ... 27328\n", - "reading /usr/share/mecab/dic/ipadic/Conjunction.csv ... 171\n", - "reading /usr/share/mecab/dic/ipadic/Noun.place.csv ... 72999\n", - "reading /usr/share/mecab/dic/ipadic/Noun.others.csv ... 151\n", - "reading /usr/share/mecab/dic/ipadic/Noun.nai.csv ... 42\n", - "reading /usr/share/mecab/dic/ipadic/Adverb.csv ... 3032\n", - "reading /usr/share/mecab/dic/ipadic/Adnominal.csv ... 135\n", - "reading /usr/share/mecab/dic/ipadic/Filler.csv ... 19\n", - "reading /usr/share/mecab/dic/ipadic/Noun.adverbal.csv ... 795\n", - "reading /usr/share/mecab/dic/ipadic/Auxil.csv ... 199\n", - "reading /usr/share/mecab/dic/ipadic/Postp-col.csv ... 91\n", - "reading /usr/share/mecab/dic/ipadic/Noun.number.csv ... 42\n", - "reading /usr/share/mecab/dic/ipadic/Verb.csv ... 130750\n", - "reading /usr/share/mecab/dic/ipadic/Interjection.csv ... 252\n", - "reading /usr/share/mecab/dic/ipadic/Noun.demonst.csv ... 120\n", - "reading /usr/share/mecab/dic/ipadic/Symbol.csv ... 208\n", - "reading /usr/share/mecab/dic/ipadic/Noun.verbal.csv ... 12146\n", - "reading /usr/share/mecab/dic/ipadic/Others.csv ... 2\n", - "reading /usr/share/mecab/dic/ipadic/Suffix.csv ... 1393\n", - "reading /usr/share/mecab/dic/ipadic/Prefix.csv ... 221\n", - "reading /usr/share/mecab/dic/ipadic/Noun.org.csv ... 16668\n", - "reading /usr/share/mecab/dic/ipadic/Noun.csv ... 60477\n", - "reading /usr/share/mecab/dic/ipadic/Noun.name.csv ... 34202\n", - "reading /usr/share/mecab/dic/ipadic/Noun.adjv.csv ... 3328\n", - "emitting double-array: 100% |###########################################| \n", - "reading /usr/share/mecab/dic/ipadic/matrix.def ... 1316x1316\n", - "emitting matrix : 100% |###########################################| \n", - "\n", - "done!\n", - "update-alternatives: using /var/lib/mecab/dic/ipadic to provide /var/lib/mecab/dic/debian (mecab-dictionary) in auto mode\n", - "Setting up mecab-ipadic-utf8 (2.7.0-20070801+main-3) ...\n", - "Compiling IPA dictionary for Mecab. This takes long time...\n", - "reading /usr/share/mecab/dic/ipadic/unk.def ... 40\n", - "emitting double-array: 100% |###########################################| \n", - "/usr/share/mecab/dic/ipadic/model.def is not found. skipped.\n", - "reading /usr/share/mecab/dic/ipadic/Postp.csv ... 146\n", - "reading /usr/share/mecab/dic/ipadic/Adj.csv ... 27210\n", - "reading /usr/share/mecab/dic/ipadic/Noun.proper.csv ... 27328\n", - "reading /usr/share/mecab/dic/ipadic/Conjunction.csv ... 171\n", - "reading /usr/share/mecab/dic/ipadic/Noun.place.csv ... 72999\n", - "reading /usr/share/mecab/dic/ipadic/Noun.others.csv ... 151\n", - "reading /usr/share/mecab/dic/ipadic/Noun.nai.csv ... 42\n", - "reading /usr/share/mecab/dic/ipadic/Adverb.csv ... 3032\n", - "reading /usr/share/mecab/dic/ipadic/Adnominal.csv ... 135\n", - "reading /usr/share/mecab/dic/ipadic/Filler.csv ... 19\n", - "reading /usr/share/mecab/dic/ipadic/Noun.adverbal.csv ... 795\n", - "reading /usr/share/mecab/dic/ipadic/Auxil.csv ... 199\n", - "reading /usr/share/mecab/dic/ipadic/Postp-col.csv ... 91\n", - "reading /usr/share/mecab/dic/ipadic/Noun.number.csv ... 42\n", - "reading /usr/share/mecab/dic/ipadic/Verb.csv ... 130750\n", - "reading /usr/share/mecab/dic/ipadic/Interjection.csv ... 252\n", - "reading /usr/share/mecab/dic/ipadic/Noun.demonst.csv ... 120\n", - "reading /usr/share/mecab/dic/ipadic/Symbol.csv ... 208\n", - "reading /usr/share/mecab/dic/ipadic/Noun.verbal.csv ... 12146\n", - "reading /usr/share/mecab/dic/ipadic/Others.csv ... 2\n", - "reading /usr/share/mecab/dic/ipadic/Suffix.csv ... 1393\n", - "reading /usr/share/mecab/dic/ipadic/Prefix.csv ... 221\n", - "reading /usr/share/mecab/dic/ipadic/Noun.org.csv ... 16668\n", - "reading /usr/share/mecab/dic/ipadic/Noun.csv ... 60477\n", - "reading /usr/share/mecab/dic/ipadic/Noun.name.csv ... 34202\n", - "reading /usr/share/mecab/dic/ipadic/Noun.adjv.csv ... 3328\n", - "emitting double-array: 100% |###########################################| \n", - "reading /usr/share/mecab/dic/ipadic/matrix.def ... 1316x1316\n", - "emitting matrix : 100% |###########################################| \n", - "\n", - "done!\n", - "update-alternatives: using /var/lib/mecab/dic/ipadic-utf8 to provide /var/lib/mecab/dic/debian (mecab-dictionary) in auto mode\n", - "Setting up libhtml-parser-perl:amd64 (3.76-1build2) ...\n", - "Setting up mysql-server (8.0.40-0ubuntu0.22.04.1) ...\n", - "Setting up libcgi-pm-perl (4.54-1) ...\n", - "Setting up libhtml-template-perl (2.97-1.1) ...\n", - "Setting up libcgi-fast-perl (1:2.15-1) ...\n", - "Processing triggers for man-db (2.10.2-1) ...\n", - "Processing triggers for libc-bin (2.35-0ubuntu3.4) ...\n", - "/sbin/ldconfig.real: /usr/local/lib/libtbbbind.so.3 is not a symbolic link\n", - "\n", - "/sbin/ldconfig.real: /usr/local/lib/libtcm.so.1 is not a symbolic link\n", - "\n", - "/sbin/ldconfig.real: /usr/local/lib/libtbbbind_2_5.so.3 is not a symbolic link\n", - "\n", - "/sbin/ldconfig.real: /usr/local/lib/libur_adapter_level_zero.so.0 is not a symbolic link\n", - "\n", - "/sbin/ldconfig.real: /usr/local/lib/libhwloc.so.15 is not a symbolic link\n", - "\n", - "/sbin/ldconfig.real: /usr/local/lib/libtbbmalloc.so.2 is not a symbolic link\n", - "\n", - "/sbin/ldconfig.real: /usr/local/lib/libtbbbind_2_0.so.3 is not a symbolic link\n", - "\n", - "/sbin/ldconfig.real: /usr/local/lib/libur_adapter_opencl.so.0 is not a symbolic link\n", - "\n", - "/sbin/ldconfig.real: /usr/local/lib/libur_loader.so.0 is not a symbolic link\n", - "\n", - "/sbin/ldconfig.real: /usr/local/lib/libtcm_debug.so.1 is not a symbolic link\n", - "\n", - "/sbin/ldconfig.real: /usr/local/lib/libtbbmalloc_proxy.so.2 is not a symbolic link\n", - "\n", - "/sbin/ldconfig.real: /usr/local/lib/libumf.so.0 is not a symbolic link\n", - "\n", - "/sbin/ldconfig.real: /usr/local/lib/libtbb.so.12 is not a symbolic link\n", - "\n" - ] - } - ], - "source": [ - "!apt-get -y install mysql-server" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "DkHJ0EBXKNaW", - "outputId": "92e43fd6-d4e7-45bf-b0c4-50bdbd2e3e2d" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " * Starting MySQL database server mysqld\n", - "su: warning: cannot change directory to /nonexistent: No such file or directory\n", - " ...done.\n" - ] - } - ], - "source": [ - "!service mysql start\n" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "id": "7q8Fd2cAKNaX" - }, - "outputs": [], - "source": [ - "!mysql -e \"ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'root';FLUSH PRIVILEGES;\"\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "ersqowNFKNaX" - }, - "source": [ - "### Connect to MySQL" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "id": "pGJsLLFSKNaX" - }, - "outputs": [], - "source": [ - "import mysql.connector\n", - "\n", - "# Create a connection to the MySQL server\n", - "conn = mysql.connector.connect(user='root', password='root', host='localhost')\n", - "\n", - "# Create a cursor to interact with the MySQL server\n", - "cursor = conn.cursor()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "E4lD995lKNaY" - }, - "source": [ - "### Create & Design a Database" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "id": "Iyhy8RswKNaY" - }, - "outputs": [], - "source": [ - "# Create a new database named 'articles_db'\n", - "cursor.execute(\"CREATE DATABASE IF NOT EXISTS articles_db\")\n", - "\n", - "# Switch to the 'articles_db' database\n", - "cursor.execute(\"USE articles_db\")\n", - "\n", - "# Create the 'articles_table' table\n", - "cursor.execute('''\n", - "CREATE TABLE IF NOT EXISTS articles_table (\n", - " id INT AUTO_INCREMENT PRIMARY KEY,\n", - " title VARCHAR(500) NOT NULL,\n", - " link VARCHAR(500) NOT NULL,\n", - " description TEXT NOT NULL\n", - ")\n", - "''')\n", - "\n", - "# Always remember to close the cursor and connection when done\n", - "cursor.close()\n", - "conn.close()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "F8QgpYWzKNaa" - }, - "source": [ - "### Populate the database" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "id": "srC8jArIKNab" - }, - "outputs": [], - "source": [ - "import mysql.connector\n", - "\n", - "# Connect to the MySQL server and the 'articles_db' database\n", - "conn = mysql.connector.connect(user='root', password='root', host='localhost', database='articles_db')\n", - "cursor = conn.cursor()\n", - "\n", - "# Prepare the news data for insertion\n", - "articles_table_data = [(article[\"title\"], article[\"link\"], article[\"description\"]) for article in result[\"news\"]]\n", - "\n", - "# Insert data using the cursor\n", - "cursor.executemany('''\n", - "INSERT INTO articles_table (title, link, description) VALUES (%s, %s, %s)\n", - "''', articles_table_data)\n", - "\n", - "# Commit the changes\n", - "conn.commit()\n", - "\n", - "# Close the cursor and connection\n", - "cursor.close()\n", - "conn.close()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "BVdHrkJVKNac" - }, - "source": [ - "### Query the database" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "vDGbRZGVKNae", - "outputId": "a0dd620d-f5ac-466a-885d-d26dd4638d33" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "(1, 'Using Robots in Nursing Homes Linked to Higher Employee Retention, Better Patient Care', 'https://www.sciencedaily.com/releases/2025/01/250108173155.htm', 'Nursing homes are increasingly utilizing robots for various care tasks to address high employee turnover and an aging population, although research on the impact of these technologies is limited. A study indicates that the integration of robots in nursing homes is associated with improved employee retention rates and enhanced patient care quality.')\n", - "(2, 'Electrohydraulic Wearable Devices Create Unprecedented Haptic Sensations', 'https://www.sciencedaily.com/releases/2025/01/250108144220.htm', 'Scientists have developed compact wearable devices that provide rich and expressive tactile sensations, surpassing the basic vibrations of current consumer devices. New advancements in electrohydraulic wearable technology are reported to produce unique haptic sensations, enhancing user interaction with robotic systems.')\n", - "(3, 'Artificial Intelligence: Algorithms Improve Medical Image Analysis', 'https://www.sciencedaily.com/releases/2025/01/250102162630.htm', 'AI has the potential to enhance the analysis of medical images, with deep learning algorithms capable of identifying tumor locations and sizes.')\n", - "(4, 'DNA Nanorobots Can Alter Artificial Cells', 'https://www.sciencedaily.com/releases/2025/01/250113134758.htm', 'Research reveals that DNA nanorobots have the capability to modify artificial cells, showcasing potential applications in biotechnology and medicine.')\n", - "(5, 'A Smart Ring With a Tiny Camera Lets Users Point and Click to Control Home Devices', 'https://www.sciencedaily.com/releases/2025/01/250109130038.htm', 'This innovative smart ring features a miniature camera that allows users to control various home devices through simple point-and-click actions.')\n", - "(6, 'Advancements in Neural Implant Research Enhance Durability', 'https://www.sciencedaily.com/releases/2025/01/250107140908.htm', 'Recent research in neural implants has led to improvements in their durability, which could significantly impact the field of robotics and human-machine interfaces.')\n" - ] - } - ], - "source": [ - "import mysql.connector\n", - "\n", - "# Connect to the MySQL server and the 'articles_db' database\n", - "conn = mysql.connector.connect(user='root', password='root', host='localhost', database='articles_db')\n", - "cursor = conn.cursor()\n", - "\n", - "# Execute the SELECT query\n", - "cursor.execute(\"SELECT * FROM articles_table\")\n", - "\n", - "# Fetch all the results\n", - "records = cursor.fetchall()\n", - "\n", - "# Print the records\n", - "for record in records:\n", - " print(record)\n", - "\n", - "# Close the cursor and connection\n", - "cursor.close()\n", - "conn.close()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "2as65QLypwdb" - }, - "source": [ - "### 💾 Save the output to a `CSV` file" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "HTLVFgbVLLBR" - }, - "source": [ - "Let's create a pandas dataframe and show the table with the extracted content" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 896 - }, - "id": "1lS9O1KOI51y", - "outputId": "76fb52bc-738a-44b4-ed34-13ce5ac9b26c" - }, - "outputs": [ - { - "data": { - "application/vnd.google.colaboratory.intrinsic+json": { - "summary": "{\n \"name\": \"df\",\n \"rows\": 27,\n \"fields\": [\n {\n \"column\": \"title\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 27,\n \"samples\": [\n \"DoorDash partners with Wing to launch drone deliveries in Dallas-Fort Worth mall\",\n \"Eyeonic Trace Laser Line Scanner offers sub-millimeter depth perception\",\n \"Mcity says open-source digital twin enables cheaper autonomous vehicle testing\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"link\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 27,\n \"samples\": [\n \"https://www.therobotreport.com/doordash-partners-wing-launch-drone-deliveries-dallas-fort-worth-mall/\",\n \"https://www.therobotreport.com/eyeonic-trace-laser-line-scanner-offers-sub-millimeter-depth-perception/\",\n \"https://www.therobotreport.com/mcity-open-source-digital-twin-enables-cheaper-av-testing/\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"description\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 23,\n \"samples\": [\n \"NVIDIA released Jetson Orin Nano Super Developer Kit, lowered the price and dropped an update for existing Nano users.\",\n \"The Mcity test facility has been open since 2015, and autonomous vehicle developers can now test their technology from anywhere.\",\n \"This latest partnership follows Matternet\\u2019s recent launch of a drone delivery operation in Silicon Valley.\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}", - "type": "dataframe", - "variable_name": "df" - }, - "text/html": [ - "\n", - "
\n", - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
titlelinkdescription
0Matternet adds ANRA's UTM tech to expand drone...https://www.therobotreport.com/matternet-adds-...This latest partnership follows Matternet’s re...
1Helm.ai upgrades generative AI model to enrich...https://www.therobotreport.com/helm-ai-upgrade...Helm.ai said the new model enables automakers ...
2New research analyzes safety of Waymo robotaxishttps://www.therobotreport.com/new-research-an...Waymo shared research with Swiss Re, one of th...
3From AI to humanoids: top robotics trends of 2024https://www.therobotreport.com/from-ai-to-huma...The Robot Report Podcast reflects on the succe...
4Symbotic acquires OhmniLabs, maker of disinfec...https://www.therobotreport.com/symbotic-buys-h...With the acquisition of OhmniLabs, Symbotic sa...
5Sanctuary AI shows new dexterity with in-hand ...https://www.therobotreport.com/sanctuary-ai-sh...Sanctuary AI showed its latest breakthrough wi...
6Apptronik partners with Google DeepMind to adv...https://www.therobotreport.com/apptronik-partn...Apptronik will combine its iterative design ex...
7Alimak Group, Skyline Robotics create autonomo...https://www.therobotreport.com/alimak-group-sk...Skyline Robotics said the joint system can hel...
8DoorDash partners with Wing to launch drone de...https://www.therobotreport.com/doordash-partne...Beginning today, when certain DoorDash custome...
9Mcity says open-source digital twin enables ch...https://www.therobotreport.com/mcity-open-sour...The Mcity test facility has been open since 20...
102024: The year humanoids woke uphttps://www.therobotreport.com/2024-the-year-h...Humanoids empowered by AI are coming, and the ...
11Waymo robotaxis head to Tokyo with the help of...https://www.therobotreport.com/waymo-is-headin...The first all-electric Jaguar I-PACEs for Waym...
12Realbotix earns Amazon development subsidy; pa...https://www.therobotreport.com/realbotix-earns...Realbotix plans to use the funding to directly...
13Eyeonic Trace Laser Line Scanner offers sub-mi...https://www.therobotreport.com/eyeonic-trace-l...Prototype of the Eyeonic Trace Laser Line Scan...
14Slip Robotics picks up $28M for trailer loadin...https://www.therobotreport.com/slip-robotics-p...Slip Robotics plans to use its latest funding ...
15Jetson Orin Nano Super developer kit available...https://www.therobotreport.com/jetson-orin-nan...NVIDIA released Jetson Orin Nano Super Develop...
16Mbodi and T-Robotics are ABB Robotics' AI Star...https://www.therobotreport.com/mbodi-and-t-rob...ABB Robotics is working with Mbodi and T-Robot...
17IEEE Awards announce Daniela Rus as 2025 Ediso...https://www.therobotreport.com/ieee-awards-ann...Currently the director of MIT CSAIL, Daniela R...
18Eureka Robotics raises $10.5M to scale its vis...https://www.therobotreport.com/eureka-robotics...Eureka Robotics provides software and system t...
19Vision-guided cobot automates paint process fo...https://www.therobotreport.com/denso-automates...DENSO deployed a 3D-vision-guided cobot with A...
20Brushed DC motors find use in robot applicatio...https://www.therobotreport.com/brushed-dc-moto...Recent research from Portescap found that brus...
21Diversity and inclusion can accelerate robotic...https://www.therobotreport.com/diversity-and-i...The study outlined seven distinct benefits tha...
22Advanced Precision Strain Wave Gear Offers Tor...https://www.therobotreport.com/advanced-precis...NA
23Innovative motion solutions are supporting the...https://www.therobotreport.com/innovative-moti...NA
24Renishaw and RLS help to drive a robot revolutionhttps://www.therobotreport.com/renishaw-and-rl...NA
25Ask an Expert Podcast: flexible conveyance for...https://www.therobotreport.com/ask-an-expert-f...NA
26Hop Onboard the AMR Revolution: Vision & Local...https://www.therobotreport.com/hop-onboard-the...NA
\n", - "
\n", - "
\n", - "\n", - "
\n", - " \n", - "\n", - " \n", - "\n", - " \n", - "
\n", - "\n", - "\n", - "
\n", - " \n", - "\n", - "\n", - "\n", - " \n", - "
\n", - "\n", - "
\n", - " \n", - " \n", - " \n", - "
\n", - "\n", - "
\n", - "
\n" - ], - "text/plain": [ - " title \\\n", - "0 Matternet adds ANRA's UTM tech to expand drone... \n", - "1 Helm.ai upgrades generative AI model to enrich... \n", - "2 New research analyzes safety of Waymo robotaxis \n", - "3 From AI to humanoids: top robotics trends of 2024 \n", - "4 Symbotic acquires OhmniLabs, maker of disinfec... \n", - "5 Sanctuary AI shows new dexterity with in-hand ... \n", - "6 Apptronik partners with Google DeepMind to adv... \n", - "7 Alimak Group, Skyline Robotics create autonomo... \n", - "8 DoorDash partners with Wing to launch drone de... \n", - "9 Mcity says open-source digital twin enables ch... \n", - "10 2024: The year humanoids woke up \n", - "11 Waymo robotaxis head to Tokyo with the help of... \n", - "12 Realbotix earns Amazon development subsidy; pa... \n", - "13 Eyeonic Trace Laser Line Scanner offers sub-mi... \n", - "14 Slip Robotics picks up $28M for trailer loadin... \n", - "15 Jetson Orin Nano Super developer kit available... \n", - "16 Mbodi and T-Robotics are ABB Robotics' AI Star... \n", - "17 IEEE Awards announce Daniela Rus as 2025 Ediso... \n", - "18 Eureka Robotics raises $10.5M to scale its vis... \n", - "19 Vision-guided cobot automates paint process fo... \n", - "20 Brushed DC motors find use in robot applicatio... \n", - "21 Diversity and inclusion can accelerate robotic... \n", - "22 Advanced Precision Strain Wave Gear Offers Tor... \n", - "23 Innovative motion solutions are supporting the... \n", - "24 Renishaw and RLS help to drive a robot revolution \n", - "25 Ask an Expert Podcast: flexible conveyance for... \n", - "26 Hop Onboard the AMR Revolution: Vision & Local... \n", - "\n", - " link \\\n", - "0 https://www.therobotreport.com/matternet-adds-... \n", - "1 https://www.therobotreport.com/helm-ai-upgrade... \n", - "2 https://www.therobotreport.com/new-research-an... \n", - "3 https://www.therobotreport.com/from-ai-to-huma... \n", - "4 https://www.therobotreport.com/symbotic-buys-h... \n", - "5 https://www.therobotreport.com/sanctuary-ai-sh... \n", - "6 https://www.therobotreport.com/apptronik-partn... \n", - "7 https://www.therobotreport.com/alimak-group-sk... \n", - "8 https://www.therobotreport.com/doordash-partne... \n", - "9 https://www.therobotreport.com/mcity-open-sour... \n", - "10 https://www.therobotreport.com/2024-the-year-h... \n", - "11 https://www.therobotreport.com/waymo-is-headin... \n", - "12 https://www.therobotreport.com/realbotix-earns... \n", - "13 https://www.therobotreport.com/eyeonic-trace-l... \n", - "14 https://www.therobotreport.com/slip-robotics-p... \n", - "15 https://www.therobotreport.com/jetson-orin-nan... \n", - "16 https://www.therobotreport.com/mbodi-and-t-rob... \n", - "17 https://www.therobotreport.com/ieee-awards-ann... \n", - "18 https://www.therobotreport.com/eureka-robotics... \n", - "19 https://www.therobotreport.com/denso-automates... \n", - "20 https://www.therobotreport.com/brushed-dc-moto... \n", - "21 https://www.therobotreport.com/diversity-and-i... \n", - "22 https://www.therobotreport.com/advanced-precis... \n", - "23 https://www.therobotreport.com/innovative-moti... \n", - "24 https://www.therobotreport.com/renishaw-and-rl... \n", - "25 https://www.therobotreport.com/ask-an-expert-f... \n", - "26 https://www.therobotreport.com/hop-onboard-the... \n", - "\n", - " description \n", - "0 This latest partnership follows Matternet’s re... \n", - "1 Helm.ai said the new model enables automakers ... \n", - "2 Waymo shared research with Swiss Re, one of th... \n", - "3 The Robot Report Podcast reflects on the succe... \n", - "4 With the acquisition of OhmniLabs, Symbotic sa... \n", - "5 Sanctuary AI showed its latest breakthrough wi... \n", - "6 Apptronik will combine its iterative design ex... \n", - "7 Skyline Robotics said the joint system can hel... \n", - "8 Beginning today, when certain DoorDash custome... \n", - "9 The Mcity test facility has been open since 20... \n", - "10 Humanoids empowered by AI are coming, and the ... \n", - "11 The first all-electric Jaguar I-PACEs for Waym... \n", - "12 Realbotix plans to use the funding to directly... \n", - "13 Prototype of the Eyeonic Trace Laser Line Scan... \n", - "14 Slip Robotics plans to use its latest funding ... \n", - "15 NVIDIA released Jetson Orin Nano Super Develop... \n", - "16 ABB Robotics is working with Mbodi and T-Robot... \n", - "17 Currently the director of MIT CSAIL, Daniela R... \n", - "18 Eureka Robotics provides software and system t... \n", - "19 DENSO deployed a 3D-vision-guided cobot with A... \n", - "20 Recent research from Portescap found that brus... \n", - "21 The study outlined seven distinct benefits tha... \n", - "22 NA \n", - "23 NA \n", - "24 NA \n", - "25 NA \n", - "26 NA " - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import pandas as pd\n", - "\n", - "# Convert dictionary to DataFrame\n", - "df = pd.DataFrame(result[\"news\"])\n", - "df" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "v0CBYVk7qA5Z" - }, - "source": [ - "Save it to CSV" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "BtEbB9pmQGhO", - "outputId": "fe011a56-b28a-4e28-f2d1-4580c8a65596" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Data saved to news.csv\n" - ] - } - ], - "source": [ - "# Save the DataFrame to a CSV file\n", - "csv_file = \"news.csv\"\n", - "df.to_csv(csv_file, index=False)\n", - "print(f\"Data saved to {csv_file}\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "-1SZT8VzTZNd" - }, - "source": [ - "## 🔗 Resources" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "id": "dUi2LtMLRDDR" - }, - "source": [ - "\n", - "

\n", - " \"ScrapeGraph\n", - "

\n", - "\n", - "\n", - "- 🚀 **Get your API Key:** [ScrapeGraphAI Dashboard](https://dashboard.scrapegraphai.com) \n", - "- 🐙 **GitHub:** [ScrapeGraphAI GitHub](https://github.com/scrapegraphai) \n", - "- 💼 **LinkedIn:** [ScrapeGraphAI LinkedIn](https://www.linkedin.com/company/scrapegraphai/) \n", - "- 🐦 **Twitter:** [ScrapeGraphAI Twitter](https://twitter.com/scrapegraphai) \n", - "- 💬 **Discord:** [Join our Discord Community](https://discord.gg/uJN7TYcpNa) \n", - "- 🦜 **Langchain:** [ScrapeGraph docs](https://python.langchain.com/docs/integrations/tools/scrapegraph/)\n", - "\n", - "Made with ❤️ by the [ScrapeGraphAI](https://scrapegraphai.com) Team \n" - ] - } - ], - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "display_name": "Python 3", - "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.1" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/cookbook/research-agent/scrapegraph_langgraph_tavily_mysql.ipynb b/cookbook/research-agent/scrapegraph_langgraph_tavily_mysql.ipynb new file mode 100644 index 0000000..ddd6105 --- /dev/null +++ b/cookbook/research-agent/scrapegraph_langgraph_tavily_mysql.ipynb @@ -0,0 +1,2043 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "ReBHQ5_834pZ" + }, + "source": [ + "\n", + " \"Open\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jEkuKbcRrPcK" + }, + "source": [ + "## 🕷️ Research Agent with `scrapegraph`, `langgraph`, `tavily` and `MySQL`" + ] + }, + { + "cell_type": "markdown", + "source": [ + "![image.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAACw8AAARwCAYAAAAWzIkJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAFxEAABcRAcom8z8AAP+lSURBVHhe7P2Ju2RleS9+v3/C+/5+VzTazNDQDTIKOIAIaU4CEZQIASGNgBglSvQ4JMaAooQoUYgGNWqMw0FU9IjH4yFgTBxQc8QkBA0OCBJFMWnHRNS2u3d3P2/ftXdB9dr3qmHVsKt2fb7X9bmAXWt81lrFovn20/8fERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERmeactu/vFwAAAAAAAAAAAABg9VMeBgAAAAAAAAAAAIA5oTwMAAAAAAAAAAAAAHNCeRgAAAAAAAAAAAAA5oTyMAAAAAAAAAAAAADMCeVhAAAAAAAAAAAAAJgTysMAAAAAAAAAAAAAMCeUhwEAAAAAAAAAAABgTigPAwAAAAAAAAAAAMCcUB4GAAAAAAAAAAAAgDmhPAwAAAAAAAAAAAAAc0J5GAAAAAAAAAAAAADmhPIwAAAAAAAAAAAAAMwJ5WEAAAAAAAAAAAAAmBPKwwAAAAAAAAAAAAAwJ5SHAQAAAAAAAAAAAGBOKA8DAAAAAAAAAAAAwJxQHgYAAAAAAAAAAACAOaE8DAAAAAAAAAAAAABzQnkYAAAAAAAAAAAAAOaE8jAAAAAAAAAAAAAAzAnlYQAAAAAAAAAAAACYE8rDAAAAAAAAAAAAADAnlIcBAAAAAAAAAAAAYE4oDwMAAAAAAAAAAADAnFAeBgAAAAAAAAAAAIA5oTwMAAAAAAAAAAAAAHNCeRgAAAAAAAAAAAAA5oTyMAAAAAAAAAAAAADMCeVhAAAAAAAAAAAAAJgTysMAAAAAAAAAAAAAMCeUhwEAAAAAAAAAAABgTigPAwAAAAAAAAAAAMCcUB4GAAAAAAAAAAAAgDmhPAwAAAAAAAAAAAAAc0J5GAAAAAAAAAAAAADmhPIwAAAAAAAAAAAAAMwJ5WEAAAAAAAAAAAAAmBPKwwAAAAAAAAAAAAAwJ5SHAQAAAAAAAAAAAGBOKA8DAAAAAAAAAAAAwJxQHgYAAAAAAAAAAACAOaE8DAAAAAAAAAAAAABzQnkYAAAAAAAAAAAAAOaE8jAAAAAAAAAAAAAAzAnlYQAAAAAAAAAAAACYE8rDAAAAAAAAAAAAADAn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)" + ], + "metadata": { + "id": "-GmCGaVI3kcT" + } + }, + { + "cell_type": "markdown", + "metadata": { + "id": "IzsyDXEWwPVt" + }, + "source": [ + "### 🔧 Install `dependencies`" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "os_vm0MkIxr9" + }, + "outputs": [], + "source": [ + "%%capture\n", + "!pip install langgraph langchain-scrapegraph langchain-openai \"langchain-community>=0.2.11\" tavily-python" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "apBsL-L2KzM7" + }, + "source": [ + "### 🔑 Import `ScrapeGraph`, `Tavily` and `OpenAI` API keys" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ol9gQbAFkh9b" + }, + "source": [ + "You can find the Scrapegraph API key [here](https://dashboard.scrapegraphai.com/)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "sffqFG2EJ8bI", + "outputId": "132bdfb9-45c8-4c26-8ac2-d13593ba392a" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Scrapegraph API key:\n", + "··········\n", + "Tavily API key:\n", + "··········\n", + "OpenAI API key:\n", + "··········\n" + ] + } + ], + "source": [ + "import getpass\n", + "import os\n", + "\n", + "if not os.environ.get(\"SGAI_API_KEY\"):\n", + " os.environ[\"SGAI_API_KEY\"] = getpass.getpass(\"Scrapegraph API key:\\n\")\n", + "\n", + "if not os.environ.get(\"TAVILY_API_KEY\"):\n", + " os.environ[\"TAVILY_API_KEY\"] = getpass.getpass(\"Tavily API key:\\n\")\n", + "\n", + "if not os.environ.get(\"OPENAI_API_KEY\"):\n", + " os.environ[\"OPENAI_API_KEY\"] = getpass.getpass(\"OpenAI API key:\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jnqMB2-xVYQ7" + }, + "source": [ + "### 📝 Defining an `Output Schema` for Webpage Content Extraction\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "VZvxbjfXvbgd" + }, + "source": [ + "If you already know what you want to extract from a webpage, you can **define an output schema** using **Pydantic**. This schema acts as a \"blueprint\" that tells the AI how to structure the response.\n", + "\n", + "
\n", + " Pydantic Schema Quick Guide\n", + "\n", + "Types of Schemas \n", + "\n", + "1. Simple Schema \n", + "Use this when you want to extract straightforward information, such as a single piece of content. \n", + "\n", + "```python\n", + "from pydantic import BaseModel, Field\n", + "\n", + "# Simple schema for a single webpage\n", + "class PageInfoSchema(BaseModel):\n", + " title: str = Field(description=\"The title of the webpage\")\n", + " description: str = Field(description=\"The description of the webpage\")\n", + "\n", + "# Example Output JSON after AI extraction\n", + "{\n", + " \"title\": \"ScrapeGraphAI: The Best Content Extraction Tool\",\n", + " \"description\": \"ScrapeGraphAI provides powerful tools for structured content extraction from websites.\"\n", + "}\n", + "```\n", + "\n", + "2. Complex Schema (Nested) \n", + "If you need to extract structured information with multiple related items (like a list of repositories), you can **nest schemas**.\n", + "\n", + "```python\n", + "from pydantic import BaseModel, Field\n", + "from typing import List\n", + "\n", + "# Define a schema for a single repository\n", + "class RepositorySchema(BaseModel):\n", + " name: str = Field(description=\"Name of the repository (e.g., 'owner/repo')\")\n", + " description: str = Field(description=\"Description of the repository\")\n", + " stars: int = Field(description=\"Star count of the repository\")\n", + " forks: int = Field(description=\"Fork count of the repository\")\n", + " today_stars: int = Field(description=\"Stars gained today\")\n", + " language: str = Field(description=\"Programming language used\")\n", + "\n", + "# Define a schema for a list of repositories\n", + "class ListRepositoriesSchema(BaseModel):\n", + " repositories: List[RepositorySchema] = Field(description=\"List of GitHub trending repositories\")\n", + "\n", + "# Example Output JSON after AI extraction\n", + "{\n", + " \"repositories\": [\n", + " {\n", + " \"name\": \"google-gemini/cookbook\",\n", + " \"description\": \"Examples and guides for using the Gemini API\",\n", + " \"stars\": 8036,\n", + " \"forks\": 1001,\n", + " \"today_stars\": 649,\n", + " \"language\": \"Jupyter Notebook\"\n", + " },\n", + " {\n", + " \"name\": \"TEN-framework/TEN-Agent\",\n", + " \"description\": \"TEN Agent is a conversational AI powered by TEN, integrating Gemini 2.0 Multimodal Live API, OpenAI Realtime API, RTC, and more.\",\n", + " \"stars\": 3224,\n", + " \"forks\": 311,\n", + " \"today_stars\": 361,\n", + " \"language\": \"Python\"\n", + " }\n", + " ]\n", + "}\n", + "```\n", + "\n", + "Key Takeaways \n", + "- **Simple Schema**: Perfect for small, straightforward extractions. \n", + "- **Complex Schema**: Use nesting to extract lists or structured data, like \"a list of repositories.\" \n", + "\n", + "Both approaches give the AI a clear structure to follow, ensuring that the extracted content matches exactly what you need.\n", + "
\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "id": "dlrOEgZk_8V4" + }, + "outputs": [], + "source": [ + "from pydantic import BaseModel, Field\n", + "from typing import List\n", + "\n", + "# Schema for a single news item\n", + "class NewsItemSchema(BaseModel):\n", + " title: str = Field(description=\"Title of the news article\")\n", + " link: str = Field(description=\"URL to the news article\")\n", + " description: str = Field(description=\"Summary/description of the news article\")\n", + "\n", + "# Schema that contains a list of news items\n", + "class ListNewsSchema(BaseModel):\n", + " news: List[NewsItemSchema] = Field(description=\"List of news articles with their details\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cDGH0b2DkY63" + }, + "source": [ + "### 🚀 Initialize `scrapegraph` and `tavily` tools and `langgraph` prebuilt agent and run the `extraction`" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "M1KSXffZopUD" + }, + "source": [ + "Here we use `SmartScraperTool` to extract structured data using AI from a webpage.\n", + "\n", + "\n", + "> If you already have an HTML file, you can upload it and use `LocalScraperTool` instead.\n", + "\n", + "You can find more info in the [official langchain documentation](https://python.langchain.com/docs/integrations/tools/scrapegraph/)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "id": "ySoE0Rowjgp1" + }, + "outputs": [], + "source": [ + "from langchain_scrapegraph.tools import SmartScraperTool\n", + "from langchain_community.tools import TavilySearchResults\n", + "\n", + "# Will automatically get SGAI_API_KEY from environment\n", + "# Initialization without output schema\n", + "# smartscraper_tool = SmartScraperTool()\n", + "\n", + "# Since we have defined an output schema, let's use it\n", + "# This will force the tool to have always the same output structure\n", + "smartscraper_tool = SmartScraperTool(llm_output_schema=ListNewsSchema)\n", + "\n", + "# Initialize tavily tool to look for URLs\n", + "tavily_tool = TavilySearchResults(\n", + " max_results=1,\n", + " name=\"urls_finder\",\n", + " description=\"Use this tool to find webpages urls that satisfy the user request\",\n", + ")\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "W54HVoYeiJbG" + }, + "source": [ + "We then initialize the `llm model` we want to use in the agent\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "id": "ctrkEnltiBCD" + }, + "outputs": [], + "source": [ + "# First we initialize the llm model we want to use.\n", + "from langchain_openai import ChatOpenAI\n", + "\n", + "llm_model = ChatOpenAI(model=\"gpt-4o\", temperature=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "M0WY2Pa8Y8Pk" + }, + "source": [ + "Here we use `create_react_agent` to quickly use one of the prebuilt agents from `langgraph.prebuilt` module\n", + "\n", + "You can find more info in the [official langgraph documentation](https://langchain-ai.github.io/langgraph/how-tos/create-react-agent/)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "id": "Zo1BcIlHhcQP" + }, + "outputs": [], + "source": [ + "from langgraph.prebuilt import create_react_agent\n", + "from langgraph.checkpoint.memory import MemorySaver\n", + "\n", + "# List of tools we want the agent to use\n", + "tools = [smartscraper_tool, tavily_tool]\n", + "\n", + "# We set up the agent's memory to review the different reasoning steps\n", + "memory = MemorySaver()\n", + "\n", + "# Add a configuration to specify where to store the graph states\n", + "config = {\"configurable\": {\"thread_id\": \"1\"}}\n", + "\n", + "# Initialize the ReAct agent\n", + "graph = create_react_agent(\n", + " model=llm_model,\n", + " tools=tools,\n", + " checkpointer=memory,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_UYcJ2Mxip5w" + }, + "source": [ + "Let's visualize the `graph`" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 350 + }, + "id": "2FIKomclLNFx", + "outputId": "11374a54-6cab-4037-a836-46e3d0dcb946" + }, + "outputs": [ + { + "output_type": "display_data", + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {} + } + ], + "source": [ + "from IPython.display import Image, display\n", + "\n", + "display(Image(graph.get_graph().draw_mermaid_png()))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "cw-T5CYWkCEN" + }, + "source": [ + "`Run the graph` and stream the agent reasoning.\n", + "\n", + "We are going to ask the agent to extract the content from a `specific webpage`." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Qn1rC2y8kAe9", + "outputId": "4d019a9f-1098-413e-f241-31437e07fdb5" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "================================\u001b[1m Human Message \u001b[0m=================================\n", + "\n", + "Find all the latest news related to CES 2025\n", + "==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "Tool Calls:\n", + " urls_finder (call_lXx0Jn0UGLw40zTaT3TK3J35)\n", + " Call ID: call_lXx0Jn0UGLw40zTaT3TK3J35\n", + " Args:\n", + " query: CES 2025 latest news\n", + "=================================\u001b[1m Tool Message \u001b[0m=================================\n", + "Name: urls_finder\n", + "\n", + "[{\"url\": \"https://www.techradar.com/tech-events/live/ces-2025-live-latest-news\", \"content\": \"Head over to our CES 2025 news page for the latest stories and our hands-on verdicts on everything from 8K TVs and foldable displays to new phones, laptops, smart home gadgets, and the latest in AI. CES 2025 day 1: the 11 best gadgets we've seen, from Samsung's new flagship OLED TV to the Garmin Instinct 3 Read the full story: CES 2025 day 1: the 11 best gadgets we've seen, from Samsung's new flagship OLED TV to the Garmin Instinct 3 This robot vacuum can also bring you a sandwich, and it might be the greatest gadget we've seen yet at CES CES 2025 day 1: the 11 best gadgets we've seen, from Samsung's new flagship OLED TV to the Garmin Instinct 3\"}]\n", + "==================================\u001b[1m Ai Message \u001b[0m==================================\n", + "Tool Calls:\n", + " SmartScraper (call_90NkkFUwjoCJv3qIvJhPS2f1)\n", + " Call ID: call_90NkkFUwjoCJv3qIvJhPS2f1\n", + " Args:\n", + " user_prompt: Extract the latest news headlines and summaries related to CES 2025.\n", + " website_url: https://www.techradar.com/tech-events/live/ces-2025-live-latest-news\n", + "=================================\u001b[1m Tool Message \u001b[0m=================================\n", + "Name: SmartScraper\n", + "\n", + "{\"news\": [{\"title\": \"CES 2025 day 3: the 11 best gadgets we've seen, from Lenovo's rollable laptop to Panasonic's new flagship OLED TV\", \"link\": \"https://www.techradar.com/tech-events/ces-2025-day-3-the-11-best-gadgets-weve-seen-from-lenovos-rollable-laptop-to-panasonics-new-flagship-oled-tv\", \"description\": \"A roundup of the top gadgets showcased on the third day of CES 2025, highlighting innovative products from various brands.\"}, {\"title\": \"CES 2025 proves AI is everywhere, unstoppable, and perhaps just how you want it\", \"link\": \"https://www.techradar.com/computing/artificial-intelligence/ces-2025-proves-ai-is-everywhere-unstoppable-and-perhaps-just-how-you-want-it\", \"description\": \"An exploration of the pervasive presence of AI technologies at CES 2025 and their implications for consumers.\"}, {\"title\": \"Forget tri-folding phones - this pocketable folding projector is the companion I want for my 2025 travels\", \"link\": \"https://www.techradar.com/televisions/projectors/forget-tri-folding-phones-this-pocketable-folding-projector-is-the-companion-i-want-for-my-2025-travels\", \"description\": \"A review of a new portable folding projector that stands out as a desirable travel accessory.\"}, {\"title\": \"HDMI 2.2 officially revealed at CES 2025: here's what it means for TVs and gaming consoles\", \"link\": \"https://www.techradar.com/tech/hdmi-2-2-officially-revealed-at-ces-2025-heres-what-that-means-for-tvs-and-gaming-consoles\", \"description\": \"Details on the announcement of HDMI 2.2 and its potential impact on television and gaming technology.\"}, {\"title\": \"This awesome E Ink poster frame looks like the future of wall art, if you can stomach the price tag\", \"link\": \"https://www.techradar.com/home/smart-home/this-awesome-e-ink-poster-frame-looks-like-the-future-of-wall-art-if-you-can-stomach-the-price-tag\", \"description\": \"A look at a new E Ink poster frame that represents a futuristic approach to home decor, albeit at a high price.\"}, {\"title\": \"I saw Hisense's RGB mini-LED TV, and this vividly colorful set is the future of TV\", \"link\": \"https://www.techradar.com/televisions/i-saw-hisenses-rgb-mini-led-tv-and-this-vividly-colorful-set-is-the-future-of-tv\", \"description\": \"An impression of Hisense's new RGB mini-LED TV, noted for its vibrant colors and advanced technology.\"}, {\"title\": \"I saw Samsung's new The Frame Pro mini-LED TV, and it's whole new work of art\", \"link\": \"https://www.techradar.com/televisions/i-saw-samsungs-new-the-frame-pro-mini-led-tv-and-its-whole-new-work-of-art\", \"description\": \"Samsung's The Frame Pro mini-LED TV has been showcased at CES 2025, featuring Neo QLED mini-LED technology and local dimming, resulting in significantly improved image quality compared to previous models.\"}, {\"title\": \"This robot vacuum can also bring you a sandwich, and it might be the greatest gadget we've seen yet at CES\", \"link\": \"https://www.techradar.com/tech-events/this-robot-vacuum-can-also-bring-you-a-sandwich-and-it-might-be-the-greatest-gadget-weve-seen-yet-at-ces?hasComeFromProof=true\", \"description\": \"The SwitchBot K20+ Pro is highlighted as a standout gadget at CES 2025, functioning as a vacuum, air purifier, security camera, and sandwich deliverer, showcasing a modular design.\"}, {\"title\": \"Nvidia unveils new GeForce RTX 5090, RTX 5080, RTX 5070 Ti, and RTX 5070 graphics cards at CES 2025\", \"link\": \"https://www.techradar.com/computing/gpu/nvidia-unveils-new-geforce-rtx-5090-rtx-5080-rtx-5070-ti-and-rtx-5070-graphics-cards-at-ces-2025\", \"description\": \"Nvidia has revealed its latest RTX 5000 series graphics cards, boasting impressive specifications and a price tag of $1,999 for the flagship RTX 5090.\"}, {\"title\": \"I heard LG's new speakers made with will.i.am, and I kind of love them\", \"link\": \"https://www.techradar.com/audio/wireless-bluetooth-speakers/i-heard-lgs-new-speakers-made-with-will-i-am-and-i-kind-of-love-them\", \"description\": \"LG's new range of Bluetooth speakers, developed in collaboration with will.i.am, delivers high-quality sound and innovative design, surprising reviewers at CES 2025.\"}, {\"title\": \"The new Garmin Instinct 3 had me climbing a wall - in the best way possible\", \"link\": \"https://www.techradar.com/health-fitness/the-new-garmin-instinct-3-had-me-climbing-a-wall-in-the-best-way-possible\", \"description\": \"The Garmin Instinct 3 smartwatch, featuring a new AMOLED display and enhanced durability, was tested at CES 2025, showcasing its capabilities for outdoor activities.\"}, {\"title\": \"CES 2025 day 1: featuring the 11 best gadgets we've seen so far\", \"link\": \"https://www.techradar.com/tech-events/the-best-of-ces-2025-day-one\", \"description\": \"A roundup of the best gadgets from the first day of CES 2025, including smart glasses, smart rings, and high-resolution audio players.\"}, {\"title\": \"CES 2025 day 1: the 11 best gadgets we’ve seen, from Samsung's new flagship OLED TV to the Garmin Instinct 3\", \"link\": \"https://www.techradar.com/tech-events/the-best-of-ces-2025-day-one\", \"description\": \"A roundup of the best gadgets showcased on the first day of CES 2025, highlighting innovations from major brands.\"}, {\"title\": \"I tried the world's first interactive The Last of Us exhibit at CES - even though I died, I loved it\", \"link\": \"https://www.techradar.com/tech/i-tried-the-worlds-first-interactive-the-last-of-us-exhibit-at-ces-even-though-i-died-i-loved-it\", \"description\": \"An immersive experience based on the popular game and TV show, where the writer shares their thrilling experience in the interactive exhibit.\"}, {\"title\": \"This adorable little robot cat will stop you burning your tongue on hot coffee\", \"link\": \"https://www.techradar.com/home/coffee-machines/this-adorable-little-robot-cat-will-stop-you-burning-your-tongue-on-hot-coffee\", \"description\": \"A cute gadget from Yukai Engineering that cools your drink by blowing on it, featuring various blowing modes to mimic lifelike behavior.\"}, {\"title\": \"Forget bird watching, bug watching could be the next big thing\", \"link\": \"https://www.techradar.com/home/smart-home/forget-bird-watching-bug-watching-could-be-the-next-bug-er-big-thing\", \"description\": \"New tech from Wonder that allows users to observe insects in their gardens using a camera and AI to identify species.\"}, {\"title\": \"Philips Hue now works with the latest LG TVs, so you can turn your movies or games into a light show\", \"link\": \"https://www.techradar.com/televisions/philips-hue-now-works-with-the-latest-lg-tvs-so-you-can-turn-your-movies-or-games-into-a-light-show\", \"description\": \"Exciting news about the Philips Hue Sync TV app for LG TVs, allowing users to sync their smart lights with on-screen content, though it comes with a hefty price tag.\"}, {\"title\": \"Lenovo's new Legion Go S gaming handheld might finally be the one to take down the Steam Deck\", \"link\": \"https://www.techradar.com/computing/lenovos-new-leg\", \"description\": \"Lenovo introduces a gaming handheld that runs on SteamOS, aiming to provide a better experience than competitors that use Windows 11.\"}, {\"title\": \"JBL's new elite headphones include a touchscreen audio transmitter to share audio with anyone easily\", \"link\": \"https://www.techradar.com/audio/wireless-headphones/jbls-new-elite-headphones-include-a-touchscreen-audio-transmitter-to-connect-to-anything-easily-and-to-share-audio-with-anyone-easily\", \"description\": \"JBL has unveiled its flagship Tour One M3 headphones, which come with a unique touchscreen audio transmitter called SMART Tx. This device allows easy streaming from various audio sources and sharing audio via Auracast. The headphones feature advanced specifications, including high-resolution support, a long battery life, and customizable hearing profiles. They will be available for purchase on April 13, 2025, priced at $399.95.\"}, {\"title\": \"Technics' intriguing new flagship wireless earbuds boast magnetic fluid injected between the driver magnet and voice coil\", \"link\": \"https://www.techradar.com/audio/earbuds-airpods/technics-eah-az100-review\", \"description\": \"Technics has launched the EAH-AZ100 earbuds at CES 2025, featuring a new design and a proprietary Magnetic Fluid Driver for improved audio performance. The earbuds are smaller than their predecessors and aim to deliver detailed sound without the risk of driver movement issues. A review of the earbuds is also available.\"}, {\"title\": \"Victrola's new turntable with Auracast and aptX might be the most future-proof deck on the planet\", \"link\": \"https://www.techradar.com/audio/turntables/victrolas-new-turntable-with-auracast-and-aptx-might-be-the-most-future-proof-on-the-planet\", \"description\": \"Victrola has introduced the Wave turntable at CES, designed to enhance the vinyl experience with support for aptX Adaptive Bluetooth streaming and Auracast for broadcasting audio to multiple devices. The turntable is available in three finishes and aims to modernize vinyl playback.\"}, {\"title\": \"CES 2025 day 2: the 11 coolest gadgets we've seen, from Samsung's The Frame Pro TV to AI air fryers\", \"link\": \"https://www.techradar.com/tech-events/the-best-of-ces-2025-day-2\", \"description\": \"A roundup of standout gadgets from the second day of CES 2025, including the Samsung The Frame Pro TV and the Nvidia RTX 5090 graphics card. The list also features niche products like the Dreo ChefMaker 2 air fryer and the TCL Playcube portable projector.\"}, {\"title\": \"Some of CES 2025's weirdest robot pets are absolute nightmare fuel, but one made it all worthwhile\", \"link\": \"https://www.techradar.com/tech/some-of-ces-2025s-weirdest-robot-pets-are-absolute-nightmare-fuel-but-one-made-it-all-worthwhile\", \"description\": \"TechRadar highlights a significant increase in robot pets at CES 2025, including a next-gen Furby called Ropet, which has been described as \\\"nightmare fuel.\\\" In contrast, Tombot's Jennie, a hyper-realistic stuffed golden retriever, is praised for its potential as a companion for those with dementia.\"}, {\"title\": \"Suunto's new waterproof headphones can store 8,000 songs and use AI to help improve your swim stroke\", \"link\": \"https://www.techradar.com/health-fitness/suuntos-new-waterproof-headphones-can-store-8-000-songs-and-use-ai-to-help-improve-your-swim-stroke\", \"description\": \"Suunto introduces waterproof headphones that utilize bone conduction to deliver music underwater and feature AI technology to analyze swim strokes, making them a promising accessory for swimmers.\"}, {\"title\": \"Lenovo unveils world's first rollable display laptop, the ThinkBook Plus Gen 6 Rollable, at CES 2025\", \"link\": \"https://www.techradar.com/computing/lenovo-unveils-worlds-first-rollable-display-laptop-the-thinkbook-plus-gen-6-rollable-at-ces-2025\", \"description\": \"Lenovo confirms the launch of the ThinkBook Plus Gen 6 Rollable, the first laptop with a rollable display that can expand from 14 inches to 16.7 inches at the touch of a button.\"}, {\"title\": \"Samsung's massive 115-inch mini-LED TV is its largest yet - but there's an even bigger one at CES 2025\", \"link\": \"https://www.techradar.com/televisions/samsungs-massive-115-inch-qn90f-is-its-largest-mini-led-tv-yet-but-theres-an-even-bigger-one-at-ces-2025\", \"description\": \"Samsung showcases its 115-inch QN90F TV, which features advanced technology, but it is not the largest at CES 2025, as Hisense presents a 116-inch model.\"}, {\"title\": \"This smart-home control button might look like a simple wall switch, but it's way more than that\", \"link\": \"https://www.techradar.com/home/smart-home/this-smart-home-control-button-might-look-like-a-simple-wall-switch-but-its-way-more-than-that\", \"description\": \"The Flic Duo is a versatile smart button that supports the Matter smart home standard, featuring two buttons and the ability to control various smart home devices through gestures.\"}, {\"title\": \"Hisense reveals a 163-inch micro-LED TV at CES 2025\", \"link\": \"https://www.techradar.com/televisions/hisense-reveals-a-163-inch-micro-led-tv-at-ces-2025\", \"description\": \"Hisense introduces a 163-inch version of its TV, which boasts the Hi-View AI Engine X processor and claims to reach 10,000 nits of brightness, indicating a significant advancement in large-screen technology.\"}, {\"title\": \"I witnessed Hisense's giant 163-inch micro-LED TV in person, and this thing is staggering\", \"link\": \"https://www.techradar.com/televisions/i-witnessed-hisenses-giant-163-inch-micro-led-tv-in-person-and-this-thing-is-staggering\", \"description\": \"A firsthand account of Hisense's impressive 163-inch micro-LED TV showcased at CES 2025.\"}, {\"title\": \"Delta Air Lines announces generative AI assistant at CES 2025\", \"link\": \"No content available\", \"description\": \"Delta Air Lines revealed a generative AI assistant designed to enhance the travel experience from booking to arrival, set to roll out in 2025.\"}, {\"title\": \"These new video doorbell and security camera use AI to welcome visitors and deter intruders\", \"link\": \"https://www.techradar.com/home/smart-home/these-new-video-doorbell-and-security-camera-use-ai-to-welcome-visitors-and-deter-intruders\", \"description\": \"The Swann Xtreem4K security camera utilizes AI to interact with visitors and respond to potential security threats.\"}, {\"title\": \"The best wearable and fitness tech of CES 2025: from the Garmin Instinct 3 to a new Oura Ring rival\", \"link\": \"https://www.techradar.com/health-fitness/the-best-wearable-and-fitness-tech-of-ces-2025\", \"description\": \"A roundup of the top wearable and health tech showcased at CES 2025, including the Garmin Instinct 3 and other innovative devices.\"}, {\"title\": \"This awesome E Ink poster frame looks like the future of wall art, if you can stomach the price tag\", \"link\": \"https://www.techradar.com/home/smart-home/this-awesome-e-ink-poster-frame-looks-like-the-future-of-wall-art-if-you-can-stomach-the-price-tag\", \"description\": \"PocketBook's new E Ink digital art frames offer a unique display solution but come with a high price.\"}, {\"title\": \"Smart-lighting brand Nanoleaf unveils LED Light Therapy Face Mask, and it’s surprisingly cheap\", \"link\": \"https://www.techradar.com/health-fitness/smart-lighting-brand-nanoleaf-unveils-led-light-therapy-face-mask-and-its-surprisingly-cheap\", \"description\": \"Nanoleaf introduced an FDA-certified LED light therapy face mask aimed at treating various skin conditions, available for pre-order at an affordable price.\"}, {\"title\": \"The coolest smart home tech of CES 2025\", \"link\": \"No content available\", \"description\": \"A guide to the most innovative smart home gadgets presented at CES 2025, highlighting advancements in smart home technology.\"}, {\"title\": \"I've been smart home hunting at CES 2025, and these are the coolest gadgets I found\", \"link\": \"https://www.techradar.com/home/smart-home/ive-been-smart-home-hunting-at-ces-2025-and-these-are-the-coolest-gadgets-i-found\", \"description\": \"This article highlights the latest multi-tasking robot vacuums and other smart home gadgets showcased at CES 2025.\"}, {\"title\": \"Goodbye, buttons - BMW's new Panoramic iDrive system gives all of its cars a massive head-up display with AI assistant\", \"link\": \"https://www.techradar.com/vehicle-tech/hybrid-electric-vehicles/goodbye-buttons-bmws-new-panoramic-idrive-system-gives-all-of-its-cars-a-massive-head-up-display-with-ai-assistant\", \"description\": \"BMW unveiled its new iDrive system at CES 2025, featuring a customizable head-up display powered by AI that spans the width of the windshield.\"}, {\"title\": \"Levoit's new pet-parent air purifier will switch on the fans when it senses your dog is being stinky\", \"link\": \"https://www.techradar.com/home/small-appliances/levoits-new-pet-parent-air-purifier-will-switch-on-the-fans-when-it-senses-your-dog-is-being-stinky\", \"description\": \"The Levoit Pet Odor & Hair Air Purifier is designed for pet owners, detecting and neutralizing odors, including those from pets.\"}, {\"title\": \"Nanoleaf's Ambilight alternative is now even easier to install - no more corner brackets\", \"link\": \"https://www.techradar.com/home/smart-lights/nanoleafs-ambilight-alternative-is-now-even-easier-to-install-no-more-corner-brackets\", \"description\": \"Nanoleaf has released an updated version of its 4D system, a budget-friendly alternative to Philips Ambilight that is easier to install.\"}, {\"title\": \"This coffee machine brews espresso using water condensed from the air in your home\", \"link\": \"https://www.techradar.com/home/coffee-machines/this-coffee-machine-brews-espresso-using-water-condensed-from-the-air-in-your-home\", \"description\": \"The KaraPod espresso machine uses water condensed from the air, offering a unique brewing method.\"}, {\"title\": \"This Batman-style location tracker brings satellite messaging to any smartphone\", \"link\": \"https://www.techradar.com/phones/phone-accessories/no-iphone-no-problem-this-batman-style-location-tracker-brings-satellite-messaging-to-any-smartphone\", \"description\": \"HMD's OffGrid device provides off-grid connectivity and satellite messaging capabilities for any smartphone, enhancing safety for hikers.\"}, {\"title\": \"This might be the coolest iPhone accessory at CES 2025, perfectly mixing tech and aesthetics\", \"link\": \"https://www.techradar.com/phones/phone-accessories/this-might-be-the-coolest-iphone-accessory-at-ces-2025-perfectly-mixing-tech-and-aesthetics\", \"description\": \"Belkin's new Stage PowerGrip is a magnetic power bank designed like a classic camera, featuring a 10,000mAh cell, 7.5W wireless charging, and a button that doubles as a camera shutter.\"}, {\"title\": \"Eat your heart out Daleks - Dreame's newest robovac can climb stairs\", \"link\": \"https://www.techradar.com/home/robot-vacuums/eat-your-heart-out-daleks-dreames-newest-robovac-can-climb-stairs\", \"description\": \"The Dreame X50 Ultra Complete can climb over obstacles up to 4.2cm high, thanks to its 'ProLeap System', making it a significant advancement in robovac technology.\"}, {\"title\": \"Narwal's new robovac will moonwalk your floors to get even the thickest carpets clean\", \"link\": \"https://www.techradar.com/home/robot-vacuums/narwals-new-robovac-will-moonwalk-your-floors-to-get-even-the-thickest-carpets-clean\", \"description\": \"The Narwal Flow features a unique cleaning method that vacuums carpets forwards and backwards, enhancing its ability to clean deep-pile carpets effectively.\"}, {\"title\": \"Denon's 22-speaker EV audio system promises hearing tests to make sure each speaker is tailored to you\", \"link\": \"https://www.techradar.com/audio/denons-22-speaker-ev-audio-system-promises-hearing-tests-to-make-sure-each-speaker-is-tailored-to-you\", \"description\": \"Denon's new audio system for electric vehicles includes 22 speakers and personalized audio for each passenger, providing a full Dolby Atmos experience.\"}, {\"title\": \"Koorui unleashes the world's fastest monitor\", \"link\": \"https://www.techradar.com/computing/gpu/how-high-do-you-want-your-frame-rates-nvidia-boasts-that-rtx-5090-gpu-can-drive-valorant-at-over-800-fps-with-jaw-dropping-low-latency\", \"description\": \"The Koorui G7 monitor features a 750Hz refresh rate and 0.5ms response time, making it the fastest gaming monitor available, aimed at esports professionals and content creators.\"}, {\"title\": \"A 750Hz gaming monitor has come out of nowhere at CES 2025 - but I'm getting a bit sick of this refresh rate one-upmanship\", \"link\": \"https://www.techradar.com/computing/monitors/a-750hz-gaming-monitor-has-come-out-of-nowhere-at-ces-2025-but-im-getting-a-bit-sick-of-this-refresh-rate-one-upmanship\", \"description\": \"Discussion on the emergence of a 750Hz gaming monitor at CES 2025 and the ongoing competition in refresh rates among manufacturers.\"}, {\"title\": \"HDMI 2.2 officially revealed at CES 2025: here's what it means for TVs and gaming consoles\", \"link\": \"https://www.techradar.com/tech/hdmi-2-2-officially-revealed-at-ces-2025-heres-what-that-means-for-tvs-and-gaming-consoles\", \"description\": \"Announcement of HDMI 2.2, which supports resolutions up to 16K and offers improved bandwidth compared to HDMI 2.1, set to be available to manufacturers in the first half of 2025.\"}, {\"title\": \"CES 2025 day 3: the 11 best gadgets we've seen, from Lenovo's rollable laptop to Panasonic's new flagship OLED TV\", \"link\": \"https://www.techradar.com/tech-events/ces-2025-day-3-the-11-best-gadgets-weve-seen-from-lenovos-rollable-laptop-to-panasonics-new-flagship-oled-tv\", \"description\": \"A recap of the best gadgets showcased on Day 3 of CES 2025, including Lenovo's innovative rollable laptop and Panasonic's flagship OLED TV.\"}, {\"title\": \"TCL's ultra-affordable 60XE uses NXTpaper to potentially break all kinds of battery life records\", \"link\": \"https://www.techradar.com/phones/tcls-ultra-affordable-60xe-uses-nxtpaper-to-potentially-break-all-kinds-of-battery-life-records\", \"description\": \"The TCL 60XE smartphone features NXTpaper technology, offering a unique matte-paper look and impressive battery life of up to 7 days. Priced at $199, it runs on Android and will be available later this year.\"}, {\"title\": \"Want to boost your iPhone storage by 2TB? SanDisk and ShiftCam's affordable little SSDs could be for you\", \"link\": \"https://www.techradar.com/phones/want-to-boost-your-iphone-storage-by-2tb-sandisk-and-shiftcams-affordable-little-ssds-could-be-for-you\", \"description\": \"SanDisk and ShiftCam introduced external SSDs for iPhones, available in 1TB and 2TB sizes. These devices are designed for videographers to offload large ProRes files and are compatible with iPhones.\"}, {\"title\": \"I tried Panasonic's new Z95B OLED TV, and it takes OLED picture quality to an even higher level\", \"link\": \"https://www.techradar.com/televisions/i-tried-panasonics-new-z95b-oled-tv-and-it-takes-oled-picture-quality-to-an-even-higher-level\", \"description\": \"Panasonic's flagship Z95B OLED TV is highlighted as a top contender for the best TV of 2025, offering superior picture quality. It will be available in various sizes later this year.\"}, {\"title\": \"Our strangest CES 2025 finds\", \"link\": \"https://www.tiktok.com/@techradar?lang=en\", \"description\": \"A roundup of unusual gadgets from CES 2025, including the Electric Salt Spoon, Bird Buddy's bug-watching camera, and Mixed Reality Makeup, showcasing innovative yet quirky technology.\"}, {\"title\": \"The RGB micro-LED backlight wars begin\", \"link\": \"https://www.techradar.com/televisions/samsung-introduces-2025-mini-led-tv-lineup-with-a-new-era-of-samsung-ai\", \"description\": \"Samsung showcased an 8K RGB micro-LED TV at CES 2025, which is expected to be their flagship model for 2025, competing with Hisense's TriChroma mini-LED TV.\"}, {\"title\": \"Delta Air Lines had the most impressive CES showcase this year\", \"link\": \"https://www.techradar.com/tech-events/delta-air-lines-just-announced-its-vision-for-the-future-of-flying-here-are-my-3-favorite-features-coming-to-its-planes-and-app\", \"description\": \"Delta Air Lines showcased an extravagant presentation at CES 2025, featuring an Airbus A350 on a massive screen, complete with immersive effects. The keynote included appearances from Tom Brady and Lenny Kravitz, along with innovations like 4K HDR QLED displays on seatbacks and a personalized AI travel assistant.\"}, {\"title\": \"Good news for some Disney Plus subscribers\", \"link\": \"https://www.techradar.com/streaming/own-a-samsung-tv-good-news-disney-plus-is-set-to-start-streaming-tv-shows-and-movies-in-hdr10\", \"description\": \"Disney Plus will soon be available in HDR10+ format on Samsung TVs, enhancing picture quality for users. This is significant as Samsung TVs previously did not support Dolby Vision HDR, which was the only HDR format available for Disney Plus.\"}, {\"title\": \"It’s here - our top 25 gadgets of CES 2025\", \"link\": \"https://www.techradar.com/tech/best-of-ces-2025\", \"description\": \"TechRadar has compiled a list of the top 25 gadgets from CES 2025, showcasing a variety of innovative products from TVs to robot vacuums, highlighting the best new technology that will influence consumer choices in 2025.\"}, {\"title\": \"It’s time to meet the CES 2025 robots\", \"link\": \"No content available\", \"description\": \"CES 2025 featured advanced humanoid robots, including Realbotix Aria, which can interact with humans and respond to emotional states, and the Unitree G1, which can be programmed for various tasks. The Digit robot is designed for logistics and manufacturing, with plans to work alongside humans in the future.\"}, {\"title\": \"The 11 most exciting tech trends of 2025, according to CES 2025\", \"link\": \"https://www.techradar.com/tech-events/the-11-most-exciting-tech-trends-of-2025-according-to-ces-2025\", \"description\": \"This article discusses the most exciting technology trends that emerged from CES 2025.\"}, {\"title\": \"LG's most stunning OLED TV of all time made a surprise secret return at CES, with a wireless twist\", \"link\": \"https://www.techradar.com/televisions/lgs-most-stunning-oled-tv-of-all-time-made-a-surprise-secret-return-at-ces-with-a-wireless-twist\", \"description\": \"The article covers the unveiling of LG's latest OLED TV at CES 2025, highlighting its innovative wireless features.\"}]}\n" + ] + } + ], + "source": [ + "# Inputs for the agent\n", + "inputs = {\"messages\": [(\"user\", \"Find all the latest news related to CES 2025\")]}\n", + "\n", + "# Run the graph\n", + "for event in graph.stream(inputs, config, stream_mode=\"values\"):\n", + " event[\"messages\"][-1].pretty_print()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "id": "_12IqhcrkiHC" + }, + "outputs": [], + "source": [ + "# get last message (assuming the last one is the Smartscraper tool response)\n", + "result = graph.get_state(config).values[\"messages\"][-1].content\n", + "\n", + "import json\n", + "# convert string into json\n", + "result = json.loads(result)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "YZz1bqCIpoL8" + }, + "source": [ + "Print the response" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "F1VfD8B4LPc8", + "outputId": "d4e11ef3-5104-4740-8770-fa72cc1b20fa" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "{\n", + " \"news\": [\n", + " {\n", + " \"title\": \"CES 2025 day 3: the 11 best gadgets we've seen, from Lenovo's rollable laptop to Panasonic's new flagship OLED TV\",\n", + " \"link\": \"https://www.techradar.com/tech-events/ces-2025-day-3-the-11-best-gadgets-weve-seen-from-lenovos-rollable-laptop-to-panasonics-new-flagship-oled-tv\",\n", + " \"description\": \"A roundup of the top gadgets showcased on the third day of CES 2025, highlighting innovative products from various brands.\"\n", + " },\n", + " {\n", + " \"title\": \"CES 2025 proves AI is everywhere, unstoppable, and perhaps just how you want it\",\n", + " \"link\": \"https://www.techradar.com/computing/artificial-intelligence/ces-2025-proves-ai-is-everywhere-unstoppable-and-perhaps-just-how-you-want-it\",\n", + " \"description\": \"An exploration of the pervasive presence of AI technologies at CES 2025 and their implications for consumers.\"\n", + " },\n", + " {\n", + " \"title\": \"Forget tri-folding phones - this pocketable folding projector is the companion I want for my 2025 travels\",\n", + " \"link\": \"https://www.techradar.com/televisions/projectors/forget-tri-folding-phones-this-pocketable-folding-projector-is-the-companion-i-want-for-my-2025-travels\",\n", + " \"description\": \"A review of a new portable folding projector that stands out as a desirable travel accessory.\"\n", + " },\n", + " {\n", + " \"title\": \"HDMI 2.2 officially revealed at CES 2025: here's what it means for TVs and gaming consoles\",\n", + " \"link\": \"https://www.techradar.com/tech/hdmi-2-2-officially-revealed-at-ces-2025-heres-what-that-means-for-tvs-and-gaming-consoles\",\n", + " \"description\": \"Details on the announcement of HDMI 2.2 and its potential impact on television and gaming technology.\"\n", + " },\n", + " {\n", + " \"title\": \"This awesome E Ink poster frame looks like the future of wall art, if you can stomach the price tag\",\n", + " \"link\": \"https://www.techradar.com/home/smart-home/this-awesome-e-ink-poster-frame-looks-like-the-future-of-wall-art-if-you-can-stomach-the-price-tag\",\n", + " \"description\": \"A look at a new E Ink poster frame that represents a futuristic approach to home decor, albeit at a high price.\"\n", + " },\n", + " {\n", + " \"title\": \"I saw Hisense's RGB mini-LED TV, and this vividly colorful set is the future of TV\",\n", + " \"link\": \"https://www.techradar.com/televisions/i-saw-hisenses-rgb-mini-led-tv-and-this-vividly-colorful-set-is-the-future-of-tv\",\n", + " \"description\": \"An impression of Hisense's new RGB mini-LED TV, noted for its vibrant colors and advanced technology.\"\n", + " },\n", + " {\n", + " \"title\": \"I saw Samsung's new The Frame Pro mini-LED TV, and it's whole new work of art\",\n", + " \"link\": \"https://www.techradar.com/televisions/i-saw-samsungs-new-the-frame-pro-mini-led-tv-and-its-whole-new-work-of-art\",\n", + " \"description\": \"Samsung's The Frame Pro mini-LED TV has been showcased at CES 2025, featuring Neo QLED mini-LED technology and local dimming, resulting in significantly improved image quality compared to previous models.\"\n", + " },\n", + " {\n", + " \"title\": \"This robot vacuum can also bring you a sandwich, and it might be the greatest gadget we've seen yet at CES\",\n", + " \"link\": \"https://www.techradar.com/tech-events/this-robot-vacuum-can-also-bring-you-a-sandwich-and-it-might-be-the-greatest-gadget-weve-seen-yet-at-ces?hasComeFromProof=true\",\n", + " \"description\": \"The SwitchBot K20+ Pro is highlighted as a standout gadget at CES 2025, functioning as a vacuum, air purifier, security camera, and sandwich deliverer, showcasing a modular design.\"\n", + " },\n", + " {\n", + " \"title\": \"Nvidia unveils new GeForce RTX 5090, RTX 5080, RTX 5070 Ti, and RTX 5070 graphics cards at CES 2025\",\n", + " \"link\": \"https://www.techradar.com/computing/gpu/nvidia-unveils-new-geforce-rtx-5090-rtx-5080-rtx-5070-ti-and-rtx-5070-graphics-cards-at-ces-2025\",\n", + " \"description\": \"Nvidia has revealed its latest RTX 5000 series graphics cards, boasting impressive specifications and a price tag of $1,999 for the flagship RTX 5090.\"\n", + " },\n", + " {\n", + " \"title\": \"I heard LG's new speakers made with will.i.am, and I kind of love them\",\n", + " \"link\": \"https://www.techradar.com/audio/wireless-bluetooth-speakers/i-heard-lgs-new-speakers-made-with-will-i-am-and-i-kind-of-love-them\",\n", + " \"description\": \"LG's new range of Bluetooth speakers, developed in collaboration with will.i.am, delivers high-quality sound and innovative design, surprising reviewers at CES 2025.\"\n", + " },\n", + " {\n", + " \"title\": \"The new Garmin Instinct 3 had me climbing a wall - in the best way possible\",\n", + " \"link\": \"https://www.techradar.com/health-fitness/the-new-garmin-instinct-3-had-me-climbing-a-wall-in-the-best-way-possible\",\n", + " \"description\": \"The Garmin Instinct 3 smartwatch, featuring a new AMOLED display and enhanced durability, was tested at CES 2025, showcasing its capabilities for outdoor activities.\"\n", + " },\n", + " {\n", + " \"title\": \"CES 2025 day 1: featuring the 11 best gadgets we've seen so far\",\n", + " \"link\": \"https://www.techradar.com/tech-events/the-best-of-ces-2025-day-one\",\n", + " \"description\": \"A roundup of the best gadgets from the first day of CES 2025, including smart glasses, smart rings, and high-resolution audio players.\"\n", + " },\n", + " {\n", + " \"title\": \"CES 2025 day 1: the 11 best gadgets we\\u2019ve seen, from Samsung's new flagship OLED TV to the Garmin Instinct 3\",\n", + " \"link\": \"https://www.techradar.com/tech-events/the-best-of-ces-2025-day-one\",\n", + " \"description\": \"A roundup of the best gadgets showcased on the first day of CES 2025, highlighting innovations from major brands.\"\n", + " },\n", + " {\n", + " \"title\": \"I tried the world's first interactive The Last of Us exhibit at CES - even though I died, I loved it\",\n", + " \"link\": \"https://www.techradar.com/tech/i-tried-the-worlds-first-interactive-the-last-of-us-exhibit-at-ces-even-though-i-died-i-loved-it\",\n", + " \"description\": \"An immersive experience based on the popular game and TV show, where the writer shares their thrilling experience in the interactive exhibit.\"\n", + " },\n", + " {\n", + " \"title\": \"This adorable little robot cat will stop you burning your tongue on hot coffee\",\n", + " \"link\": \"https://www.techradar.com/home/coffee-machines/this-adorable-little-robot-cat-will-stop-you-burning-your-tongue-on-hot-coffee\",\n", + " \"description\": \"A cute gadget from Yukai Engineering that cools your drink by blowing on it, featuring various blowing modes to mimic lifelike behavior.\"\n", + " },\n", + " {\n", + " \"title\": \"Forget bird watching, bug watching could be the next big thing\",\n", + " \"link\": \"https://www.techradar.com/home/smart-home/forget-bird-watching-bug-watching-could-be-the-next-bug-er-big-thing\",\n", + " \"description\": \"New tech from Wonder that allows users to observe insects in their gardens using a camera and AI to identify species.\"\n", + " },\n", + " {\n", + " \"title\": \"Philips Hue now works with the latest LG TVs, so you can turn your movies or games into a light show\",\n", + " \"link\": \"https://www.techradar.com/televisions/philips-hue-now-works-with-the-latest-lg-tvs-so-you-can-turn-your-movies-or-games-into-a-light-show\",\n", + " \"description\": \"Exciting news about the Philips Hue Sync TV app for LG TVs, allowing users to sync their smart lights with on-screen content, though it comes with a hefty price tag.\"\n", + " },\n", + " {\n", + " \"title\": \"Lenovo's new Legion Go S gaming handheld might finally be the one to take down the Steam Deck\",\n", + " \"link\": \"https://www.techradar.com/computing/lenovos-new-leg\",\n", + " \"description\": \"Lenovo introduces a gaming handheld that runs on SteamOS, aiming to provide a better experience than competitors that use Windows 11.\"\n", + " },\n", + " {\n", + " \"title\": \"JBL's new elite headphones include a touchscreen audio transmitter to share audio with anyone easily\",\n", + " \"link\": \"https://www.techradar.com/audio/wireless-headphones/jbls-new-elite-headphones-include-a-touchscreen-audio-transmitter-to-connect-to-anything-easily-and-to-share-audio-with-anyone-easily\",\n", + " \"description\": \"JBL has unveiled its flagship Tour One M3 headphones, which come with a unique touchscreen audio transmitter called SMART Tx. This device allows easy streaming from various audio sources and sharing audio via Auracast. The headphones feature advanced specifications, including high-resolution support, a long battery life, and customizable hearing profiles. They will be available for purchase on April 13, 2025, priced at $399.95.\"\n", + " },\n", + " {\n", + " \"title\": \"Technics' intriguing new flagship wireless earbuds boast magnetic fluid injected between the driver magnet and voice coil\",\n", + " \"link\": \"https://www.techradar.com/audio/earbuds-airpods/technics-eah-az100-review\",\n", + " \"description\": \"Technics has launched the EAH-AZ100 earbuds at CES 2025, featuring a new design and a proprietary Magnetic Fluid Driver for improved audio performance. The earbuds are smaller than their predecessors and aim to deliver detailed sound without the risk of driver movement issues. A review of the earbuds is also available.\"\n", + " },\n", + " {\n", + " \"title\": \"Victrola's new turntable with Auracast and aptX might be the most future-proof deck on the planet\",\n", + " \"link\": \"https://www.techradar.com/audio/turntables/victrolas-new-turntable-with-auracast-and-aptx-might-be-the-most-future-proof-on-the-planet\",\n", + " \"description\": \"Victrola has introduced the Wave turntable at CES, designed to enhance the vinyl experience with support for aptX Adaptive Bluetooth streaming and Auracast for broadcasting audio to multiple devices. The turntable is available in three finishes and aims to modernize vinyl playback.\"\n", + " },\n", + " {\n", + " \"title\": \"CES 2025 day 2: the 11 coolest gadgets we've seen, from Samsung's The Frame Pro TV to AI air fryers\",\n", + " \"link\": \"https://www.techradar.com/tech-events/the-best-of-ces-2025-day-2\",\n", + " \"description\": \"A roundup of standout gadgets from the second day of CES 2025, including the Samsung The Frame Pro TV and the Nvidia RTX 5090 graphics card. The list also features niche products like the Dreo ChefMaker 2 air fryer and the TCL Playcube portable projector.\"\n", + " },\n", + " {\n", + " \"title\": \"Some of CES 2025's weirdest robot pets are absolute nightmare fuel, but one made it all worthwhile\",\n", + " \"link\": \"https://www.techradar.com/tech/some-of-ces-2025s-weirdest-robot-pets-are-absolute-nightmare-fuel-but-one-made-it-all-worthwhile\",\n", + " \"description\": \"TechRadar highlights a significant increase in robot pets at CES 2025, including a next-gen Furby called Ropet, which has been described as \\\"nightmare fuel.\\\" In contrast, Tombot's Jennie, a hyper-realistic stuffed golden retriever, is praised for its potential as a companion for those with dementia.\"\n", + " },\n", + " {\n", + " \"title\": \"Suunto's new waterproof headphones can store 8,000 songs and use AI to help improve your swim stroke\",\n", + " \"link\": \"https://www.techradar.com/health-fitness/suuntos-new-waterproof-headphones-can-store-8-000-songs-and-use-ai-to-help-improve-your-swim-stroke\",\n", + " \"description\": \"Suunto introduces waterproof headphones that utilize bone conduction to deliver music underwater and feature AI technology to analyze swim strokes, making them a promising accessory for swimmers.\"\n", + " },\n", + " {\n", + " \"title\": \"Lenovo unveils world's first rollable display laptop, the ThinkBook Plus Gen 6 Rollable, at CES 2025\",\n", + " \"link\": \"https://www.techradar.com/computing/lenovo-unveils-worlds-first-rollable-display-laptop-the-thinkbook-plus-gen-6-rollable-at-ces-2025\",\n", + " \"description\": \"Lenovo confirms the launch of the ThinkBook Plus Gen 6 Rollable, the first laptop with a rollable display that can expand from 14 inches to 16.7 inches at the touch of a button.\"\n", + " },\n", + " {\n", + " \"title\": \"Samsung's massive 115-inch mini-LED TV is its largest yet - but there's an even bigger one at CES 2025\",\n", + " \"link\": \"https://www.techradar.com/televisions/samsungs-massive-115-inch-qn90f-is-its-largest-mini-led-tv-yet-but-theres-an-even-bigger-one-at-ces-2025\",\n", + " \"description\": \"Samsung showcases its 115-inch QN90F TV, which features advanced technology, but it is not the largest at CES 2025, as Hisense presents a 116-inch model.\"\n", + " },\n", + " {\n", + " \"title\": \"This smart-home control button might look like a simple wall switch, but it's way more than that\",\n", + " \"link\": \"https://www.techradar.com/home/smart-home/this-smart-home-control-button-might-look-like-a-simple-wall-switch-but-its-way-more-than-that\",\n", + " \"description\": \"The Flic Duo is a versatile smart button that supports the Matter smart home standard, featuring two buttons and the ability to control various smart home devices through gestures.\"\n", + " },\n", + " {\n", + " \"title\": \"Hisense reveals a 163-inch micro-LED TV at CES 2025\",\n", + " \"link\": \"https://www.techradar.com/televisions/hisense-reveals-a-163-inch-micro-led-tv-at-ces-2025\",\n", + " \"description\": \"Hisense introduces a 163-inch version of its TV, which boasts the Hi-View AI Engine X processor and claims to reach 10,000 nits of brightness, indicating a significant advancement in large-screen technology.\"\n", + " },\n", + " {\n", + " \"title\": \"I witnessed Hisense's giant 163-inch micro-LED TV in person, and this thing is staggering\",\n", + " \"link\": \"https://www.techradar.com/televisions/i-witnessed-hisenses-giant-163-inch-micro-led-tv-in-person-and-this-thing-is-staggering\",\n", + " \"description\": \"A firsthand account of Hisense's impressive 163-inch micro-LED TV showcased at CES 2025.\"\n", + " },\n", + " {\n", + " \"title\": \"Delta Air Lines announces generative AI assistant at CES 2025\",\n", + " \"link\": \"No content available\",\n", + " \"description\": \"Delta Air Lines revealed a generative AI assistant designed to enhance the travel experience from booking to arrival, set to roll out in 2025.\"\n", + " },\n", + " {\n", + " \"title\": \"These new video doorbell and security camera use AI to welcome visitors and deter intruders\",\n", + " \"link\": \"https://www.techradar.com/home/smart-home/these-new-video-doorbell-and-security-camera-use-ai-to-welcome-visitors-and-deter-intruders\",\n", + " \"description\": \"The Swann Xtreem4K security camera utilizes AI to interact with visitors and respond to potential security threats.\"\n", + " },\n", + " {\n", + " \"title\": \"The best wearable and fitness tech of CES 2025: from the Garmin Instinct 3 to a new Oura Ring rival\",\n", + " \"link\": \"https://www.techradar.com/health-fitness/the-best-wearable-and-fitness-tech-of-ces-2025\",\n", + " \"description\": \"A roundup of the top wearable and health tech showcased at CES 2025, including the Garmin Instinct 3 and other innovative devices.\"\n", + " },\n", + " {\n", + " \"title\": \"This awesome E Ink poster frame looks like the future of wall art, if you can stomach the price tag\",\n", + " \"link\": \"https://www.techradar.com/home/smart-home/this-awesome-e-ink-poster-frame-looks-like-the-future-of-wall-art-if-you-can-stomach-the-price-tag\",\n", + " \"description\": \"PocketBook's new E Ink digital art frames offer a unique display solution but come with a high price.\"\n", + " },\n", + " {\n", + " \"title\": \"Smart-lighting brand Nanoleaf unveils LED Light Therapy Face Mask, and it\\u2019s surprisingly cheap\",\n", + " \"link\": \"https://www.techradar.com/health-fitness/smart-lighting-brand-nanoleaf-unveils-led-light-therapy-face-mask-and-its-surprisingly-cheap\",\n", + " \"description\": \"Nanoleaf introduced an FDA-certified LED light therapy face mask aimed at treating various skin conditions, available for pre-order at an affordable price.\"\n", + " },\n", + " {\n", + " \"title\": \"The coolest smart home tech of CES 2025\",\n", + " \"link\": \"No content available\",\n", + " \"description\": \"A guide to the most innovative smart home gadgets presented at CES 2025, highlighting advancements in smart home technology.\"\n", + " },\n", + " {\n", + " \"title\": \"I've been smart home hunting at CES 2025, and these are the coolest gadgets I found\",\n", + " \"link\": \"https://www.techradar.com/home/smart-home/ive-been-smart-home-hunting-at-ces-2025-and-these-are-the-coolest-gadgets-i-found\",\n", + " \"description\": \"This article highlights the latest multi-tasking robot vacuums and other smart home gadgets showcased at CES 2025.\"\n", + " },\n", + " {\n", + " \"title\": \"Goodbye, buttons - BMW's new Panoramic iDrive system gives all of its cars a massive head-up display with AI assistant\",\n", + " \"link\": \"https://www.techradar.com/vehicle-tech/hybrid-electric-vehicles/goodbye-buttons-bmws-new-panoramic-idrive-system-gives-all-of-its-cars-a-massive-head-up-display-with-ai-assistant\",\n", + " \"description\": \"BMW unveiled its new iDrive system at CES 2025, featuring a customizable head-up display powered by AI that spans the width of the windshield.\"\n", + " },\n", + " {\n", + " \"title\": \"Levoit's new pet-parent air purifier will switch on the fans when it senses your dog is being stinky\",\n", + " \"link\": \"https://www.techradar.com/home/small-appliances/levoits-new-pet-parent-air-purifier-will-switch-on-the-fans-when-it-senses-your-dog-is-being-stinky\",\n", + " \"description\": \"The Levoit Pet Odor & Hair Air Purifier is designed for pet owners, detecting and neutralizing odors, including those from pets.\"\n", + " },\n", + " {\n", + " \"title\": \"Nanoleaf's Ambilight alternative is now even easier to install - no more corner brackets\",\n", + " \"link\": \"https://www.techradar.com/home/smart-lights/nanoleafs-ambilight-alternative-is-now-even-easier-to-install-no-more-corner-brackets\",\n", + " \"description\": \"Nanoleaf has released an updated version of its 4D system, a budget-friendly alternative to Philips Ambilight that is easier to install.\"\n", + " },\n", + " {\n", + " \"title\": \"This coffee machine brews espresso using water condensed from the air in your home\",\n", + " \"link\": \"https://www.techradar.com/home/coffee-machines/this-coffee-machine-brews-espresso-using-water-condensed-from-the-air-in-your-home\",\n", + " \"description\": \"The KaraPod espresso machine uses water condensed from the air, offering a unique brewing method.\"\n", + " },\n", + " {\n", + " \"title\": \"This Batman-style location tracker brings satellite messaging to any smartphone\",\n", + " \"link\": \"https://www.techradar.com/phones/phone-accessories/no-iphone-no-problem-this-batman-style-location-tracker-brings-satellite-messaging-to-any-smartphone\",\n", + " \"description\": \"HMD's OffGrid device provides off-grid connectivity and satellite messaging capabilities for any smartphone, enhancing safety for hikers.\"\n", + " },\n", + " {\n", + " \"title\": \"This might be the coolest iPhone accessory at CES 2025, perfectly mixing tech and aesthetics\",\n", + " \"link\": \"https://www.techradar.com/phones/phone-accessories/this-might-be-the-coolest-iphone-accessory-at-ces-2025-perfectly-mixing-tech-and-aesthetics\",\n", + " \"description\": \"Belkin's new Stage PowerGrip is a magnetic power bank designed like a classic camera, featuring a 10,000mAh cell, 7.5W wireless charging, and a button that doubles as a camera shutter.\"\n", + " },\n", + " {\n", + " \"title\": \"Eat your heart out Daleks - Dreame's newest robovac can climb stairs\",\n", + " \"link\": \"https://www.techradar.com/home/robot-vacuums/eat-your-heart-out-daleks-dreames-newest-robovac-can-climb-stairs\",\n", + " \"description\": \"The Dreame X50 Ultra Complete can climb over obstacles up to 4.2cm high, thanks to its 'ProLeap System', making it a significant advancement in robovac technology.\"\n", + " },\n", + " {\n", + " \"title\": \"Narwal's new robovac will moonwalk your floors to get even the thickest carpets clean\",\n", + " \"link\": \"https://www.techradar.com/home/robot-vacuums/narwals-new-robovac-will-moonwalk-your-floors-to-get-even-the-thickest-carpets-clean\",\n", + " \"description\": \"The Narwal Flow features a unique cleaning method that vacuums carpets forwards and backwards, enhancing its ability to clean deep-pile carpets effectively.\"\n", + " },\n", + " {\n", + " \"title\": \"Denon's 22-speaker EV audio system promises hearing tests to make sure each speaker is tailored to you\",\n", + " \"link\": \"https://www.techradar.com/audio/denons-22-speaker-ev-audio-system-promises-hearing-tests-to-make-sure-each-speaker-is-tailored-to-you\",\n", + " \"description\": \"Denon's new audio system for electric vehicles includes 22 speakers and personalized audio for each passenger, providing a full Dolby Atmos experience.\"\n", + " },\n", + " {\n", + " \"title\": \"Koorui unleashes the world's fastest monitor\",\n", + " \"link\": \"https://www.techradar.com/computing/gpu/how-high-do-you-want-your-frame-rates-nvidia-boasts-that-rtx-5090-gpu-can-drive-valorant-at-over-800-fps-with-jaw-dropping-low-latency\",\n", + " \"description\": \"The Koorui G7 monitor features a 750Hz refresh rate and 0.5ms response time, making it the fastest gaming monitor available, aimed at esports professionals and content creators.\"\n", + " },\n", + " {\n", + " \"title\": \"A 750Hz gaming monitor has come out of nowhere at CES 2025 - but I'm getting a bit sick of this refresh rate one-upmanship\",\n", + " \"link\": \"https://www.techradar.com/computing/monitors/a-750hz-gaming-monitor-has-come-out-of-nowhere-at-ces-2025-but-im-getting-a-bit-sick-of-this-refresh-rate-one-upmanship\",\n", + " \"description\": \"Discussion on the emergence of a 750Hz gaming monitor at CES 2025 and the ongoing competition in refresh rates among manufacturers.\"\n", + " },\n", + " {\n", + " \"title\": \"HDMI 2.2 officially revealed at CES 2025: here's what it means for TVs and gaming consoles\",\n", + " \"link\": \"https://www.techradar.com/tech/hdmi-2-2-officially-revealed-at-ces-2025-heres-what-that-means-for-tvs-and-gaming-consoles\",\n", + " \"description\": \"Announcement of HDMI 2.2, which supports resolutions up to 16K and offers improved bandwidth compared to HDMI 2.1, set to be available to manufacturers in the first half of 2025.\"\n", + " },\n", + " {\n", + " \"title\": \"CES 2025 day 3: the 11 best gadgets we've seen, from Lenovo's rollable laptop to Panasonic's new flagship OLED TV\",\n", + " \"link\": \"https://www.techradar.com/tech-events/ces-2025-day-3-the-11-best-gadgets-weve-seen-from-lenovos-rollable-laptop-to-panasonics-new-flagship-oled-tv\",\n", + " \"description\": \"A recap of the best gadgets showcased on Day 3 of CES 2025, including Lenovo's innovative rollable laptop and Panasonic's flagship OLED TV.\"\n", + " },\n", + " {\n", + " \"title\": \"TCL's ultra-affordable 60XE uses NXTpaper to potentially break all kinds of battery life records\",\n", + " \"link\": \"https://www.techradar.com/phones/tcls-ultra-affordable-60xe-uses-nxtpaper-to-potentially-break-all-kinds-of-battery-life-records\",\n", + " \"description\": \"The TCL 60XE smartphone features NXTpaper technology, offering a unique matte-paper look and impressive battery life of up to 7 days. Priced at $199, it runs on Android and will be available later this year.\"\n", + " },\n", + " {\n", + " \"title\": \"Want to boost your iPhone storage by 2TB? SanDisk and ShiftCam's affordable little SSDs could be for you\",\n", + " \"link\": \"https://www.techradar.com/phones/want-to-boost-your-iphone-storage-by-2tb-sandisk-and-shiftcams-affordable-little-ssds-could-be-for-you\",\n", + " \"description\": \"SanDisk and ShiftCam introduced external SSDs for iPhones, available in 1TB and 2TB sizes. These devices are designed for videographers to offload large ProRes files and are compatible with iPhones.\"\n", + " },\n", + " {\n", + " \"title\": \"I tried Panasonic's new Z95B OLED TV, and it takes OLED picture quality to an even higher level\",\n", + " \"link\": \"https://www.techradar.com/televisions/i-tried-panasonics-new-z95b-oled-tv-and-it-takes-oled-picture-quality-to-an-even-higher-level\",\n", + " \"description\": \"Panasonic's flagship Z95B OLED TV is highlighted as a top contender for the best TV of 2025, offering superior picture quality. It will be available in various sizes later this year.\"\n", + " },\n", + " {\n", + " \"title\": \"Our strangest CES 2025 finds\",\n", + " \"link\": \"https://www.tiktok.com/@techradar?lang=en\",\n", + " \"description\": \"A roundup of unusual gadgets from CES 2025, including the Electric Salt Spoon, Bird Buddy's bug-watching camera, and Mixed Reality Makeup, showcasing innovative yet quirky technology.\"\n", + " },\n", + " {\n", + " \"title\": \"The RGB micro-LED backlight wars begin\",\n", + " \"link\": \"https://www.techradar.com/televisions/samsung-introduces-2025-mini-led-tv-lineup-with-a-new-era-of-samsung-ai\",\n", + " \"description\": \"Samsung showcased an 8K RGB micro-LED TV at CES 2025, which is expected to be their flagship model for 2025, competing with Hisense's TriChroma mini-LED TV.\"\n", + " },\n", + " {\n", + " \"title\": \"Delta Air Lines had the most impressive CES showcase this year\",\n", + " \"link\": \"https://www.techradar.com/tech-events/delta-air-lines-just-announced-its-vision-for-the-future-of-flying-here-are-my-3-favorite-features-coming-to-its-planes-and-app\",\n", + " \"description\": \"Delta Air Lines showcased an extravagant presentation at CES 2025, featuring an Airbus A350 on a massive screen, complete with immersive effects. The keynote included appearances from Tom Brady and Lenny Kravitz, along with innovations like 4K HDR QLED displays on seatbacks and a personalized AI travel assistant.\"\n", + " },\n", + " {\n", + " \"title\": \"Good news for some Disney Plus subscribers\",\n", + " \"link\": \"https://www.techradar.com/streaming/own-a-samsung-tv-good-news-disney-plus-is-set-to-start-streaming-tv-shows-and-movies-in-hdr10\",\n", + " \"description\": \"Disney Plus will soon be available in HDR10+ format on Samsung TVs, enhancing picture quality for users. This is significant as Samsung TVs previously did not support Dolby Vision HDR, which was the only HDR format available for Disney Plus.\"\n", + " },\n", + " {\n", + " \"title\": \"It\\u2019s here - our top 25 gadgets of CES 2025\",\n", + " \"link\": \"https://www.techradar.com/tech/best-of-ces-2025\",\n", + " \"description\": \"TechRadar has compiled a list of the top 25 gadgets from CES 2025, showcasing a variety of innovative products from TVs to robot vacuums, highlighting the best new technology that will influence consumer choices in 2025.\"\n", + " },\n", + " {\n", + " \"title\": \"It\\u2019s time to meet the CES 2025 robots\",\n", + " \"link\": \"No content available\",\n", + " \"description\": \"CES 2025 featured advanced humanoid robots, including Realbotix Aria, which can interact with humans and respond to emotional states, and the Unitree G1, which can be programmed for various tasks. The Digit robot is designed for logistics and manufacturing, with plans to work alongside humans in the future.\"\n", + " },\n", + " {\n", + " \"title\": \"The 11 most exciting tech trends of 2025, according to CES 2025\",\n", + " \"link\": \"https://www.techradar.com/tech-events/the-11-most-exciting-tech-trends-of-2025-according-to-ces-2025\",\n", + " \"description\": \"This article discusses the most exciting technology trends that emerged from CES 2025.\"\n", + " },\n", + " {\n", + " \"title\": \"LG's most stunning OLED TV of all time made a surprise secret return at CES, with a wireless twist\",\n", + " \"link\": \"https://www.techradar.com/televisions/lgs-most-stunning-oled-tv-of-all-time-made-a-surprise-secret-return-at-ces-with-a-wireless-twist\",\n", + " \"description\": \"The article covers the unveiling of LG's latest OLED TV at CES 2025, highlighting its innovative wireless features.\"\n", + " }\n", + " ]\n", + "}\n" + ] + } + ], + "source": [ + "print(json.dumps(result, indent=2))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "S8s1AvWJKNaV" + }, + "source": [ + "## Save output inside a My-SQL db" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "id": "123NhcIYKNaW" + }, + "outputs": [], + "source": [ + "%%capture\n", + "!pip install mysql-connector-python\n", + "!apt-get -y install mysql-server" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "DkHJ0EBXKNaW", + "outputId": "648ef968-78a4-4017-d4ee-8f5ae52ed288" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " * Starting MySQL database server mysqld\n", + "su: warning: cannot change directory to /nonexistent: No such file or directory\n", + " ...done.\n" + ] + } + ], + "source": [ + "!service mysql start" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "id": "7q8Fd2cAKNaX" + }, + "outputs": [], + "source": [ + "!mysql -e \"ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'root';FLUSH PRIVILEGES;\"\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ersqowNFKNaX" + }, + "source": [ + "### Connect to MySQL" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "id": "pGJsLLFSKNaX" + }, + "outputs": [], + "source": [ + "import mysql.connector\n", + "\n", + "# Create a connection to the MySQL server\n", + "conn = mysql.connector.connect(user='root', password='root', host='localhost')\n", + "\n", + "# Create a cursor to interact with the MySQL server\n", + "cursor = conn.cursor()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "E4lD995lKNaY" + }, + "source": [ + "### Create & Design a Database" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": { + "id": "Iyhy8RswKNaY" + }, + "outputs": [], + "source": [ + "# Create a new database named 'articles_db'\n", + "cursor.execute(\"CREATE DATABASE IF NOT EXISTS articles_db\")\n", + "\n", + "# Switch to the 'articles_db' database\n", + "cursor.execute(\"USE articles_db\")\n", + "\n", + "# Create the 'articles_table' table\n", + "cursor.execute('''\n", + "CREATE TABLE IF NOT EXISTS articles_table (\n", + " id INT AUTO_INCREMENT PRIMARY KEY,\n", + " title VARCHAR(500) NOT NULL,\n", + " link VARCHAR(500) NOT NULL,\n", + " description TEXT NOT NULL\n", + ")\n", + "''')\n", + "\n", + "# Always remember to close the cursor and connection when done\n", + "cursor.close()\n", + "conn.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "F8QgpYWzKNaa" + }, + "source": [ + "### Populate the database" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "id": "srC8jArIKNab" + }, + "outputs": [], + "source": [ + "import mysql.connector\n", + "\n", + "# Connect to the MySQL server and the 'articles_db' database\n", + "conn = mysql.connector.connect(user='root', password='root', host='localhost', database='articles_db')\n", + "cursor = conn.cursor()\n", + "\n", + "# Prepare the news data for insertion\n", + "articles_table_data = [(article[\"title\"], article[\"link\"], article[\"description\"]) for article in result[\"news\"]]\n", + "\n", + "# Insert data using the cursor\n", + "cursor.executemany('''\n", + "INSERT INTO articles_table (title, link, description) VALUES (%s, %s, %s)\n", + "''', articles_table_data)\n", + "\n", + "# Commit the changes\n", + "conn.commit()\n", + "\n", + "# Close the cursor and connection\n", + "cursor.close()\n", + "conn.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "BVdHrkJVKNac" + }, + "source": [ + "### Query the database" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "vDGbRZGVKNae", + "outputId": "9c9a8d5c-4a4c-4a39-e561-2457b33b7276" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(1, \"CES 2025 day 3: the 11 best gadgets we've seen, from Lenovo's rollable laptop to Panasonic's new flagship OLED TV\", 'https://www.techradar.com/tech-events/ces-2025-day-3-the-11-best-gadgets-weve-seen-from-lenovos-rollable-laptop-to-panasonics-new-flagship-oled-tv', 'A roundup of the top gadgets showcased on the third day of CES 2025, highlighting innovative products from various brands.')\n", + "(2, 'CES 2025 proves AI is everywhere, unstoppable, and perhaps just how you want it', 'https://www.techradar.com/computing/artificial-intelligence/ces-2025-proves-ai-is-everywhere-unstoppable-and-perhaps-just-how-you-want-it', 'An exploration of the pervasive presence of AI technologies at CES 2025 and their implications for consumers.')\n", + "(3, 'Forget tri-folding phones - this pocketable folding projector is the companion I want for my 2025 travels', 'https://www.techradar.com/televisions/projectors/forget-tri-folding-phones-this-pocketable-folding-projector-is-the-companion-i-want-for-my-2025-travels', 'A review of a new portable folding projector that stands out as a desirable travel accessory.')\n", + "(4, \"HDMI 2.2 officially revealed at CES 2025: here's what it means for TVs and gaming consoles\", 'https://www.techradar.com/tech/hdmi-2-2-officially-revealed-at-ces-2025-heres-what-that-means-for-tvs-and-gaming-consoles', 'Details on the announcement of HDMI 2.2 and its potential impact on television and gaming technology.')\n", + "(5, 'This awesome E Ink poster frame looks like the future of wall art, if you can stomach the price tag', 'https://www.techradar.com/home/smart-home/this-awesome-e-ink-poster-frame-looks-like-the-future-of-wall-art-if-you-can-stomach-the-price-tag', 'A look at a new E Ink poster frame that represents a futuristic approach to home decor, albeit at a high price.')\n", + "(6, \"I saw Hisense's RGB mini-LED TV, and this vividly colorful set is the future of TV\", 'https://www.techradar.com/televisions/i-saw-hisenses-rgb-mini-led-tv-and-this-vividly-colorful-set-is-the-future-of-tv', \"An impression of Hisense's new RGB mini-LED TV, noted for its vibrant colors and advanced technology.\")\n", + "(7, \"I saw Samsung's new The Frame Pro mini-LED TV, and it's whole new work of art\", 'https://www.techradar.com/televisions/i-saw-samsungs-new-the-frame-pro-mini-led-tv-and-its-whole-new-work-of-art', \"Samsung's The Frame Pro mini-LED TV has been showcased at CES 2025, featuring Neo QLED mini-LED technology and local dimming, resulting in significantly improved image quality compared to previous models.\")\n", + "(8, \"This robot vacuum can also bring you a sandwich, and it might be the greatest gadget we've seen yet at CES\", 'https://www.techradar.com/tech-events/this-robot-vacuum-can-also-bring-you-a-sandwich-and-it-might-be-the-greatest-gadget-weve-seen-yet-at-ces?hasComeFromProof=true', 'The SwitchBot K20+ Pro is highlighted as a standout gadget at CES 2025, functioning as a vacuum, air purifier, security camera, and sandwich deliverer, showcasing a modular design.')\n", + "(9, 'Nvidia unveils new GeForce RTX 5090, RTX 5080, RTX 5070 Ti, and RTX 5070 graphics cards at CES 2025', 'https://www.techradar.com/computing/gpu/nvidia-unveils-new-geforce-rtx-5090-rtx-5080-rtx-5070-ti-and-rtx-5070-graphics-cards-at-ces-2025', 'Nvidia has revealed its latest RTX 5000 series graphics cards, boasting impressive specifications and a price tag of $1,999 for the flagship RTX 5090.')\n", + "(10, \"I heard LG's new speakers made with will.i.am, and I kind of love them\", 'https://www.techradar.com/audio/wireless-bluetooth-speakers/i-heard-lgs-new-speakers-made-with-will-i-am-and-i-kind-of-love-them', \"LG's new range of Bluetooth speakers, developed in collaboration with will.i.am, delivers high-quality sound and innovative design, surprising reviewers at CES 2025.\")\n", + "(11, 'The new Garmin Instinct 3 had me climbing a wall - in the best way possible', 'https://www.techradar.com/health-fitness/the-new-garmin-instinct-3-had-me-climbing-a-wall-in-the-best-way-possible', 'The Garmin Instinct 3 smartwatch, featuring a new AMOLED display and enhanced durability, was tested at CES 2025, showcasing its capabilities for outdoor activities.')\n", + "(12, \"CES 2025 day 1: featuring the 11 best gadgets we've seen so far\", 'https://www.techradar.com/tech-events/the-best-of-ces-2025-day-one', 'A roundup of the best gadgets from the first day of CES 2025, including smart glasses, smart rings, and high-resolution audio players.')\n", + "(13, \"CES 2025 day 1: the 11 best gadgets we’ve seen, from Samsung's new flagship OLED TV to the Garmin Instinct 3\", 'https://www.techradar.com/tech-events/the-best-of-ces-2025-day-one', 'A roundup of the best gadgets showcased on the first day of CES 2025, highlighting innovations from major brands.')\n", + "(14, \"I tried the world's first interactive The Last of Us exhibit at CES - even though I died, I loved it\", 'https://www.techradar.com/tech/i-tried-the-worlds-first-interactive-the-last-of-us-exhibit-at-ces-even-though-i-died-i-loved-it', 'An immersive experience based on the popular game and TV show, where the writer shares their thrilling experience in the interactive exhibit.')\n", + "(15, 'This adorable little robot cat will stop you burning your tongue on hot coffee', 'https://www.techradar.com/home/coffee-machines/this-adorable-little-robot-cat-will-stop-you-burning-your-tongue-on-hot-coffee', 'A cute gadget from Yukai Engineering that cools your drink by blowing on it, featuring various blowing modes to mimic lifelike behavior.')\n", + "(16, 'Forget bird watching, bug watching could be the next big thing', 'https://www.techradar.com/home/smart-home/forget-bird-watching-bug-watching-could-be-the-next-bug-er-big-thing', 'New tech from Wonder that allows users to observe insects in their gardens using a camera and AI to identify species.')\n", + "(17, 'Philips Hue now works with the latest LG TVs, so you can turn your movies or games into a light show', 'https://www.techradar.com/televisions/philips-hue-now-works-with-the-latest-lg-tvs-so-you-can-turn-your-movies-or-games-into-a-light-show', 'Exciting news about the Philips Hue Sync TV app for LG TVs, allowing users to sync their smart lights with on-screen content, though it comes with a hefty price tag.')\n", + "(18, \"Lenovo's new Legion Go S gaming handheld might finally be the one to take down the Steam Deck\", 'https://www.techradar.com/computing/lenovos-new-leg', 'Lenovo introduces a gaming handheld that runs on SteamOS, aiming to provide a better experience than competitors that use Windows 11.')\n", + "(19, \"JBL's new elite headphones include a touchscreen audio transmitter to share audio with anyone easily\", 'https://www.techradar.com/audio/wireless-headphones/jbls-new-elite-headphones-include-a-touchscreen-audio-transmitter-to-connect-to-anything-easily-and-to-share-audio-with-anyone-easily', 'JBL has unveiled its flagship Tour One M3 headphones, which come with a unique touchscreen audio transmitter called SMART Tx. This device allows easy streaming from various audio sources and sharing audio via Auracast. The headphones feature advanced specifications, including high-resolution support, a long battery life, and customizable hearing profiles. They will be available for purchase on April 13, 2025, priced at $399.95.')\n", + "(20, \"Technics' intriguing new flagship wireless earbuds boast magnetic fluid injected between the driver magnet and voice coil\", 'https://www.techradar.com/audio/earbuds-airpods/technics-eah-az100-review', 'Technics has launched the EAH-AZ100 earbuds at CES 2025, featuring a new design and a proprietary Magnetic Fluid Driver for improved audio performance. The earbuds are smaller than their predecessors and aim to deliver detailed sound without the risk of driver movement issues. A review of the earbuds is also available.')\n", + "(21, \"Victrola's new turntable with Auracast and aptX might be the most future-proof deck on the planet\", 'https://www.techradar.com/audio/turntables/victrolas-new-turntable-with-auracast-and-aptx-might-be-the-most-future-proof-on-the-planet', 'Victrola has introduced the Wave turntable at CES, designed to enhance the vinyl experience with support for aptX Adaptive Bluetooth streaming and Auracast for broadcasting audio to multiple devices. The turntable is available in three finishes and aims to modernize vinyl playback.')\n", + "(22, \"CES 2025 day 2: the 11 coolest gadgets we've seen, from Samsung's The Frame Pro TV to AI air fryers\", 'https://www.techradar.com/tech-events/the-best-of-ces-2025-day-2', 'A roundup of standout gadgets from the second day of CES 2025, including the Samsung The Frame Pro TV and the Nvidia RTX 5090 graphics card. The list also features niche products like the Dreo ChefMaker 2 air fryer and the TCL Playcube portable projector.')\n", + "(23, \"Some of CES 2025's weirdest robot pets are absolute nightmare fuel, but one made it all worthwhile\", 'https://www.techradar.com/tech/some-of-ces-2025s-weirdest-robot-pets-are-absolute-nightmare-fuel-but-one-made-it-all-worthwhile', 'TechRadar highlights a significant increase in robot pets at CES 2025, including a next-gen Furby called Ropet, which has been described as \"nightmare fuel.\" In contrast, Tombot\\'s Jennie, a hyper-realistic stuffed golden retriever, is praised for its potential as a companion for those with dementia.')\n", + "(24, \"Suunto's new waterproof headphones can store 8,000 songs and use AI to help improve your swim stroke\", 'https://www.techradar.com/health-fitness/suuntos-new-waterproof-headphones-can-store-8-000-songs-and-use-ai-to-help-improve-your-swim-stroke', 'Suunto introduces waterproof headphones that utilize bone conduction to deliver music underwater and feature AI technology to analyze swim strokes, making them a promising accessory for swimmers.')\n", + "(25, \"Lenovo unveils world's first rollable display laptop, the ThinkBook Plus Gen 6 Rollable, at CES 2025\", 'https://www.techradar.com/computing/lenovo-unveils-worlds-first-rollable-display-laptop-the-thinkbook-plus-gen-6-rollable-at-ces-2025', 'Lenovo confirms the launch of the ThinkBook Plus Gen 6 Rollable, the first laptop with a rollable display that can expand from 14 inches to 16.7 inches at the touch of a button.')\n", + "(26, \"Samsung's massive 115-inch mini-LED TV is its largest yet - but there's an even bigger one at CES 2025\", 'https://www.techradar.com/televisions/samsungs-massive-115-inch-qn90f-is-its-largest-mini-led-tv-yet-but-theres-an-even-bigger-one-at-ces-2025', 'Samsung showcases its 115-inch QN90F TV, which features advanced technology, but it is not the largest at CES 2025, as Hisense presents a 116-inch model.')\n", + "(27, \"This smart-home control button might look like a simple wall switch, but it's way more than that\", 'https://www.techradar.com/home/smart-home/this-smart-home-control-button-might-look-like-a-simple-wall-switch-but-its-way-more-than-that', 'The Flic Duo is a versatile smart button that supports the Matter smart home standard, featuring two buttons and the ability to control various smart home devices through gestures.')\n", + "(28, 'Hisense reveals a 163-inch micro-LED TV at CES 2025', 'https://www.techradar.com/televisions/hisense-reveals-a-163-inch-micro-led-tv-at-ces-2025', 'Hisense introduces a 163-inch version of its TV, which boasts the Hi-View AI Engine X processor and claims to reach 10,000 nits of brightness, indicating a significant advancement in large-screen technology.')\n", + "(29, \"I witnessed Hisense's giant 163-inch micro-LED TV in person, and this thing is staggering\", 'https://www.techradar.com/televisions/i-witnessed-hisenses-giant-163-inch-micro-led-tv-in-person-and-this-thing-is-staggering', \"A firsthand account of Hisense's impressive 163-inch micro-LED TV showcased at CES 2025.\")\n", + "(30, 'Delta Air Lines announces generative AI assistant at CES 2025', 'No content available', 'Delta Air Lines revealed a generative AI assistant designed to enhance the travel experience from booking to arrival, set to roll out in 2025.')\n", + "(31, 'These new video doorbell and security camera use AI to welcome visitors and deter intruders', 'https://www.techradar.com/home/smart-home/these-new-video-doorbell-and-security-camera-use-ai-to-welcome-visitors-and-deter-intruders', 'The Swann Xtreem4K security camera utilizes AI to interact with visitors and respond to potential security threats.')\n", + "(32, 'The best wearable and fitness tech of CES 2025: from the Garmin Instinct 3 to a new Oura Ring rival', 'https://www.techradar.com/health-fitness/the-best-wearable-and-fitness-tech-of-ces-2025', 'A roundup of the top wearable and health tech showcased at CES 2025, including the Garmin Instinct 3 and other innovative devices.')\n", + "(33, 'This awesome E Ink poster frame looks like the future of wall art, if you can stomach the price tag', 'https://www.techradar.com/home/smart-home/this-awesome-e-ink-poster-frame-looks-like-the-future-of-wall-art-if-you-can-stomach-the-price-tag', \"PocketBook's new E Ink digital art frames offer a unique display solution but come with a high price.\")\n", + "(34, 'Smart-lighting brand Nanoleaf unveils LED Light Therapy Face Mask, and it’s surprisingly cheap', 'https://www.techradar.com/health-fitness/smart-lighting-brand-nanoleaf-unveils-led-light-therapy-face-mask-and-its-surprisingly-cheap', 'Nanoleaf introduced an FDA-certified LED light therapy face mask aimed at treating various skin conditions, available for pre-order at an affordable price.')\n", + "(35, 'The coolest smart home tech of CES 2025', 'No content available', 'A guide to the most innovative smart home gadgets presented at CES 2025, highlighting advancements in smart home technology.')\n", + "(36, \"I've been smart home hunting at CES 2025, and these are the coolest gadgets I found\", 'https://www.techradar.com/home/smart-home/ive-been-smart-home-hunting-at-ces-2025-and-these-are-the-coolest-gadgets-i-found', 'This article highlights the latest multi-tasking robot vacuums and other smart home gadgets showcased at CES 2025.')\n", + "(37, \"Goodbye, buttons - BMW's new Panoramic iDrive system gives all of its cars a massive head-up display with AI assistant\", 'https://www.techradar.com/vehicle-tech/hybrid-electric-vehicles/goodbye-buttons-bmws-new-panoramic-idrive-system-gives-all-of-its-cars-a-massive-head-up-display-with-ai-assistant', 'BMW unveiled its new iDrive system at CES 2025, featuring a customizable head-up display powered by AI that spans the width of the windshield.')\n", + "(38, \"Levoit's new pet-parent air purifier will switch on the fans when it senses your dog is being stinky\", 'https://www.techradar.com/home/small-appliances/levoits-new-pet-parent-air-purifier-will-switch-on-the-fans-when-it-senses-your-dog-is-being-stinky', 'The Levoit Pet Odor & Hair Air Purifier is designed for pet owners, detecting and neutralizing odors, including those from pets.')\n", + "(39, \"Nanoleaf's Ambilight alternative is now even easier to install - no more corner brackets\", 'https://www.techradar.com/home/smart-lights/nanoleafs-ambilight-alternative-is-now-even-easier-to-install-no-more-corner-brackets', 'Nanoleaf has released an updated version of its 4D system, a budget-friendly alternative to Philips Ambilight that is easier to install.')\n", + "(40, 'This coffee machine brews espresso using water condensed from the air in your home', 'https://www.techradar.com/home/coffee-machines/this-coffee-machine-brews-espresso-using-water-condensed-from-the-air-in-your-home', 'The KaraPod espresso machine uses water condensed from the air, offering a unique brewing method.')\n", + "(41, 'This Batman-style location tracker brings satellite messaging to any smartphone', 'https://www.techradar.com/phones/phone-accessories/no-iphone-no-problem-this-batman-style-location-tracker-brings-satellite-messaging-to-any-smartphone', \"HMD's OffGrid device provides off-grid connectivity and satellite messaging capabilities for any smartphone, enhancing safety for hikers.\")\n", + "(42, 'This might be the coolest iPhone accessory at CES 2025, perfectly mixing tech and aesthetics', 'https://www.techradar.com/phones/phone-accessories/this-might-be-the-coolest-iphone-accessory-at-ces-2025-perfectly-mixing-tech-and-aesthetics', \"Belkin's new Stage PowerGrip is a magnetic power bank designed like a classic camera, featuring a 10,000mAh cell, 7.5W wireless charging, and a button that doubles as a camera shutter.\")\n", + "(43, \"Eat your heart out Daleks - Dreame's newest robovac can climb stairs\", 'https://www.techradar.com/home/robot-vacuums/eat-your-heart-out-daleks-dreames-newest-robovac-can-climb-stairs', \"The Dreame X50 Ultra Complete can climb over obstacles up to 4.2cm high, thanks to its 'ProLeap System', making it a significant advancement in robovac technology.\")\n", + "(44, \"Narwal's new robovac will moonwalk your floors to get even the thickest carpets clean\", 'https://www.techradar.com/home/robot-vacuums/narwals-new-robovac-will-moonwalk-your-floors-to-get-even-the-thickest-carpets-clean', 'The Narwal Flow features a unique cleaning method that vacuums carpets forwards and backwards, enhancing its ability to clean deep-pile carpets effectively.')\n", + "(45, \"Denon's 22-speaker EV audio system promises hearing tests to make sure each speaker is tailored to you\", 'https://www.techradar.com/audio/denons-22-speaker-ev-audio-system-promises-hearing-tests-to-make-sure-each-speaker-is-tailored-to-you', \"Denon's new audio system for electric vehicles includes 22 speakers and personalized audio for each passenger, providing a full Dolby Atmos experience.\")\n", + "(46, \"Koorui unleashes the world's fastest monitor\", 'https://www.techradar.com/computing/gpu/how-high-do-you-want-your-frame-rates-nvidia-boasts-that-rtx-5090-gpu-can-drive-valorant-at-over-800-fps-with-jaw-dropping-low-latency', 'The Koorui G7 monitor features a 750Hz refresh rate and 0.5ms response time, making it the fastest gaming monitor available, aimed at esports professionals and content creators.')\n", + "(47, \"A 750Hz gaming monitor has come out of nowhere at CES 2025 - but I'm getting a bit sick of this refresh rate one-upmanship\", 'https://www.techradar.com/computing/monitors/a-750hz-gaming-monitor-has-come-out-of-nowhere-at-ces-2025-but-im-getting-a-bit-sick-of-this-refresh-rate-one-upmanship', 'Discussion on the emergence of a 750Hz gaming monitor at CES 2025 and the ongoing competition in refresh rates among manufacturers.')\n", + "(48, \"HDMI 2.2 officially revealed at CES 2025: here's what it means for TVs and gaming consoles\", 'https://www.techradar.com/tech/hdmi-2-2-officially-revealed-at-ces-2025-heres-what-that-means-for-tvs-and-gaming-consoles', 'Announcement of HDMI 2.2, which supports resolutions up to 16K and offers improved bandwidth compared to HDMI 2.1, set to be available to manufacturers in the first half of 2025.')\n", + "(49, \"CES 2025 day 3: the 11 best gadgets we've seen, from Lenovo's rollable laptop to Panasonic's new flagship OLED TV\", 'https://www.techradar.com/tech-events/ces-2025-day-3-the-11-best-gadgets-weve-seen-from-lenovos-rollable-laptop-to-panasonics-new-flagship-oled-tv', \"A recap of the best gadgets showcased on Day 3 of CES 2025, including Lenovo's innovative rollable laptop and Panasonic's flagship OLED TV.\")\n", + "(50, \"TCL's ultra-affordable 60XE uses NXTpaper to potentially break all kinds of battery life records\", 'https://www.techradar.com/phones/tcls-ultra-affordable-60xe-uses-nxtpaper-to-potentially-break-all-kinds-of-battery-life-records', 'The TCL 60XE smartphone features NXTpaper technology, offering a unique matte-paper look and impressive battery life of up to 7 days. Priced at $199, it runs on Android and will be available later this year.')\n", + "(51, \"Want to boost your iPhone storage by 2TB? SanDisk and ShiftCam's affordable little SSDs could be for you\", 'https://www.techradar.com/phones/want-to-boost-your-iphone-storage-by-2tb-sandisk-and-shiftcams-affordable-little-ssds-could-be-for-you', 'SanDisk and ShiftCam introduced external SSDs for iPhones, available in 1TB and 2TB sizes. These devices are designed for videographers to offload large ProRes files and are compatible with iPhones.')\n", + "(52, \"I tried Panasonic's new Z95B OLED TV, and it takes OLED picture quality to an even higher level\", 'https://www.techradar.com/televisions/i-tried-panasonics-new-z95b-oled-tv-and-it-takes-oled-picture-quality-to-an-even-higher-level', \"Panasonic's flagship Z95B OLED TV is highlighted as a top contender for the best TV of 2025, offering superior picture quality. It will be available in various sizes later this year.\")\n", + "(53, 'Our strangest CES 2025 finds', 'https://www.tiktok.com/@techradar?lang=en', \"A roundup of unusual gadgets from CES 2025, including the Electric Salt Spoon, Bird Buddy's bug-watching camera, and Mixed Reality Makeup, showcasing innovative yet quirky technology.\")\n", + "(54, 'The RGB micro-LED backlight wars begin', 'https://www.techradar.com/televisions/samsung-introduces-2025-mini-led-tv-lineup-with-a-new-era-of-samsung-ai', \"Samsung showcased an 8K RGB micro-LED TV at CES 2025, which is expected to be their flagship model for 2025, competing with Hisense's TriChroma mini-LED TV.\")\n", + "(55, 'Delta Air Lines had the most impressive CES showcase this year', 'https://www.techradar.com/tech-events/delta-air-lines-just-announced-its-vision-for-the-future-of-flying-here-are-my-3-favorite-features-coming-to-its-planes-and-app', 'Delta Air Lines showcased an extravagant presentation at CES 2025, featuring an Airbus A350 on a massive screen, complete with immersive effects. The keynote included appearances from Tom Brady and Lenny Kravitz, along with innovations like 4K HDR QLED displays on seatbacks and a personalized AI travel assistant.')\n", + "(56, 'Good news for some Disney Plus subscribers', 'https://www.techradar.com/streaming/own-a-samsung-tv-good-news-disney-plus-is-set-to-start-streaming-tv-shows-and-movies-in-hdr10', 'Disney Plus will soon be available in HDR10+ format on Samsung TVs, enhancing picture quality for users. This is significant as Samsung TVs previously did not support Dolby Vision HDR, which was the only HDR format available for Disney Plus.')\n", + "(57, 'It’s here - our top 25 gadgets of CES 2025', 'https://www.techradar.com/tech/best-of-ces-2025', 'TechRadar has compiled a list of the top 25 gadgets from CES 2025, showcasing a variety of innovative products from TVs to robot vacuums, highlighting the best new technology that will influence consumer choices in 2025.')\n", + "(58, 'It’s time to meet the CES 2025 robots', 'No content available', 'CES 2025 featured advanced humanoid robots, including Realbotix Aria, which can interact with humans and respond to emotional states, and the Unitree G1, which can be programmed for various tasks. The Digit robot is designed for logistics and manufacturing, with plans to work alongside humans in the future.')\n", + "(59, 'The 11 most exciting tech trends of 2025, according to CES 2025', 'https://www.techradar.com/tech-events/the-11-most-exciting-tech-trends-of-2025-according-to-ces-2025', 'This article discusses the most exciting technology trends that emerged from CES 2025.')\n", + "(60, \"LG's most stunning OLED TV of all time made a surprise secret return at CES, with a wireless twist\", 'https://www.techradar.com/televisions/lgs-most-stunning-oled-tv-of-all-time-made-a-surprise-secret-return-at-ces-with-a-wireless-twist', \"The article covers the unveiling of LG's latest OLED TV at CES 2025, highlighting its innovative wireless features.\")\n" + ] + } + ], + "source": [ + "import mysql.connector\n", + "\n", + "# Connect to the MySQL server and the 'articles_db' database\n", + "conn = mysql.connector.connect(user='root', password='root', host='localhost', database='articles_db')\n", + "cursor = conn.cursor()\n", + "\n", + "# Execute the SELECT query\n", + "cursor.execute(\"SELECT * FROM articles_table\")\n", + "\n", + "# Fetch all the results\n", + "records = cursor.fetchall()\n", + "\n", + "# Print the records\n", + "for record in records:\n", + " print(record)\n", + "\n", + "# Close the cursor and connection\n", + "cursor.close()\n", + "conn.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2as65QLypwdb" + }, + "source": [ + "### 💾 Save the output to a `CSV` file" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "HTLVFgbVLLBR" + }, + "source": [ + "Let's create a pandas dataframe and show the table with the extracted content" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "1lS9O1KOI51y", + "outputId": "550e3c8c-e651-4466-f809-106f7cc139bb" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " title \\\n", + "0 CES 2025 day 3: the 11 best gadgets we've seen... \n", + "1 CES 2025 proves AI is everywhere, unstoppable,... \n", + "2 Forget tri-folding phones - this pocketable fo... \n", + "3 HDMI 2.2 officially revealed at CES 2025: here... \n", + "4 This awesome E Ink poster frame looks like the... \n", + "5 I saw Hisense's RGB mini-LED TV, and this vivi... \n", + "6 I saw Samsung's new The Frame Pro mini-LED TV,... \n", + "7 This robot vacuum can also bring you a sandwic... \n", + "8 Nvidia unveils new GeForce RTX 5090, RTX 5080,... \n", + "9 I heard LG's new speakers made with will.i.am,... \n", + "10 The new Garmin Instinct 3 had me climbing a wa... \n", + "11 CES 2025 day 1: featuring the 11 best gadgets ... \n", + "12 CES 2025 day 1: the 11 best gadgets we’ve seen... \n", + "13 I tried the world's first interactive The Last... \n", + "14 This adorable little robot cat will stop you b... \n", + "15 Forget bird watching, bug watching could be th... \n", + "16 Philips Hue now works with the latest LG TVs, ... \n", + "17 Lenovo's new Legion Go S gaming handheld might... \n", + "18 JBL's new elite headphones include a touchscre... \n", + "19 Technics' intriguing new flagship wireless ear... \n", + "20 Victrola's new turntable with Auracast and apt... \n", + "21 CES 2025 day 2: the 11 coolest gadgets we've s... \n", + "22 Some of CES 2025's weirdest robot pets are abs... \n", + "23 Suunto's new waterproof headphones can store 8... \n", + "24 Lenovo unveils world's first rollable display ... \n", + "25 Samsung's massive 115-inch mini-LED TV is its ... \n", + "26 This smart-home control button might look like... \n", + "27 Hisense reveals a 163-inch micro-LED TV at CES... \n", + "28 I witnessed Hisense's giant 163-inch micro-LED... \n", + "29 Delta Air Lines announces generative AI assist... \n", + "30 These new video doorbell and security camera u... \n", + "31 The best wearable and fitness tech of CES 2025... \n", + "32 This awesome E Ink poster frame looks like the... \n", + "33 Smart-lighting brand Nanoleaf unveils LED Ligh... \n", + "34 The coolest smart home tech of CES 2025 \n", + "35 I've been smart home hunting at CES 2025, and ... \n", + "36 Goodbye, buttons - BMW's new Panoramic iDrive ... \n", + "37 Levoit's new pet-parent air purifier will swit... \n", + "38 Nanoleaf's Ambilight alternative is now even e... \n", + "39 This coffee machine brews espresso using water... \n", + "40 This Batman-style location tracker brings sate... \n", + "41 This might be the coolest iPhone accessory at ... \n", + "42 Eat your heart out Daleks - Dreame's newest ro... \n", + "43 Narwal's new robovac will moonwalk your floors... \n", + "44 Denon's 22-speaker EV audio system promises he... \n", + "45 Koorui unleashes the world's fastest monitor \n", + "46 A 750Hz gaming monitor has come out of nowhere... \n", + "47 HDMI 2.2 officially revealed at CES 2025: here... \n", + "48 CES 2025 day 3: the 11 best gadgets we've seen... \n", + "49 TCL's ultra-affordable 60XE uses NXTpaper to p... \n", + "50 Want to boost your iPhone storage by 2TB? SanD... \n", + "51 I tried Panasonic's new Z95B OLED TV, and it t... \n", + "52 Our strangest CES 2025 finds \n", + "53 The RGB micro-LED backlight wars begin \n", + "54 Delta Air Lines had the most impressive CES sh... \n", + "55 Good news for some Disney Plus subscribers \n", + "56 It’s here - our top 25 gadgets of CES 2025 \n", + "57 It’s time to meet the CES 2025 robots \n", + "58 The 11 most exciting tech trends of 2025, acco... \n", + "59 LG's most stunning OLED TV of all time made a ... \n", + "\n", + " link \\\n", + "0 https://www.techradar.com/tech-events/ces-2025... \n", + "1 https://www.techradar.com/computing/artificial... \n", + "2 https://www.techradar.com/televisions/projecto... \n", + "3 https://www.techradar.com/tech/hdmi-2-2-offici... \n", + "4 https://www.techradar.com/home/smart-home/this... \n", + "5 https://www.techradar.com/televisions/i-saw-hi... \n", + "6 https://www.techradar.com/televisions/i-saw-sa... \n", + "7 https://www.techradar.com/tech-events/this-rob... \n", + "8 https://www.techradar.com/computing/gpu/nvidia... \n", + "9 https://www.techradar.com/audio/wireless-bluet... \n", + "10 https://www.techradar.com/health-fitness/the-n... \n", + "11 https://www.techradar.com/tech-events/the-best... \n", + "12 https://www.techradar.com/tech-events/the-best... \n", + "13 https://www.techradar.com/tech/i-tried-the-wor... \n", + "14 https://www.techradar.com/home/coffee-machines... \n", + "15 https://www.techradar.com/home/smart-home/forg... \n", + "16 https://www.techradar.com/televisions/philips-... \n", + "17 https://www.techradar.com/computing/lenovos-ne... \n", + "18 https://www.techradar.com/audio/wireless-headp... \n", + "19 https://www.techradar.com/audio/earbuds-airpod... \n", + "20 https://www.techradar.com/audio/turntables/vic... \n", + "21 https://www.techradar.com/tech-events/the-best... \n", + "22 https://www.techradar.com/tech/some-of-ces-202... \n", + "23 https://www.techradar.com/health-fitness/suunt... \n", + "24 https://www.techradar.com/computing/lenovo-unv... \n", + "25 https://www.techradar.com/televisions/samsungs... \n", + "26 https://www.techradar.com/home/smart-home/this... \n", + "27 https://www.techradar.com/televisions/hisense-... \n", + "28 https://www.techradar.com/televisions/i-witnes... \n", + "29 No content available \n", + "30 https://www.techradar.com/home/smart-home/thes... \n", + "31 https://www.techradar.com/health-fitness/the-b... \n", + "32 https://www.techradar.com/home/smart-home/this... \n", + "33 https://www.techradar.com/health-fitness/smart... \n", + "34 No content available \n", + "35 https://www.techradar.com/home/smart-home/ive-... \n", + "36 https://www.techradar.com/vehicle-tech/hybrid-... \n", + "37 https://www.techradar.com/home/small-appliance... \n", + "38 https://www.techradar.com/home/smart-lights/na... \n", + "39 https://www.techradar.com/home/coffee-machines... \n", + "40 https://www.techradar.com/phones/phone-accesso... \n", + "41 https://www.techradar.com/phones/phone-accesso... \n", + "42 https://www.techradar.com/home/robot-vacuums/e... \n", + "43 https://www.techradar.com/home/robot-vacuums/n... \n", + "44 https://www.techradar.com/audio/denons-22-spea... \n", + "45 https://www.techradar.com/computing/gpu/how-hi... \n", + "46 https://www.techradar.com/computing/monitors/a... \n", + "47 https://www.techradar.com/tech/hdmi-2-2-offici... \n", + "48 https://www.techradar.com/tech-events/ces-2025... \n", + "49 https://www.techradar.com/phones/tcls-ultra-af... \n", + "50 https://www.techradar.com/phones/want-to-boost... \n", + "51 https://www.techradar.com/televisions/i-tried-... \n", + "52 https://www.tiktok.com/@techradar?lang=en \n", + "53 https://www.techradar.com/televisions/samsung-... \n", + "54 https://www.techradar.com/tech-events/delta-ai... \n", + "55 https://www.techradar.com/streaming/own-a-sams... \n", + "56 https://www.techradar.com/tech/best-of-ces-2025 \n", + "57 No content available \n", + "58 https://www.techradar.com/tech-events/the-11-m... \n", + "59 https://www.techradar.com/televisions/lgs-most... \n", + "\n", + " description \n", + "0 A roundup of the top gadgets showcased on the ... \n", + "1 An exploration of the pervasive presence of AI... \n", + "2 A review of a new portable folding projector t... \n", + "3 Details on the announcement of HDMI 2.2 and it... \n", + "4 A look at a new E Ink poster frame that repres... \n", + "5 An impression of Hisense's new RGB mini-LED TV... \n", + "6 Samsung's The Frame Pro mini-LED TV has been s... \n", + "7 The SwitchBot K20+ Pro is highlighted as a sta... \n", + "8 Nvidia has revealed its latest RTX 5000 series... \n", + "9 LG's new range of Bluetooth speakers, develope... \n", + "10 The Garmin Instinct 3 smartwatch, featuring a ... \n", + "11 A roundup of the best gadgets from the first d... \n", + "12 A roundup of the best gadgets showcased on the... \n", + "13 An immersive experience based on the popular g... \n", + "14 A cute gadget from Yukai Engineering that cool... \n", + "15 New tech from Wonder that allows users to obse... \n", + "16 Exciting news about the Philips Hue Sync TV ap... \n", + "17 Lenovo introduces a gaming handheld that runs ... \n", + "18 JBL has unveiled its flagship Tour One M3 head... \n", + "19 Technics has launched the EAH-AZ100 earbuds at... \n", + "20 Victrola has introduced the Wave turntable at ... \n", + "21 A roundup of standout gadgets from the second ... \n", + "22 TechRadar highlights a significant increase in... \n", + "23 Suunto introduces waterproof headphones that u... \n", + "24 Lenovo confirms the launch of the ThinkBook Pl... \n", + "25 Samsung showcases its 115-inch QN90F TV, which... \n", + "26 The Flic Duo is a versatile smart button that ... \n", + "27 Hisense introduces a 163-inch version of its T... \n", + "28 A firsthand account of Hisense's impressive 16... \n", + "29 Delta Air Lines revealed a generative AI assis... \n", + "30 The Swann Xtreem4K security camera utilizes AI... \n", + "31 A roundup of the top wearable and health tech ... \n", + "32 PocketBook's new E Ink digital art frames offe... \n", + "33 Nanoleaf introduced an FDA-certified LED light... \n", + "34 A guide to the most innovative smart home gadg... \n", + "35 This article highlights the latest multi-taski... \n", + "36 BMW unveiled its new iDrive system at CES 2025... \n", + "37 The Levoit Pet Odor & Hair Air Purifier is des... \n", + "38 Nanoleaf has released an updated version of it... \n", + "39 The KaraPod espresso machine uses water conden... \n", + "40 HMD's OffGrid device provides off-grid connect... \n", + "41 Belkin's new Stage PowerGrip is a magnetic pow... \n", + "42 The Dreame X50 Ultra Complete can climb over o... \n", + "43 The Narwal Flow features a unique cleaning met... \n", + "44 Denon's new audio system for electric vehicles... \n", + "45 The Koorui G7 monitor features a 750Hz refresh... \n", + "46 Discussion on the emergence of a 750Hz gaming ... \n", + "47 Announcement of HDMI 2.2, which supports resol... \n", + "48 A recap of the best gadgets showcased on Day 3... \n", + "49 The TCL 60XE smartphone features NXTpaper tech... \n", + "50 SanDisk and ShiftCam introduced external SSDs ... \n", + "51 Panasonic's flagship Z95B OLED TV is highlight... \n", + "52 A roundup of unusual gadgets from CES 2025, in... \n", + "53 Samsung showcased an 8K RGB micro-LED TV at CE... \n", + "54 Delta Air Lines showcased an extravagant prese... \n", + "55 Disney Plus will soon be available in HDR10+ f... \n", + "56 TechRadar has compiled a list of the top 25 ga... \n", + "57 CES 2025 featured advanced humanoid robots, in... \n", + "58 This article discusses the most exciting techn... \n", + "59 The article covers the unveiling of LG's lates... " + ], + "text/html": [ + "\n", + "
\n", + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
titlelinkdescription
0CES 2025 day 3: the 11 best gadgets we've seen...https://www.techradar.com/tech-events/ces-2025...A roundup of the top gadgets showcased on the ...
1CES 2025 proves AI is everywhere, unstoppable,...https://www.techradar.com/computing/artificial...An exploration of the pervasive presence of AI...
2Forget tri-folding phones - this pocketable fo...https://www.techradar.com/televisions/projecto...A review of a new portable folding projector t...
3HDMI 2.2 officially revealed at CES 2025: here...https://www.techradar.com/tech/hdmi-2-2-offici...Details on the announcement of HDMI 2.2 and it...
4This awesome E Ink poster frame looks like the...https://www.techradar.com/home/smart-home/this...A look at a new E Ink poster frame that repres...
5I saw Hisense's RGB mini-LED TV, and this vivi...https://www.techradar.com/televisions/i-saw-hi...An impression of Hisense's new RGB mini-LED TV...
6I saw Samsung's new The Frame Pro mini-LED TV,...https://www.techradar.com/televisions/i-saw-sa...Samsung's The Frame Pro mini-LED TV has been s...
7This robot vacuum can also bring you a sandwic...https://www.techradar.com/tech-events/this-rob...The SwitchBot K20+ Pro is highlighted as a sta...
8Nvidia unveils new GeForce RTX 5090, RTX 5080,...https://www.techradar.com/computing/gpu/nvidia...Nvidia has revealed its latest RTX 5000 series...
9I heard LG's new speakers made with will.i.am,...https://www.techradar.com/audio/wireless-bluet...LG's new range of Bluetooth speakers, develope...
10The new Garmin Instinct 3 had me climbing a wa...https://www.techradar.com/health-fitness/the-n...The Garmin Instinct 3 smartwatch, featuring a ...
11CES 2025 day 1: featuring the 11 best gadgets ...https://www.techradar.com/tech-events/the-best...A roundup of the best gadgets from the first d...
12CES 2025 day 1: the 11 best gadgets we’ve seen...https://www.techradar.com/tech-events/the-best...A roundup of the best gadgets showcased on the...
13I tried the world's first interactive The Last...https://www.techradar.com/tech/i-tried-the-wor...An immersive experience based on the popular g...
14This adorable little robot cat will stop you b...https://www.techradar.com/home/coffee-machines...A cute gadget from Yukai Engineering that cool...
15Forget bird watching, bug watching could be th...https://www.techradar.com/home/smart-home/forg...New tech from Wonder that allows users to obse...
16Philips Hue now works with the latest LG TVs, ...https://www.techradar.com/televisions/philips-...Exciting news about the Philips Hue Sync TV ap...
17Lenovo's new Legion Go S gaming handheld might...https://www.techradar.com/computing/lenovos-ne...Lenovo introduces a gaming handheld that runs ...
18JBL's new elite headphones include a touchscre...https://www.techradar.com/audio/wireless-headp...JBL has unveiled its flagship Tour One M3 head...
19Technics' intriguing new flagship wireless ear...https://www.techradar.com/audio/earbuds-airpod...Technics has launched the EAH-AZ100 earbuds at...
20Victrola's new turntable with Auracast and apt...https://www.techradar.com/audio/turntables/vic...Victrola has introduced the Wave turntable at ...
21CES 2025 day 2: the 11 coolest gadgets we've s...https://www.techradar.com/tech-events/the-best...A roundup of standout gadgets from the second ...
22Some of CES 2025's weirdest robot pets are abs...https://www.techradar.com/tech/some-of-ces-202...TechRadar highlights a significant increase in...
23Suunto's new waterproof headphones can store 8...https://www.techradar.com/health-fitness/suunt...Suunto introduces waterproof headphones that u...
24Lenovo unveils world's first rollable display ...https://www.techradar.com/computing/lenovo-unv...Lenovo confirms the launch of the ThinkBook Pl...
25Samsung's massive 115-inch mini-LED TV is its ...https://www.techradar.com/televisions/samsungs...Samsung showcases its 115-inch QN90F TV, which...
26This smart-home control button might look like...https://www.techradar.com/home/smart-home/this...The Flic Duo is a versatile smart button that ...
27Hisense reveals a 163-inch micro-LED TV at CES...https://www.techradar.com/televisions/hisense-...Hisense introduces a 163-inch version of its T...
28I witnessed Hisense's giant 163-inch micro-LED...https://www.techradar.com/televisions/i-witnes...A firsthand account of Hisense's impressive 16...
29Delta Air Lines announces generative AI assist...No content availableDelta Air Lines revealed a generative AI assis...
30These new video doorbell and security camera u...https://www.techradar.com/home/smart-home/thes...The Swann Xtreem4K security camera utilizes AI...
31The best wearable and fitness tech of CES 2025...https://www.techradar.com/health-fitness/the-b...A roundup of the top wearable and health tech ...
32This awesome E Ink poster frame looks like the...https://www.techradar.com/home/smart-home/this...PocketBook's new E Ink digital art frames offe...
33Smart-lighting brand Nanoleaf unveils LED Ligh...https://www.techradar.com/health-fitness/smart...Nanoleaf introduced an FDA-certified LED light...
34The coolest smart home tech of CES 2025No content availableA guide to the most innovative smart home gadg...
35I've been smart home hunting at CES 2025, and ...https://www.techradar.com/home/smart-home/ive-...This article highlights the latest multi-taski...
36Goodbye, buttons - BMW's new Panoramic iDrive ...https://www.techradar.com/vehicle-tech/hybrid-...BMW unveiled its new iDrive system at CES 2025...
37Levoit's new pet-parent air purifier will swit...https://www.techradar.com/home/small-appliance...The Levoit Pet Odor & Hair Air Purifier is des...
38Nanoleaf's Ambilight alternative is now even e...https://www.techradar.com/home/smart-lights/na...Nanoleaf has released an updated version of it...
39This coffee machine brews espresso using water...https://www.techradar.com/home/coffee-machines...The KaraPod espresso machine uses water conden...
40This Batman-style location tracker brings sate...https://www.techradar.com/phones/phone-accesso...HMD's OffGrid device provides off-grid connect...
41This might be the coolest iPhone accessory at ...https://www.techradar.com/phones/phone-accesso...Belkin's new Stage PowerGrip is a magnetic pow...
42Eat your heart out Daleks - Dreame's newest ro...https://www.techradar.com/home/robot-vacuums/e...The Dreame X50 Ultra Complete can climb over o...
43Narwal's new robovac will moonwalk your floors...https://www.techradar.com/home/robot-vacuums/n...The Narwal Flow features a unique cleaning met...
44Denon's 22-speaker EV audio system promises he...https://www.techradar.com/audio/denons-22-spea...Denon's new audio system for electric vehicles...
45Koorui unleashes the world's fastest monitorhttps://www.techradar.com/computing/gpu/how-hi...The Koorui G7 monitor features a 750Hz refresh...
46A 750Hz gaming monitor has come out of nowhere...https://www.techradar.com/computing/monitors/a...Discussion on the emergence of a 750Hz gaming ...
47HDMI 2.2 officially revealed at CES 2025: here...https://www.techradar.com/tech/hdmi-2-2-offici...Announcement of HDMI 2.2, which supports resol...
48CES 2025 day 3: the 11 best gadgets we've seen...https://www.techradar.com/tech-events/ces-2025...A recap of the best gadgets showcased on Day 3...
49TCL's ultra-affordable 60XE uses NXTpaper to p...https://www.techradar.com/phones/tcls-ultra-af...The TCL 60XE smartphone features NXTpaper tech...
50Want to boost your iPhone storage by 2TB? SanD...https://www.techradar.com/phones/want-to-boost...SanDisk and ShiftCam introduced external SSDs ...
51I tried Panasonic's new Z95B OLED TV, and it t...https://www.techradar.com/televisions/i-tried-...Panasonic's flagship Z95B OLED TV is highlight...
52Our strangest CES 2025 findshttps://www.tiktok.com/@techradar?lang=enA roundup of unusual gadgets from CES 2025, in...
53The RGB micro-LED backlight wars beginhttps://www.techradar.com/televisions/samsung-...Samsung showcased an 8K RGB micro-LED TV at CE...
54Delta Air Lines had the most impressive CES sh...https://www.techradar.com/tech-events/delta-ai...Delta Air Lines showcased an extravagant prese...
55Good news for some Disney Plus subscribershttps://www.techradar.com/streaming/own-a-sams...Disney Plus will soon be available in HDR10+ f...
56It’s here - our top 25 gadgets of CES 2025https://www.techradar.com/tech/best-of-ces-2025TechRadar has compiled a list of the top 25 ga...
57It’s time to meet the CES 2025 robotsNo content availableCES 2025 featured advanced humanoid robots, in...
58The 11 most exciting tech trends of 2025, acco...https://www.techradar.com/tech-events/the-11-m...This article discusses the most exciting techn...
59LG's most stunning OLED TV of all time made a ...https://www.techradar.com/televisions/lgs-most...The article covers the unveiling of LG's lates...
\n", + "
\n", + "
\n", + "\n", + "
\n", + " \n", + "\n", + " \n", + "\n", + " \n", + "
\n", + "\n", + "\n", + "
\n", + " \n", + "\n", + "\n", + "\n", + " \n", + "
\n", + "\n", + "
\n", + " \n", + " \n", + " \n", + "
\n", + "\n", + "
\n", + "
\n" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "dataframe", + "variable_name": "df", + "summary": "{\n \"name\": \"df\",\n \"rows\": 60,\n \"fields\": [\n {\n \"column\": \"title\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 57,\n \"samples\": [\n \"CES 2025 day 3: the 11 best gadgets we've seen, from Lenovo's rollable laptop to Panasonic's new flagship OLED TV\",\n \"I saw Hisense's RGB mini-LED TV, and this vividly colorful set is the future of TV\",\n \"These new video doorbell and security camera use AI to welcome visitors and deter intruders\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"link\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 54,\n \"samples\": [\n \"https://www.techradar.com/audio/turntables/victrolas-new-turntable-with-auracast-and-aptx-might-be-the-most-future-proof-on-the-planet\",\n \"https://www.techradar.com/tech-events/delta-air-lines-just-announced-its-vision-for-the-future-of-flying-here-are-my-3-favorite-features-coming-to-its-planes-and-app\",\n \"https://www.techradar.com/televisions/samsung-introduces-2025-mini-led-tv-lineup-with-a-new-era-of-samsung-ai\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"description\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 60,\n \"samples\": [\n \"A roundup of the top gadgets showcased on the third day of CES 2025, highlighting innovative products from various brands.\",\n \"An impression of Hisense's new RGB mini-LED TV, noted for its vibrant colors and advanced technology.\",\n \"BMW unveiled its new iDrive system at CES 2025, featuring a customizable head-up display powered by AI that spans the width of the windshield.\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" + } + }, + "metadata": {}, + "execution_count": 39 + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "# Convert dictionary to DataFrame\n", + "df = pd.DataFrame(result[\"news\"])\n", + "df" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "v0CBYVk7qA5Z" + }, + "source": [ + "Save it to CSV" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "BtEbB9pmQGhO", + "outputId": "f7f586d5-bca7-4554-e31d-0d701b0ab8e2" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Data saved to news.csv\n" + ] + } + ], + "source": [ + "# Save the DataFrame to a CSV file\n", + "csv_file = \"news.csv\"\n", + "df.to_csv(csv_file, index=False)\n", + "print(f\"Data saved to {csv_file}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-1SZT8VzTZNd" + }, + "source": [ + "## 🔗 Resources" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "dUi2LtMLRDDR" + }, + "source": [ + "\n", + "

\n", + " \"ScrapeGraph\n", + "

\n", + "\n", + "\n", + "- 🚀 **Get your API Key:** [ScrapeGraphAI Dashboard](https://dashboard.scrapegraphai.com) \n", + "- 🐙 **GitHub:** [ScrapeGraphAI GitHub](https://github.com/scrapegraphai) \n", + "- 💼 **LinkedIn:** [ScrapeGraphAI LinkedIn](https://www.linkedin.com/company/scrapegraphai/) \n", + "- 🐦 **Twitter:** [ScrapeGraphAI Twitter](https://twitter.com/scrapegraphai) \n", + "- 💬 **Discord:** [Join our Discord Community](https://discord.gg/uJN7TYcpNa) \n", + "- 🦜 **Langchain:** [ScrapeGraph docs](https://python.langchain.com/docs/integrations/tools/scrapegraph/)\n", + "\n", + "Made with ❤️ by the [ScrapeGraphAI](https://scrapegraphai.com) Team \n" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "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.1" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file