arxiv_search.py

#!/usr/bin/env python3
import arxiv
import argparse
import json

def main():
    parser = argparse.ArgumentParser(description="Search arXiv papers")
    parser.add_argument("query", help="Search query")
    parser.add_argument("--max-results", type=int, default=10, help="Maximum number of results")
    parser.add_argument("--category", help="Category filter")
    args = parser.parse_args()

    # 构建搜索查询
    search_query = args.query
    if args.category:
        search_query = f"cat:{args.category} AND {search_query}"

    # 搜索论文
    search = arxiv.Search(
        query=search_query,
        max_results=args.max_results,
        sort_by=arxiv.SortCriterion.Relevance
    )

    # 输出结果
    results = []
    for result in search.results():
        paper = {
            "id": result.get_short_id(),
            "title": result.title,
            "authors": [str(author) for author in result.authors],
            "summary": result.summary,
            "published": result.published.isoformat(),
            "updated": result.updated.isoformat(),
            "pdf_url": result.pdf_url,
            "categories": result.categories
        }
        results.append(paper)

    print(json.dumps(results, indent=2))

if __name__ == "__main__":
    main()