こんにちは。beaglesoftの真鍋です。
いま構築しているシステムで欲しい機能だけれどもなかったから作ってみたAPIにユーザー名に該当する文字列を設定すると特定のサイズの画像を生成するAPIを作りました。今回のAPIは引数に設定された文字を埋め込んで適当な背景の画像を作成します。
Auth0とかどこかのOAuthとかを利用しているなら特に自分で用意する必要はないのですが、組み込みで認証を自分で用意しているとちょっと欲しいけど作るには面倒だなぁというものではないでしょうか。(私はASP.NET Securityを利用しています。)
利用するには
以下の通り実行すれば画像を取得できます。(Windowsの方はWSLなどでcurlを利用できるようにして実行してみてください。)
$ curl "https://api.camello.info/uc-ri/img?s=BS" -H 'x-api-key:gR8u8SlQj71huEjxn1RmF9PmsbVyrDhf4gzVDURC' -o ~/sample.png
日本語もURLエンコードすると取得できます。
$ curl "https://api.camello.info/uc-ri/img?s=%E7%9C%9F%E9%8D%8B" -H 'x-api-key:gR8u8SlQj71huEjxn1RmF9PmsbVyrDhf4gzVDURC' -v -o ~/sample.png
パラメーター
パラメーターは以下の通りとなります。注意点として、日本語はURLエンコードするようにしてください。
引数名 | 必須 | データ型 | 内容 | 備考 |
---|---|---|---|---|
s | ○ | String | 設定する文字 | 2文字程度のアルファベットまたは日本語を想定しています。 |
APIキー
APIGatewayを利用して公開していますが、APIキーは以下の通りとなります。
gR8u8SlQj71huEjxn1RmF9PmsbVyrDhf4gzVDURC
このキーは利用者全体で共有していますが、月間リクエストが10,000件まで利用可能としています。
画像サイズなど
画像サイズは今のところ150x150に固定しています。また、フォントはipag.ttf
を利用して48ポイント固定です。背景色は以下の通り10種類作成してその中からランダムに利用しています。
def get_color_hash(): color_list = [ {'font': (255, 255, 255), 'bg': (248, 4, 6)}, {'font': (255, 255, 255), 'bg': (204, 0, 10)}, {'font': (255, 255, 255), 'bg': (229, 72, 0)}, # 緋色 {'font': (255, 255, 255), 'bg': (39, 38, 114)}, # 藍色 {'font': (255, 255, 255), 'bg': (57, 3, 124)}, # 紺藍 {'font': (255, 255, 255), 'bg': (11, 43, 21)}, # セルリアンブルー {'font': (255, 255, 255), 'bg': (251, 231, 9)}, # 卵色 {'font': (255, 255, 255), 'bg': (228, 176, 55)}, # ブロンド {'font': (255, 255, 255), 'bg': (228, 162, 11)}, # 山吹色 {'font': (255, 255, 255), 'bg': (51, 96, 69)}, # 深緑 ] r = random.randrange(10) print(f"r:{r}") return color_list[r]
システムの構成
このAPIはAWS LambdaでPythonを利用してバックエンドを作成し、API GatewayでWebAPIとして公開しています。Serverless Fraemworkを利用してます。
最後に
Serverlessというか、マイクロサービスというか、そういうものは仕組みが整っていると対象とする用途に強い言語で開発ができることはとても素晴らしいのではと思います。最初はとっつきづらい感じがあっても慣れれば便利なので是非試してみて楽しんでもらえればと思います。
追記
画像のフォントを変更しました。こちらを利用させていただきました。ありがとうございます。
追記2
このAPIのソースコードや構成をまとめました!