| |
| """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() |
| |
| 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") |
|
|