自分の漫画を取得できるREST APIを作ってみたおはなし

あすかです。

私は趣味で漫画を描いて自分のホームページに載せているのですが、それを取得するREST APIを作ろうなんていう需要不明意味不明なことをしてきましたので、簡単に紹介します。

名前はGunuccoです。ASP.NET Core 1.1で開発しました。

github.com


漫画を取得するREST APIを作るには、まず漫画をアップロードするREST APIを作らなければいけません。なので、0.2.0現在、以下の種類のAPIがあります。

  • 投稿のためのアカウントを作るAPI
  • IDとパスワードでログインするAPI
  • OAuthで認証するAPI(ノリで作った)
  • 漫画を投稿するAPI
  • 漫画を読むAPI
  • 信用できないアプリの認可を解除するAPI

APIの一覧

APIを使う前の基礎知識

用語解説

Gunuccoには、APIを使うにあたって重要になる用語がいくつかあります。造語とかはないので、さして難しくないです。

ユーザ

本を投稿するためには、ユーザを作る必要があります。本を読むには、一部の場合をのぞいて認証は不要なので、作る必要はないです。
IDには、数字のIDと、Text IDの2種類があります。基本は数字のIDですが、Text IDはOfficial web clientからユーザ詳細を見るためのURIに使われます。

ブック(本)

複数のチャプターをひとまとめにした単位です。

チャプター(章)

本の目次に載るあれです。第1話、第2話、第3話、なんていうふうに使います。親子関係を持つこともできます。
非公開にすることもできます。ていうかデフォルトでは非公開です。

コンテンツ

テキスト、画像の2種類があります。(この他にもHTMLがありますが、サーバの設定ではデフォルトで使用不可です)
1つのチャプターに複数のコンテンツを登録して、順番を設定して公開することができます。

APIを使う

Nugetから落とす

テストも兼ねて.NET Standardでパッケージを作っていますので、それを落とします。

www.nuget.org

Install-Package GunuccoSharp

.NET Standardのバージョンは1.4ですので、以下のリンクから見れる表を参考に、インストール対象のWPFとかコンソールとかのプロジェクトでは、ターゲットを.NET Framework 4.6.1以上にする必要があります。
.NET Standard | Microsoft Docs

漫画を読む

XAML (UWP)


C#XAMLのコードビハインドの一部)


実行結果

f:id:kmynews:20170603180731p:plain

漫画をアップロードする

C#(コンソールプログラムの一部)


実行結果

( ・`ω・´)

サーバ設置について

ないかもしれませんが、他の漫画家とかが自分もGunuccoを使いたい!ってなったら、どうすればいいのでしょうか。

Gunuccoは、マストドンとかと違って、システムを使う人が、システムを取り扱うための技術力を持っている可能性は低いですよね。
なので、Gunuccoは、今回のようなあすか以外ユーザ登録や投稿ができない設定の他に、誰でもユーザ登録できるような設定にすることもできます。

現在、Gunuccoのサーバは2つあります。どちらもAmazon EC2CentOS 7で動いています。

また、Gunuccoはソースを公開していますので、誰でも自分のサーバにGunuccoを構築することができます。

所感(言い訳)

あくまでもあすかのためだけに作ったシステムですし、機能もあすかのニーズに特化したものしかない(OAuthは例外)ので、今後需要が広がることは全く予想できません。
でも、自分で使うシステムを自分で作るって、なんか理想的なんですよね。自分なりにチューイングもできるし。

このシステムは、建前は漫画や小説を書いたり読んだりするための共通のAPIを作ろう、というのを目的にしています。
どういうことかというと、例えばはでなブログには、記事を投稿するためのAPIがあります。それを使って、自分の作ったアプリから記事を投稿できますよね。
でも、はでなブログから他のブログ(ライブドアとか)に、同じAPIで記事を投稿することはできません。
なので、記事投稿アプリを作るにしても、はでなブログとその他のブログサービスのAPI、それぞれに対応したアプリを別々に手に入れる必要があります。
これは開発者の負担も大きいですし、その分APIを使う人も少なくなってしまうかなと思うんです。

Gunuccoは、サーバのソースを公開していますので、複数のGunuccoサーバが存在しえます。
Gunuccoのように複数のサイトを同じインターフェースで操作することができるようなAPIや、それを広めるための取り組みができたらなぁーなんて、勝手に妄想しています。
もしこれが実現したら、例えばサイトAの記事を編集するためのアプリで、サイトBの記事が編集できてしまいます。たとえアプリ制作者がサイトBの存在を想定していなくても、です。
そうすると、記事編集が簡単とかでものすごい評判のアプリを、誰でも気兼ねなく使えるってことですよね。
閲覧するためのアプリにも同じことが言えます。どんなに素晴らしいコンテンツを掲載しているサイトでも、アプリの使い勝手が悪いという理由で読者が減っては機会損失です。評判のいいアプリにサーバ側が対応することで、集客が見込めます。
アプリ制作者も需要拡大が見込めるからアプリ制作に熱が入ります。
といっても、この手のものは、すでに既存のシステムがあるのがお約束なのです。WordpressにもREST APIがありますねそういえば。

いずれ、マストドンみたいに、サーバ同士をつなげる機能が作れたらいいですね。ブックマーク機能を作って、他のサーバのブックを購読したり更新情報を取得したりとか。システムを使っているのが私一人だけの状況下では、あまり意味をなさないかもしれませんが。