diff --git a/dev_gpt/options/generate/static_files/microservice/search.py b/dev_gpt/options/generate/static_files/microservice/search.py index dd388f7..4c1c082 100644 --- a/dev_gpt/options/generate/static_files/microservice/search.py +++ b/dev_gpt/options/generate/static_files/microservice/search.py @@ -1,35 +1,29 @@ import os -from typing import Any, List, Optional +from typing import Optional -from googleapiclient.discovery import build - -google_api_key: Optional[str] = os.environ['GOOGLE_API_KEY'] -google_cse_id: Optional[str] = os.environ['GOOGLE_CSE_ID'] -search_engine = build("customsearch", "v1", developerKey=google_api_key) - -k: int = 10 -siterestrict: bool = False - -def _google_search_results(search_term: str, **kwargs: Any) -> List[dict]: - cse = search_engine.cse() - if siterestrict: - cse = cse.siterestrict() - res = cse.list(q=search_term, cx=google_cse_id, **kwargs).execute() - return res.get("items", []) - -def run(query: str) -> str: - """Run query through GoogleSearch and parse result.""" - snippets = [] - results = _google_search_results(query, num=k) - if len(results) == 0: - return "No good Google Search Result was found" - for result in results: - if "snippet" in result: - snippets.append(result["snippet"]) - - return " ".join(snippets) +import requests -if __name__ == "__main__": - # google-api-python-client==2.86.0 - print(run("jina ai")) \ No newline at end of file +def google_search(search_term, search_type, top_n): + google_api_key: Optional[str] = os.environ['GOOGLE_API_KEY'] + google_cse_id: Optional[str] = os.environ['GOOGLE_CSE_ID'] + url = "https://www.googleapis.com/customsearch/v1" + params = { + 'q': search_term, + 'key': google_api_key, + 'cx': google_cse_id, + 'searchType': search_type, + 'num': top_n + } + response = requests.get(url, params=params) + response.raise_for_status() + return response.json() + +def search_image(search_term, top_n): + response = google_search(search_term, search_type="image", top_n=top_n) + return [item["link"] for item in response["items"]] + +def search_web(search_term, top_n): + response = google_search(search_term, search_type="web", top_n=top_n) + return [item["snippet"] for item in response["items"]] + diff --git a/test/unit/test_search.py b/test/unit/test_search.py new file mode 100644 index 0000000..fe15dfd --- /dev/null +++ b/test/unit/test_search.py @@ -0,0 +1,13 @@ +from dev_gpt.options.generate.static_files.microservice.search import search_web, search_image + + +def test_web_search(): + results = search_web("jina", 10) + assert len(results) == 10 + assert "jina" in results[0] + assert not results[0].startswith("http") + +def test_image_search(): + results = search_image("jina", 10) + assert len(results) == 10 + assert results[0].startswith("http")