diff --git a/docs/docs/integrations/tools/google_finance.ipynb b/docs/docs/integrations/tools/google_finance.ipynb new file mode 100644 index 00000000000..1f7be2cda86 --- /dev/null +++ b/docs/docs/integrations/tools/google_finance.ipynb @@ -0,0 +1,112 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Google Finance\n", + "\n", + "This notebook goes over how to use the Google Finance Tool to get information from the Google Finance page\n", + "\n", + "To get an SerpApi key key, sign up at: https://serpapi.com/users/sign_up.\n", + "\n", + "Then install google-search-results with the command: \n", + "\n", + "pip install google-search-results\n", + "\n", + "Then set the environment variable SERPAPI_API_KEY to your SerpApi key\n", + "\n", + "Or pass the key in as a argument to the wrapper serp_api_key=\"your secret key\"" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Use the Tool" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!pip install google-search-results" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "from langchain.tools.google_finance import GoogleFinanceQueryRun\n", + "from langchain.utilities.google_finance import GoogleFinanceAPIWrapper\n", + "\n", + "os.environ[\"SERPAPI_API_KEY\"] = \"\"\n", + "tool = GoogleFinanceQueryRun(api_wrapper=GoogleFinanceAPIWrapper())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "tool.run(\"Google\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using it with Langchain" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "from langchain.agents import AgentType, initialize_agent, load_tools\n", + "from langchain.llms import OpenAI\n", + "\n", + "os.environ[\"OPENAI_API_KEY\"] = \"\"\n", + "os.environ[\"SERP_API_KEY\"] = \"\"\n", + "llm = OpenAI()\n", + "tools = load_tools([\"google-scholar\", \"google-finance\"], llm=llm)\n", + "agent = initialize_agent(\n", + " tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True\n", + ")\n", + "agent.run(\"what is google's stock\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/docs/docs/integrations/tools/google_jobs.ipynb b/docs/docs/integrations/tools/google_jobs.ipynb new file mode 100644 index 00000000000..2ae9a77944e --- /dev/null +++ b/docs/docs/integrations/tools/google_jobs.ipynb @@ -0,0 +1,237 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Google Jobs\n", + "\n", + "This notebook goes over how to use the Google Jobs Tool to fetch current Job postings.\n", + "\n", + "First, you need to sign up for an `SerpApi key` key at: https://serpapi.com/users/sign_up.\n", + "\n", + "Then you must install `google-search-results` with the command:\n", + " `pip install google-search-results`\n", + "\n", + "Then you will need to set the environment variable `SERPAPI_API_KEY` to your `SerpApi key`\n", + "\n", + "If you don't have one you can register a free account on https://serpapi.com/users/sign_up and get your api key here: https://serpapi.com/manage-api-key\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you are using conda environment, you can set up using the following commands in kernal:" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "conda activate [your env name]\n", + "conda env confiv vars SERPAPI_API_KEY='[your serp api key]'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Use the Tool" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: google-search-results in /opt/anaconda3/envs/langchain/lib/python3.10/site-packages (2.4.2)\n", + "Requirement already satisfied: requests in /opt/anaconda3/envs/langchain/lib/python3.10/site-packages (from google-search-results) (2.31.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /opt/anaconda3/envs/langchain/lib/python3.10/site-packages (from requests->google-search-results) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /opt/anaconda3/envs/langchain/lib/python3.10/site-packages (from requests->google-search-results) (3.4)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/anaconda3/envs/langchain/lib/python3.10/site-packages (from requests->google-search-results) (2.1.0)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /opt/anaconda3/envs/langchain/lib/python3.10/site-packages (from requests->google-search-results) (2023.11.17)\n" + ] + } + ], + "source": [ + "!pip install google-search-results" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "from langchain.tools.google_jobs import GoogleJobsQueryRun\n", + "from langchain.utilities.google_jobs import GoogleJobsAPIWrapper\n", + "\n", + "os.environ[\"SERPAPI_API_KEY\"] = \"[your serpapi key]\"\n", + "tool = GoogleJobsQueryRun(api_wrapper=GoogleJobsAPIWrapper())" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\"\\n_______________________________________________\\nJob Title: Applied Physicist (Experienced or Senior)\\nCompany Name: Boeing\\nLocation: Huntington Beach, CA \\nDescription: Job Description\\n\\nAt Boeing, we innovate and collaborate to make the world a better place. From the seabed to outer space, you can contribute to work that matters with a company where diversity, equity and inclusion are shared values. We’re committed to fostering an environment for every teammate that’s welcoming, respectful and inclusive, with great opportunity for professional growth. Find your... future with us.\\n\\nWe are Boeing Research & Technology (BR&T): Boeing's global research and development team creating and implementing innovative technologies that make the impossible possible and enabling the future of aerospace. We are engineers and technicians, skilled scientists and bold innovators; Join us and put your passion, determination, and skill to work building the future!\\n\\nCome join a growing team harnessing emerging technology into innovative products and services. Boeing is at the forefront of re-imagining the future of the design, manufacture, and operation of aerospace platforms for commercial and government markets.\\n\\nThis position will sit in Huntington Beach, CA.\\n\\nPosition Responsibilities:\\n• Develop and validate requirements for various complex communication, sensor, electronic warfare and other electromagnetic systems and components.\\n• Develop and validate electromagnetic requirements for electrical\\\\electronic systems, mechanical systems, interconnects and structures.\\n• Develop architectures to integrate complex systems and components into higher level systems and platforms.\\n• Perform complicated trade studies, modeling, simulation and other forms of analysis to predict component, interconnects and system performance and to optimize design around established requirements.\\n• Define and conducts critical tests of various kinds to validate performance of designs to requirements. Manage appropriate aspects of critical supplier and partner performance to ensure compliance to requirements.\\n• Provide support to products throughout their lifecycle from manufacturing to customer use by providing guidance and support to resolve complex issues.\\n• Support project management by providing coordinating development of work statement, budget, schedule and other required inputs and conducting appropriate reviews.\\n• Generates major sections of proposals to support development of new business.\\n• Works under minimal direction.\\n\\nApplied Physicist (Experienced or Senior), BR&T/Advanced Computing Technology – Candidates will apply their knowledge of quantum physics to build a comprehensive suite of capabilities in experimental quantum sensing or quantum networking. Successful candidates will have a deep understanding of both theory and laboratory practices in at least one of the following areas:\\n• optical clocks\\n• optical time transfer\\n• optical frequency comb-based metrology\\n• quantum network-based entanglement of quantum systems (e.g., atomic, ionic, or quantum dot systems)\\n\\nSuccessful candidates shall develop\\n• A vibrant research and development program supported by both intramural and extramural funding\\n• Write project proposals\\n• Develop future product concepts\\n• Assist with the integration of quantum technologies into future products and services for Boeing’s commercial and defense businesses\\n\\nThis position allows telecommuting. The selected candidate will be required to perform some work onsite at one of the listed location options.\\n\\nThis position requires the ability to obtain a U.S. Security Clearance for which the U.S. Government requires U.S. Citizenship. An interim and/or final U.S. Secret Clearance Post-Start is required.\\n\\nBasic Qualifications (Required Skills/Experience)\\n• PhD in physics, chemistry, electrical engineering, or other field related to quantum sensing and/or quantum information science\\n• Authored and published Research papers and projects (Academia or Professional)\\n• University Studies and laboratory practice in one of the following areas: optical clocks, optical time transfer, atom interferometry, or quantum network-based entanglement of quantum systems (e.g., atomic, ionic, or quantum dot systems)\\n\\nPreferred Qualifications (Desired Skills/Experience)\\n• 9+ years' related work experience or an equivalent combination of education and experience\\n• Active U.S. security clearance\\n\\nTypical Education/Experience:\\n\\nExperienced: Education/experience typically acquired through advanced technical education from an accredited course of study in engineering, computer science, mathematics, physics or chemistry (e.g. Bachelor) and typically 9 or more years' related work experience or an equivalent combination of technical education and experience (e.g. PhD+4 years' related work experience, Master+7 years' related work experience). In the USA, ABET accreditation is the preferred, although not required, accreditation standard\\n\\nSenior: Education/experience typically acquired through advanced technical education from an accredited course of study in engineering, computer science, mathematics, physics or chemistry (e.g. Bachelor) and typically 14 or more years' related work experience or an equivalent combination of technical education and experience (e.g. PhD+9 years' related work experience, Master+12 years' related work experience). In the USA, ABET accreditation is the preferred, although not required, accreditation standard.\\n\\nRelocation: This position offers relocation based on candidate eligibility\\n\\nBoeing is a Drug Free Workplace where post offer applicants and employees are subject to testing for marijuana, cocaine, opioids, amphetamines, PCP, and alcohol when criteria is met as outlined in our policies.\\n\\nShift: This position is for first shift.\\n\\nAt Boeing, we strive to deliver a Total Rewards package that will attract, engage and retain the top talent. Elements of the Total Rewards package include competitive base pay and variable compensation opportunities.\\n\\nThe Boeing Company also provides eligible employees with an opportunity to enroll in a variety of benefit programs, generally including health insurance, flexible spending accounts, health savings accounts, retirement savings plans, life and disability insurance programs, and a number of programs that provide for both paid and unpaid time away from work.\\n\\nThe specific programs and options available to any given employee may vary depending on eligibility factors such as geographic location, date of hire, and the applicability of collective bargaining agreements.\\n\\nPlease note that the salary information shown below is a general guideline only. Salaries are based upon candidate experience and qualifications, as well as market and business considerations.\\n\\nSummary pay range Experienced: $126,000 – $171,000\\n\\nSummary pay range Senior: $155,000 - $210,00\\n\\nExport Control Requirements: U.S. Government Export Control Status: This position must meet export control compliance requirements. To meet export control compliance requirements, a “U.S. Person” as defined by 22 C.F.R. §120.15 is required. “U.S. Person” includes U.S. Citizen, lawful permanent resident, refugee, or asylee.\\n\\nExport Control Details: US based job, US Person required\\n\\nEqual Opportunity Employer:\\n\\nBoeing is an Equal Opportunity Employer. Employment decisions are made without regard to race, color, religion, national origin, gender, sexual orientation, gender identity, age, physical or mental disability, genetic factors, military/veteran status or other characteristics protected by law\\n_______________________________________________\\n\\n\"" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tool.run(\"Can I get an entry level job posting related to physics\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# use it with langchain" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", + "\u001b[32;1m\u001b[1;3m I should use a tool to search for job postings related to physics\n", + "Action: google_jobs\n", + "Action Input: entry level physics\u001b[0m\n", + "Observation: \u001b[36;1m\u001b[1;3m\n", + "_______________________________________________\n", + "Job Title: Entry-level Calibration Technician (great for new Physics or EE grads)\n", + "Company Name: Modis Engineering\n", + "Location: Everett, WA \n", + "Description: An Electronics Calibration Technician Contract-to-Hire position is available in Everett, WA courtesy of Akkodis.\n", + "\n", + "This is a great opportunity for Entry-level Physics, BSEET, BSEE, Mechatronics or other grads who like hands-on work. Or for a technician with 1-5 years of experience...\n", + "\n", + "Shift : Evening Shift or Night Shift\n", + "\n", + "Rate: $28 - $32/hour, D.O.E.\n", + "\n", + "It is possible, with strong performance, of increasing your rate by $2/hour once position converts to Full Time/Salaried/Direct Hire position.\n", + "• **FULL TRAINING WILL BE PROVIDED***\n", + "\n", + "Job Responsibilities include:\n", + "\n", + "- Calibration and testing of fiber optic test equipment.\n", + "\n", + "- Record data gathered during calibration.\n", + "\n", + "- Identify out of tolerance conditions.\n", + "\n", + "- Interact with other technicians, customer service reps and customers.\n", + "\n", + "Qualifications:\n", + "\n", + "- BS in Physics or Electrical Engineering -- OR -- - A.S. degree in electronics (or similar discipline) -- OR -- Electronics experience.\n", + "\n", + "- Must possess good written and oral, communications skills.\n", + "\n", + "- Basic circuit testing/troubleshooting experience from school lab work or elsewhere.\n", + "\n", + "- Must have basic computer skills.\n", + "\n", + "- Prior experience in calibration is a plus.\n", + "\n", + "- Experience with fiber optics and metrology equipment a plus.\n", + "\n", + "- This position does not involve troubleshooting as a repair tech though experience in this area is acceptable and helpful.\n", + "\n", + "- This position does require a good work ethic and willingness to learn and succeed.\n", + "\n", + "Equal Opportunity Employer/Veterans/Disabled\n", + "\n", + "Benefit offerings include medical, dental, vision, FSA, HSA, and short-term and long term disability insurance, and 401K plan. It also includes a comprehensive paid time off program.\n", + "\n", + "Disclaimer: These benefit offerings do not apply to client-recruited jobs and jobs which are direct hire to a client.\n", + "\n", + "To read our Candidate Privacy Information Statement, which explains how we will use your information, please visit https://www.modis.com/en-us/candidate-privacy\n", + "_______________________________________________\n", + "\n", + "\u001b[0m\n", + "Thought:\u001b[32;1m\u001b[1;3m I now know the final answer\n", + "Final Answer: The entry-level job posting related to physics is for a Calibration Technician at Modis Engineering in Everett, WA. This job offers a competitive rate of $28 - $32/hour, and full training will be provided. Qualifications include a BS in Physics or Electrical Engineering, or A.S. degree in Electronics or similar discipline, and benefits include medical, dental, vision, and more.\u001b[0m\n", + "\n", + "\u001b[1m> Finished chain.\u001b[0m\n" + ] + }, + { + "data": { + "text/plain": [ + "'The entry-level job posting related to physics is for a Calibration Technician at Modis Engineering in Everett, WA. This job offers a competitive rate of $28 - $32/hour, and full training will be provided. Qualifications include a BS in Physics or Electrical Engineering, or A.S. degree in Electronics or similar discipline, and benefits include medical, dental, vision, and more.'" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import os\n", + "\n", + "from langchain.agents import AgentType, initialize_agent, load_tools\n", + "from langchain.llms import OpenAI\n", + "\n", + "OpenAI.api_key = os.environ[\"OPENAI_API_KEY\"]\n", + "llm = OpenAI()\n", + "tools = load_tools([\"google-jobs\"], llm=llm)\n", + "agent = initialize_agent(\n", + " tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True\n", + ")\n", + "agent.run(\"give me an entry level job posting related to physics\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/docs/integrations/tools/google_lens.ipynb b/docs/docs/integrations/tools/google_lens.ipynb new file mode 100644 index 00000000000..637bd9bad4a --- /dev/null +++ b/docs/docs/integrations/tools/google_lens.ipynb @@ -0,0 +1,615 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Google Lens\n", + "\n", + "This notebook goes over how to use the Google Lens Tool to fetch information on an image.\n", + "\n", + "First, you need to sign up for an `SerpApi key` key at: https://serpapi.com/users/sign_up.\n", + "\n", + "Then you must install `requests` with the command:\n", + "\n", + "`pip install requests`\n", + "\n", + "Then you will need to set the environment variable `SERPAPI_API_KEY` to your `SerpApi key`\n", + "\n", + "[Alternatively you can pass the key in as a argument to the wrapper `serp_api_key=\"your secret key\"`]\n", + "\n", + "## Use the Tool" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: requests in /opt/anaconda3/envs/langchain/lib/python3.10/site-packages (2.31.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /opt/anaconda3/envs/langchain/lib/python3.10/site-packages (from requests) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /opt/anaconda3/envs/langchain/lib/python3.10/site-packages (from requests) (3.4)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/anaconda3/envs/langchain/lib/python3.10/site-packages (from requests) (2.1.0)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /opt/anaconda3/envs/langchain/lib/python3.10/site-packages (from requests) (2023.11.17)\n" + ] + } + ], + "source": [ + "!pip install requests" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "from langchain.tools.google_lens import GoogleLensQueryRun\n", + "from langchain.utilities.google_lens import GoogleLensAPIWrapper\n", + "\n", + "os.environ[\"SERPAPI_API_KEY\"] = \"\"\n", + "tool = GoogleLensQueryRun(api_wrapper=GoogleLensAPIWrapper())" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Subject:Danny DeVito(American actor and comedian)\n", + "Link to subject:https://www.google.com/search?q=Danny+DeVito&kgmid=/m/0q9kd&hl=en-US&gl=US\n", + "\n", + "Related Images:\n", + "\n", + "Title: Danny DeVito - Simple English Wikipedia, the free encyclopedia\n", + "Source(Wikipedia): https://simple.wikipedia.org/wiki/Danny_DeVito\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSm5zQhimRYYgKPVf16viNFoDSsZmGrH09dthR6cpL1DXEdzmQu\n", + "\n", + "Title: File:Danny DeVito by Gage Skidmore.jpg - Wikipedia\n", + "Source(Wikipedia): https://en.m.wikipedia.org/wiki/File:Danny_DeVito_by_Gage_Skidmore.jpg\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTRFc3mD4mzd3VHQFwNRK2WfFOQ38_GkzJTNbDxd1cYcN8JAc_D\n", + "\n", + "Title: Danny DeVito — Wikipèdia\n", + "Source(Wikipedia): https://oc.wikipedia.org/wiki/Danny_DeVito\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQNl_2mCz1tAHs_w-zkIm40bhHiuGFMOqJv9uZcxTQm9qCqC4F_\n", + "\n", + "Title: US Rep. says adult animated sitcom with Danny DeVito as voice of Satan is ‘evil’\n", + "Source(wbay.com): https://www.wbay.com/2022/09/08/us-rep-adult-animated-sitcom-with-danny-devito-voice-satan-is-evil/\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcRgymQFiSXGHKtHMx6m7I1bMfOoJiihKGAtFENZyPvgw-nE3Lfo\n", + "\n", + "Title: Danny DeVito gets his own day in his native New Jersey\n", + "Source(WOWT): https://www.wowt.com/content/news/Danny-DeVito-gets-his-own-day-in-his-native-New-Jersey-481195051.html\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQzIs4DyN1N8osg_qzlN9Jx7yqJj29Gu38PeCvE5yJ_I1w18r0O\n", + "\n", + "Title: Danny DaVito Keeps it Real When Asked about the Oscar's Diversity \"We Are a Bunch of Racist\" - Z 107.9\n", + "Source(Z 107.9): https://zhiphopcleveland.com/4536378/danny-davito-keeps-it-real-when-asked-about-the-oscars-diversity-we-are-a-bunch-of-racist/\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTfx196gqV2xENDnNttzSCI9r7S-XO3ML8cs_TVd5HdGhv_GgAO\n", + "\n", + "Title: Danny DeVito | Smash Bros Lawl Stadium Wiki | Fandom\n", + "Source(Fandom): https://lawl-stadium.fandom.com/wiki/Danny_DeVito\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcRQOGbzgLP-49b9c1SSEo2ObAvRoCM0WtgOR8-E2FHDry_d-S03\n", + "\n", + "Title: Mad ☆ on X: \"Gavin told me I look like Danny DeVito and I can’t unsee it https://t.co/UZuUbr0QBq\" / X\n", + "Source(Twitter): https://twitter.com/mfrench98/status/1062726668337496065\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTMNYrgw_ish0CEuimZ3SxU2ReJrMcEb1NVGsHNfUFy2_0v0FRM\n", + "\n", + "Title: Steam Community :: Guide :: danny devito\n", + "Source(Steam Community): https://steamcommunity.com/sharedfiles/filedetails/?id=923751585\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS-vOaIRRxi1xC7CgFUymyLzhwhnvB5evGgCNo5LlUJDiWeTlN9\n", + "\n", + "Title: Danny DeVito gets his own day in his native New Jersey | News | khq.com\n", + "Source(KHQ.com): https://www.khq.com/news/danny-devito-gets-his-own-day-in-his-native-new-jersey/article_514fbbf4-7f6f-5051-b06b-0f127c82439c.html\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSYN29NVlBV6L-hFKA7E2Zi32hqkItUyDUA-BtTt2fmJjwGK_Bg\n", + "\n", + "Title: Danny De Vito Meme Funny Pewdiepie Sticker | Redbubble\n", + "Source(Redbubble): https://www.redbubble.com/i/sticker/Danny-de-Vito-Meme-Funny-by-nattdrws/96554839.EJUG5\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTrIbb_rf6dK7ChbDyk5xCGTMPkNtis76m_vUYvvB_Uc3GMWqxm\n", + "\n", + "Title: here me out…danny devito as william afton : r/fivenightsatfreddys\n", + "Source(Reddit): https://www.reddit.com/r/fivenightsatfreddys/comments/11eslz7/here_me_outdanny_devito_as_william_afton/\n", + "Image: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcQGIpa0_hmKbYzIfdI9xZoft0UhXv2MxRKSIj00dfipVQTunSyA\n", + "\n", + "Title: Sammy DeVito (@TheDailySammy) / X\n", + "Source(X): https://twitter.com/thedailysammy\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcR9QqGf3cANXHgRGB11HZduZpQXqeWxOHQkxfJVoWeQcfPBoyxf\n", + "\n", + "Title: Danny Devito Fan Club | Facebook\n", + "Source(Facebook): https://www.facebook.com/groups/685975094811949/\n", + "Image: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTOnDji-j-hq0K5a3K1NpXmVcBGH7N5-IYeECi77WwfipechO3p\n", + "\n", + "Title: Danny DeVito - Wikiwand\n", + "Source(Wikiwand): https://www.wikiwand.com/simple/Danny_DeVito\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcS4xQ_wZhK6OMttSuxsv2fjscM6la3DPNQcJt5dnWWbvQLP3CuZ\n", + "\n", + "Title: These fancasts are horrible, we all know who’d be the perfect Doomguy. : r/Doom\n", + "Source(Reddit): https://www.reddit.com/r/Doom/comments/tal459/these_fancasts_are_horrible_we_all_know_whod_be/\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTZGcTAtkMxowoR4RjkPVFHQE4iyOkgj6DtUdWBSnG_eT4s3rNY\n", + "\n", + "Title: File:Danny DeVito (4842584969).jpg - Wikimedia Commons\n", + "Source(Wikimedia): https://commons.wikimedia.org/wiki/File:Danny_DeVito_(4842584969).jpg\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSdhlDQUOJT21B_k0WQVx--7IOzDASv3yIl0zJ3oRnzgdpV99cs\n", + "\n", + "Title: Could this be the perfect actor for older Lottie? : r/Yellowjackets\n", + "Source(Reddit): https://www.reddit.com/r/Yellowjackets/comments/s5xkhp/could_this_be_the_perfect_actor_for_older_lottie/\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTaCefSusoOR5hP0pQsR3U-Ep3JVjYdr3HPjkUdut2fa1wjxHHj\n", + "\n", + "Title: Danny DeVito | Jerma Lore Wiki | Fandom\n", + "Source(Fandom): https://jerma-lore.fandom.com/wiki/Danny_DeVito\n", + "Image: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcQCtnv6vR_9mQBWq1Xu268e1DeGPMRSKBJEuDWz7bLUaCofMoUI\n", + "\n", + "Title: File:Danny DeVito (4843205008).jpg - Wikipedia\n", + "Source(Wikipedia): https://en.wikipedia.org/wiki/File:Danny_DeVito_(4843205008).jpg\n", + "Image: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTf07CdhFNSUJ9zRsbFRDj76piDdhOfJiGUzldmUi58iiu2CNoV\n", + "\n", + "Title: The Man. The Legend. : r/IASIP\n", + "Source(Reddit): https://www.reddit.com/r/IASIP/comments/h08t4n/the_man_the_legend/\n", + "Image: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSoqVN3Zd4gbZ2RdFTKy4IJnJSve_ZPmbIJOg3o5hBH5frNv3NZ\n", + "\n", + "Title: Can You Match These Celebrities To Their \"Simpsons\" Character?\n", + "Source(BuzzFeed): https://www.buzzfeed.com/jemimaskelley/match-the-simpsons-guest-stars\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTTWkP5BwFmYmovl8ptvm1-amrhEeYPTXh19g00GKebQsuvIkkl\n", + "\n", + "Title: Pinterest\n", + "Source(Pinterest): https://www.pinterest.com/pin/pinterest--239887117643637901/\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcT1zZUmv4GNlIFA0c7WyhUU9_8kzqxq7rR4hR9Y3Pstkau0uQ9y\n", + "\n", + "Title: Goodnight everyone thank you all for your support 1 by Pyrobeam - Tuna\n", + "Source(Voicemod): https://tuna.voicemod.net/sound/31a1d43e-8424-4f5c-9114-934505ddd867\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcRWDLoBqqy_OKnj8HRpu5P-3gGEMbdW_grYmfy3otFEeSWktMMc\n", + "\n", + "Title: Uploading Images of People That Reddit Loves Day 2 : r/memes\n", + "Source(Reddit): https://www.reddit.com/r/memes/comments/l0k5oo/uploading_images_of_people_that_reddit_loves_day_2/\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcRdKRC-1iyxkdHHaVEaVSkI29iMS4Ig6BBRkgX77YnsNRc8RHow\n", + "\n", + "Title: Danny DeVito | Monmouth Timeline\n", + "Source(Monmouth Timeline): https://monmouthtimeline.org/timeline/danny-devito/\n", + "Image: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTBtx5UevFxJn2ZKlp2Fx-NWFbHaiuB6L4xKPUjjGthNP938BzO\n", + "\n", + "Title: So if a gnome and a human had a baby - General Discussion - World of Warcraft Forums\n", + "Source(Blizzard Entertainment): https://us.forums.blizzard.com/en/wow/t/so-if-a-gnome-and-a-human-had-a-baby/195408\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSVBmf4Bom0cKG0WYLkB7CK18DR91K1eytaG28T6EMmA-ZEWOi9\n", + "\n", + "Title: Steam Community :: Guide :: 10 Second Cheat Sheet for Party Builds\n", + "Source(Steam Community): https://steamcommunity.com/sharedfiles/filedetails/?id=2535074354\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQ3cGOljsmEAcP5XwQKIP3ukJSb_wDwTSWuihNjWBPX7Ojzma2K\n", + "\n", + "Title: New man under center for the G-Men : r/NFCEastMemeWar\n", + "Source(Reddit): https://www.reddit.com/r/NFCEastMemeWar/comments/17j8z7f/new_man_under_center_for_the_gmen/\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTe2ym5Q6qlMJlcWO6ppJp3EMo3Lzl_45V-SFFh_2DZdmfaGD6k\n", + "\n", + "Title: Autonomous F/X - It's Always Sunny In Philadelphia\n", + "Source(Autonomous F/X): https://autonomousfx.com/fx-galleries/realism/bald-cap-prosthetics/its-always-sunny-in-philadelphia/\n", + "Image: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTjxIfJfVTQZoL9gEmk5Og6pL7FgAAqSizUsZ1IUzQwbcNVRwUB\n", + "\n", + "Title: Fallout TV show cast. Which actor do you see in what role? I'll start with Vic. : r/Fallout\n", + "Source(Reddit): https://www.reddit.com/r/Fallout/comments/hn3g89/fallout_tv_show_cast_which_actor_do_you_see_in/\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSFZrjQ04AzDpIb-GslenEiGAn9TU4QslJnJIbKCqAhYUv6M7G5\n", + "\n", + "Title: Danny Devito | Danny devito, Trending shoes, People\n", + "Source(Pinterest): https://www.pinterest.ca/amp/pin/64880050852543359/\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTkKAfROeFjUj-xJuGtrkYgZI48qAQlYu2lHIUBJPHipr2pbRLz\n", + "\n", + "Title: The Stunning Rosa Bianca Salazar at Comic-Con, Variety Studio, San Diego. : r/ALITA_ARMY\n", + "Source(Reddit): https://www.reddit.com/r/ALITA_ARMY/comments/1168osm/the_stunning_rosa_bianca_salazar_at_comiccon/\n", + "Image: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcRqwRaaFu5qnXbFrjxKgwnyv0Gl6GBI7SQ1JHRhSPyAiLT6IWE7\n", + "\n", + "Title: Is there anything in 40k that is too grimdark? Or is 'too grimdark' even possible? - Quora\n", + "Source(Quora): https://www.quora.com/Is-there-anything-in-40k-that-is-too-grimdark-Or-is-too-grimdark-even-possible\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ_TW81je2fR2Of5WW2EnJFhfsmYYZSrs_XwGXGAxKPfVgCOUVJ\n", + "\n", + "Title: Danny DeVito Net Worth, Biography Age, Family, wiki, And Life Story - JAKADIYAR AREWA\n", + "Source(JAKADIYAR AREWA): https://www.jakadiyararewa.com.ng/2023/05/danny-devito-net-worth-biography-age.html\n", + "Image: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcRAfAt8msNdjwKqmCP7PtgdLWxWpGfXshGiL9iF2mJ4J6MeK_oU\n", + "\n", + "Title: Giants QB Daniel Jones out for the season; Saints may face undrafted QB Tommy DeVito in Week 15\n", + "Source(SaintsReport.com): https://saintsreport.com/posts/9374687/printfriendly\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcRIacLv1vxIgz73Tk4IGeoTTV3tFnxnRMK2yiFzjk8OruKH4z6a\n", + "\n", + "Title: Warlock | A D&D Audio Drama⭐ on Twitter: \"Easy, Gandalf! #lotr https://t.co/XOwnQD0uVd\" / X\n", + "Source(Twitter): https://twitter.com/Warlockdnd/status/1462582649571139586\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQUZ-666ydtuN02MSkM32w-61j9cpIIrXI8bWsKAJRzG3irR8Yg\n", + "\n", + "Title: Create a Top 100 White People Tier List - TierMaker\n", + "Source(TierMaker): https://tiermaker.com/create/top-100-white-people-1243701\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTpDM6YwQpn952yLt0W8O6EIDUKRn1-4UQc0Lum2_2IFrUeZeN4\n", + "\n", + "Title: I Hope You Find Me: The Love Poems of craigslist's Missed Connections by Alan Feuer | Goodreads\n", + "Source(Goodreads): https://www.goodreads.com/book/show/35550217-i-hope-you-find-me\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTAcwenLySFaVM8Ir4J6RebIE_PvSxAlE3h3CXA3EeYYkeZXvbQ\n", + "\n", + "Title: Is Jennifer Lawrence Jewish? - Wondering: Is Danny DeVito Jewish?\n", + "Source(Blogger): http://jenniferlawrencejewishwondering.blogspot.com/2012/02/is-danny-devito-jewish.html\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTQjUbutXtyO4Vv9g3cRjc8IF5h8IKO-3JvpNJDm-WR40fwtUTz\n", + "\n", + "Title: Actors in the Most Tim Burton Movies\n", + "Source(Ranker): https://www.ranker.com/list/actors-in-the-most-tim-burton-movies/ranker-film\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcRh1I6T1RvdyzauITQ4CcZheqCorQtfZZt9w_-b7-l9gjD6E8dy\n", + "\n", + "Title: popularity contest - Cubify This! A lesson in grayscale... er... color... er... whatever - Code Golf Stack Exchange\n", + "Source(Stack Exchange): https://codegolf.stackexchange.com/questions/21041/cubify-this-a-lesson-in-grayscale-er-color-er-whatever\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSOI33KsQNzCe-8fVb9Jtb57n00xf1R6GFaUJ6xF_gDFfjbazAR\n", + "\n", + "Title: Find an Actor to Play Danny DeVito in The Beatles Yellow Submarine [ Remake ] on myCast\n", + "Source(myCast.io): https://www.mycast.io/stories/the-beatles-yellow-submarine-remake/roles/danny-devito-1/6531784/cast\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRu8vm6Po98ZACAXzithjj6yKDxhQtgKPDC6rSKLMcFfhv8FreR\n", + "\n", + "Title: Total Drama Fan-casting - Duncan : r/Totaldrama\n", + "Source(Reddit): https://www.reddit.com/r/Totaldrama/comments/111c9wi/total_drama_fancasting_duncan/\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSzRzJmkh0NJqG1eHky0jCyzlje8ZVF8GMVIS0F6NjzTOTAWZas\n", + "\n", + "Title: Doppio fatting up MFF on X: \"Suit 💖 vs Suiter ☠️ https://t.co/9O8W4JDUin\" / X\n", + "Source(Twitter): https://twitter.com/DoppioAmore/status/1667670379245056002\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQSedqIXMhumO8Kzr70go44z7RqQxRVdKeBypshyOatcNIaN-ZW\n", + "\n", + "Title: 25 Celebrities Who Had Strange Jobs Before Becoming Famous\n", + "Source(List25): https://list25.com/25-celebrities-who-had-strange-jobs-before-becoming-famous/\n", + "Image: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcT_vmlaNBdScdL2Izbw1ZxZ3CdtR3-GHB1v1CHGjSAoF0TZbKHu\n", + "\n", + "Title: \"The Rocky Horror Picture Show\" 35th Anniversary To Benefit The Painted Turtle\n", + "Source(IMDb): https://www.imdb.com/media/rm2580580096/rg4018969088\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRo74Xxxnri9i1b0vMk4Ipe-2XXoAZMjmBbCSqhPWrh2LUFf_61\n", + "\n", + "Title: Nathan Heald - Bettendorf, Iowa | about.me\n", + "Source(About.me): https://about.me/nathanheald2020\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcT9oNTZAOVsfDYlvne3MS9Uk6utafVrOcMwBxfXuI1qLLpd4Yvk\n", + "\n", + "Title: Danny Devito: Biography, Age, Birthday, Movies List & Awards - FinderWheel\n", + "Source(FinderWheel.com): https://www.finderwheel.com/famous-people/danny-devito/\n", + "Image: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSTzX4qHei37ZO34MV2NyKmckBywnmnvVxm1JiwWEAJlkRZBhkf\n", + "\n", + "Title: About Us | carpetdepot\n", + "Source(Wix): https://jasonmelker.wixsite.com/carpetdepot/about-us\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSjsJwuJny05gvwULOh61Yey0nPZzGoBqhLTHsmzeLLEsju5SUp\n", + "\n", + "Title: Mara Wilson - IMDb\n", + "Source(IMDb): https://www.imdb.com/name/nm0933798/\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcS1A0PAq2F2uNCX5qxBof92DQheyeP9HHNiX3ferUwaFdJexmsQ\n", + "\n", + "Title: Not even sorry : r/2westerneurope4u\n", + "Source(Reddit): https://www.reddit.com/r/2westerneurope4u/comments/1510k3o/not_even_sorry/\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcRvjrraaXuyKTBNM9jcElIizdl7zV7TjunI3BmPPyEQDWd5fQC8\n", + "\n", + "Title: Drunk Celebrities | Crazy Things Famous People Have Done While Drunk\n", + "Source(Ranker): https://www.ranker.com/list/things-celebrities-have-done-drunk/celebrity-lists\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTfX2sB59QDDJMuBcSXR9gvpkBjCDiHacCLRq9SYSBdj-apAecM\n", + "\n", + "Title: Jones BBQ and Foot Massage, W 119th St, Chicago, IL, Barbecue restaurant - MapQuest\n", + "Source(MapQuest): https://www.mapquest.com/us/illinois/jones-bbq-and-foot-massage-427925192\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSN7Ril--htuGdToqlbVnozBNw07F4iRziioDb6l4iB-XR2Ut5z\n", + "\n", + "Title: Why cant I play quarterback - iFunny\n", + "Source(iFunny): https://ifunny.co/picture/why-cant-i-play-quarterback-jDKpYR7wA\n", + "Image: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcT-dkun9bJE5T_XO0OiRM2f_VcZKaYKok0wph8tNAQLYGmPIVlY\n", + "\n", + "Title: Agency News | Danny DeVito Shares His Take on Colin Farrell’s Portrayal of Penguin in The Batman | LatestLY\n", + "Source(LatestLY): https://www.latestly.com/quickly/agency-news/danny-devito-shares-his-take-on-colin-farrell-s-portrayal-of-penguin-in-the-batman-4134267.html\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS5J6Q7qdo4j2m-PMTyLTYDhb3IVPMPKv6z_X6rIS98PsOQ4V-3\n", + "\n", + "Title: 12 Celebrities With Guy Fieri's Hair\n", + "Source(BuzzFeed): https://www.buzzfeed.com/jeanlucbouchard/guys-with-guy-fieri-hair\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQMcO1wo5O8npNssZ7zu0S3ygWKlTwWSjDHAYM03ImBh_hi5Cah\n", + "\n", + "Title: Bruhface baby : r/teenagers\n", + "Source(Reddit): https://www.reddit.com/r/teenagers/comments/ctwnvu/bruhface_baby/\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQlFNFKY8P4JXZzAO5qY93ks7RyvOUnJ8Z7OPc65TDqe1G2eBGI\n", + "\n", + "Title: Danny Devito is embarrassed about his skiing skills | Page Six\n", + "Source(Page Six): https://pagesix.com/2016/01/24/danny-devito-is-embarrassed-about-his-skiing-skills/\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTzI9Lr3zqS81Skr4QHqiBgn59_o-Jwza4UBgQt70FFwRn7aM-O\n", + "\n", + "Title: Download Danny Devito [wallpaper] Wallpaper | Wallpapers.com\n", + "Source(Wallpapers.com): https://wallpapers.com/wallpapers/danny-devito-wallpaper-ynn659m821xgupf8.html\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcR1tYc628EpuGHrNiu2MN1f-HiQX1Q40S0lqkf3ZifsUaoowdl-\n", + "\n", + "Reverse Image SearchLink: https://www.google.com/search?tbs=sbi:AMhZZiur9K9JAXbawdHBwfXdA7NxCCeJRvLWX0IBHxOQJabqOIiLe4unTO-Zaf6Bxp9E4ILUBm7jv_1URjNa-ltlw7q0zOBomUCOXgjSi28SHu40_1TRTErI29ceIeeVktZWH97G9jZNM3nTQdk9VXic9cNWFe36v6Sw\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "'Subject:Danny DeVito(American actor and comedian)\\nLink to subject:https://www.google.com/search?q=Danny+DeVito&kgmid=/m/0q9kd&hl=en-US&gl=US\\n\\nRelated Images:\\n\\nTitle: Danny DeVito - Simple English Wikipedia, the free encyclopedia\\nSource(Wikipedia): https://simple.wikipedia.org/wiki/Danny_DeVito\\nImage: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSm5zQhimRYYgKPVf16viNFoDSsZmGrH09dthR6cpL1DXEdzmQu\\n\\nTitle: File:Danny DeVito by Gage Skidmore.jpg - Wikipedia\\nSource(Wikipedia): https://en.m.wikipedia.org/wiki/File:Danny_DeVito_by_Gage_Skidmore.jpg\\nImage: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTRFc3mD4mzd3VHQFwNRK2WfFOQ38_GkzJTNbDxd1cYcN8JAc_D\\n\\nTitle: Danny DeVito — Wikipèdia\\nSource(Wikipedia): https://oc.wikipedia.org/wiki/Danny_DeVito\\nImage: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQNl_2mCz1tAHs_w-zkIm40bhHiuGFMOqJv9uZcxTQm9qCqC4F_\\n\\nTitle: US Rep. says adult animated sitcom with Danny DeVito as voice of Satan is ‘evil’\\nSource(wbay.com): https://www.wbay.com/2022/09/08/us-rep-adult-animated-sitcom-with-danny-devito-voice-satan-is-evil/\\nImage: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcRgymQFiSXGHKtHMx6m7I1bMfOoJiihKGAtFENZyPvgw-nE3Lfo\\n\\nTitle: Danny DeVito gets his own day in his native New Jersey\\nSource(WOWT): https://www.wowt.com/content/news/Danny-DeVito-gets-his-own-day-in-his-native-New-Jersey-481195051.html\\nImage: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQzIs4DyN1N8osg_qzlN9Jx7yqJj29Gu38PeCvE5yJ_I1w18r0O\\n\\nTitle: Danny DaVito Keeps it Real When Asked about the Oscar\\'s Diversity \"We Are a Bunch of Racist\" - Z 107.9\\nSource(Z 107.9): https://zhiphopcleveland.com/4536378/danny-davito-keeps-it-real-when-asked-about-the-oscars-diversity-we-are-a-bunch-of-racist/\\nImage: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTfx196gqV2xENDnNttzSCI9r7S-XO3ML8cs_TVd5HdGhv_GgAO\\n\\nTitle: Danny DeVito | Smash Bros Lawl Stadium Wiki | Fandom\\nSource(Fandom): https://lawl-stadium.fandom.com/wiki/Danny_DeVito\\nImage: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcRQOGbzgLP-49b9c1SSEo2ObAvRoCM0WtgOR8-E2FHDry_d-S03\\n\\nTitle: Mad ☆ on X: \"Gavin told me I look like Danny DeVito and I can’t unsee it https://t.co/UZuUbr0QBq\" / X\\nSource(Twitter): https://twitter.com/mfrench98/status/1062726668337496065\\nImage: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTMNYrgw_ish0CEuimZ3SxU2ReJrMcEb1NVGsHNfUFy2_0v0FRM\\n\\nTitle: Steam Community :: Guide :: danny devito\\nSource(Steam Community): https://steamcommunity.com/sharedfiles/filedetails/?id=923751585\\nImage: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS-vOaIRRxi1xC7CgFUymyLzhwhnvB5evGgCNo5LlUJDiWeTlN9\\n\\nTitle: Danny DeVito gets his own day in his native New Jersey | News | khq.com\\nSource(KHQ.com): https://www.khq.com/news/danny-devito-gets-his-own-day-in-his-native-new-jersey/article_514fbbf4-7f6f-5051-b06b-0f127c82439c.html\\nImage: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSYN29NVlBV6L-hFKA7E2Zi32hqkItUyDUA-BtTt2fmJjwGK_Bg\\n\\nTitle: Danny De Vito Meme Funny Pewdiepie Sticker | Redbubble\\nSource(Redbubble): https://www.redbubble.com/i/sticker/Danny-de-Vito-Meme-Funny-by-nattdrws/96554839.EJUG5\\nImage: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTrIbb_rf6dK7ChbDyk5xCGTMPkNtis76m_vUYvvB_Uc3GMWqxm\\n\\nTitle: here me out…danny devito as william afton : r/fivenightsatfreddys\\nSource(Reddit): https://www.reddit.com/r/fivenightsatfreddys/comments/11eslz7/here_me_outdanny_devito_as_william_afton/\\nImage: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcQGIpa0_hmKbYzIfdI9xZoft0UhXv2MxRKSIj00dfipVQTunSyA\\n\\nTitle: Sammy DeVito (@TheDailySammy) / X\\nSource(X): https://twitter.com/thedailysammy\\nImage: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcR9QqGf3cANXHgRGB11HZduZpQXqeWxOHQkxfJVoWeQcfPBoyxf\\n\\nTitle: Danny Devito Fan Club | Facebook\\nSource(Facebook): https://www.facebook.com/groups/685975094811949/\\nImage: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTOnDji-j-hq0K5a3K1NpXmVcBGH7N5-IYeECi77WwfipechO3p\\n\\nTitle: Danny DeVito - Wikiwand\\nSource(Wikiwand): https://www.wikiwand.com/simple/Danny_DeVito\\nImage: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcS4xQ_wZhK6OMttSuxsv2fjscM6la3DPNQcJt5dnWWbvQLP3CuZ\\n\\nTitle: These fancasts are horrible, we all know who’d be the perfect Doomguy. : r/Doom\\nSource(Reddit): https://www.reddit.com/r/Doom/comments/tal459/these_fancasts_are_horrible_we_all_know_whod_be/\\nImage: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTZGcTAtkMxowoR4RjkPVFHQE4iyOkgj6DtUdWBSnG_eT4s3rNY\\n\\nTitle: File:Danny DeVito (4842584969).jpg - Wikimedia Commons\\nSource(Wikimedia): https://commons.wikimedia.org/wiki/File:Danny_DeVito_(4842584969).jpg\\nImage: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSdhlDQUOJT21B_k0WQVx--7IOzDASv3yIl0zJ3oRnzgdpV99cs\\n\\nTitle: Could this be the perfect actor for older Lottie? : r/Yellowjackets\\nSource(Reddit): https://www.reddit.com/r/Yellowjackets/comments/s5xkhp/could_this_be_the_perfect_actor_for_older_lottie/\\nImage: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTaCefSusoOR5hP0pQsR3U-Ep3JVjYdr3HPjkUdut2fa1wjxHHj\\n\\nTitle: Danny DeVito | Jerma Lore Wiki | Fandom\\nSource(Fandom): https://jerma-lore.fandom.com/wiki/Danny_DeVito\\nImage: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcQCtnv6vR_9mQBWq1Xu268e1DeGPMRSKBJEuDWz7bLUaCofMoUI\\n\\nTitle: File:Danny DeVito (4843205008).jpg - Wikipedia\\nSource(Wikipedia): https://en.wikipedia.org/wiki/File:Danny_DeVito_(4843205008).jpg\\nImage: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTf07CdhFNSUJ9zRsbFRDj76piDdhOfJiGUzldmUi58iiu2CNoV\\n\\nTitle: The Man. The Legend. : r/IASIP\\nSource(Reddit): https://www.reddit.com/r/IASIP/comments/h08t4n/the_man_the_legend/\\nImage: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSoqVN3Zd4gbZ2RdFTKy4IJnJSve_ZPmbIJOg3o5hBH5frNv3NZ\\n\\nTitle: Can You Match These Celebrities To Their \"Simpsons\" Character?\\nSource(BuzzFeed): https://www.buzzfeed.com/jemimaskelley/match-the-simpsons-guest-stars\\nImage: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTTWkP5BwFmYmovl8ptvm1-amrhEeYPTXh19g00GKebQsuvIkkl\\n\\nTitle: Pinterest\\nSource(Pinterest): https://www.pinterest.com/pin/pinterest--239887117643637901/\\nImage: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcT1zZUmv4GNlIFA0c7WyhUU9_8kzqxq7rR4hR9Y3Pstkau0uQ9y\\n\\nTitle: Goodnight everyone thank you all for your support 1 by Pyrobeam - Tuna\\nSource(Voicemod): https://tuna.voicemod.net/sound/31a1d43e-8424-4f5c-9114-934505ddd867\\nImage: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcRWDLoBqqy_OKnj8HRpu5P-3gGEMbdW_grYmfy3otFEeSWktMMc\\n\\nTitle: Uploading Images of People That Reddit Loves Day 2 : r/memes\\nSource(Reddit): https://www.reddit.com/r/memes/comments/l0k5oo/uploading_images_of_people_that_reddit_loves_day_2/\\nImage: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcRdKRC-1iyxkdHHaVEaVSkI29iMS4Ig6BBRkgX77YnsNRc8RHow\\n\\nTitle: Danny DeVito | Monmouth Timeline\\nSource(Monmouth Timeline): https://monmouthtimeline.org/timeline/danny-devito/\\nImage: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTBtx5UevFxJn2ZKlp2Fx-NWFbHaiuB6L4xKPUjjGthNP938BzO\\n\\nTitle: So if a gnome and a human had a baby - General Discussion - World of Warcraft Forums\\nSource(Blizzard Entertainment): https://us.forums.blizzard.com/en/wow/t/so-if-a-gnome-and-a-human-had-a-baby/195408\\nImage: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSVBmf4Bom0cKG0WYLkB7CK18DR91K1eytaG28T6EMmA-ZEWOi9\\n\\nTitle: Steam Community :: Guide :: 10 Second Cheat Sheet for Party Builds\\nSource(Steam Community): https://steamcommunity.com/sharedfiles/filedetails/?id=2535074354\\nImage: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQ3cGOljsmEAcP5XwQKIP3ukJSb_wDwTSWuihNjWBPX7Ojzma2K\\n\\nTitle: New man under center for the G-Men : r/NFCEastMemeWar\\nSource(Reddit): https://www.reddit.com/r/NFCEastMemeWar/comments/17j8z7f/new_man_under_center_for_the_gmen/\\nImage: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTe2ym5Q6qlMJlcWO6ppJp3EMo3Lzl_45V-SFFh_2DZdmfaGD6k\\n\\nTitle: Autonomous F/X - It\\'s Always Sunny In Philadelphia\\nSource(Autonomous F/X): https://autonomousfx.com/fx-galleries/realism/bald-cap-prosthetics/its-always-sunny-in-philadelphia/\\nImage: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTjxIfJfVTQZoL9gEmk5Og6pL7FgAAqSizUsZ1IUzQwbcNVRwUB\\n\\nTitle: Fallout TV show cast. Which actor do you see in what role? I\\'ll start with Vic. : r/Fallout\\nSource(Reddit): https://www.reddit.com/r/Fallout/comments/hn3g89/fallout_tv_show_cast_which_actor_do_you_see_in/\\nImage: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSFZrjQ04AzDpIb-GslenEiGAn9TU4QslJnJIbKCqAhYUv6M7G5\\n\\nTitle: Danny Devito | Danny devito, Trending shoes, People\\nSource(Pinterest): https://www.pinterest.ca/amp/pin/64880050852543359/\\nImage: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTkKAfROeFjUj-xJuGtrkYgZI48qAQlYu2lHIUBJPHipr2pbRLz\\n\\nTitle: The Stunning Rosa Bianca Salazar at Comic-Con, Variety Studio, San Diego. : r/ALITA_ARMY\\nSource(Reddit): https://www.reddit.com/r/ALITA_ARMY/comments/1168osm/the_stunning_rosa_bianca_salazar_at_comiccon/\\nImage: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcRqwRaaFu5qnXbFrjxKgwnyv0Gl6GBI7SQ1JHRhSPyAiLT6IWE7\\n\\nTitle: Is there anything in 40k that is too grimdark? Or is \\'too grimdark\\' even possible? - Quora\\nSource(Quora): https://www.quora.com/Is-there-anything-in-40k-that-is-too-grimdark-Or-is-too-grimdark-even-possible\\nImage: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ_TW81je2fR2Of5WW2EnJFhfsmYYZSrs_XwGXGAxKPfVgCOUVJ\\n\\nTitle: Danny DeVito Net Worth, Biography Age, Family, wiki, And Life Story - JAKADIYAR AREWA\\nSource(JAKADIYAR AREWA): https://www.jakadiyararewa.com.ng/2023/05/danny-devito-net-worth-biography-age.html\\nImage: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcRAfAt8msNdjwKqmCP7PtgdLWxWpGfXshGiL9iF2mJ4J6MeK_oU\\n\\nTitle: Giants QB Daniel Jones out for the season; Saints may face undrafted QB Tommy DeVito in Week 15\\nSource(SaintsReport.com): https://saintsreport.com/posts/9374687/printfriendly\\nImage: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcRIacLv1vxIgz73Tk4IGeoTTV3tFnxnRMK2yiFzjk8OruKH4z6a\\n\\nTitle: Warlock | A D&D Audio Drama⭐ on Twitter: \"Easy, Gandalf! #lotr https://t.co/XOwnQD0uVd\" / X\\nSource(Twitter): https://twitter.com/Warlockdnd/status/1462582649571139586\\nImage: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQUZ-666ydtuN02MSkM32w-61j9cpIIrXI8bWsKAJRzG3irR8Yg\\n\\nTitle: Create a Top 100 White People Tier List - TierMaker\\nSource(TierMaker): https://tiermaker.com/create/top-100-white-people-1243701\\nImage: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTpDM6YwQpn952yLt0W8O6EIDUKRn1-4UQc0Lum2_2IFrUeZeN4\\n\\nTitle: I Hope You Find Me: The Love Poems of craigslist\\'s Missed Connections by Alan Feuer | Goodreads\\nSource(Goodreads): https://www.goodreads.com/book/show/35550217-i-hope-you-find-me\\nImage: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTAcwenLySFaVM8Ir4J6RebIE_PvSxAlE3h3CXA3EeYYkeZXvbQ\\n\\nTitle: Is Jennifer Lawrence Jewish? - Wondering: Is Danny DeVito Jewish?\\nSource(Blogger): http://jenniferlawrencejewishwondering.blogspot.com/2012/02/is-danny-devito-jewish.html\\nImage: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTQjUbutXtyO4Vv9g3cRjc8IF5h8IKO-3JvpNJDm-WR40fwtUTz\\n\\nTitle: Actors in the Most Tim Burton Movies\\nSource(Ranker): https://www.ranker.com/list/actors-in-the-most-tim-burton-movies/ranker-film\\nImage: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcRh1I6T1RvdyzauITQ4CcZheqCorQtfZZt9w_-b7-l9gjD6E8dy\\n\\nTitle: popularity contest - Cubify This! A lesson in grayscale... er... color... er... whatever - Code Golf Stack Exchange\\nSource(Stack Exchange): https://codegolf.stackexchange.com/questions/21041/cubify-this-a-lesson-in-grayscale-er-color-er-whatever\\nImage: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSOI33KsQNzCe-8fVb9Jtb57n00xf1R6GFaUJ6xF_gDFfjbazAR\\n\\nTitle: Find an Actor to Play Danny DeVito in The Beatles Yellow Submarine [ Remake ] on myCast\\nSource(myCast.io): https://www.mycast.io/stories/the-beatles-yellow-submarine-remake/roles/danny-devito-1/6531784/cast\\nImage: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRu8vm6Po98ZACAXzithjj6yKDxhQtgKPDC6rSKLMcFfhv8FreR\\n\\nTitle: Total Drama Fan-casting - Duncan : r/Totaldrama\\nSource(Reddit): https://www.reddit.com/r/Totaldrama/comments/111c9wi/total_drama_fancasting_duncan/\\nImage: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSzRzJmkh0NJqG1eHky0jCyzlje8ZVF8GMVIS0F6NjzTOTAWZas\\n\\nTitle: Doppio fatting up MFF on X: \"Suit 💖 vs Suiter ☠️ https://t.co/9O8W4JDUin\" / X\\nSource(Twitter): https://twitter.com/DoppioAmore/status/1667670379245056002\\nImage: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQSedqIXMhumO8Kzr70go44z7RqQxRVdKeBypshyOatcNIaN-ZW\\n\\nTitle: 25 Celebrities Who Had Strange Jobs Before Becoming Famous\\nSource(List25): https://list25.com/25-celebrities-who-had-strange-jobs-before-becoming-famous/\\nImage: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcT_vmlaNBdScdL2Izbw1ZxZ3CdtR3-GHB1v1CHGjSAoF0TZbKHu\\n\\nTitle: \"The Rocky Horror Picture Show\" 35th Anniversary To Benefit The Painted Turtle\\nSource(IMDb): https://www.imdb.com/media/rm2580580096/rg4018969088\\nImage: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRo74Xxxnri9i1b0vMk4Ipe-2XXoAZMjmBbCSqhPWrh2LUFf_61\\n\\nTitle: Nathan Heald - Bettendorf, Iowa | about.me\\nSource(About.me): https://about.me/nathanheald2020\\nImage: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcT9oNTZAOVsfDYlvne3MS9Uk6utafVrOcMwBxfXuI1qLLpd4Yvk\\n\\nTitle: Danny Devito: Biography, Age, Birthday, Movies List & Awards - FinderWheel\\nSource(FinderWheel.com): https://www.finderwheel.com/famous-people/danny-devito/\\nImage: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSTzX4qHei37ZO34MV2NyKmckBywnmnvVxm1JiwWEAJlkRZBhkf\\n\\nTitle: About Us | carpetdepot\\nSource(Wix): https://jasonmelker.wixsite.com/carpetdepot/about-us\\nImage: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSjsJwuJny05gvwULOh61Yey0nPZzGoBqhLTHsmzeLLEsju5SUp\\n\\nTitle: Mara Wilson - IMDb\\nSource(IMDb): https://www.imdb.com/name/nm0933798/\\nImage: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcS1A0PAq2F2uNCX5qxBof92DQheyeP9HHNiX3ferUwaFdJexmsQ\\n\\nTitle: Not even sorry : r/2westerneurope4u\\nSource(Reddit): https://www.reddit.com/r/2westerneurope4u/comments/1510k3o/not_even_sorry/\\nImage: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcRvjrraaXuyKTBNM9jcElIizdl7zV7TjunI3BmPPyEQDWd5fQC8\\n\\nTitle: Drunk Celebrities | Crazy Things Famous People Have Done While Drunk\\nSource(Ranker): https://www.ranker.com/list/things-celebrities-have-done-drunk/celebrity-lists\\nImage: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTfX2sB59QDDJMuBcSXR9gvpkBjCDiHacCLRq9SYSBdj-apAecM\\n\\nTitle: Jones BBQ and Foot Massage, W 119th St, Chicago, IL, Barbecue restaurant - MapQuest\\nSource(MapQuest): https://www.mapquest.com/us/illinois/jones-bbq-and-foot-massage-427925192\\nImage: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSN7Ril--htuGdToqlbVnozBNw07F4iRziioDb6l4iB-XR2Ut5z\\n\\nTitle: Why cant I play quarterback - iFunny\\nSource(iFunny): https://ifunny.co/picture/why-cant-i-play-quarterback-jDKpYR7wA\\nImage: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcT-dkun9bJE5T_XO0OiRM2f_VcZKaYKok0wph8tNAQLYGmPIVlY\\n\\nTitle: Agency News | Danny DeVito Shares His Take on Colin Farrell’s Portrayal of Penguin in The Batman | LatestLY\\nSource(LatestLY): https://www.latestly.com/quickly/agency-news/danny-devito-shares-his-take-on-colin-farrell-s-portrayal-of-penguin-in-the-batman-4134267.html\\nImage: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS5J6Q7qdo4j2m-PMTyLTYDhb3IVPMPKv6z_X6rIS98PsOQ4V-3\\n\\nTitle: 12 Celebrities With Guy Fieri\\'s Hair\\nSource(BuzzFeed): https://www.buzzfeed.com/jeanlucbouchard/guys-with-guy-fieri-hair\\nImage: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQMcO1wo5O8npNssZ7zu0S3ygWKlTwWSjDHAYM03ImBh_hi5Cah\\n\\nTitle: Bruhface baby : r/teenagers\\nSource(Reddit): https://www.reddit.com/r/teenagers/comments/ctwnvu/bruhface_baby/\\nImage: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQlFNFKY8P4JXZzAO5qY93ks7RyvOUnJ8Z7OPc65TDqe1G2eBGI\\n\\nTitle: Danny Devito is embarrassed about his skiing skills | Page Six\\nSource(Page Six): https://pagesix.com/2016/01/24/danny-devito-is-embarrassed-about-his-skiing-skills/\\nImage: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTzI9Lr3zqS81Skr4QHqiBgn59_o-Jwza4UBgQt70FFwRn7aM-O\\n\\nTitle: Download Danny Devito [wallpaper] Wallpaper | Wallpapers.com\\nSource(Wallpapers.com): https://wallpapers.com/wallpapers/danny-devito-wallpaper-ynn659m821xgupf8.html\\nImage: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcR1tYc628EpuGHrNiu2MN1f-HiQX1Q40S0lqkf3ZifsUaoowdl-\\n\\nReverse Image SearchLink: https://www.google.com/search?tbs=sbi:AMhZZiur9K9JAXbawdHBwfXdA7NxCCeJRvLWX0IBHxOQJabqOIiLe4unTO-Zaf6Bxp9E4ILUBm7jv_1URjNa-ltlw7q0zOBomUCOXgjSi28SHu40_1TRTErI29ceIeeVktZWH97G9jZNM3nTQdk9VXic9cNWFe36v6Sw\\n'" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Runs google lens on an image of Danny Devito\n", + "tool.run(\"https://i.imgur.com/HBrB8p0.png\")" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "Output should look like:\n", + "\n", + "Subject:Danny DeVito(American actor and comedian)\n", + "Link to subject:https://www.google.com/search?q=Danny+DeVito&kgmid=/m/0q9kd&hl=en-US&gl=US\n", + "\n", + "Related Images:\n", + "\n", + "Title: Danny DeVito - Simple English Wikipedia, the free encyclopedia\n", + "Source(Wikipedia): https://simple.wikipedia.org/wiki/Danny_DeVito\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSm5zQhimRYYgKPVf16viNFoDSsZmGrH09dthR6cpL1DXEdzmQu\n", + "\n", + "Title: File:Danny DeVito by Gage Skidmore.jpg - Wikipedia\n", + "Source(Wikipedia): https://en.m.wikipedia.org/wiki/File:Danny_DeVito_by_Gage_Skidmore.jpg\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTRFc3mD4mzd3VHQFwNRK2WfFOQ38_GkzJTNbDxd1cYcN8JAc_D\n", + "\n", + "Title: Danny DeVito — Wikipèdia\n", + "Source(Wikipedia): https://oc.wikipedia.org/wiki/Danny_DeVito\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQNl_2mCz1tAHs_w-zkIm40bhHiuGFMOqJv9uZcxTQm9qCqC4F_\n", + "\n", + "Title: US Rep. says adult animated sitcom with Danny DeVito as voice of Satan is ‘evil’\n", + "Source(wilx.com): https://www.wilx.com/2022/09/08/us-rep-adult-animated-sitcom-with-danny-devito-voice-satan-is-evil/?outputType=apps\n", + "Image: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSNpxLazAXTg09jDebFhVY0lmBgKWCKHFyqD5eCAIQrf5RI85vu\n", + "\n", + "Title: Danny DeVito gets his own day in his native New Jersey\n", + "Source(WOWT): https://www.wowt.com/content/news/Danny-DeVito-gets-his-own-day-in-his-native-New-Jersey-481195051.html\n", + "Image: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTYWvHxMAm3zsMrP3vr_ML0JX2SZZkxblN_KYfxf0EI8ALuhFhf\n", + "\n", + "Title: Steam Community :: Guide :: danny devito\n", + "Source(Steam Community): https://steamcommunity.com/sharedfiles/filedetails/?id=923751585\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS-vOaIRRxi1xC7CgFUymyLzhwhnvB5evGgCNo5LlUJDiWeTlN9\n", + "\n", + "Title: Danny DeVito gets his own day in his native New Jersey | News | khq.com\n", + "Source(KHQ.com): https://www.khq.com/news/danny-devito-gets-his-own-day-in-his-native-new-jersey/article_514fbbf4-7f6f-5051-b06b-0f127c82439c.html\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSYN29NVlBV6L-hFKA7E2Zi32hqkItUyDUA-BtTt2fmJjwGK_Bg\n", + "\n", + "Title: Mad ☆ on X: \"Gavin told me I look like Danny DeVito and I can’t unsee it https://t.co/UZuUbr0QBq\" / X\n", + "Source(Twitter): https://twitter.com/mfrench98/status/1062726668337496065\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTMNYrgw_ish0CEuimZ3SxU2ReJrMcEb1NVGsHNfUFy2_0v0FRM\n", + "\n", + "Title: Ewan Moore on X: \"I have just one casting request for the Zelda movie https://t.co/TNuU7Hpmkl\" / X\n", + "Source(Twitter): https://twitter.com/EMoore_/status/1722218391644307475\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSJnljY1EpoKGpEEaptMeSdkbm1hWSb0XqLBDcWdDAmEGIWVjHw\n", + "\n", + "Title: GoLocalPDX | Spotted in Portland: Danny DeVito in Pearl District\n", + "Source(GoLocalPDX): https://m.golocalpdx.com/lifestyle/spotted-in-portland-danny-devito-in-pearl-district\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSL_cpTOI7ewQCh1zDkPB7-p9b2M6d9TYX4XMKEb2j9Kwf8a4Ui\n", + "\n", + "Title: Danny De Vito Meme Funny Pewdiepie Sticker | Redbubble\n", + "Source(Redbubble): https://www.redbubble.com/i/sticker/Danny-de-Vito-Meme-Funny-by-nattdrws/96554839.EJUG5\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTrIbb_rf6dK7ChbDyk5xCGTMPkNtis76m_vUYvvB_Uc3GMWqxm\n", + "\n", + "Title: Danny Devito Every Day (@whydouwannakno8) / X\n", + "Source(Twitter): https://twitter.com/whydouwannakno8\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSpUx-HFqLx1FG9yphLgEU6l_SyTPaTX2FmyChtLHS3VOqXf2S5\n", + "\n", + "Title: These fancasts are horrible, we all know who’d be the perfect Doomguy. : r/Doom\n", + "Source(Reddit): https://www.reddit.com/r/Doom/comments/tal459/these_fancasts_are_horrible_we_all_know_whod_be/\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTPFzg9ntWpbVW3r26EMjfXVYRHO1w3c5VeeeWe1jKVmtJpSB6z\n", + "\n", + "Title: Will McKinney - Hudl\n", + "Source(Hudl): https://www.hudl.com/profile/6386357\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcQbqpQ4wQ5qpjf0dBsgFqZW-f4FMTpePRK63BHOL_qop1D93FnK\n", + "\n", + "Title: Petition · Danny DeVito to play James Bond · Change.org\n", + "Source(Change.org): https://www.change.org/p/hollywood-danny-devito-to-play-james-bond\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcRivkvCq6bk9OWMsWW9LAlYtf7QkYdDsJ_2skhbKstkyK9Pk07F\n", + "\n", + "Title: Danny DeVito - Wikiwand\n", + "Source(Wikiwand): https://www.wikiwand.com/simple/Danny_DeVito\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcS4xQ_wZhK6OMttSuxsv2fjscM6la3DPNQcJt5dnWWbvQLP3CuZ\n", + "\n", + "Title: Could this be the perfect actor for older Lottie? : r/Yellowjackets\n", + "Source(Reddit): https://www.reddit.com/r/Yellowjackets/comments/s5xkhp/could_this_be_the_perfect_actor_for_older_lottie/\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTaCefSusoOR5hP0pQsR3U-Ep3JVjYdr3HPjkUdut2fa1wjxHHj\n", + "\n", + "Title: Pin on People who inspire me or make me giggle\n", + "Source(Pinterest): https://www.pinterest.com/pin/189080884324991923/\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS7fbawhF3QWAZHIMgzL2W4LzW2VkTQLOB4DKUrscYnORBnuK8s\n", + "\n", + "Title: Steam Curator: Official Danny Devito Fan Club\n", + "Source(Steam Powered): https://store.steampowered.com/curator/33127026-Official-Danny-Devito-Fan-Club/\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTxzGbyn_8fezRf4gSNqJBq-lKXWJ8cBU-3le21vO-9fKxygBnv\n", + "\n", + "Title: The Man. The Legend. : r/IASIP\n", + "Source(Reddit): https://www.reddit.com/r/IASIP/comments/h08t4n/the_man_the_legend/\n", + "Image: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSoqVN3Zd4gbZ2RdFTKy4IJnJSve_ZPmbIJOg3o5hBH5frNv3NZ\n", + "\n", + "Title: Can You Match These Celebrities To Their \"Simpsons\" Character?\n", + "Source(BuzzFeed): https://www.buzzfeed.com/jemimaskelley/match-the-simpsons-guest-stars\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTTWkP5BwFmYmovl8ptvm1-amrhEeYPTXh19g00GKebQsuvIkkl\n", + "\n", + "Title: The Adventures of Danny Devito .exe - The Adventures of Danny Devito - Wattpad\n", + "Source(Wattpad): https://www.wattpad.com/634679736-the-adventures-of-danny-devito-exe-the-adventures\n", + "Image: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcTvVZ-nuX_DHP8rx6tPn3c-CoqN3O6rUKxUMzZOhiQxDIc4y2Uv\n", + "\n", + "Title: Uploading Images of People That Reddit Loves Day 2 : r/memes\n", + "Source(Reddit): https://www.reddit.com/r/memes/comments/l0k5oo/uploading_images_of_people_that_reddit_loves_day_2/\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcRdKRC-1iyxkdHHaVEaVSkI29iMS4Ig6BBRkgX77YnsNRc8RHow\n", + "\n", + "Title: Danny DeVito - Wikipedia, the free encyclopedia | Danny devito, Trending shoes, Casual shoes women\n", + "Source(Pinterest): https://www.pinterest.com/pin/170362798380086468/\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTUmS49oH7BqbbCFv8Rk-blC3jFGo740PFs-4Q1R5I9p0i8GLgc\n", + "\n", + "Title: Dr. Shrimp Puerto Rico on X: \"y Danny de Vito como Gaetan \"Mole\" Moliere. https://t.co/HmblfQt2rt\" / X\n", + "Source(Twitter): https://twitter.com/celispedia/status/1381361438644658183\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcThcsEyL8Vm0U2xFvZjrCoD11G6lU37PMnEVst3EfekfqC6ZC2T\n", + "\n", + "Title: Why do singers shake and quiver their heads when they sing? - Quora\n", + "Source(Quora): https://www.quora.com/Why-do-singers-shake-and-quiver-their-heads-when-they-sing\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTVHZIii3O4qHE_8uIPDNf1wjCEcKho9sb40dSBiUuvA5_ffd1O\n", + "\n", + "Title: New man under center for the G-Men : r/NFCEastMemeWar\n", + "Source(Reddit): https://www.reddit.com/r/NFCEastMemeWar/comments/17j8z7f/new_man_under_center_for_the_gmen/\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTe2ym5Q6qlMJlcWO6ppJp3EMo3Lzl_45V-SFFh_2DZdmfaGD6k\n", + "\n", + "Title: HumanSaxophone (@HumanSaxophone) / X\n", + "Source(Twitter): https://twitter.com/HumanSaxophone\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcQRT26qpb-YXqTUHF7VNG2FgofRQvQGGrt5PcbbhHT0uZtgZYLv\n", + "\n", + "Title: 35 People Reveal What Made Them Forever Change Their Mind About Certain Celebrities | Bored Panda\n", + "Source(Bored Panda): https://www.boredpanda.com/views-changed-on-famous-person/\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcThO3ytsqLhlpnjYFxgz9Xu6ukfd-bR8MSSIFX8jyysZWhOpiuz\n", + "\n", + "Title: How to book Danny DeVito? - Anthem Talent Agency\n", + "Source(Anthem Talent Agency): https://anthemtalentagency.com/talent/danny-devito/\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcS64Ne3byqIBuZ6RtvwCYLmQMFOneaWrF5nxfpdsNz9L7yOivu6\n", + "\n", + "Title: Starring Frank Reynolds (It's Always Sunny in Philadelphia) Tag your artist friends! … | It's always sunny in philadelphia, It's always sunny, Sunny in philadelphia\n", + "Source(Pinterest): https://id.pinterest.com/pin/315181673920804792/\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRCuBvS4jdGA3_YlPX_-E4QaWnv43DXhySsJAoSy8Y_PwtHW1oC\n", + "\n", + "Title: Create a Top 100 White People Tier List - TierMaker\n", + "Source(TierMaker): https://tiermaker.com/create/top-100-white-people-1243701\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTpDM6YwQpn952yLt0W8O6EIDUKRn1-4UQc0Lum2_2IFrUeZeN4\n", + "\n", + "Title: P R E S S U R E | Rochelle Jordan\n", + "Source(Bandcamp): https://rochellejordan.bandcamp.com/album/p-r-e-s-s-u-r-e\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTY1o_f9y5GF5lIhFl1wALTEXCU8h1HVxDQIRbxvZhd8I4u312j\n", + "\n", + "Title: Danny DeVito Net Worth, Biography Age, Family, wiki, And Life Story - JAKADIYAR AREWA\n", + "Source(JAKADIYAR AREWA): https://www.jakadiyararewa.com.ng/2023/05/danny-devito-net-worth-biography-age.html\n", + "Image: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcRAfAt8msNdjwKqmCP7PtgdLWxWpGfXshGiL9iF2mJ4J6MeK_oU\n", + "\n", + "Title: Actors in the Most Tim Burton Movies\n", + "Source(Ranker): https://www.ranker.com/list/actors-in-the-most-tim-burton-movies/ranker-film\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcRh1I6T1RvdyzauITQ4CcZheqCorQtfZZt9w_-b7-l9gjD6E8dy\n", + "\n", + "Title: File:Danny DeVito 2011.jpg - Wikimedia Commons\n", + "Source(Wikimedia): https://commons.wikimedia.org/wiki/File:Danny_DeVito_2011.jpg\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcR81S9hnwqjxwtyAGx5HmDLGealisuAt8m-f2baNLgJroxheFi0\n", + "\n", + "Title: Warlock | A D&D Audio Drama⭐ on Twitter: \"Easy, Gandalf! #lotr https://t.co/XOwnQD0uVd\" / X\n", + "Source(Twitter): https://twitter.com/Warlockdnd/status/1462582649571139586\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQUZ-666ydtuN02MSkM32w-61j9cpIIrXI8bWsKAJRzG3irR8Yg\n", + "\n", + "Title: Pin by Sarah Richardson on nice photos of danny devito | Danny devito, Celebrity caricatures, Cute celebrities\n", + "Source(Pinterest): https://www.pinterest.com/pin/600526931536339674/\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcSoMQ0XnsrNUqpXNgKeAyjXX4PgNlCdJksiAv23Y0h4w_Kn2SUO\n", + "\n", + "Title: Is Jennifer Lawrence Jewish? - Wondering: Is Danny DeVito Jewish?\n", + "Source(Blogger): http://jenniferlawrencejewishwondering.blogspot.com/2012/02/is-danny-devito-jewish.html\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTQjUbutXtyO4Vv9g3cRjc8IF5h8IKO-3JvpNJDm-WR40fwtUTz\n", + "\n", + "Title: Randorfizz Stories - Wattpad\n", + "Source(Wattpad): https://www.wattpad.com/stories/randorfizz\n", + "Image: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcSuaG_WJmQqIXTBqHAQsim0LiOQrmtLAT-DSrJ0wsWLGnfrOgiC\n", + "\n", + "Title: What is the name of the agreement that laid the foundation for a limited monarchy in England? - brainly.com\n", + "Source(Brainly): https://brainly.com/question/7194019\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTsasmT8IK-Pasa10LGayrjgmxerp80HuFThhfTCut3m4hSPM4F\n", + "\n", + "Title: Find an Actor to Play Danny DeVito in The Beatles Yellow Submarine [ Remake ] on myCast\n", + "Source(myCast.io): https://www.mycast.io/stories/the-beatles-yellow-submarine-remake/roles/danny-devito-1/6531784/cast\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRu8vm6Po98ZACAXzithjj6yKDxhQtgKPDC6rSKLMcFfhv8FreR\n", + "\n", + "Title: Journey's End Vanity Contest Submission Thread | Page 301 | Terraria Community Forums\n", + "Source(Terraria): https://forums.terraria.org/index.php?threads/journeys-end-vanity-contest-submission-thread.86457/page-301\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTjsnksAzRqRhoH1SSxHTk7uBjhzLjHl-EZyKN8gI1kzTNO3irh\n", + "\n", + "Title: Better Characters… : r/TheMandalorianTV\n", + "Source(Reddit): https://www.reddit.com/r/TheMandalorianTV/comments/11wi6z6/better_characters/\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcR6DeMvwDob6F149S84_jRNw4kkVfVFQiFi1tnDVghTMJv1ghHw\n", + "\n", + "Title: Top 5 Bald Men Style Tips- a guide to how to rock the bald look\n", + "Source(asharpdressedman.com): https://asharpdressedman.com/top-5-bald-men-style-tips/\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcRr1fIuLo78h_-LgRGk6R5dyt3jk9eloSNuqWKA-Xb_4aTuB0yh\n", + "\n", + "Title: Danny DeVito Facts for Kids\n", + "Source(Kiddle): https://kids.kiddle.co/Danny_DeVito\n", + "Image: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcRa0rikFTYgSgOyt3XuVtFg4qvPY5xzOABgXi8Kx0y9wdvHTHJa\n", + "\n", + "Title: Total Drama Fan-casting - Duncan : r/Totaldrama\n", + "Source(Reddit): https://www.reddit.com/r/Totaldrama/comments/111c9wi/total_drama_fancasting_duncan/\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSzRzJmkh0NJqG1eHky0jCyzlje8ZVF8GMVIS0F6NjzTOTAWZas\n", + "\n", + "Title: Danny DeVito - Alchetron, The Free Social Encyclopedia\n", + "Source(Alchetron.com): https://alchetron.com/Danny-DeVito\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTBL-5gHoQCIQ9nftiTBrHtKb0hQftD5FkZaBexyKJVfFBa8gEI\n", + "\n", + "Title: Which of these Acts forced American colonists to allow British troops to stay in their homes? the - brainly.com\n", + "Source(Brainly): https://brainly.com/question/19184876\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcR5efzmJVyU63yHNOrtHtr7HqY2fA7R3i_h4GqmGmQAjnRwULNo\n", + "\n", + "Title: Nathan Heald - Bettendorf, Iowa | about.me\n", + "Source(About.me): https://about.me/nathanheald2020\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcT9oNTZAOVsfDYlvne3MS9Uk6utafVrOcMwBxfXuI1qLLpd4Yvk\n", + "\n", + "Title: Dannydevito Stories - Wattpad\n", + "Source(Wattpad): https://mobile.wattpad.com/stories/dannydevito/new\n", + "Image: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcT15bfDZnlFZZNWytOFpDYe3JgKr8H0Nccm7Dt_2KfsqHDK0KnH\n", + "\n", + "Title: Drunk Celebrities | Crazy Things Famous People Have Done While Drunk\n", + "Source(Ranker): https://www.ranker.com/list/things-celebrities-have-done-drunk/celebrity-lists\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTfX2sB59QDDJMuBcSXR9gvpkBjCDiHacCLRq9SYSBdj-apAecM\n", + "\n", + "Title: Actress Jessica Walter and Aisha Tyler of the television show... News Photo - Getty Images\n", + "Source(Getty Images): https://www.gettyimages.ca/detail/103221172\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTwB7RxA0jvAOWhas8KCl3im7viaTuha3jJcd2O-cR2oUMh9mPx\n", + "\n", + "Title: Jones BBQ and Foot Massage, W 119th St, Chicago, IL, Barbecue restaurant - MapQuest\n", + "Source(MapQuest): https://www.mapquest.com/us/illinois/jones-bbq-and-foot-massage-427925192\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSN7Ril--htuGdToqlbVnozBNw07F4iRziioDb6l4iB-XR2Ut5z\n", + "\n", + "Title: Danny Devito | Made up Characters Wiki | Fandom\n", + "Source(Fandom): https://muc.fandom.com/wiki/Danny_Devito\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcTOP6c2mD5E_r5Ni_kBVWnWUuud3rKsq7dDNxK2pyEW1NgCrUoR\n", + "\n", + "Title: Not even sorry : r/2westerneurope4u\n", + "Source(Reddit): https://www.reddit.com/r/2westerneurope4u/comments/1510k3o/not_even_sorry/\n", + "Image: https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcRvjrraaXuyKTBNM9jcElIizdl7zV7TjunI3BmPPyEQDWd5fQC8\n", + "\n", + "Title: Eduardo García-Molina on X: \"Quintus, fetch the oil container shaped like a satyr that resembles Danny Devito. https://t.co/ykq7DjYNsw\" / X\n", + "Source(Twitter): https://twitter.com/eduardo_garcmol/status/1529073971924197379\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ8exTZLs7tS5A5hRHu1mzfcxF_HCFmFJjI8i1_s6CNrv-6880C\n", + "\n", + "Title: Over 10k People Have Signed A Petition To Make Danny DeVito The New Wolverine | Bored Panda\n", + "Source(Bored Panda): https://www.boredpanda.com/petition-danny-devito-wolverine-mcu/\n", + "Image: https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQkZH-q5fAaWJxLFqcdF0UF9330mew-ZcaP5kHV777SsBOvp5C0\n", + "\n", + "Title: 25 Celebrities Who Had Strange Jobs Before Becoming Famous\n", + "Source(List25): https://list25.com/25-celebrities-who-had-strange-jobs-before-becoming-famous/\n", + "Image: https://encrypted-tbn1.gstatic.com/images?q=tbn:ANd9GcT_vmlaNBdScdL2Izbw1ZxZ3CdtR3-GHB1v1CHGjSAoF0TZbKHu\n", + "\n", + "Title: Devito Stories - Wattpad\n", + "Source(Wattpad): https://www.wattpad.com/stories/devito\n", + "Image: https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSi5b1ySjaeTJ03fpTaLEywhm4tIK3V09PNbSUxPzJXbYJAzI4U\n", + "\n", + "Reverse Image Search Link: https://www.google.com/search?tbs=sbi:AMhZZiv9acCYDkXLdR2-t3B1NkMkwOSRU-HfCIRFpYNWIVV2HdvcQJXAXmrouFitURVBkGChb8nYqHanJy4XqFL0fwt_195TZ2y0pnWZpmvecdawnkL2pwu-4F7H09e9b6SVe3Gb9fGljXuTAL8jUXOEv078EfxLyQA" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + }, + "vscode": { + "interpreter": { + "hash": "15e58ce194949b77a891bd4339ce3d86a9bd138e905926019517993f97db9e6c" + } + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/docs/docs/integrations/tools/google_trends.ipynb b/docs/docs/integrations/tools/google_trends.ipynb new file mode 100644 index 00000000000..1d055593788 --- /dev/null +++ b/docs/docs/integrations/tools/google_trends.ipynb @@ -0,0 +1,109 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Google Trends\n", + "\n", + "This notebook goes over how to use the Google Trends Tool to fetch trends information.\n", + "\n", + "First, you need to sign up for an `SerpApi key` key at: https://serpapi.com/users/sign_up.\n", + "\n", + "Then you must install `google-search-results` with the command:\n", + "\n", + "`pip install google-search-results`\n", + "\n", + "Then you will need to set the environment variable `SERPAPI_API_KEY` to your `SerpApi key`\n", + "\n", + "[Alternatively you can pass the key in as a argument to the wrapper `serp_api_key=\"your secret key\"`]\n", + "\n", + "## Use the Tool" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Requirement already satisfied: google-search-results in c:\\python311\\lib\\site-packages (2.4.2)\n", + "Requirement already satisfied: requests in c:\\python311\\lib\\site-packages (from google-search-results) (2.31.0)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in c:\\python311\\lib\\site-packages (from requests->google-search-results) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in c:\\python311\\lib\\site-packages (from requests->google-search-results) (3.4)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in c:\\python311\\lib\\site-packages (from requests->google-search-results) (2.1.0)\n", + "Requirement already satisfied: certifi>=2017.4.17 in c:\\python311\\lib\\site-packages (from requests->google-search-results) (2023.7.22)\n" + ] + } + ], + "source": [ + "!pip install google-search-results" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "from langchain.tools.google_trends import GoogleTrendsQueryRun\n", + "from langchain.utilities.google_trends import GoogleTrendsAPIWrapper\n", + "\n", + "os.environ[\"SERPAPI_API_KEY\"] = \"\"\n", + "tool = GoogleTrendsQueryRun(api_wrapper=GoogleTrendsAPIWrapper())" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Query: Water\\nDate From: Nov 20, 2022\\nDate To: Nov 11, 2023\\nMin Value: 72\\nMax Value: 100\\nAverage Value: 84.25490196078431\\nPrecent Change: 5.555555555555555%\\nTrend values: 72, 72, 74, 77, 86, 80, 82, 88, 79, 79, 85, 82, 81, 84, 83, 77, 80, 85, 82, 80, 88, 84, 82, 84, 83, 85, 92, 92, 100, 92, 100, 96, 94, 95, 94, 98, 96, 84, 86, 84, 85, 83, 83, 76, 81, 85, 78, 77, 81, 75, 76\\nRising Related Queries: avatar way of water, avatar the way of water, owala water bottle, air up water bottle, lake mead water level\\nTop Related Queries: water park, water bottle, water heater, water filter, water tank, water bill, water world, avatar way of water, avatar the way of water, coconut water, deep water, water cycle, water dispenser, water purifier, water pollution, distilled water, hot water heater, water cooler, sparkling water, american water, micellar water, density of water, tankless water heater, tonic water, water jug'" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tool.run(\"Water\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.9.16 ('langchain')", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.4" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "15e58ce194949b77a891bd4339ce3d86a9bd138e905926019517993f97db9e6c" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/libs/langchain/langchain/agents/load_tools.py b/libs/langchain/langchain/agents/load_tools.py index f32cb50f7e3..3daf147e7fd 100644 --- a/libs/langchain/langchain/agents/load_tools.py +++ b/libs/langchain/langchain/agents/load_tools.py @@ -34,9 +34,13 @@ from langchain.tools.base import BaseTool from langchain.tools.bing_search.tool import BingSearchRun from langchain.tools.ddg_search.tool import DuckDuckGoSearchRun from langchain.tools.google_cloud.texttospeech import GoogleCloudTextToSpeechTool +from langchain.tools.google_lens.tool import GoogleLensQueryRun from langchain.tools.google_search.tool import GoogleSearchResults, GoogleSearchRun from langchain.tools.google_scholar.tool import GoogleScholarQueryRun +from langchain.tools.google_finance.tool import GoogleFinanceQueryRun +from langchain.tools.google_trends.tool import GoogleTrendsQueryRun from langchain.tools.metaphor_search.tool import MetaphorSearchResults +from langchain.tools.google_jobs.tool import GoogleJobsQueryRun from langchain.tools.google_serper.tool import GoogleSerperResults, GoogleSerperRun from langchain.tools.searchapi.tool import SearchAPIResults, SearchAPIRun from langchain.tools.graphql.tool import BaseGraphQLTool @@ -65,9 +69,13 @@ from langchain.utilities.golden_query import GoldenQueryAPIWrapper from langchain.utilities.pubmed import PubMedAPIWrapper from langchain.utilities.bing_search import BingSearchAPIWrapper from langchain.utilities.duckduckgo_search import DuckDuckGoSearchAPIWrapper +from langchain.utilities.google_lens import GoogleLensAPIWrapper +from langchain.utilities.google_jobs import GoogleJobsAPIWrapper from langchain.utilities.google_search import GoogleSearchAPIWrapper from langchain.utilities.google_serper import GoogleSerperAPIWrapper from langchain.utilities.google_scholar import GoogleScholarAPIWrapper +from langchain.utilities.google_finance import GoogleFinanceAPIWrapper +from langchain.utilities.google_trends import GoogleTrendsAPIWrapper from langchain.utilities.metaphor_search import MetaphorSearchAPIWrapper from langchain.utilities.awslambda import LambdaWrapper from langchain.utilities.graphql import GraphQLAPIWrapper @@ -238,6 +246,14 @@ def _get_pubmed(**kwargs: Any) -> BaseTool: return PubmedQueryRun(api_wrapper=PubMedAPIWrapper(**kwargs)) +def _get_google_jobs(**kwargs: Any) -> BaseTool: + return GoogleJobsQueryRun(api_wrapper=GoogleJobsAPIWrapper(**kwargs)) + + +def _get_google_lens(**kwargs: Any) -> BaseTool: + return GoogleLensQueryRun(api_wrapper=GoogleLensAPIWrapper(**kwargs)) + + def _get_google_serper(**kwargs: Any) -> BaseTool: return GoogleSerperRun(api_wrapper=GoogleSerperAPIWrapper(**kwargs)) @@ -246,6 +262,14 @@ def _get_google_scholar(**kwargs: Any) -> BaseTool: return GoogleScholarQueryRun(api_wrapper=GoogleScholarAPIWrapper(**kwargs)) +def _get_google_finance(**kwargs: Any) -> BaseTool: + return GoogleFinanceQueryRun(api_wrapper=GoogleFinanceAPIWrapper(**kwargs)) + + +def _get_google_trends(**kwargs: Any) -> BaseTool: + return GoogleTrendsQueryRun(api_wrapper=GoogleTrendsAPIWrapper(**kwargs)) + + def _get_google_serper_results_json(**kwargs: Any) -> BaseTool: return GoogleSerperResults(api_wrapper=GoogleSerperAPIWrapper(**kwargs)) @@ -373,11 +397,24 @@ _EXTRA_OPTIONAL_TOOLS: Dict[str, Tuple[Callable[[KwArg(Any)], BaseTool], List[st "bing-search": (_get_bing_search, ["bing_subscription_key", "bing_search_url"]), "metaphor-search": (_get_metaphor_search, ["metaphor_api_key"]), "ddg-search": (_get_ddg_search, []), + "google-lens": (_get_google_lens, ["serp_api_key"]), "google-serper": (_get_google_serper, ["serper_api_key", "aiosession"]), "google-scholar": ( _get_google_scholar, ["top_k_results", "hl", "lr", "serp_api_key"], ), + "google-finance": ( + _get_google_finance, + ["serp_api_key"], + ), + "google-trends": ( + _get_google_trends, + ["serp_api_key"], + ), + "google-jobs": ( + _get_google_jobs, + ["serp_api_key"], + ), "google-serper-results-json": ( _get_google_serper_results_json, ["serper_api_key", "aiosession"], @@ -519,13 +556,14 @@ def load_tools( callbacks = _handle_callbacks( callback_manager=kwargs.get("callback_manager"), callbacks=callbacks ) + # print(_BASE_TOOLS) + # print(1) for name in tool_names: if name == "requests": warnings.warn( "tool name `requests` is deprecated - " "please use `requests_all` or specify the requests method" ) - if name == "requests_all": # expand requests into various methods requests_method_tools = [ diff --git a/libs/langchain/langchain/tools/google_finance/__init__.py b/libs/langchain/langchain/tools/google_finance/__init__.py new file mode 100644 index 00000000000..7cd4e60981c --- /dev/null +++ b/libs/langchain/langchain/tools/google_finance/__init__.py @@ -0,0 +1,5 @@ +"""Google Finance API Toolkit.""" + +from langchain.tools.google_finance.tool import GoogleFinanceQueryRun + +__all__ = ["GoogleFinanceQueryRun"] diff --git a/libs/langchain/langchain/tools/google_finance/tool.py b/libs/langchain/langchain/tools/google_finance/tool.py new file mode 100644 index 00000000000..fe8f1f43db1 --- /dev/null +++ b/libs/langchain/langchain/tools/google_finance/tool.py @@ -0,0 +1,28 @@ +"""Tool for the Google Finance""" + +from typing import Optional + +from langchain.callbacks.manager import CallbackManagerForToolRun +from langchain.tools.base import BaseTool +from langchain.utilities.google_finance import GoogleFinanceAPIWrapper + + +class GoogleFinanceQueryRun(BaseTool): + """Tool that queries the Google Finance API.""" + + name: str = "google_finance" + description: str = ( + "A wrapper around Google Finance Search. " + "Useful for when you need to get information about" + "google search Finance from Google Finance" + "Input should be a search query." + ) + api_wrapper: GoogleFinanceAPIWrapper + + def _run( + self, + query: str, + run_manager: Optional[CallbackManagerForToolRun] = None, + ) -> str: + """Use the tool.""" + return self.api_wrapper.run(query) diff --git a/libs/langchain/langchain/tools/google_jobs/__init__.py b/libs/langchain/langchain/tools/google_jobs/__init__.py new file mode 100644 index 00000000000..c0958859a60 --- /dev/null +++ b/libs/langchain/langchain/tools/google_jobs/__init__.py @@ -0,0 +1,5 @@ +"""Google Jobs API Toolkit.""" + +from langchain.tools.google_jobs.tool import GoogleJobsQueryRun + +__all__ = ["GoogleJobsQueryRun"] diff --git a/libs/langchain/langchain/tools/google_jobs/tool.py b/libs/langchain/langchain/tools/google_jobs/tool.py new file mode 100644 index 00000000000..49e81e9e504 --- /dev/null +++ b/libs/langchain/langchain/tools/google_jobs/tool.py @@ -0,0 +1,28 @@ +"""Tool for the Google Trends""" + +from typing import Optional + +from langchain.callbacks.manager import CallbackManagerForToolRun +from langchain.tools.base import BaseTool +from langchain.utilities.google_jobs import GoogleJobsAPIWrapper + + +class GoogleJobsQueryRun(BaseTool): + """Tool that queries the Google Jobs API.""" + + name: str = "google_jobs" + description: str = ( + "A wrapper around Google Jobs Search. " + "Useful for when you need to get information about" + "google search Jobs from Google Jobs" + "Input should be a search query." + ) + api_wrapper: GoogleJobsAPIWrapper + + def _run( + self, + query: str, + run_manager: Optional[CallbackManagerForToolRun] = None, + ) -> str: + """Use the tool.""" + return self.api_wrapper.run(query) diff --git a/libs/langchain/langchain/tools/google_lens/__init__.py b/libs/langchain/langchain/tools/google_lens/__init__.py new file mode 100644 index 00000000000..8af2567d751 --- /dev/null +++ b/libs/langchain/langchain/tools/google_lens/__init__.py @@ -0,0 +1,5 @@ +"""Google Lens API Toolkit.""" + +from langchain.tools.google_lens.tool import GoogleLensQueryRun + +__all__ = ["GoogleLensQueryRun"] diff --git a/libs/langchain/langchain/tools/google_lens/tool.py b/libs/langchain/langchain/tools/google_lens/tool.py new file mode 100644 index 00000000000..5092835720a --- /dev/null +++ b/libs/langchain/langchain/tools/google_lens/tool.py @@ -0,0 +1,28 @@ +"""Tool for the Google Lens""" + +from typing import Optional + +from langchain.callbacks.manager import CallbackManagerForToolRun +from langchain.tools.base import BaseTool +from langchain.utilities.google_lens import GoogleLensAPIWrapper + + +class GoogleLensQueryRun(BaseTool): + """Tool that queries the Google Lens API.""" + + name: str = "google_Lens" + description: str = ( + "A wrapper around Google Lens Search. " + "Useful for when you need to get information related" + "to an image from Google Lens" + "Input should be a url to an image." + ) + api_wrapper: GoogleLensAPIWrapper + + def _run( + self, + query: str, + run_manager: Optional[CallbackManagerForToolRun] = None, + ) -> str: + """Use the tool.""" + return self.api_wrapper.run(query) diff --git a/libs/langchain/langchain/tools/google_trends/__init__.py b/libs/langchain/langchain/tools/google_trends/__init__.py new file mode 100644 index 00000000000..a58b394a406 --- /dev/null +++ b/libs/langchain/langchain/tools/google_trends/__init__.py @@ -0,0 +1,5 @@ +"""Google Trends API Toolkit.""" + +from langchain.tools.google_trends.tool import GoogleTrendsQueryRun + +__all__ = ["GoogleTrendsQueryRun"] diff --git a/libs/langchain/langchain/tools/google_trends/tool.py b/libs/langchain/langchain/tools/google_trends/tool.py new file mode 100644 index 00000000000..e475a0274bb --- /dev/null +++ b/libs/langchain/langchain/tools/google_trends/tool.py @@ -0,0 +1,28 @@ +"""Tool for the Google Trends""" + +from typing import Optional + +from langchain.callbacks.manager import CallbackManagerForToolRun +from langchain.tools.base import BaseTool +from langchain.utilities.google_trends import GoogleTrendsAPIWrapper + + +class GoogleTrendsQueryRun(BaseTool): + """Tool that queries the Google trends API.""" + + name: str = "google_trends" + description: str = ( + "A wrapper around Google Trends Search. " + "Useful for when you need to get information about" + "google search trends from Google Trends" + "Input should be a search query." + ) + api_wrapper: GoogleTrendsAPIWrapper + + def _run( + self, + query: str, + run_manager: Optional[CallbackManagerForToolRun] = None, + ) -> str: + """Use the tool.""" + return self.api_wrapper.run(query) diff --git a/libs/langchain/langchain/utilities/__init__.py b/libs/langchain/langchain/utilities/__init__.py index 865144f0458..3014fcb088a 100644 --- a/libs/langchain/langchain/utilities/__init__.py +++ b/libs/langchain/langchain/utilities/__init__.py @@ -68,18 +68,42 @@ def _import_golden_query() -> Any: return GoldenQueryAPIWrapper +def _import_google_lens() -> Any: + from langchain.utilities.google_lens import GoogleLensAPIWrapper + + return GoogleLensAPIWrapper + + def _import_google_places_api() -> Any: from langchain.utilities.google_places_api import GooglePlacesAPIWrapper return GooglePlacesAPIWrapper +def _import_google_jobs() -> Any: + from langchain.utilities.google_jobs import GoogleJobsAPIWrapper + + return GoogleJobsAPIWrapper + + def _import_google_scholar() -> Any: from langchain.utilities.google_scholar import GoogleScholarAPIWrapper return GoogleScholarAPIWrapper +def _import_google_trends() -> Any: + from langchain.utilities.google_trends import GoogleTrendsAPIWrapper + + return GoogleTrendsAPIWrapper + + +def _import_google_finance() -> Any: + from langchain.utilities.google_finance import GoogleFinanceAPIWrapper + + return GoogleFinanceAPIWrapper + + def _import_google_search() -> Any: from langchain.utilities.google_search import GoogleSearchAPIWrapper @@ -243,10 +267,18 @@ def __getattr__(name: str) -> Any: return _import_brave_search() elif name == "DuckDuckGoSearchAPIWrapper": return _import_duckduckgo_search() + elif name == "GoogleLensAPIWrapper": + return _import_google_lens() elif name == "GoldenQueryAPIWrapper": return _import_golden_query() + elif name == "GoogleJobsAPIWrapper": + return _import_google_jobs() elif name == "GoogleScholarAPIWrapper": return _import_google_scholar() + elif name == "GoogleFinanceAPIWrapper": + return _import_google_finance() + elif name == "GoogleTrendsAPIWrapper": + return _import_google_trends() elif name == "GooglePlacesAPIWrapper": return _import_google_places_api() elif name == "GoogleSearchAPIWrapper": @@ -311,8 +343,12 @@ __all__ = [ "BraveSearchWrapper", "DuckDuckGoSearchAPIWrapper", "GoldenQueryAPIWrapper", + "GoogleFinanceAPIWrapper", + "GoogleLensAPIWrapper", + "GoogleJobsAPIWrapper", "GooglePlacesAPIWrapper", "GoogleScholarAPIWrapper", + "GoogleTrendsAPIWrapper", "GoogleSearchAPIWrapper", "GoogleSerperAPIWrapper", "GraphQLAPIWrapper", diff --git a/libs/langchain/langchain/utilities/google_finance.py b/libs/langchain/langchain/utilities/google_finance.py new file mode 100644 index 00000000000..9baad38416c --- /dev/null +++ b/libs/langchain/langchain/utilities/google_finance.py @@ -0,0 +1,97 @@ +"""Util that calls Google Finance Search.""" +from typing import Any, Dict, Optional, cast + +from langchain.pydantic_v1 import BaseModel, Extra, SecretStr, root_validator +from langchain.utils import convert_to_secret_str, get_from_dict_or_env + + +class GoogleFinanceAPIWrapper(BaseModel): + """Wrapper for SerpApi's Google Finance API + You can create SerpApi.com key by signing up at: https://serpapi.com/users/sign_up. + The wrapper uses the SerpApi.com python package: + https://serpapi.com/integrations/python + To use, you should have the environment variable ``SERPAPI_API_KEY`` + set with your API key, or pass `serp_api_key` as a named parameter + to the constructor. + Example: + .. code-block:: python + from langchain.utilities import GoogleFinanceAPIWrapper + google_Finance = GoogleFinanceAPIWrapper() + google_Finance.run('langchain') + """ + + serp_search_engine: Any + serp_api_key: Optional[SecretStr] = None + + class Config: + """Configuration for this pydantic object.""" + + extra = Extra.forbid + + @root_validator() + def validate_environment(cls, values: Dict) -> Dict: + """Validate that api key and python package exists in environment.""" + values["serp_api_key"] = convert_to_secret_str( + get_from_dict_or_env(values, "serp_api_key", "SERPAPI_API_KEY") + ) + + try: + from serpapi import SerpApiClient + + except ImportError: + raise ImportError( + "google-search-results is not installed. " + "Please install it with `pip install google-search-results" + ">=2.4.2`" + ) + serp_search_engine = SerpApiClient + values["serp_search_engine"] = serp_search_engine + + return values + + def run(self, query: str) -> str: + """Run query through Google Finance with Serpapi""" + serpapi_api_key = cast(SecretStr, self.serp_api_key) + params = { + "engine": "google_finance", + "api_key": serpapi_api_key.get_secret_value(), + "q": query, + } + + total_results = {} + client = self.serp_search_engine(params) + total_results = client.get_dict() + + if not total_results: + return "Nothing was found from the query: " + query + + markets = total_results.get("markets", {}) + res = "\nQuery: " + query + "\n" + + if "futures_chain" in total_results: + futures_chain = total_results.get("futures_chain", [])[0] + stock = futures_chain["stock"] + price = futures_chain["price"] + temp = futures_chain["price_movement"] + percentage = temp["percentage"] + movement = temp["movement"] + res += ( + f"stock: {stock}\n" + + f"price: {price}\n" + + f"percentage: {percentage}\n" + + f"movement: {movement}\n" + ) + + else: + res += "No summary information\n" + + for key in markets: + if (key == "us") or (key == "asia") or (key == "europe"): + res += key + res += ": price = " + res += str(markets[key][0]["price"]) + res += ", movement = " + res += markets[key][0]["price_movement"]["movement"] + res += "\n" + + return res diff --git a/libs/langchain/langchain/utilities/google_jobs.py b/libs/langchain/langchain/utilities/google_jobs.py new file mode 100644 index 00000000000..f461310f28c --- /dev/null +++ b/libs/langchain/langchain/utilities/google_jobs.py @@ -0,0 +1,80 @@ +"""Util that calls Google Scholar Search.""" +from typing import Any, Dict, Optional, cast + +from langchain.pydantic_v1 import BaseModel, Extra, SecretStr, root_validator +from langchain.utils import convert_to_secret_str, get_from_dict_or_env + + +class GoogleJobsAPIWrapper(BaseModel): + """Wrapper for SerpApi's Google Scholar API + You can create SerpApi.com key by signing up at: https://serpapi.com/users/sign_up. + The wrapper uses the SerpApi.com python package: + https://serpapi.com/integrations/python + To use, you should have the environment variable ``SERPAPI_API_KEY`` + set with your API key, or pass `serp_api_key` as a named parameter + to the constructor. + Example: + .. code-block:: python + from langchain.utilities import GoogleJobsAPIWrapper + google_Jobs = GoogleJobsAPIWrapper() + google_Jobs.run('langchain') + """ + + serp_search_engine: Any + serp_api_key: Optional[SecretStr] = None + + class Config: + """Configuration for this pydantic object.""" + + extra = Extra.forbid + + @root_validator() + def validate_environment(cls, values: Dict) -> Dict: + """Validate that api key and python package exists in environment.""" + values["serp_api_key"] = convert_to_secret_str( + get_from_dict_or_env(values, "serp_api_key", "SERPAPI_API_KEY") + ) + + try: + from serpapi import SerpApiClient + + except ImportError: + raise ImportError( + "google-search-results is not installed. " + "Please install it with `pip install google-search-results" + ">=2.4.2`" + ) + serp_search_engine = SerpApiClient + values["serp_search_engine"] = serp_search_engine + + return values + + def run(self, query: str) -> str: + """Run query through Google Trends with Serpapi""" + + # set up query + serpapi_api_key = cast(SecretStr, self.serp_api_key) + params = { + "engine": "google_jobs", + "api_key": serpapi_api_key.get_secret_value(), + "q": query, + } + + total_results = [] + client = self.serp_search_engine(params) + total_results = client.get_dict()["jobs_results"] + + # extract 1 job info: + res_str = "" + for i in range(1): + job = total_results[i] + res_str += ( + "\n_______________________________________________" + + f"\nJob Title: {job['title']}\n" + + f"Company Name: {job['company_name']}\n" + + f"Location: {job['location']}\n" + + f"Description: {job['description']}" + + "\n_______________________________________________\n" + ) + + return res_str + "\n" diff --git a/libs/langchain/langchain/utilities/google_lens.py b/libs/langchain/langchain/utilities/google_lens.py new file mode 100644 index 00000000000..b17d8a41878 --- /dev/null +++ b/libs/langchain/langchain/utilities/google_lens.py @@ -0,0 +1,85 @@ +"""Util that calls Google Lens Search.""" +from typing import Any, Dict, Optional, cast + +import requests + +from langchain.pydantic_v1 import BaseModel, Extra, SecretStr, root_validator +from langchain.utils import convert_to_secret_str, get_from_dict_or_env + + +class GoogleLensAPIWrapper(BaseModel): + """Wrapper for SerpApi's Google Lens API + + You can create SerpApi.com key by signing up at: https://serpapi.com/users/sign_up. + + The wrapper uses the SerpApi.com python package: + https://serpapi.com/integrations/python + + To use, you should have the environment variable ``SERPAPI_API_KEY`` + set with your API key, or pass `serp_api_key` as a named parameter + to the constructor. + + Example: + .. code-block:: python + + from langchain.utilities import GoogleLensAPIWrapper + google_lens = GoogleLensAPIWrapper() + google_lens.run('langchain') + """ + + serp_search_engine: Any + serp_api_key: Optional[SecretStr] = None + + class Config: + """Configuration for this pydantic object.""" + + extra = Extra.forbid + + @root_validator() + def validate_environment(cls, values: Dict) -> Dict: + """Validate that api key and python package exists in environment.""" + values["serp_api_key"] = convert_to_secret_str( + get_from_dict_or_env(values, "serp_api_key", "SERPAPI_API_KEY") + ) + + return values + + def run(self, query: str) -> str: + """Run query through Google Trends with Serpapi""" + serpapi_api_key = cast(SecretStr, self.serp_api_key) + + params = { + "engine": "google_lens", + "api_key": serpapi_api_key.get_secret_value(), + "url": query, + } + queryURL = f"https://serpapi.com/search?engine={params['engine']}&api_key={params['api_key']}&url={params['url']}" + response = requests.get(queryURL) + + if response.status_code != 200: + return "Google Lens search failed" + + responseValue = response.json() + + if responseValue["search_metadata"]["status"] != "Success": + return "Google Lens search failed" + + xs = "" + if len(responseValue["knowledge_graph"]) > 0: + subject = responseValue["knowledge_graph"][0] + xs += f"Subject:{subject['title']}({subject['subtitle']})\n" + xs += f"Link to subject:{subject['link']}\n\n" + xs += "Related Images:\n\n" + for image in responseValue["visual_matches"]: + xs += f"Title: {image['title']}\n" + xs += f"Source({image['source']}): {image['link']}\n" + xs += f"Image: {image['thumbnail']}\n\n" + xs += ( + "Reverse Image Search" + + f"Link: {responseValue['reverse_image_search']['link']}\n" + ) + print(xs) + + docs = [xs] + + return "\n\n".join(docs) diff --git a/libs/langchain/langchain/utilities/google_trends.py b/libs/langchain/langchain/utilities/google_trends.py new file mode 100644 index 00000000000..7af4523b914 --- /dev/null +++ b/libs/langchain/langchain/utilities/google_trends.py @@ -0,0 +1,116 @@ +"""Util that calls Google Scholar Search.""" +from typing import Any, Dict, Optional, cast + +from langchain.pydantic_v1 import BaseModel, Extra, SecretStr, root_validator +from langchain.utils import convert_to_secret_str, get_from_dict_or_env + + +class GoogleTrendsAPIWrapper(BaseModel): + """Wrapper for SerpApi's Google Scholar API + + You can create SerpApi.com key by signing up at: https://serpapi.com/users/sign_up. + + The wrapper uses the SerpApi.com python package: + https://serpapi.com/integrations/python + + To use, you should have the environment variable ``SERPAPI_API_KEY`` + set with your API key, or pass `serp_api_key` as a named parameter + to the constructor. + + Example: + .. code-block:: python + + from langchain.utilities import GoogleTrendsAPIWrapper + google_trends = GoogleTrendsAPIWrapper() + google_trends.run('langchain') + """ + + serp_search_engine: Any + serp_api_key: Optional[SecretStr] = None + + class Config: + """Configuration for this pydantic object.""" + + extra = Extra.forbid + + @root_validator() + def validate_environment(cls, values: Dict) -> Dict: + """Validate that api key and python package exists in environment.""" + values["serp_api_key"] = convert_to_secret_str( + get_from_dict_or_env(values, "serp_api_key", "SERPAPI_API_KEY") + ) + + try: + from serpapi import SerpApiClient + + except ImportError: + raise ImportError( + "google-search-results is not installed. " + "Please install it with `pip install google-search-results" + ">=2.4.2`" + ) + serp_search_engine = SerpApiClient + values["serp_search_engine"] = serp_search_engine + + return values + + def run(self, query: str) -> str: + """Run query through Google Trends with Serpapi""" + serpapi_api_key = cast(SecretStr, self.serp_api_key) + params = { + "engine": "google_trends", + "api_key": serpapi_api_key.get_secret_value(), + "q": query, + } + + total_results = [] + client = self.serp_search_engine(params) + total_results = client.get_dict()["interest_over_time"]["timeline_data"] + + if not total_results: + return "No good Trend Result was found" + + start_date = total_results[0]["date"].split() + end_date = total_results[-1]["date"].split() + values = [ + results.get("values")[0].get("extracted_value") for results in total_results + ] + min_value = min(values) + max_value = max(values) + avg_value = sum(values) / len(values) + percentage_change = ( + (values[-1] - values[0]) + / (values[0] if values[0] != 0 else 1) + * (100 if values[0] != 0 else 1) + ) + + params = { + "engine": "google_trends", + "api_key": serpapi_api_key.get_secret_value(), + "data_type": "RELATED_QUERIES", + "q": query, + } + + total_results2 = {} + client = self.serp_search_engine(params) + total_results2 = client.get_dict().get("related_queries", {}) + rising = [] + top = [] + + rising = [results.get("query") for results in total_results2.get("rising", [])] + top = [results.get("query") for results in total_results2.get("top", [])] + + doc = [ + f"Query: {query}\n" + f"Date From: {start_date[0]} {start_date[1]}, {start_date[-1]}\n" + f"Date To: {end_date[0]} {end_date[3]} {end_date[-1]}\n" + f"Min Value: {min_value}\n" + f"Max Value: {max_value}\n" + f"Average Value: {avg_value}\n" + f"Percent Change: {str(percentage_change) + '%'}\n" + f"Trend values: {', '.join([str(x) for x in values])}\n" + f"Rising Related Queries: {', '.join(rising)}\n" + f"Top Related Queries: {', '.join(top)}" + ] + + return "\n\n".join(doc) diff --git a/libs/langchain/tests/unit_tests/utilities/test_imports.py b/libs/langchain/tests/unit_tests/utilities/test_imports.py index baf9f9fe5b8..3d564184b8f 100644 --- a/libs/langchain/tests/unit_tests/utilities/test_imports.py +++ b/libs/langchain/tests/unit_tests/utilities/test_imports.py @@ -10,10 +10,14 @@ EXPECTED_ALL = [ "BraveSearchWrapper", "DuckDuckGoSearchAPIWrapper", "GoldenQueryAPIWrapper", + "GoogleFinanceAPIWrapper", + "GoogleJobsAPIWrapper", + "GoogleLensAPIWrapper", "GooglePlacesAPIWrapper", "GoogleScholarAPIWrapper", "GoogleSearchAPIWrapper", "GoogleSerperAPIWrapper", + "GoogleTrendsAPIWrapper", "GraphQLAPIWrapper", "JiraAPIWrapper", "LambdaWrapper",