タイトルで本題をいい切っていますが、ハマったのでメモしておきます。

現象

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)