|
import random |
|
from duckduckgo_search import DDGS |
|
|
|
class search: |
|
def __init__(self): |
|
self.ddgs = DDGS() |
|
|
|
def search_videos(self, keywords, max_results, region="us-en", safesearch="off", timelimit=None, resolution=None, duration=None): |
|
if max_results == None: |
|
max_results = 1 |
|
num = random.randint(1, 100) |
|
results = self.ddgs.videos( |
|
keywords=keywords, |
|
region=region, |
|
safesearch=safesearch, |
|
timelimit=timelimit, |
|
resolution=resolution, |
|
duration=duration, |
|
max_results=max_results, |
|
) |
|
urls = [] |
|
video_embeds = [] |
|
for result in results: |
|
if result['embed_url'] != '': |
|
video_embeds.append(f"<embed src='{result['embed_url']}' width='560' height='315'>") |
|
urls.append(result['embed_url']) |
|
output_dict = {} |
|
output_dict["llm_output"] = "Done. Video's have been searched for and displayed." |
|
output_dict["real_output"] = {"display": video_embeds, "name": num, "metadata": urls} |
|
output_dict["type"] = "html_video" |
|
return output_dict |
|
def search_text(self, query, max_results=5, top=5): |
|
results = self.ddgs.text(query, max_results=max_results, region="us-en") |
|
num = random.randint(1, 100) |
|
full_list = [] |
|
final_text = "" |
|
texts = "" |
|
urls = [] |
|
for result in results: |
|
url = result['href'] |
|
urls.append(url) |
|
full_list.append(result['body']) |
|
|
|
for i, txt in enumerate(full_list): |
|
final_text += f"This text is from this url {urls[i]}" |
|
final_text += "\n" |
|
final_text += txt |
|
final_text += "\n" |
|
final_text += f"\nThe text above is stored as the variable {num}" |
|
output_dict = {} |
|
output_dict["llm_output"] = str(final_text) |
|
output_dict["real_output"] = {"display": None, "name": num, "metadata": None} |
|
output_dict["type"] = "text" |
|
return output_dict |
|
def search_images(self, keywords, max_results, region="us-en", safesearch="off", size=None, color=None, type_image=None, layout=None, license_image=None): |
|
if max_results == None: |
|
max_results = 4 |
|
num = random.randint(1, 100) |
|
images = [] |
|
results = self.ddgs.images( |
|
keywords=keywords, |
|
region=region, |
|
safesearch=safesearch, |
|
size=size, |
|
color=color, |
|
type_image=type_image, |
|
layout=layout, |
|
license_image=license_image, |
|
max_results=max_results |
|
) |
|
urls = [] |
|
for img in results: |
|
images.append((f'<img src="{img["image"]}">')) |
|
urls.append(img['image']) |
|
output_dict = {} |
|
output_dict["llm_output"] = f"Done. Images's have been searched for and displayed. Stored as variable {num}" |
|
output_dict["real_output"] = {"display": images, "name": num, "metadata": urls} |
|
output_dict["type"] = "html_image" |
|
return output_dict |
|
def search_news(self, keywords, region="us-en", safesearch="off", timelimit="m", max_results=5): |
|
results = self.ddgs.news(keywords=keywords, region=region, safesearch=safesearch, timelimit=timelimit, max_results=max_results) |
|
titles = [] |
|
bodies = [] |
|
images = [] |
|
num = random.randint(1, 100) |
|
news_list = "" |
|
for result in results: |
|
titles.append(result['title']) |
|
bodies.append(result['body']) |
|
images.append(result['image']) |
|
for i in range(max_results): |
|
news = f"""Title: {titles[i]}\n\nContent:{bodies[i]}""" |
|
news_list += news |
|
news_list += f"\nAll the text above is stored as a variable {num}." |
|
output_dict["llm_output"] = str(news_list) |
|
output_dict["real_output"] = {"display": images, "name": num, "metadata": None} |
|
output_dict["type"] = "news" |
|
return output_dict |