HTTPS/HTTP Fetch link
Ren'Py は renpy.fetch 関数を使用して HTTP と HTTPS を介した情報所得をサポートします。この関数は :
GET, POST, PUT リクエストのサポート
サーバーへの POSTing や PUTing データ、 json データのサポート
バイト、文字列、json オブジェクトを返すこと
fetch 関数は Ren'Py のメインスレッドで、ゲーム開始後の使用を意図します。デスクトップでも、モバイルでも、Web プラットフォームでも使えます。ウェブプラットフォームで使用する場合、元々ゲームを提供していたサーバーから取得するのでなければ、そのサーバーは CORS をサポートしていなければなりません。
とても簡単な例として、これはサーバーからニュースを所得します。
$ news = renpy.fetch("https://example.com/news.txt", result="text")
"Here's the news: [news]"
また、これは JSON をサーバーに送り、戻りの JSON を受け取ります。
$ result = renpy.fetch("https://example.com/api", json={"name": "Ren'Py"}, result="json")
ネットワーク経由で通信する他のアプリケーションと同様に、 renpy.fetch を使用する際は、特にこの方法で返されたメディアを表示する際には、セキュリティを考慮する必要があります(Ren'Pyは一般的に、悪意のある画像、動画、音声ファイルに対する対策はしていません)。
- renpy.fetch(url, method=None, data=None, json=None, content_type=None, timeout=5, result='bytes', params=None, headers={}) link
これは、指定されたURLへのHTTP(またはHTTPS)リクエストを実行し、そのリクエストの内容を返します。失敗した場合は FetchError 例外を発生させ、失敗を説明するテキストを表示します(ただし、ユーザーへの表示には適さないかもしれません)。
- url
fetch する URL です。
- method
使用するメソッドです。一般的に "GET", "POST", "PUT" の一つですが、他の HTTP メソッドも可能です。 data または json が None でなければ、 デフォルトでは "POST" であり、そうでなければデフォルトでは GET です。
- data
None またはリクエストで送るバイト文字列です。
- json
None またはリクエストで送られる JSON オブジェクトです。これは data に優先します。
- content_type
データの内容のタイプです。指定されなければデフォルトは、 json が None でない場合は "application/json"、それ以外の場合は "application/octet-stream" である。POST または PUT リクエストでのみ使用されます。
- timeout
リクエストの完了を待つ秒数です。
- result
結果の処理方法です。 "bytes" の場合、結果の生のバイトを返します。 "text" の場合、結果を UTF-8 でデコードし、ユニコード文字列を返します。 "json" の場合、結果を JSON としてデコードします(デコード処理によって他の例外が発生する可能性があります)。
- params
クエリ文字列として URL に追加されるパラメーターの辞書です。
- headers
リクエストで送信するヘッダーの辞書です。
これはインタラクションの内部または外部から呼び出せます。
インタラクション外では、 timeout が経過するのを待つ間
renpy.pause()
を繰り返し呼び出ため、 Ren'Py はロックされません。ユーザーに何が起こっているかを知らせる画面を表示するとよいかもしれません。(アクション内などの)インタラクション内では、フェッチリクエストが終了するかタイムアウトするまで、表示システムがブロックされます。オーディオシステムは提供をしようとするので、オーディオは再生され続けます。
この関数はすべてのプラットフォームで動作するはずです。しかし、ウェブプラットフォームでは、ゲームとは異なる場所へのリクエストは、 CORS で許可されていない限り失敗します。
Requests link
デスクトップとモバイルでは、 Ren'Py は Requests ライブラリを含みます。これはより強力ですが、 renpy.fetch ほど統合されていません(例えば、Ren'Pyはデータを待つために renpy.pause()
を呼び出しますが、リクエストはブロックされます。これによりオーディオの遅延のような問題がおきます)。