# GrapesAPI サンプルコード

以下の手順で、GrapesAvatorAPIを利用し、PHPでのファイルアップロードアプリを作成し、APIキーをバックエンドで管理しつつ、ユーザーに説明付きで出力を表示します。

#### 1. フロントエンド (HTMLフォーム)

この部分はシンプルなファイルアップロードフォームで、APIキーの入力は不要です。

```html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ファイルアップロード</title>
</head>
<body>
    <h1>ファイルをアップロード</h1>
    <form action="upload.php" method="POST" enctype="multipart/form-data">
        <label for="file">アップロードするファイルを選択してください:</label>
        <input type="file" name="file" id="file" required><br><br>
        <button type="submit">アップロード</button>
    </form>
</body>
</html>
```

#### 2. バックエンド (PHPでファイルアップロード)

`upload.php`で、APIキーをバックエンド側に保存し、ファイルをアップロードした後に結果を説明付きで出力します。アップロードされたファイルのURLも出力します。

```php
<?php
// APIキーをサーバーサイドに保存（例：configファイルに保存、またはデータベース管理）
$apiKey = "your_api_key"; // APIキーをハードコードするか、安全な場所に保存

// ファイルが正しくアップロードされたか確認
if ($_FILES['file']['error'] !== UPLOAD_ERR_OK) {
    echo "<p>ファイルのアップロードに失敗しました。エラーコード: " . $_FILES['file']['error'] . "</p>";
    exit;
}

// アップロードされたファイルを処理
$file = new CURLFile($_FILES['file']['tmp_name'], $_FILES['file']['type'], $_FILES['file']['name']);

// cURLを使用してAPIにリクエストを送信
$ch = curl_init('https://grapes-avatarapi.mixeder.net/upload');
$data = [
    'file' => $file,
    'apiKey' => $apiKey
];

// cURLオプションを設定
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// リクエストを実行してレスポンスを取得
$response = curl_exec($ch);

// cURLセッションを閉じる
curl_close($ch);

// レスポンスをJSON形式でデコード
$result = json_decode($response, true);

// アップロード成功メッセージとファイルURLを出力
if (isset($result['fileName'])) {
    $folderName = "フォルダ名"; // 実際のフォルダ名に変更
    $fileName = $result['fileName'];
    $fileUrl = "https://grapes-avatarapi.mixeder.net/{$folderName}/{$fileName}";
    
    echo "<h2>アップロード結果</h2>";
    echo "<p>ファイルが正常にアップロードされました。以下のURLからファイルにアクセスできます。</p>";
    echo "<p><strong>アップロードされたファイルのURL:</strong> <a href='{$fileUrl}'>{$fileUrl}</a></p>";
    echo "<p>ファイル名: {$fileName}</p>";
} else {
    echo "<p>アップロードに失敗しました。レスポンス:</p>";
    echo "<pre>{$response}</pre>";
}
?>
```

#### 3. 説明付き出力

アップロードが成功した場合、以下のように説明とURLが表示されます：

```
アップロード結果
ファイルが正常にアップロードされました。以下のURLからファイルにアクセスできます。
アップロードされたファイルのURL: https://grapes-avatarapi.mixeder.net/フォルダ名/68fea2b2d25d1100.png
ファイル名: 68fea2b2d25d1100.png
```

#### 4. セキュリティ対策

* **APIキーの保護**: APIキーはサーバー側でハードコードするか、設定ファイルや環境変数で管理して、外部に漏れないようにします。
* **ファイルバリデーション**: 不正なファイルやウイルスのアップロードを防ぐために、ファイル形式やサイズのチェックを行う必要があります。

これで、PHPを使ってAPIキーを安全に管理しつつ、ファイルアップロードを行い、説明付きで結果を表示するアプリケーションが完成します。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developer.mixeder.net/grapeapi/apirifarensu/grapeavaterapi-rifarensu/grapesapi-sanpurukdo.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
