lexlepty/functioncall
0
1import json2import requests3import smtplib4from email.mime.text import MIMEText5from email.mime.multipart import MIMEMultipart6from duckduckgo_search import DDGS7import os8 9emailkey = os.getenv("EMAIL_KEY")10 11def search_duckduckgo(keywords):12 search_term = " ".join(keywords)13 with DDGS() as ddgs:14 return list(ddgs.text(keywords=search_term, region="cn-zh", safesearch="on", max_results=5))15 16def search_papers(query):17 url = f"https://api.crossref.org/works?query={query}"18 response = requests.get(url)19 if response.status_code == 200:20 data = response.json()21 papers = data['message']['items']22 processed_papers = []23 for paper in papers:24 processed_paper = {25 "标题": paper.get('title', [''])[0],26 "作者": ", ".join([f"{author.get('given', '')} {author.get('family', '')}" for author in paper.get('author', [])]),27 "DOI": paper.get('DOI', ''),28 "ISBN": ", ".join(paper.get('ISBN', [])),29 "摘要": paper.get('abstract', '').replace('<p>', '').replace('</p>', '').replace('<italic>', '').replace('</italic>', '')30 }31 processed_papers.append(processed_paper)32 return processed_papers33 else:34 return []35 36def send_email(to, subject, content):37 try:38 with smtplib.SMTP('106.15.184.28', 8025) as smtp:39 smtp.login("jwt", emailkey)40 message = MIMEMultipart()41 message['From'] = "Me <aixiao@aixiao.xyz>"42 message['To'] = to43 message['Subject'] = subject44 message.attach(MIMEText(content, 'html'))45 smtp.sendmail("aixiao@aixiao.xyz", to, message.as_string())46 return True47 except Exception as e:48 print(f"发送邮件时出错: {str(e)}")49 return False50 51def process_function_call(function_name, function_args):52 if function_name == "search_duckduckgo":53 keywords = function_args.get('keywords', [])54 if not keywords:55 return None56 return search_duckduckgo(keywords)57 elif function_name == "search_papers":58 query = function_args.get('query', '')59 if not query:60 return None61 return search_papers(query)62 elif function_name == "send_email":63 to = function_args.get('to', '')64 subject = function_args.get('subject', '')65 content = function_args.get('content', '')66 if not to or not subject or not content:67 return None68 success = send_email(to, subject, content)69 return {70 "success": success,71 "to": to,72 "subject": subject,73 "content": content74 }75 else:76 return None