タイトルで本題をいい切っていますが、ハマったのでメモしておきます。
現象
connpass APIを見てAPIを叩いたのに、
Expecting value: line 1 column 1 (char 0)
となり、
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
</body>
</html>
が返ってくる。
原因
リクエストヘッダにUser-Agentが要るようです。
ドキュメント上は「v2の場合はX-API-Key
が要る」となっていますが、X-API-Key
だけだと上記現象がおきました。
環境
- Windows11
- Python 3.12.1
- requests 2.31.0
解決策
リクエストヘッダにUser-Agentを追加します。
Cursorに「てきとうなユーザーエージェント足して」って言ったら以下サンプルのものを足してくれました。便利。
サンプルコード
import requests
import json
# APIエンドポイント
url = "https://connpass.com/api/v2/events/"
# ヘッダーの設定
headers = {
"X-API-Key": "hogehoge",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
}
# リクエストパラメータの設定
params = {
"keyword": "ソフトウェアテスト",
}
# GETリクエストの実行
response = requests.get(url, headers=headers, params=params)
# JSONレスポンスを整形して表示
try:
data = response.json()
print(json.dumps(data, indent=2, ensure_ascii=False))
except json.JSONDecodeError as e:
print(f"JSONデコードエラー: {e}")
print("生のレスポンス:")
print(response.text)