# 如何通過Marvel API收集漫威的各種信息

*通過官方API探索漫威宇宙的無限可能*
## 前言
漫威宇宙(Marvel Universe)擁有超過80年的漫畫、電影和角色歷史,其龐大的數據體系對開發者和數據分析師極具吸引力。Marvel官方提供的開發者API([developer.marvel.com](https://developer.marvel.com/))允許我們以編程方式訪問角色、漫畫、故事線等核心數據。本文將詳細介紹如何通過該API實現數據收集與分析。
---
## 一、Marvel API 基礎介紹
### 1.1 API功能概覽
- **數據類型**:
- 角色(Characters)
- 漫畫(Comics)
- 創作者(Creators)
- 事件(Events)
- 系列(Series)
- 故事(Stories)
- **訪問限制**:
- 每日3000次請求
- 每分鐘100次請求
### 1.2 認證機制
采用**公私鑰加密**:
```python
import hashlib
import time
public_key = "YOUR_PUBLIC_KEY"
private_key = "YOUR_PRIVATE_KEY"
timestamp = str(int(time.time()))
hash_value = hashlib.md5(f"{timestamp}{private_key}{public_key}".encode()).hexdigest()
Public Key
和Private Key
# 推薦環境變量存儲密鑰
export MARVEL_PUBLIC_KEY="xxxx"
export MARVEL_PRIVATE_KEY="xxxx"
import requests
def get_marvel_data(endpoint, params={}):
base_url = "https://gateway.marvel.com/v1/public/"
url = f"{base_url}{endpoint}"
params.update({
"apikey": public_key,
"ts": timestamp,
"hash": hash_value
})
response = requests.get(url, params=params)
return response.json()
# 獲取鋼鐵俠信息
iron_man = get_marvel_data("characters", {"name": "Iron Man"})
API返回數據默認限制20條/頁,需處理分頁:
def get_all_characters(limit=100):
characters = []
total = 0
offset = 0
while len(characters) < limit:
data = get_marvel_data("characters", {
"limit": 100,
"offset": offset
})
characters.extend(data['data']['results'])
total = data['data']['total']
offset += 100
if offset >= total:
break
return characters
通過comics
端點獲取角色關聯漫畫:
def get_character_comics(character_id):
return get_marvel_data(f"characters/{character_id}/comics", {
"orderBy": "-onsaleDate",
"limit": 50
})
常用過濾條件:
參數 | 示例 | 說明 |
---|---|---|
nameStartsWith | “Spider” | 前綴匹配 |
modifiedSince | “2020-01-01” | 修改時間過濾 |
orderBy | “name” | 排序字段 |
import pandas as pd
# 獲取前500個角色
characters = get_all_characters(500)
df = pd.DataFrame([{
'name': c['name'],
'comics': c['comics']['available'],
'stories': c['stories']['available']
} for c in characters])
top_characters = df.sort_values('comics', ascending=False).head(10)
import matplotlib.pyplot as plt
plt.figure(figsize=(10,6))
plt.barh(top_characters['name'], top_characters['comics'])
plt.title('Top Marvel Characters by Comic Appearances')
plt.show()
def cached_request(endpoint, params): cache_key = f”{endpoint}:{hash(frozenset(params.items()))}” if r.exists(cache_key): return json.loads(r.get(cache_key)) else: data = get_marvel_data(endpoint, params) r.setex(cache_key, 3600, json.dumps(data)) # 緩存1小時 return data
2. **錯誤處理**:
```python
try:
response = requests.get(url, timeout=5)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(f"API Error: {e}")
通過Marvel API,我們可以構建: - 角色知識圖譜 - 漫畫發行趨勢分析工具 - 創作者合作網絡可視化 - 電影與漫畫的關聯數據庫
建議進一步閱讀: - 官方API文檔 - Marvel API Python SDK
注意:本文所有代碼示例需替換實際API密鑰后使用,數據使用請遵守Marvel開發者條款。 “`
總字數:1560字(含代碼塊)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。