这里提供了多种编程语言的完整代码示例,帮助您快速集成 Semantic Scholar API。
import requests
API_KEY = "sk-user-your-key-here"
BASE_URL = "https://ai4scholar.net/graph/v1"
def search_papers(query, limit=10):
url = f"{BASE_URL}/paper/search"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
params = {
"query": query,
"limit": limit,
"fields": "paperId,title,abstract,authors,year,citationCount"
}
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:
data = response.json()
print(f"找到 {data['total']} 篇论文")
for paper in data['data']:
print(f"\n标题: {paper['title']}")
print(f"年份: {paper['year']}")
print(f"引用数: {paper['citationCount']}")
return data
else:
print(f"请求失败: {response.status_code}")
return None
# 使用示例
results = search_papers("machine learning", limit=5)
def get_paper_details(paper_id):
url = f"{BASE_URL}/paper/{paper_id}"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
params = {
"fields": "paperId,title,abstract,authors,year,citationCount,references,citations"
}
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:
paper = response.json()
print(f"标题: {paper['title']}")
print(f"年份: {paper['year']}")
print(f"引用数: {paper['citationCount']}")
return paper
else:
print(f"请求失败: {response.status_code}")
return None
# 使用示例
paper = get_paper_details("649def34f8be52c8b66281af98ae884c09aef38b")
const API_KEY = "sk-user-your-key-here";
const BASE_URL = "https://ai4scholar.net/graph/v1";
async function searchPapers(query, limit = 10) {
const url = new URL(`${BASE_URL}/paper/search`);
url.searchParams.append('query', query);
url.searchParams.append('limit', limit);
url.searchParams.append('fields', 'paperId,title,abstract,authors,year,citationCount');
try {
const response = await fetch(url, {
method: 'GET',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json',
},
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
console.log(`找到 ${data.total} 篇论文`);
data.data.forEach(paper => {
console.log(`\n标题: ${paper.title}`);
console.log(`年份: ${paper.year}`);
console.log(`引用数: ${paper.citationCount}`);
});
return data;
} catch (error) {
console.error('请求失败:', error);
return null;
}
}
// 使用示例
searchPapers("machine learning", 5);
async function getPaperDetails(paperId) {
const url = new URL(`${BASE_URL}/paper/${paperId}`);
url.searchParams.append('fields', 'paperId,title,abstract,authors,year,citationCount');
try {
const response = await fetch(url, {
method: 'GET',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json',
},
});
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const paper = await response.json();
console.log(`标题: ${paper.title}`);
console.log(`年份: ${paper.year}`);
return paper;
} catch (error) {
console.error('请求失败:', error);
return null;
}
}
// 使用示例
getPaperDetails("649def34f8be52c8b66281af98ae884c09aef38b");
curl -X GET "https://ai4scholar.net/graph/v1/paper/search?query=machine%20learning&limit=5&fields=paperId,title,authors,year,citationCount" \
-H "Authorization: Bearer sk-user-your-key-here" \
-H "Content-Type: application/json"
curl -X GET "https://ai4scholar.net/graph/v1/paper/649def34f8be52c8b66281af98ae884c09aef38b?fields=paperId,title,abstract,authors,year" \
-H "Authorization: Bearer sk-user-your-key-here" \
-H "Content-Type: application/json"
curl -X POST "https://ai4scholar.net/graph/v1/paper/batch" \
-H "Authorization: Bearer sk-user-your-key-here" \
-H "Content-Type: application/json" \
-d '{
"ids": ["649def34f8be52c8b66281af98ae884c09aef38b", "204e3073870fae3d05bcbc2f6a8e263d9b72e776"]
}'
try:
response = requests.get(url, headers=headers, params=params)
response.raise_for_status() # 抛出 HTTP 错误
data = response.json()
except requests.exceptions.HTTPError as e:
if response.status_code == 401:
print("API 密钥无效")
elif response.status_code == 402:
print("积分余额不足,请充值")
elif response.status_code == 429:
print("请求过于频繁,请稍后重试")
else:
print(f"HTTP 错误: {e}")
except requests.exceptions.RequestException as e:
print(f"请求异常: {e}")
import os
API_KEY = os.getenv('SEMANTIC_SCHOLAR_API_KEY')
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
session = requests.Session()
retry = Retry(total=3, backoff_factor=0.3)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info(f"正在搜索: {query}")
logger.info(f"剩余积分: {response.headers.get('X-Credits-Remaining')}")