47 lines
1.8 KiB
Python
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")
|