File size: 2,736 Bytes
ea51a4f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import json
import requests
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from duckduckgo_search import DDGS
import os

emailkey = os.getenv("EMAIL_KEY")

def search_duckduckgo(keywords):
    search_term = " ".join(keywords)
    with DDGS() as ddgs:
        return list(ddgs.text(keywords=search_term, region="cn-zh", safesearch="on", max_results=5))

def search_papers(query):
    url = f"https://api.crossref.org/works?query={query}"
    response = requests.get(url)
    if response.status_code == 200:
        data = response.json()
        papers = data['message']['items']
        processed_papers = []
        for paper in papers:
            processed_paper = {
                "标题": paper.get('title', [''])[0],
                "作者": ", ".join([f"{author.get('given', '')} {author.get('family', '')}" for author in paper.get('author', [])]),
                "DOI": paper.get('DOI', ''),
                "ISBN": ", ".join(paper.get('ISBN', [])),
                "摘要": paper.get('abstract', '').replace('<p>', '').replace('</p>', '').replace('<italic>', '').replace('</italic>', '')
            }
            processed_papers.append(processed_paper)
        return processed_papers
    else:
        return []

def send_email(to, subject, content):
    try:
        with smtplib.SMTP('106.15.184.28', 8025) as smtp:
            smtp.login("jwt", emailkey)
            message = MIMEMultipart()
            message['From'] = "Me <[email protected]>"
            message['To'] = to
            message['Subject'] = subject
            message.attach(MIMEText(content, 'html'))
            smtp.sendmail("[email protected]", to, message.as_string())
        return True
    except Exception as e:
        print(f"发送邮件时出错: {str(e)}")
        return False

def process_function_call(function_name, function_args):
    if function_name == "search_duckduckgo":
        keywords = function_args.get('keywords', [])
        if not keywords:
            return None
        return search_duckduckgo(keywords)
    elif function_name == "search_papers":
        query = function_args.get('query', '')
        if not query:
            return None
        return search_papers(query)
    elif function_name == "send_email":
        to = function_args.get('to', '')
        subject = function_args.get('subject', '')
        content = function_args.get('content', '')
        if not to or not subject or not content:
            return None
        success = send_email(to, subject, content)
        return {
            "success": success,
            "to": to,
            "subject": subject,
            "content": content
        }
    else:
        return None