ホーム » Python » Gemini API Python

Gemini API Python

Gemini API を使用して,何かできないかとやってみた.


Gemini に聞いて,最初に示されたコードは次の様なもの.

#include <windows.h>
#include <wininet.h>
#include <tchar.h>
#include <stdio.h>
#include <string.h>

#pragma comment(lib, "wininet.lib")

int _tmain(int argc, TCHAR* argv[])
{
    HINTERNET hSession  = NULL;
    HINTERNET hConnect  = NULL;
    HINTERNET hRequest  = NULL;
    LPCTSTR szHost      = _T("generativelanguage.googleapis.com");
    LPCTSTR szApiKey    = _T("YOUR_API_KEY_HERE");
    LPCTSTR szEndPoint  = _T("/v1/models/gemini-1.5-flash:generateContent?key=");
    LPCTSTR szHeaders   = _T("Content-Type: application/json");
    TCHAR szFullPath[1024];
    ::memset(szFullPath, 0, sizeof(szFullPath));
    ::_stprintf(szFullPath, _T("%s%s"), szEndPoint, szApiKey);
    const char* szJsonData = "{\"contents\":[{\"parts\":[{\"text\":\"こんにちは、自己紹介をしてください.\"}]}]}";
    hSession = ::InternetOpen(_T("GeminiVC6"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    if (hSession == NULL) 
    {
        ::_tprintf(_T("InternetOpen Error: %ld\n"), ::GetLastError());
        return 1;
        }
    hConnect = ::InternetConnect(hSession, szHost, INTERNET_DEFAULT_HTTPS_PORT, 
                                 NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
    if (hConnect == NULL) {
        ::_tprintf(_T("InternetConnect Error: %ld\n"), ::GetLastError());
        }
    else {
        hRequest = ::HttpOpenRequest(hConnect, _T("POST"), szFullPath, NULL, NULL, 
                                     NULL, INTERNET_FLAG_SECURE, 0);
        if (hRequest != NULL) {
            BOOL bRet = ::HttpSendRequest(hRequest, szHeaders, (DWORD)::_tcslen(szHeaders), 
                                          (LPVOID)szJsonData, (DWORD)::strlen(szJsonData));
            if (bRet) {
                char szBuffer[2048];
                DWORD dwRead = 0;
                ::memset(szBuffer, 0, sizeof(szBuffer));
                ::_tprintf(_T("Response:\n"));
                while (::InternetReadFile(hRequest, szBuffer, sizeof(szBuffer) - 1, &dwRead) && dwRead > 0) {
                    szBuffer[dwRead] = '\0';
                    printf("%s", szBuffer);
                    ::memset(szBuffer, 0, sizeof(szBuffer));
                    }
                printf("\n");
                }
            else {
                ::_tprintf(_T("HttpSendRequest Error: %ld\n"), ::GetLastError());
                }
            ::InternetCloseHandle(hRequest);
            }
        ::InternetCloseHandle(hConnect);
        }
    if (hSession != NULL) {
        ::InternetCloseHandle(hSession);
        }
    printf("\nPress Enter to exit...");
    getchar();

    return 0;
    }

そのままコンパイルして実行すると,
error code 400
API key not valid.

Response:
{
  "error": {
    "code": 400,
    "message": "API key not valid. Please pass a valid API key.",
    "status": "INVALID_ARGUMENT",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "API_KEY_INVALID",
        "domain": "googleapis.com",
        "metadata": {
          "service": "generativelanguage.googleapis.com"
        }
      },
      {
        "@type": "type.googleapis.com/google.rpc.LocalizedMessage",
        "locale": "en-US",
        "message": "API key not valid. Please pass a valid API key."
      }
    ]
  }
}

これを Gemini に聞くと,

Gemini の回答(API キー無効エラー時)

Gemini API から返されたエラーは API_KEY_INVALID で、
これは「指定された API キーが無効である」ことを意味します。

このエラーが発生する主な原因は次のとおりです:

  • API キーが間違っている、または入力ミスがある
  • すでに削除された API キーを使用している
  • プロジェクトが無効化されている、または権限が不足している
  • 環境変数や設定ファイルで API キーが正しく読み込まれていない

正しい API キーを再発行し、環境変数や設定を確認してから再度リクエストを送信してください。
API キーは Google AI Studio の「API keys」から確認できます。

それで YOUR_API_KEY_HERE の所を取得したキーで書き換え実行すると,今度は

Response:
{
  "error": {
    "code": 404,
    "message": "models/gemini-1.5-flash is not found for API version v1, or is not supported for generateContent. Call ListModels to see the list of available models and their supported methods.",
    "status": "NOT_FOUND"
  }
}

再度 Gemini に聞くと,

Gemini の回答(モデルが見つからないエラー時)

このエラーは、指定したモデル名 gemini-1.5-flash が API バージョン v1 では利用できない、
または generateContent メソッドに対応していない場合に発生します。

考えられる原因は次のとおりです:

  • モデル名が誤っている、または古いモデル名を指定している
  • 利用している API バージョン(v1)が、そのモデルをサポートしていない
  • モデルが廃止され、新しい名称に置き換えられている
  • 利用可能なモデル一覧を取得していないため、存在しないモデルを指定している

対処方法としては、次の手順が推奨されます:

  • ListModels を呼び出して、現在利用可能なモデル一覧を確認する
  • API バージョン v1 でサポートされているモデル名に修正する
  • 公式ドキュメントで最新のモデル名と対応メソッドを確認する

特に、Gemini API ではモデル名が更新されることが多いため、
「以前使えていたモデル名が突然使えなくなる」ケースがよくあります。
その場合は、最新のモデル一覧を確認することで解決できます。

この Gemini の内容はその時は少し違っていて,バージョンの指定などを何度も試行錯誤した.
ここまでが,2026/01/23 .


C++ では少々面倒な部分があるので,Python で仕切り直し

# -*- coding: shift_jis -*-
import google.generativeai as genai
import PIL.Image

# APIキーの設定
genai.configure(api_key="あなたのAPIキー")
# モデルの準備
model = genai.GenerativeModel('gemini-1.5-flash')
# 指示(プロンプト):簡単な挨拶で疎通確認
prompt = "Hello, are you ready for image processing?"

print("Geminiに問い合わせ中...")
try:
    response = model.generate_content(prompt)
    print("-" * 30)
    print("AIからの回答:")
    print(response.text)
    print("-" * 30)
except Exception as e:
    print(f"エラーが発生しました: {e}")

input("Press Enter to exit...")
Geminiに問い合わせ中...
エラーが発生しました: 404 NOT_FOUND. {'error': {'code': 404, 'message': 'models/gemini-1.5-flash is not found for API version v1beta, or is not supported for generateContent. Call ListModels to see the list of available models and their supported methods.', 'status': 'NOT_FOUND'}}

他にも,

Gemini に問い合わせ中...
エラーが発生しました: 404 models/gemini-pro is not found for API version v1beta, or is not supported for generateContent. Call ListModels to see the list of available models and their supported methods.

いろいろやったが解決せず.
更に Gemini に問い合わせていると「利用可能なモデル一覧をターミナルに表示させてみてください.」となった.

print("--- 利用可能なモデル一覧 ---")
try:
    # 挿入位置:解析の前に、まずリストを表示させてみる
    for m in genai.list_models():
        print(m.name)
except Exception as e:
    print(f"モデル一覧の取得に失敗しました: {e}")

print("-" * 30)

2026年2月時点の list_models() 実行結果
この画像を Gemini に送ると,

なぜ 404 だったのか

出力された一覧に gemini-1.5-flash が含まれていないため、存在しない古い型番を呼び出していたことになります。
2026年時点では、gemini-2.0 以降 が標準となっているようです。


長くなったので,今日はここまで.

この投稿は役に立ちましたか ? 0 人中 0 人がこの 投稿 は役に立ったと言っています。

1件のコメント

コメントは停止中です。

© 2009-2026 mish.work All Rights Reserved.

Powered by WordPress / Academica WordPress Theme by WPZOOM