インスタグラムAPI error_subcode:2207051でブロックされる回避策

- プログラミング -
2023.08.28
インスタグラムAPI自動化

Python × Instagram Graph API(v.17.0)でカルーセル投稿をしていたら、

API上限50件に全然達していないのにスパム扱いで何度も即ブロックされてしまい投稿できず困っている、という状況。

{"error": {
"message": "Application request limit reached",
"type": "OAuthException",
"is_transient": False,
"code": 4,
"error_subcode": 2207051,
"error_user_title": "アクションがブロックされました",
"error_user_msg": "コミュニティを守るため、特定のアクティビティは禁止されています。このブロックが何らかの間違いであると思われる場合はお知らせください。",
"fbtrace_id": "AZiLmhoB20u-Tq_7JUMMAAA"
}}

カルーセルでなく画像単体投稿でも同じエラーが出てしまうことが分かりさらに困り果てる。

色々試した結果、最終的に

  • カルーセル投稿はあきらめて、単体投稿にする
  • 単体投稿 × 1日15件まで(50件はほぼ不可能なので)

という手段をとることにした。

APIを叩くごとに1, 2秒sleepさせると1日上限50件近くまで連続投稿できる場合がある...が、sleepさせなくても50件近く投稿できる場合あり。

インスタグラムAPI error_subcode:2207051で投稿できない

ぼくの直面したときの状況

まず、ぼくは以下のMeta APIドキュメントを見ながら、Instagramショッピングの商品タグ付けした写真5〜10枚を1つの投稿にまとめたカルーセル投稿を検討していた。

※ インスタグラムショッピング機能を利用中なので「商品タグ付け」を利用

で、エラーレスポンスの"message"に「リクエスト上限到達」とあるので、リクエスト回数確認用の以下エンドポイントでAPI投稿回数を確認しても、

GET /{ig-user-id}/content_publishing_limit

"quota_usage": 12 と返ってくるので、カルーセル投稿上限である「24時間以内に50件」に触れてしまっているわけではない

制限

アカウントには、API公開投稿は24時間以内に50件までという制限があります。カルーセルは1件の投稿としてカウントされます。

引用:Meta Developers: コンテンツ公開

上記から重要なのは、10枚の写真を1つのカルーセルで投稿しても、それは10件カウントではなく1件カウントだという点。

実際にAPIでカルーセル投稿したのも12件くらいなので、quota_usageに表示される数字上に間違いがあったり、"カルーセル投稿1件=1件カウントではない"みたいなカウントルールの違いがあるわけではなさそう。

なぜか、まだ38件は投稿できるのに、上限に達する前にブロックされてしまった。

postするパラメータが間違っている?

ってこともなさそう。

そもそも12件は投稿に成功しているし、パラメータに誤りがあればパラメータ誤りについて指摘するエラーが出て1件も成功しない。

不思議なのは、カルーセル投稿する際の3ステップのうち、

  • 最後のステップ3でエラーコード:2207051が返ってくる
    → エラーなのに投稿自体はできていた
  • 何度か繰り返すとステップ2でエラーが返ってくるようになった
  • さらに何度か繰り返すとステップ1すらエラーで実行不可になった

という状況遷移があったこと。

一番解せないのは、1点目の「エラーコードが返ってくるのにインスタホーム画面を更新するとカルーセル投稿には成功していること」だった。

ステップ3がNG→ステップ2がNGになる→ステップ1がNGになる(何もできなくなる)、というのもなんだか本当にMetaにスパムスコアみたいのを積算されて判定されている感あり...

ChatGPTに聞いてみたけどダメだった

instruct me how to avoid following instagram api error response.
{〜エラーレスポンス コピペ〜}

ってChatGPT(無料版)に聞いてみたら、めちゃくちゃ長文でそれっぽいのが返ってきたけどどれもダメだった。

以下、役に立たないけど一応要約だけ書いておく。

1. リミット上限に気をつけて
→ 上限超えてない
2. 上限超えないようにコーディングで制御して
→ 上限超えてない
3. APIレスポンスをキャッシュして
→ 毎回別コンテナIDを取得するのでキャッシュするものではない
4. 無駄にAPIコールしないようにして
→ そもそも上限超えてない
5. 上限を上げる交渉をインスタグラムにしてみて
→ そもそも上限超えてない

ブロックされる原因は具体的に何なのか探ったみちのり

Pythonのスクリプトが完成してAPIをコールした初日は、すでに書いたとおり以下のような状況だった。

カルーセル投稿する際の3ステップのうち、

  • 最後のステップ3でエラーコード:2207051が返ってくる
    → エラーなのに投稿自体はできていた
  • 何度か繰り返すとステップ2でエラーが返ってくるようになった
  • さらに何度か繰り返すとステップ1すらエラーで実行不可になった

その後、

  • 実行不可になってから1度もコールせずに「24時間」待つ → 無事にステップ3まで実行できるようになった(1回だけ実験で実行)
  • ↑と同じ画像URLセット(10枚)でもう一度実行 → ステップ1で即ブロックされた

という状況。

初日と異なり、コール2発目で即ブロ。初日より明らかに基準が厳しくなっている...。

ここで1つの仮説が↓。

postする画像URL()が同じだとスパム扱いされる?...と思ったが

テスト実行的なもので、同じ画像URL(image_url)に対して複数のアイテムコンテナIDを生成するとダメな可能性。

同じURLを何回も送りつけてくる=スパム判定的な。

たしか、初日は12回のうち3回くらいは同じ画像URLで試した気がする。それで成功していた。

初回は甘く見てくれたけど、ブロック明けの2回目からは厳しくなったのか。

・・・

と思っていたけど、3日目=3回目の試行で、同じ画像URLでPOSTしないように気をつけて試しても1件目はOK、2件目で即NGになった。結果変わらず。

