# GrapesAPI(個人向け) リファレンス

## ファイルアップロードAPIドキュメント

#### 利用用途とユースケース

このファイルアップロードAPIは、画像を一時的に保存し、有効期間が経過した後に自動的に削除することで、効率的かつ安全なファイル共有や画像ホスティングが可能です。以下は、このAPIの具体的な利用用途とユースケースの例です。

***

#### 利用用途

1. **一時的な画像共有**
   * チャットアプリやメッセージングサービスで、ユーザーが一定期間だけ画像を共有できるようにする場合に便利です。
2. **画像添付付きのフィードバックフォーム**
   * フォームやサポートリクエストで、スクリーンショットや画像を一時的に添付し、処理が完了した後に削除することで、プライバシーを保護します。
3. **期間限定のマーケティングコンテンツ**
   * 広告やマーケティングキャンペーンで、期間限定の画像コンテンツを提供し、有効期限が過ぎると自動的に削除されることで管理が簡単になります。
4. **セキュリティ重視の画像ホスティング**
   * 特定の時間だけアクセス可能な画像をホスティングすることで、データの流出や不要な保存を防ぎます。
5. **テンポラリファイルの管理**
   * ウェブアプリケーションで一時的な画像データを処理し、有効期限が過ぎればサーバーから自動的に削除するための解決策として使用できます。

***

#### ユースケース

1. **SNSやコミュニティサイトでの投稿画像**
   * 投稿が一定期間のみ有効な場合に、このAPIを利用して画像をアップロードし、有効期間後に自動削除します。
2. **オンラインチケット販売プラットフォーム**
   * イベント用の画像やポスターが有効期間中だけ表示されるように管理できます。イベント終了後、画像は自動的に削除されます。
3. **プライバシー重視の取引プラットフォーム**
   * 商品画像を一時的にアップロードし、一定時間後に削除することで、ユーザーのデータ保護に配慮できます。
4. **教育用プラットフォーム**
   * 生徒が課題に関連する画像を提出する際、期間限定で有効にして、一定時間後に画像を削除することで、ストレージの効率的な管理ができます。
5. **カスタマーサポートのスクリーンショット提出**
   * サポートのためにスクリーンショットを一時的に共有する場合に使用し、問題解決後は自動削除でセキュリティを保護します。

{% hint style="info" %}
**ビジネスでのご利用をご検討の場合はお問い合わせください。**

**個人的なサービスの開発の場合やビジネスでの開発段階には申請は必要ありませんが、本番環境でご利用の場合はGrapesAvaterAPIをご利用ください。**
{% endhint %}

***

### **エンドポイント**

ファイルをアップロードするためのエンドポイント:

```
POST https://grape.mixeder.net/api
```

***

### **リクエスト**

ファイルアップロードは以下の形式で送信します。

#### **リクエストヘッダー**

```
Content-Type: multipart/form-data
```

#### **リクエストボディ**

* **file**: アップロードする画像ファイル
* **expiration**: 画像の有効時間（秒）例: `expiration=3600`（1時間）

***

### **レスポンス**

#### **成功時のレスポンス例**

```json
{
  "url": "https://grape.mixeder.net/files/API67d6d2d3-0819-4ff7-b150-6033f55442d1/example.mp4",
  "hosturl": "https://grape.mixeder.net/dist/API67d6d2d3-0819-4ff7-b150-6033f55442d1/example.mp4"
}
```

#### **エラー時のレスポンス例**

```json
{
    "error": "エラーメッセージ"
}
```

***

### **コード例**

#### **cURL**

```bash
curl -X POST https://grape.mixeder.net/api \
    -F 'file=@path_to_your_image.jpg' \
    -F 'expiration=3600'
```

***

#### **Python**

```python
import requests

url = 'https://grape.mixeder.net/api'
files = {'file': open('path_to_your_image.jpg', 'rb')}
data = {'expiration': '3600'}

response = requests.post(url, files=files, data=data)
print(response.json())
```

***

#### **JavaScript (jQuery)**

```javascript
var formData = new FormData();
formData.append('file', file);
formData.append('expiration', 3600);

$.ajax({
    url: 'https://grape.mixeder.net/api',
    type: 'POST',
    data: formData,
    processData: false,
    contentType: false,
    success: function(response) {
        console.log(response);
    },
    error: function(xhr, status, error) {
        console.error(error);
    }
});
```

***

#### **PHP**

```php
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'https://grape.mixeder.net/api');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
    'file' => new CURLFile('path_to_your_image.jpg'),
    'expiration' => '3600'
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

echo $response;
?>
```

***

#### **Node.js**

```javascript
const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');

const form = new FormData();
form.append('file', fs.createReadStream('path_to_your_image.jpg'));
form.append('expiration', '3600');

axios.post('https://grape.mixeder.net/api', form, {
    headers: form.getHeaders()
})
.then(response => console.log(response.data))
.catch(error => console.error(error));
```

***

#### **Go**

```go
package main

import (
    "fmt"
    "log"
    "mime/multipart"
    "net/http"
    "os"
)

func main() {
    file, err := os.Open("path_to_your_image.jpg")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    body := &multipart.Writer{}
    req, err := http.NewRequest("POST", "https://grape.mixeder.net/api", body)
    req.Header.Set("Content-Type", body.FormDataContentType())

    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()

    fmt.Println("アップロード結果:", resp.Status)
}
```

***

### **注意事項**

* **有効期限**: アップロードされた画像は、指定された有効時間が経過すると自動的に削除されます。
* **リクエスト制限**: IPアドレスごとに1日あたり100リクエストが許可されます（GET, POST両方に適用。失敗したリクエストもカウントされます）。
* **IP確認**: 利用中のIPアドレスは次のURLから確認できます：

  ```
  https://grape.mixeder.net/ip
  ```
