Metadata-Version: 2.4
Name: prozemi-rune
Version: 0.9.7
Summary: Python client for Programming Zemi API
Author-email: "inu.zip" <noname@notexist.org>
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.7
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests
Requires-Dist: urllib3
Dynamic: license-file


# ProzemiRune 🌀

[![PyPI version](https://badge.fury.io/py/prozemi-rune.svg)](https://badge.fury.io/py/prozemi-rune)
[![Python Version](https://img.shields.io/pypi/pyversions/prozemi-rune.svg)](https://pypi.org/project/prozemi-rune/)

ビジュアルプログラミングアプリ「プログラミングゼミ（プロゼミ）」のAPIをPythonから操作するための非公式クライアントライブラリです。  
作品の収集、解析、そしてPythonからの作品投稿（シェア）をサポートしています。

## ✨ 特徴

- **認証・セッション管理**: キャッシュ機能付きのログイン・トークン自動更新。
- **トークン自動発行**: `sign_up` メソッドによる新規アカウントの即時作成。
- **作品収集 (Scraping)**: 「みんなの作品」からプロジェクト一覧を取得し、`.prozemiproj` を一括ダウンロード。
- **作品投稿 (Sharing)**: `multipart/form-data` 形式に対応し、自作のプロジェクトファイルを直接シェア可能。
- **機械学習フレンドリー**: ダウンロードしたプロジェクトを解凍し、JSONデータを抽出してPyTorch等の学習データセットに活用できます。

## 🚀 インストール

```bash
pip install prozemi-rune
```

## 🛠 使い方

### 1. 初期化とログイン
```python
from prozemi_rune import ProzemiRune

# 初期化 (session.json に認証情報がキャッシュされます)
rune = ProzemiRune()

# ログイン (アカウントがない場合は自動で新規作成)
rune.sign_in()
```

### 2. 作品の一覧取得とダウンロード
```python
# 「みんなの作品」の1ページ目を取得
works = rune.get_public_works(page=1)

for work in works:
    print(f"作品名: {work['name']}")
    # プロジェクトファイルをダウンロード
    rune.download_project(work['url'], save_dir="my_dataset")
```

### 3. 作品をシェア（投稿）する
自分で作成した、あるいはPythonで生成した `.prozemiproj` ファイルを投稿します。

```python
# ローカルのファイルを投稿
rune.share_work(
    file_path="generated_project.prozemiproj",
    project_name="AI生成プログラム",
    allow_remix=True
)
```

## 🤖 PyTorch勢の方へ
`.prozemiproj` ファイルは実態がZIPアーカイブです。中身の `project.json` をパースして、ブロックの配列をトークン化することで、LLMやTransformerを用いたプログラム生成モデルの学習が可能です。

```python
import zipfile
import json

def load_blocks(file_path):
    with zipfile.ZipFile(file_path, 'r') as z:
        project_data = json.loads(z.read('project.json'))
        # scripts 構造をパースして学習データセットへ
        return project_data
```

## ⚠️ 免責事項
このプロジェクトは公式（DeNA）とは一切関係のない非公式なものです。  
サーバーに過度な負荷をかけるスクレイピングや、スパム投稿などの迷惑行為には使用しないでください。利用規約を遵守し、教育的・研究的な目的でご利用ください。

## 📄 ライセンス
[MIT License](LICENSE)