つまり、同じ画像に対してなんどもIDを生成することがエラーのトリガーになっているわけではない。

【結論】カルーセル投稿をやめて単体投稿にした

1ヶ月ほど色々いじってみた結果がこれ↓。

  • カルーセル投稿はすぐブロックされるのであきらめた
  • 単体投稿を1日15件までにすることにした

1秒〜10秒sleepさせながら実行など実験しながらブロックされないようにする方法を考えてきましたが、

事象の一貫性がなさすぎる & ブロックされると24時間待たないと何もできないので、面倒になってきたから50件MAX投稿できるようにするための試行錯誤はあきらめました。

単体画像投稿 × 1日15件くらいなら安定して動くことくらいは確認できたので、もうこれでいいやと。

以下は、記事更新前に書いておいた記録です。

▼▼▼▼全く参考にならない一貫性のない事象の実験記録▼▼▼▼

  • 1投稿=5〜10画像のカルーセル投稿だと1件成功・2件目でNG
  • 1投稿=1画像で投稿すると12件成功・13件目でNG
  • 単体投稿のステップ1後に10秒sleep・ステップ2後にも10秒sleep
    → 50件成功
    → 2回目実行は49件でNGになった...
  • 5秒sleepだと4件目でNG
  • 6〜9秒sleepだと45〜48件目でNG
  • もう一度5秒sleepで試す → 50件成功(もうsleep関係なさそう)
  • sleepなしで試す → 48件成功(最初しばらく12, 13件でNGだったのになぜ?)
  • カルーセル投稿だと、ステップ1, 2, 3で10秒sleepしても、2件目でNG

最初は「あれ、sleepすれば件数増やせそう」と実感があったものの、試せば試すほどsleepは関係なさそうかも...と。

▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

▼単体投稿のドキュメントはこちら

※ドキュメント「コンテンツ公開」の単一メディア投稿

ちなみに、sleepして試してみようと思ったキッカケはこちら↓。

sleepを挟まない場合、何回試しても単体投稿なら12回分のAPIコールまでセーフ(※現在はなぜか20〜40件まで行けることが多い)で、カルーセル投稿なら1回(画像10枚=APIを10回連続で叩く)までセーフ、2回目(画像11枚〜20枚)からアウト

ってことは、この↓エンドポイントに

POST /{ig-user-id}/media

「1分間に10数回以上POSTするとブロックする」的な裏ルールが働いているのかな?と思い単体投稿でsleepさせたら投稿成功回数がたしかに増えた、という経緯。

※ 現在ではsleepさせようがさせまいが変わりませんが...

何秒かsleepさせてAPIエンドポイントに連投しないことがポイントっぽい。

でも、そうだとしてもカルーセル投稿はsleepさせても1件しか通らないのは謎...。

ブロック後、何時間待てばいいのか=24時間待つ

いち早くトラシューしたいのにこの地獄の仕様。

他のユーザーが起票している不具合報告チケット上で、Metaサポートは以下のように回答しています。

Please wait for a full day before trying again as they are currently in the blockout period of 24 hours. I hope this unblocks you 🙂

訳:今は24時間のブロック期間中なので、丸1日待って再度実行してみてください。ブロック解除されているはずです。

自分の手元で実験するかぎり、今のところ

  1. ブロックされてから24時間待てば再実行→成功する
  2. 3時間待って実行 → ブロックされる
  3. 17時間待って実行 → ブロックされる
  4. 24時間待つ前に実行してブロックされると、前日最後の実行から24時間待っても解除されず、さらに24時間(かどうかは不明だが)延長されてしまう

ということしかわかっていません。

とくに厄介なのは4点目で、ブロック期間中にAPIをコールしてしまうとブロック期間24時間がリセットされる仕様っぽい。

つまり、23時間で再実行してブロックされると、そこからさらに24時間待ちなおし。

このせいで、トラシューが遅々として進まないんだよなぁ...

・・・

とまぁ、この仕様も原因となってぼくは「もう1日15件投稿でいいや、めんどくせ」と投げ出したのでした。

Meta Developersに大量の同志たちがいる...

プラットフォームの不具合報告ページで検索欄にエラーコードを入れると、それはそれは大量の同じエラーに苦しむ人たちが。

instagram api 2207051 エラー

どの内容も、「API上限に行く前にスパムとして弾かれ、時間置いたら直ったりまた発生したりを繰り返してる」というものらしく、

「こうすれば恒久的に治るよ」という解決策は存在していません

以下、stack overflowから始まるMeta Developersの障害チケットが、起票者・Metaサポート・起票者以外のユーザーが入り乱れて更新され続けているようなので、これを注視しています。

stack overflow:
Facebook api rate limited however headers suggest otherwise

Meta for Developers:
Connected Instagram page is getting rate limited

ちなみに、API仕様が1日50件なのに公式の回答が「1日50件も投稿しないでください」で笑いました(^^;

「何ヶ月経ってると思ってんだ、早く対応しろ、スパム判定される原因・対策を教えろ」と半ばブチギレているユーザーもいる...(^^;

中には細かく検証した結果を調査のためにと載せているユーザーもいて、「2件目でエラーになるアカウントもあれば、1件もできないアカウントもある。ランダムにスパム判定されたりされなかったりするように見えている、完全に意味不明だ」と結論付けている。

このエラー、

何がトリガーになって弾かれ始めるのかがさっぱり分からない × 一度ブロックされると24時間なにもできない

というコンボが一番の困りどころ。

US版Googleで「instagram api 2207051」とかググってみたけど、「エラーメッセージに"Metaに連絡して"って書いてあるからそうしてみて」って書いてる記事か、解決できずに困っているMetaサポートの記事しか見つからず...

↑TOP