kakakakakku blog

Weekly Tech Blog: Keep on Learning!

使いたい API がきっと見つかる!public-apis リポジトリ

フロントエンドのプロトタイプ実装をするときや API を使ったアプリケーションを実装するときなど「ササッと使える API があると便利なんだけどー!」という場面はよくある!本当によくある.今回紹介する GitHub の public-apis リポジトリは,2022年8月時点で「1400 以上」の API が載っていて,使いたい API がきっと見つかるはず!

僕自身は2019年頃から public-apis リポジトリを参考にしていて,今までブログで紹介していなかったことに気付いた!今回は public-apis リポジトリと個人的によく使っているおすすめ API を紹介する.ちなみに GitHub issue を見るとすぐに気付くけど,リポジトリ運営に課題があるらしく,特に今年になって状況は悪くなっていると思う.今後どうなることやら...

github.com

public-apis リポジトリには,2022年8月時点で「1400 以上」の API が「51 カテゴリー」に分類されている.多すぎー!と言いたくなるほどに多岐にわたる.また Auth / HTTPS / CORS といった API を実行するときに考慮するべき要素も確認できる.

  • Animals(動物)
  • Anime(アニメ)
  • Anti-Malware(マルウェア対策)
  • Art & Design(アート & デザイン)
  • Authentication & Authorization(認証 & 認可)
  • Blockchain(ブロックチェーン)
  • Books(書籍)
  • Business(ビジネス)
  • Calendar(カレンダー)
  • Cloud Storage & File Sharing(クラウド ストレージ & ファイル共有)
  • Continuous Integration(継続的インテグレーション)
  • Cryptocurrency(暗号通貨)
  • Currency Exchange(為替)
  • Data Validation(データ検証)
  • Development(開発)
  • Dictionaries(辞書)
  • Documents & Productivity(ドキュメント & プロダクティビティ)
  • Email(メール)
  • Entertainment(エンターテイメント)
  • Environment(環境)
  • Events(イベント)
  • Finance(ファイナンス)
  • Food & Drink(食べ物 & 飲み物)
  • Games & Comics(ゲーム & 漫画)
  • Geocoding(ジオコーディング)
  • Government(政府)
  • Health(健康)
  • Jobs(仕事)
  • Machine Learning(機械学習)
  • Music(音楽)
  • News(ニュース)
  • Open Data(オープンデータ)
  • Open Source Projects(オープンソースプロジェクト)
  • Patent(特許)
  • Personality(パーソナリティ)
  • Phone(電話)
  • Photography(写真)
  • Programming(プログラミング)
  • Science & Math(科学 & 数学)
  • Security(セキュリティ)
  • Shopping(ショッピング)
  • Social(ソーシャル)
  • Sports & Fitness(スポーツ & フィットネス)
  • Test Data(テストデータ)
  • Text Analysis(テキスト分析)
  • Tracking(トラッキング)
  • Transportation(交通手段)
  • URL Shorteners(URL 短縮)
  • Vehicle(車)
  • Video(ビデオ)
  • Weather(天気)

おすすめ API

個人的によく使っているおすすめ API を「5種類」紹介する.まだまだ他にも使えそうな API はあるはず!

皆さんのおすすめはどれですか!?

1. RandomDog(Animals カテゴリー)

github.com

「RandomDog」は犬の画像とファイルサイズをランダムに取得できる API で,とてもシンプルに使える.また /doggos エンドポイントを実行すると犬の画像の一覧を取得できるため,リストビューなどを実装するときに使える.ワンちゃんカワイイ🐶

$ curl -s https://random.dog/woof.json | jq .
{
  "fileSizeBytes": 703054,
  "url": "https://random.dog/46754b31-a450-4afe-9063-d7c5b981ca28.jpg"
}

$ curl -s https://random.dog/doggos | jq .
[
  "00186969-c51d-462b-948b-30a7e1735908.jpg",
  "00564ba3-e5cb-4b2b-8d97-c65a9ef26c23.png",
  "00b417af-0b5f-42d7-9ad0-6aab6c3db491.jpg",
  (中略)
]

2. Zoo Animal API(Animals カテゴリー)

⚠ Heroku の無料プラン廃止に伴ってアクセスできなくなっていた(2022年12月更新)

「Zoo Animal API」は動物園で飼育されている動物のデータをランダムに取得できる API で,レスポンスの情報量が多いので,フロントエンドの UI をより複雑に実装するときに便利だったりする.以下の例は Laughing Kookaburra(ワライカワセミ)でカワイイけど,たまーにヘビとか少し苦手な動物が出てきたりするとドキッとすることもある🐍

$ curl -s https://zoo-animal-api.herokuapp.com/animals/rand | jq .
{
  "name": "Laughing Kookaburra",
  "latin_name": "Dacelo navaeguineae",
  "animal_type": "Bird",
  "active_time": "Diurnal",
  "length_min": "1.4",
  "length_max": "1.5",
  "weight_min": "0.8",
  "weight_max": "1",
  "lifespan": "20",
  "habitat": "Forest",
  "diet": "Insects, snakes, lizards, rodents, and small birds",
  "geo_range": "Australia, Tasmania and New Zealand",
  "image_link": "https://upload.wikimedia.org/wikipedia/commons/9/9b/Laughing_kookaburra_dec08_02.jpg",
  "id": 104
}

3. Gutendex(Books カテゴリー)

