
攻めすぎて Google に怒られた話 ― 個人開発のニュースアプリが、家の回線ごと止められるまで
黒猫福家本舗で、ニュースアプリ「AURA」を作っています。
Google Play での公開を目前にしたある朝、家の Wi-Fi で Google ニュースが開けなくなりました。原因は、自分のアプリでした。
恥ずかしい失敗談ですが、同じことでつまずく人が出ないように、起きたことと直したことを書いておきます。
何が起きたか
家の Wi-Fi だと、AURA で Google ニュースの記事が開けない
スマホの Chrome で開いても、英語の画面が出る。「We're sorry... your computer or network may be sending automated queries.」
モバイル回線に切り替えると、ふつうに開ける
Google ニュースの RSS も、エラー(503)を返す
家の回線が「機械が大量に問い合わせている」と見なされて、Google から一時的に止められていたのです。
なぜそうなったか ― 原因は1つではなかった
1. 記事の中継リンクを、まとめて解いていた
Google ニュースの記事リンクは中継のリンクで、元の記事の住所は書かれていません。AURA は記事の全文を先に読んでおくために、公開されていない内部の仕組みを使って、元の住所を何千件も調べていました。
2. キーワード1つが、何倍もの問い合わせになっていた
キーワードで記事を集める機能が、1つの語につき裏で何本も問い合わせていました。ふつうの検索、note と Zenn に絞った検索(site:)、期間を絞った検索(when:)、世界9か国、という具合です。site: や when: のような細かい指定は、人より機械らしく見えるそうです。
3. 試験用のスマホが3台、同じ家の回線にいた
1台ずつは控えめでも、Google から見えるのは家の回線の合計です。
4. ほかのアプリも Google ニュースを読みに行っていた
試験用のスマホに入れていた別の RSS リーダーが、裏で定期的に Google ニュースを読んでいました。
5. 「止めたつもり」が期限付きだった
試験用の1台は、問い合わせを24時間だけ止める設定でした。期限が来たら、黙って再開していました。
Google は「何回までなら大丈夫」という数字を公表していません。調べた範囲では、Google 自身のフィード取得(Feedfetcher)は、1つのフィードを1時間に1回以下とされています。これがひとつの目安になります。止めは、問い合わせが止まれば数時間〜1日で解けることが多いようです。
どう直したか
Google への問い合わせは、アプリの中の「窓口」1か所を必ず通すようにした
同時に1本だけ。3秒以上あけて、少しゆらぎも入れる
1台につき1日200回まで。超えそうなら、更新の間隔を自動で広げる
止められたら、手動の更新も含めて全部休む。休む時間は6時間→12時間→24時間と延ばす
キーワードの更新は3時間ごとにした。note と Zenn は「OR」で1本にまとめて12時間ごと、海外も12時間ごと
中継リンクを先回りして解くのをやめた。記事を開くときに、ブラウザへ渡すだけにした
公開されていない内部の仕組みは使わない
アプリの画面で見えるようにした
キーワードを足すときに「Google ニュースへの問い合わせ:1日 約○回(目安 200回まで)」と出す
止められたときは「Google ニュースが一時的に問い合わせを止めています。○時ごろ再開します」と出す。同じ回線のほかのアプリや端末のせいで止められることもある、とも書いた
試験用の「止める」は、期限のないスイッチにした
いまは、ふつうに使って Google への問い合わせは1日数回です。家の回線の止めは、ほかのアプリも含めて問い合わせを止めた日のうちに解けました。
同じ失敗をしないためのチェックリスト
外のサービスへの問い合わせは、アプリ全体で1か所に集めて数える
1日の上限(予算)を先に決めて、超えたら間隔を広げる
数えるのはアプリ単位ではなく「回線単位」。試験機の台数も、ほかのアプリも足し算になる
止められたら、すぐに全部止める。手動の操作も例外にしない
公開されていない API は、便利でも使わない
「止める」に期限を付けない
確かめるときは、止められた端末で、ふつうのブラウザで、同じ回線から試す。別の PC で開けても、確かめたことにはならない
おわりに
「全部の記事をすぐ読めるようにしたい」と攻めた結果、Google に怒られました。でもそのおかげで、アプリの裏の動きを1つの窓口にまとめた、静かで行儀のよい作りにできました。失敗も、ちゃんと調べれば次の設計の材料になります。
個人開発で RSS やニュースを扱っている方の、転ばぬ先の杖になればうれしいです。