APIなどの接続制限に引っかかった。


APIの接続制限に引っ掛かりエラーをはいちゃう!

と、まじめに取り組んだらどうしようもない問題に直面してしまった。。。
しかしながら、人の作ったものを利用させてもらうのだから、制限の緩和ではなく、こちら側で何とか対応しなければいけないと考えた。

何ができるのか考えてみた

私が今回使っているAPIは、1分間で90回までの接続と、無償で利用できるAPIとしてはそれなりに多い接続回数ではないか。
大体1秒に1回、1分で60回程度が多いからそう感じた。
しかし、1分間で90会も接続してるかな?
と考えるが、そういうものの見方が正しいとは限らない。
おそらく、1分間で90回をカウントしているものではなく、1秒単位なり、5秒単位でカウントしているだろう。
F5を連続すると結構エラーを吐くので、そうだと思う。
問題はその制限に達するとある一定時間ビジー状態になることだ。
なので、けっきょくは避けなければいけない。

構造から考える

現在、もともと接続制限は意識しており、最初に提供される最新の全データCSVを提供してくれる優しいところだったので、まずは全データをDBに格納した。
しかし、様々なデータが更新されていくので、そのDBをもとに、一定期間経過したデータをAPIから取得し更新するように作った。
なので、今日・明日にAPIに接続するようなことは起きないのだ。
次に、プログラム拡張で別の情報をAPI取得するようにした。
アクセスごとに、そのAPIにアクセスされる状態になった。
もちろんその状態も同時アクセスが増えてくると制限がかかるので、一度アクセスした情報はDBに格納するようにしていった。
スタート段階はそれなりにアクセスが発生していくが、時間経過とともにデータが溜まっていくので解消されるだろうと信じていた。
そして、運航開始した途端ビジーが始まった。

アクセスは2人程度ですでにビジーになった。
これではさすがにまずいのでいろいろ考えてみた。
そこで一つの答えが、私のコードの書き方では、変数を呼び出すたびにどうやらAPIに接続しているのではないかということだ。
なので、APIへの接続を1アクセスごとに1回にするために、一時ファイルにAPIの出力結果を格納し、その一時ファイルに毎回アクセスされるように作り直した。

これで、1アクセスごとに現在は最大で2回の接続となった。
そうすることでほとんどエラーを出力しなくなった。

あとは、現在は開設したばかりのサイトなので、検索エンジンがクロールに大量に来ている。
そのたびに現状ではAPIに接続しているのでぎりぎりかもしれない。
API接続とAPI接続の間にスペーサー的な時間を設けるかどうか。。。

今後のクロール結果を見て決めたいと思う。


コメント

SNSでもご購読できます。

PR