コンテンツにスキップ

譜面画像

サイトのダウンロードと同じ音符アトラス、スライド、ジャケット、アイコン、フォント、レイアウトを使います。入力を固定するには release を指定します。ブラウザーサービスで PNG を生成し、SVG には同じ PNG を内包します。譜面全体を列に配置します。端末での出力はローカル計算を参照してください。ETag には release、画像設定、内容ハッシュが入ります。

GETHEAD /api/v1/songs/{songId}/charts/{difficulty}/image.{format}

?server=(既定 intl)でサーバーを選ぶ短縮形です。下のスコープ形とまったく同じ動作です。

認証
不要。誰でも匿名で読み取れます。
キャッシュ
public, max-age=300, must-revalidate

パラメーター

名前場所型説明
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

リクエスト例

Terminal window
curl -sS "https://haneoka.org/api/v1/songs/100001/charts/expert/image.svg?locale=en&download=0"

レスポンス例

HTTP/2 200 OK
Content-Type: image/svg+xml; charset=utf-8
Content-Disposition: inline; filename="Haneoka-intl-100001-expert-en.svg"
Content-Language: en
Cache-Control: public, max-age=300, must-revalidate
ETag: "intl:r-8da1a1f914879ac54d8a:100001:en:expert:chart-overview-native-v3:452c560d…"
X-Haneoka-Chart-Renderer: chart-overview-native-v3
X-Haneoka-Image-Width: 5360
X-Haneoka-Image-Height: 2144
X-Haneoka-Release-Id: r-8da1a1f914879ac54d8a
X-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 が一致しました。キャッシュを再利用してください。
400invalid_time_zone有効な IANA タイムゾーンを指定。
400invalid_heightheight は 360〜1440 の整数です。
400invalid_downloaddownload は 0 か 1 です。
400invalid_localelocale が ja、en、zh-TW、zh-CN、ko のいずれでもありません。
400invalid_serverserver が複数回送られたか、ルートと一致しません。
400invalid_releaserelease が r- + 16 進 20 桁ではないか、受け付けないルートに送られました。
400body_not_allowed譜面画像リクエストに本文は付けられません。
404server_not_foundサーバースラッグが有効なリソースサーバーではありません。
404song_not_found楽曲が現在のリリースにありません。
404difficulty_not_foundこの難易度の譜面はありません。
404chart_not_foundリリースに譜面ファイルがありません。
404release_not_found指定したリリースはこのサーバーにありません。
406format_not_supported拡張子は svg または png にしてください。
413chart_too_large譜面データが描画上限 2 MiB を超えています。
413chart_render_budget描画結果がピクセル数または SVG サイズの上限を超えます。
502chart_invalidリリース内の譜面を解析できませんでした。
502chart_path_invalidカタログの譜面パスが不正です。
502png_invalidラスタライザーが不正な PNG を返しました。
502chart_image_failed描画が予期せず失敗しました。
503release_unavailableこのサーバーにはまだ現在のリリースが公開されていません。
503native_renderer_unavailable原生画像サービスを利用できません。端末の renderChartImage を使用できます。

サーバーを指定した譜面画像の描画

Section titled “サーバーを指定した譜面画像の描画”
GETHEAD /api/v1/servers/{server}/songs/{songId}/charts/{difficulty}/image.{format}

スコープ形です。server クエリを送る場合はパスの値と同じでなければなりません。リクエストに本文は付けられません。

認証
不要。誰でも匿名で読み取れます。
キャッシュ
public, max-age=300, must-revalidate

パラメーター

名前場所型説明
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

リクエスト例

Terminal window
curl -sS -o output.bin "https://haneoka.org/api/v1/servers/jp/songs/100001/charts/expert/image.png?height=540&locale=ja"

レスポンス例

HTTP/2 200 OK
Content-Type: image/png
Content-Disposition: attachment; filename="Haneoka-jp-100001-expert-ja.png"
X-Haneoka-Server: jp

バイナリ本文(表示しません)。

エラー

ステータスコード意味
304—If-None-Match または If-Modified-Since が一致しました。キャッシュを再利用してください。
400invalid_time_zone有効な IANA タイムゾーンを指定。
400invalid_heightheight は 360〜1440 の整数です。
400invalid_downloaddownload は 0 か 1 です。
400invalid_localelocale が ja、en、zh-TW、zh-CN、ko のいずれでもありません。
400invalid_serverserver が複数回送られたか、ルートと一致しません。
400invalid_releaserelease が r- + 16 進 20 桁ではないか、受け付けないルートに送られました。
400body_not_allowed譜面画像リクエストに本文は付けられません。
404server_not_foundサーバースラッグが有効なリソースサーバーではありません。
404song_not_found楽曲が現在のリリースにありません。
404difficulty_not_foundこの難易度の譜面はありません。
404chart_not_foundリリースに譜面ファイルがありません。
404release_not_found指定したリリースはこのサーバーにありません。
406format_not_supported拡張子は svg または png にしてください。
413chart_too_large譜面データが描画上限 2 MiB を超えています。
413chart_render_budget描画結果がピクセル数または SVG サイズの上限を超えます。
502chart_invalidリリース内の譜面を解析できませんでした。
502chart_path_invalidカタログの譜面パスが不正です。
502png_invalidラスタライザーが不正な PNG を返しました。
502chart_image_failed描画が予期せず失敗しました。
503release_unavailableこのサーバーにはまだ現在のリリースが公開されていません。
503native_renderer_unavailable原生画像サービスを利用できません。端末の renderChartImage を使用できます。