feat: New tool to Google Search
Related to #199
Motivation: SerpAPI is very expensive and scrapping can cause problems.
Solution: Implemented the new Google search API done through the Programmable search engine.
It is a bit longer to set up but worth it as it gives 10,000 search queries per day for free.
Instructions:
1. Install google-api-python-client
- If you don't already have a Google account, sign up.
- If you have never created a Google APIs Console project,
read the Managing Projects page and create a project in the Google API Console.
- Install the library using pip install google-api-python-client
The current version of the library is 2.70.0 at this time
2. To create an API key:
- Navigate to the APIs & Services→Credentials panel in Cloud Console.
- Select Create credentials, then select API key from the drop-down menu.
- The API key created dialog box displays your newly created key.
- You now have an `API_KEY`
3. Setup Custom Search Engine so you can search the entire web
- Create a custom search engine in this link.
- In Sites to search, add any valid URL (i.e. www.stackoverflow.com).
- That’s all you have to fill up, the rest doesn’t matter.
In the left-side menu, click Edit search engine → {your search engine name}
→ Setup Set Search the entire web to ON. Remove the URL you added from
the list of Sites to search.
- Under Search engine ID you’ll find the `search-engine-ID`.
4. Enable the Custom Search API
- Navigate to the APIs & Services→Dashboard panel in Cloud Console.
- Click Enable APIs and Services.
- Search for Custom Search API and click on it.
- Click Enable.
URL for it: https://console.cloud.google.com/apis/library/customsearch.googleapis
.com
Adapted from: Instructions adapated from https://stackoverflow.com/questions/37083058/programmatically-searching-google-in-python-using-custom-search
- [X] Implementation
- [X] Tests, Inline Docs, Formatting
- [ ] Add it to
load_tools. - [ ] Improve external documentation
I think it still needs some general work here. Has been a while since I've coded in Python. I tried my best to follow the steps provided in the resources.