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') 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 としてデコードします(デコード処理によって他の例外が発生する可能性があります)。

timeout が経過するのを待つ間、これは renpy.pause() (0) を繰り返し呼び出すので、 Ren'Py はロックされません。ユーザーに何が起こっているかを知らせるために、画面を表示することは意味があるかもしれません。

この関数はすべてのプラットフォームで動作するはずです。しかし、ウェブプラットフォームでは、ゲームとは異なる場所へのリクエストは、 CORS で許可されていない限り失敗します。

Requests link

デスクトップとモバイルでは、 Ren'Py は Requests ライブラリを含みます。これはより強力ですが、 renpy.fetch ほど統合されていません(例えば、Ren'Pyはデータを待つために renpy.pause() を呼び出しますが、リクエストはブロックされます。これによりオーディオの遅延のような問題がおきます)。