rmi-backend/scripts/search_arxiv.py

47 lines
1.8 KiB
Python

#!/usr/bin/env python3
"""Search arxiv for papers by title keywords and return arxiv IDs."""
import sys
import urllib.request
import xml.etree.ElementTree as ET
def search_arxiv(query, max_results=3):
"""Search arxiv and return list of (arxiv_id, title) tuples."""
q = "+".join(query.split())
url = f"https://export.arxiv.org/api/query?search_query=ti:{q}&max_results={max_results}"
try:
req = urllib.request.Request(url, headers={"User-Agent": "RMI-Research-Bot/1.0"})
resp = urllib.request.urlopen(req, timeout=15)
data = resp.read()
root = ET.fromstring(data)
ns = {"a": "http://www.w3.org/2005/Atom"}
results = []
for entry in root.findall("a:entry", ns):
title = entry.find("a:title", ns).text.strip().replace("\n", " ")
aid = entry.find("a:id", ns).text.strip()
# Extract just the arxiv ID from the full URL
aid = aid.split("/abs/")[-1]
results.append((aid, title))
return results
except Exception as e:
print(f"ERROR searching for '{query}': {e}", file=sys.stderr)
return []
if __name__ == "__main__":
queries = [
"Smart Contract Vulnerability Detection Interpretable Graph Feature Expert Pattern Fusion",
"Temporal-Amount Snapshot MultiGraph Ethereum Transaction Tracking",
"Reentrancy Vulnerability Identification Ethereum Smart Contracts",
"How to Design Tokenomics",
"Token Vesting Schedules",
"Empirical Evidence Governance Token Distributions",
]
for q in queries:
results = search_arxiv(q)
print(f"\n=== {q} ===")
for aid, title in results:
print(f" {aid} | {title[:120]}")
if not results:
print(" NO RESULTS")