gutendex.com

「Gutendex」は著作権切れになった書籍を電子化するプロジェクト Project Gutenberg の API で書籍データを取得できる.電子書籍サイトのプロトタイプ実装をするときに便利!以下はサンプルとして「Alice's Adventures in Wonderland(不思議の国のアリス)」の情報を取得している.また API エンドポイントに ?languages=ja を追加すると日本語の書籍も取得できて,例えば「羅生門」の情報も取得できる.

$ curl -s https://gutendex.com/books/\?ids\=11 | jq '.results[0]'
{
  "id": 11,
  "title": "Alice's Adventures in Wonderland",
  "authors": [
    {
      "name": "Carroll, Lewis",
      "birth_year": 1832,
      "death_year": 1898
    }
  ],
  "translators": [],
  "subjects": [
    "Alice (Fictitious character from Carroll) -- Juvenile fiction",
    "Children's stories",
    "Fantasy fiction",
    "Imaginary places -- Juvenile fiction"
  ],
  "bookshelves": [
    "Children's Literature"
  ],
  "languages": [
    "en"
  ],
  "copyright": false,
  "media_type": "Text",
  "formats": {
    "application/epub+zip": "https://www.gutenberg.org/ebooks/11.epub.images",
    "application/rdf+xml": "https://www.gutenberg.org/ebooks/11.rdf",
    "application/x-mobipocket-ebook": "https://www.gutenberg.org/ebooks/11.kindle.images",
    "text/html; charset=utf-8": "https://www.gutenberg.org/files/11/11-h.zip",
    "image/jpeg": "https://www.gutenberg.org/cache/epub/11/pg11.cover.medium.jpg",
    "text/plain; charset=utf-8": "https://www.gutenberg.org/files/11/11-0.zip",
    "text/html": "https://www.gutenberg.org/ebooks/11.html.images"
  },
  "download_count": 24462
}

$ curl -s https://gutendex.com/books/?languages=ja | jq '.results[0]'
{
  "id": 1982,
  "title": "羅生門",
  "authors": [
    {
      "name": "Akutagawa, Ryunosuke",
      "birth_year": 1892,
      "death_year": 1927
    }
  ],
  "translators": [],
  "subjects": [
    "Japan -- Social life and customs -- Fiction",
    "Short stories"
  ],
  "bookshelves": [],
  "languages": [
    "ja"
  ],
  "copyright": false,
  "media_type": "Text",
  "formats": {
    "text/html": "https://www.gutenberg.org/ebooks/1982.html.images",
    "application/x-mobipocket-ebook": "https://www.gutenberg.org/ebooks/1982.kindle.images",
    "application/epub+zip": "https://www.gutenberg.org/ebooks/1982.epub.images",
    "application/rdf+xml": "https://www.gutenberg.org/ebooks/1982.rdf",
    "image/jpeg": "https://www.gutenberg.org/cache/epub/1982/pg1982.cover.medium.jpg",
    "text/plain; charset=utf-8": "https://www.gutenberg.org/files/1982/1982-0.txt"
  },
  "download_count": 330
}

4. CountAPI(Development カテゴリー)

countapi.xyz

「CountAPI」は今までの API とは違って,情報を取得するという用途ではなく「回数を数える」ために使える.イメージとしては Redis の INCR コマンドに近いと思う.https://api.countapi.xyz/hit/{namespace}/{key} という API に任意の namespace(名前空間)key(キー) を指定して実行すると,値をインクリメントできる.以下には kakakakakku/blog に3回リクエストを送った例を載せてみた.幅広く使えそうな API でおすすめ!

$ curl -s https://api.countapi.xyz/hit/kakakakakku/blog | jq .
{
  "value": 1
}

$ curl -s https://api.countapi.xyz/hit/kakakakakku/blog | jq .
{
  "value": 2
}

$ curl -s https://api.countapi.xyz/hit/kakakakakku/blog | jq .
{
  "value": 3
}

5. weather-api(Weather カテゴリー)

github.com

「weather-api」は指定した都市の天気予報を取得できる API で,3日後までの予測も取得できる.wttr.in というサイトに依存してるらしく Shibuya-ku なども使える.たまに Heroku のエラーで使えないことがあったり,予測結果が表示されないこともあって挙動に不安定ではあるものの,お題として天気予報を表示するフロントエンド(そしてエラーハンドリングの練習も!笑)を構築するときなどに使える.天気予報の精度はよくわからず,あくまでサンプル API として気軽に使えることがメリットかなと!

$ curl -s https://goweather.herokuapp.com/weather/Shibuya-ku | jq .
{
  "temperature": "+23 °C",
  "wind": "9 km/h",
  "description": "Partly cloudy",
  "forecast": [
    {
      "day": "1",
      "temperature": "30 °C",
      "wind": "16 km/h"
    },
    {
      "day": "2",
      "temperature": "+29 °C",
      "wind": "14 km/h"
    },
    {
      "day": "3",
      "temperature": "+32 °C",
      "wind": "36 km/h"
    }
  ]
}

まとめ

ササッと使える API を探すときに GitHub の public-apis リポジトリが便利!使いたい API がきっと見つかるはず!

github.com

なお,最初に書いた通り,public-apis リポジトリ運営に課題があるらしく,最近では以下の APIsList など,Fork したサイトもリリースされていたりする.今後どうなることやら!

apislist.com