譜面画像
サイトのダウンロードと同じ音符アトラス、スライド、ジャケット、アイコン、フォント、レイアウトを使います。入力を固定するには release を指定します。ブラウザーサービスで PNG を生成し、SVG には同じ PNG を内包します。譜面全体を列に配置します。端末での出力はローカル計算を参照してください。ETag には release、画像設定、内容ハッシュが入ります。
譜面画像の描画
Section titled “譜面画像の描画” GETHEAD
/api/v1/songs/{songId}/charts/{difficulty}/image.{format} ?server=(既定 intl)でサーバーを選ぶ短縮形です。下のスコープ形とまったく同じ動作です。
パラメーター
| 名前 | 場所 | 型 | 説明 |
|---|---|---|---|
release任意 | クエリ | string | 不変のリリースに固定します。r- と小文字 16 進 20 桁。省略すると現在のリリースを読みます。サーバーとリリースを参照。 |
timeZone任意 | クエリ | string | 公開日の IANA タイムゾーン。ブラウザーと揃えるには同じゾーンを指定。 既定値: Asia/Tokyo |
songId必須 | パス | string | songs リソースの楽曲 ID(musicId)。 |
difficulty必須 | パス | string | easy、normal、hard、expert、special、master のいずれかで、楽曲の difficulty[].difficultyName に存在するもの。 |
format必須 | パス | string | 原生 PNG、または同じ PNG を内包する SVG。 |
locale任意 | クエリ | string | タイトルとバンド名の言語:ja、en、zh-TW、zh-CN、ko。既定は Accept-Language による判定。 |
height任意 | クエリ | integer | 譜面列の高さ(px、360〜1440)。ヘッダーが加わるため完成画像はより高くなります。X-Haneoka-Image-Width/-Height を参照してください。 既定値: 720 |
download任意 | クエリ | string | 1 は Content-Disposition: attachment、0 は inline で、ブラウザーのタブや <img> で表示できます。 既定値: 1 |
server任意 | クエリ | string | リソースサーバーのスラッグ。既定は intl。1 回だけ送れます。 既定値: intl |
リクエスト例
curl -sS "https://haneoka.org/api/v1/songs/100001/charts/expert/image.svg?locale=en&download=0"const response = await fetch("https://haneoka.org/api/v1/songs/100001/charts/expert/image.svg?locale=en&download=0");if (!response.ok) throw new Error(`HTTP ${response.status}`);const text = await response.text();レスポンス例
HTTP/2 200 OKContent-Type: image/svg+xml; charset=utf-8Content-Disposition: inline; filename="Haneoka-intl-100001-expert-en.svg"Content-Language: enCache-Control: public, max-age=300, must-revalidateETag: "intl:r-8da1a1f914879ac54d8a:100001:en:expert:chart-overview-native-v3:452c560d…"X-Haneoka-Chart-Renderer: chart-overview-native-v3X-Haneoka-Image-Width: 5360X-Haneoka-Image-Height: 2144X-Haneoka-Release-Id: r-8da1a1f914879ac54d8aX-Haneoka-Server: intl<svg xmlns="http://www.w3.org/2000/svg" lang="en" width="5360" height="2144" viewBox="0 0 5360 2144"><image width="5360" height="2144" href="data:image/png;base64,…"/></svg>長さのため一部を省略しています。実際のレスポンスにはさらに多くの項目があります。
エラー
| ステータス | コード | 意味 |
|---|---|---|
304 | — | If-None-Match または If-Modified-Since が一致しました。キャッシュを再利用してください。 |
400 | invalid_time_zone | 有効な IANA タイムゾーンを指定。 |
400 | invalid_height | height は 360〜1440 の整数です。 |
400 | invalid_download | download は 0 か 1 です。 |
400 | invalid_locale | locale が ja、en、zh-TW、zh-CN、ko のいずれでもありません。 |
400 | invalid_server | server が複数回送られたか、ルートと一致しません。 |
400 | invalid_release | release が r- + 16 進 20 桁ではないか、受け付けないルートに送られました。 |
400 | body_not_allowed | 譜面画像リクエストに本文は付けられません。 |
404 | server_not_found | サーバースラッグが有効なリソースサーバーではありません。 |
404 | song_not_found | 楽曲が現在のリリースにありません。 |
404 | difficulty_not_found | この難易度の譜面はありません。 |
404 | chart_not_found | リリースに譜面ファイルがありません。 |
404 | release_not_found | 指定したリリースはこのサーバーにありません。 |
406 | format_not_supported | 拡張子は svg または png にしてください。 |
413 | chart_too_large | 譜面データが描画上限 2 MiB を超えています。 |
413 | chart_render_budget | 描画結果がピクセル数または SVG サイズの上限を超えます。 |
502 | chart_invalid | リリース内の譜面を解析できませんでした。 |
502 | chart_path_invalid | カタログの譜面パスが不正です。 |
502 | png_invalid | ラスタライザーが不正な PNG を返しました。 |
502 | chart_image_failed | 描画が予期せず失敗しました。 |
503 | release_unavailable | このサーバーにはまだ現在のリリースが公開されていません。 |
503 | native_renderer_unavailable | 原生画像サービスを利用できません。端末の renderChartImage を使用できます。 |
サーバーを指定した譜面画像の描画
Section titled “サーバーを指定した譜面画像の描画” GETHEAD
/api/v1/servers/{server}/songs/{songId}/charts/{difficulty}/image.{format} スコープ形です。server クエリを送る場合はパスの値と同じでなければなりません。リクエストに本文は付けられません。
パラメーター
| 名前 | 場所 | 型 | 説明 |
|---|---|---|---|
server必須 | パス | string | GET /api/v1/releases が返すリソースサーバーのスラッグ(例:intl、jp)。 |
release任意 | クエリ | string | 不変のリリースに固定します。r- と小文字 16 進 20 桁。省略すると現在のリリースを読みます。サーバーとリリースを参照。 |
timeZone任意 | クエリ | string | 公開日の IANA タイムゾーン。ブラウザーと揃えるには同じゾーンを指定。 既定値: Asia/Tokyo |
songId必須 | パス | string | songs リソースの楽曲 ID(musicId)。 |
difficulty必須 | パス | string | easy、normal、hard、expert、special、master のいずれかで、楽曲の difficulty[].difficultyName に存在するもの。 |
format必須 | パス | string | 原生 PNG、または同じ PNG を内包する SVG。 |
locale任意 | クエリ | string | タイトルとバンド名の言語:ja、en、zh-TW、zh-CN、ko。既定は Accept-Language による判定。 |
height任意 | クエリ | integer | 譜面列の高さ(px、360〜1440)。ヘッダーが加わるため完成画像はより高くなります。X-Haneoka-Image-Width/-Height を参照してください。 既定値: 720 |
download任意 | クエリ | string | 1 は Content-Disposition: attachment、0 は inline で、ブラウザーのタブや <img> で表示できます。 既定値: 1 |
リクエスト例
curl -sS -o output.bin "https://haneoka.org/api/v1/servers/jp/songs/100001/charts/expert/image.png?height=540&locale=ja"const response = await fetch("https://haneoka.org/api/v1/servers/jp/songs/100001/charts/expert/image.png?height=540&locale=ja");if (!response.ok) throw new Error(`HTTP ${response.status}`);const blob = await response.blob();レスポンス例
HTTP/2 200 OKContent-Type: image/pngContent-Disposition: attachment; filename="Haneoka-jp-100001-expert-ja.png"X-Haneoka-Server: jpバイナリ本文(表示しません)。
エラー
| ステータス | コード | 意味 |
|---|---|---|
304 | — | If-None-Match または If-Modified-Since が一致しました。キャッシュを再利用してください。 |
400 | invalid_time_zone | 有効な IANA タイムゾーンを指定。 |
400 | invalid_height | height は 360〜1440 の整数です。 |
400 | invalid_download | download は 0 か 1 です。 |
400 | invalid_locale | locale が ja、en、zh-TW、zh-CN、ko のいずれでもありません。 |
400 | invalid_server | server が複数回送られたか、ルートと一致しません。 |
400 | invalid_release | release が r- + 16 進 20 桁ではないか、受け付けないルートに送られました。 |
400 | body_not_allowed | 譜面画像リクエストに本文は付けられません。 |
404 | server_not_found | サーバースラッグが有効なリソースサーバーではありません。 |
404 | song_not_found | 楽曲が現在のリリースにありません。 |
404 | difficulty_not_found | この難易度の譜面はありません。 |
404 | chart_not_found | リリースに譜面ファイルがありません。 |
404 | release_not_found | 指定したリリースはこのサーバーにありません。 |
406 | format_not_supported | 拡張子は svg または png にしてください。 |
413 | chart_too_large | 譜面データが描画上限 2 MiB を超えています。 |
413 | chart_render_budget | 描画結果がピクセル数または SVG サイズの上限を超えます。 |
502 | chart_invalid | リリース内の譜面を解析できませんでした。 |
502 | chart_path_invalid | カタログの譜面パスが不正です。 |
502 | png_invalid | ラスタライザーが不正な PNG を返しました。 |
502 | chart_image_failed | 描画が予期せず失敗しました。 |
503 | release_unavailable | このサーバーにはまだ現在のリリースが公開されていません。 |
503 | native_renderer_unavailable | 原生画像サービスを利用できません。端末の renderChartImage を使用できます。 |