solved.ac 上位100問題を美しく可視化するBOJ Tier SVGジェネレーター

Web

概要

本リポジトリ「top-solved」は、オンラインジャッジサービス「solved.ac」におけるユーザーの解いた問題の中で、上位100問題の難易度(ティア)をSVG画像として視覚化するツールです。FastAPIを用いてWebサービスとして提供されており、ユーザーのハンドルネームや表示行数、ベースカラーなどのパラメータをURLクエリで指定するだけで、即座に美しいグラフィカルなプロフィールカードを生成できます。これにより、プログラミングコミュニティ内で自分の実績を分かりやすく共有したり、ブログやSNSで活用したりすることが可能です。

GitHub

リポジトリの統計情報

  • スター数: 19
  • フォーク数: 0
  • ウォッチャー数: 19
  • コミット数: 7
  • ファイル数: 5
  • メインの言語: Python

主な特徴

  • solved.acのユーザーが解いた問題の上位100件のティアをSVGで美麗に可視化
  • FastAPIを用いた軽量かつ高速なAPIサーバーとして動作
  • 表示行数やカラーテーマの変更が可能な柔軟なパラメータ設計
  • SVG画像なので解像度を気にせずどんな画面でも鮮明に表示可能

技術的なポイント

本プロジェクトはPython言語を用い、FastAPIフレームワークを基盤として開発されています。FastAPIは非同期処理を得意とし、高速でスケーラブルなAPIを簡単に構築できるため、ユーザーからのリクエストに対して即座にSVG画像を生成・返却する用途に最適です。

SVG(Scalable Vector Graphics)はベクター形式の画像フォーマットで、拡大縮小しても画質が劣化しません。本リポジトリでは、solved.ac APIからユーザーの問題データを取得し、その難易度に応じたカラーリングや形状を動的に生成、SVGタグとして出力しています。これにより、プログラミング問題の達成度が一目で分かる視覚的なプロフィールカードを作成可能です。

コードの構成は、問題のティアごとに色を定義したcolors.py、SVGの描画ロジックを担うtier_svg.py、およびFastAPIのエンドポイントを実装したmain.pyに分割されており、保守性と拡張性が高められています。main.pyではクエリパラメータでユーザー名(handle)、表示する行数(row)、ベースカラー(base_color)などを受け取り、それに基づいてSVGを生成し返却します。

また、APIとしての応答はSVG画像のmime-typeを返すため、直接ブラウザや他のサービスに埋め込みやすい点も特徴です。さらに、色のテーマを複数用意し、ユーザーの好みに合わせてカスタマイズできるようにしているため、多様な用途に対応可能です。

このように、本リポジトリはプログラミング競技者や学習者が自分の成果を視覚的に表現し、SNSやブログで共有するための便利なツールとして機能するだけでなく、FastAPIやSVGの活用例としても参考になる構成となっています。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .gitattributes: Gitの属性設定ファイル
  • README.md: プロジェクト概要と利用方法を記載したドキュメント
  • colors.py: solved.acの問題ティアに対応したカラーコードを定義
  • main.py: FastAPIでAPIエンドポイントを実装。ユーザーリクエストを受けSVG出力を担当
  • tier_svg.py: 問題のティア情報を元にSVG画像を生成するロジックを含むモジュール

まとめ

solved.acの問題達成状況を美しく可視化する実用的なFastAPIサービス。

リポジトリ情報: