1 # arXiv search functionality for NovaChat 2 import arxiv 3 4 def fetch_arxiv(query, max_results=5): 5 """Searches academic papers on arXiv based on a query.""" 6 results = [] 7 try: 8 # Construct the default API client. 9 client = arxiv.Client() 10 11 # Search for papers matching the query. 12 search = arxiv.Search( 13 query=query, 14 max_results=max_results, 15 sort_by=arxiv.SortCriterion.Relevance 16 ) 17 18 papers = list(client.results(search)) 19 20 if not papers: 21 return [{'message': f"No arXiv papers found for: {query}"}] 22 23 for paper in papers: 24 results.append({ 25 'title': paper.title, 26 'authors': [str(author) for author in paper.authors], 27 'summary': paper.summary, 28 'published': str(paper.published), 29 'pdf_url': paper.pdf_url, 30 'arxiv_url': paper.entry_id 31 }) 32 33 except Exception as e: 34 print(f"Error fetching arXiv results: {e}") 35 return [{'error': f"arXiv API Error: {e}"}] 36 37 return results 38 39 # Example usage (can be removed or moved) 40 if __name__ == '__main__': 41 search_query = "quantum computing algorithms" 42 arxiv_results = fetch_arxiv(search_query) 43 print(f"arXiv results for '{search_query}':") 44 for i, result in enumerate(arxiv_results): 45 if 'error' in result: 46 print(f"Error: {result['error']}") 47 break 48 if 'message' in result: 49 print(result['message']) 50 break 51 print(f"{i+1}. {result['title']}") 52 print(f" Authors: {', '.join(result['authors'])}") 53 print(f" Published: {result['published']}") 54 print(f" PDF: {result['pdf_url']}") 55 # print(f" Summary: {result['summary'][:150]}...") # Uncomment for summary 56 print("---")