メインコンテンツへスキップ
見出し画像

攻めすぎて 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 やニュースを扱っている方の、転ばぬ先の杖になればうれしいです。

    #個人開発 #Android #Googleニュース #RSS #AURA

     
     
    AI活用Androidで理想のアプリを個人で開発! ★らじぽけ:ラジオ番組をダウンロードして、いつでも聴ける。番組表・キーワード検索・自動録音・お気に入り番組の永続保存に対応 ★AURA:RSS/ATOMやGoogleNewsキーワード検索記事のリーダーでEven G2連携有り

    あなたへのおすすめ