langchain[minor]: Add serpapi tools (#13934)

- **Description:** Added some of the more endpoints supported by serpapi
that are not suported on langchain at the moment, like google trends,
google finance, google jobs, and google lens
- **Issue:** [Add support for many of the querying endpoints with
serpapi #11811](https://github.com/langchain-ai/langchain/issues/11811)

---------

Co-authored-by: zushenglu <58179949+zushenglu@users.noreply.github.com>
Co-authored-by: Erick Friis <erick@langchain.dev>
Co-authored-by: Ian Xu <ian.xu@mail.utoronto.ca>
Co-authored-by: zushenglu <zushenglu1809@gmail.com>
Co-authored-by: KevinT928 <96837880+KevinT928@users.noreply.github.com>
Co-authored-by: Bagatur <baskaryan@gmail.com>
This commit is contained in:
authored and GitHub committed 2023-11-29 14:02:57 -08:00
1 parent dbaeb163aa
commit 00a6e8962c
19 files changed
+1662 -1

No files matched your search

@@ -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
}
@@ -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' reLine truncated
]
},
"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
}
@@ -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 LottLine truncated
]
},
"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
}
@@ -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
}
+39 -1
View File
@@ -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 = [
@@ -0,0 +1,5 @@
"""Google Finance API Toolkit."""
from langchain.tools.google_finance.tool import GoogleFinanceQueryRun
__all__ = ["GoogleFinanceQueryRun"]
@@ -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)
@@ -0,0 +1,5 @@
"""Google Jobs API Toolkit."""
from langchain.tools.google_jobs.tool import GoogleJobsQueryRun
__all__ = ["GoogleJobsQueryRun"]
@@ -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)
@@ -0,0 +1,5 @@
"""Google Lens API Toolkit."""
from langchain.tools.google_lens.tool import GoogleLensQueryRun
__all__ = ["GoogleLensQueryRun"]
@@ -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)
@@ -0,0 +1,5 @@
"""Google Trends API Toolkit."""
from langchain.tools.google_trends.tool import GoogleTrendsQueryRun
__all__ = ["GoogleTrendsQueryRun"]
@@ -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)
@@ -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",
@@ -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
@@ -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"
@@ -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)
@@ -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)
@@ -10,10 +10,14 @@ EXPECTED_ALL = [
"BraveSearchWrapper",
"DuckDuckGoSearchAPIWrapper",
"GoldenQueryAPIWrapper",
"GoogleFinanceAPIWrapper",
"GoogleJobsAPIWrapper",
"GoogleLensAPIWrapper",
"GooglePlacesAPIWrapper",
"GoogleScholarAPIWrapper",
"GoogleSearchAPIWrapper",
"GoogleSerperAPIWrapper",
"GoogleTrendsAPIWrapper",
"GraphQLAPIWrapper",
"JiraAPIWrapper",
"LambdaWrapper",