目次
はじめに
今回思い立ってInstagramのAPIを使おうとInstagram Developer上からAPIの利用申請を行いました。もともとの下調べによるとこの申請かなり難易度が高く、何回もやってようやく通るか通らないかくらいなものと捉えていました。しかし、実際に申請をしてみると一発ですんなりと通ったので、申請に関する方法やノウハウを書いていきます。
Instagram APIとは
Instagram APIとはInstagramの投稿・コメント・タグ・ロケーションといった情報やフォローアンフォロー・いいねといったアクションをAPI経由で実行できるものです。2016年6月までは誰でも自由に使えたのですか現在はInstagramに対して申請を行いその申請が許可された企業しか使えなくなりました。
大手のSNSはこのように自前のAPIを持っていて、特にTwitterはこのAPIでできることが非常に多いこともあり、よくTwitterのAPIを活用したWebサービスなんかを作る人がいます。
そもそもAPIは企業側が一般に開放するものなので。利用者側の自由度をあげてしまうと乱用や不正利用が増えてしまいます。そのため利用回数に制限があったり利用にあたって料金が発生するケースも多いです。
しかしInstagramに関してはこの利用の制限や利用にあたっての審査が厳しすぎるということがあるらしく、Webで情報収集をしていると不満の声が相当数見受けられます。
Instagramはステマや不正利用などに対して結構厳しく取り締まるということも有名なので、この辺りは企業文化でもあるのかなと思います。
Instagram APIでできること
Instagram APIに関する情報はInstagramのデベロッパーサイトで見ることができます。
それによると以下の6つがAPIの対象として定義されています。
- basic:ユーザーのプロフィール情報とメディアを読み込む
- public_content:ユーザーに代わってパブリックプロフィール情報とメディアを読み込む
- follower_list:フォロワーとフォローしているユーザーのリストを取得する
- comments:ユーザーに代わってコメントを投稿したり削除したりする
- relationships:ユーザーに代わってアカウントをフォローしたりアンフォローする
- likes:ユーザーの代わりにメディアをいいねしたりいいねを解除する
ということなんですか公式のサイト(下に貼り付けたキャプチャをご覧ください)をもう少しよく見てみると、2つ目のpublic_content以下は赤字でapplications no longer accepted
と書いてあります。これはつまりこれらに対する申請はもう許可されていないということで、実質basicというユーザーのプロフィール情報とそのユーザーのメディアを利用するということしか、現在のInstagram APIではサポートされていません。
そりゃないだろという感じですが、StackOverflowなどを見ていてもこの限られた範囲でしかAPIを利用は許可されていないようです。
昨年までの記事を見ているとハッシュタグや位置情報から、ユーザーを問わず投稿データを検索できるなど書いてあるのですが、これが最近になってより一層APIの制限が厳しくなったのかそれとも他の理由があるのかその辺はわかりません。
ただもっと突っ込んだ用途でAPIを利用したいという方が読まれている場合、これ以上はあまり参考になる情報はなさそうです。
この限定された用途でもいいからInstagramのAPIの審査を通したいということであれば、この後具体的な方法を書いていきます。
審査の流れ
審査のための流れをざっくりと記載しておきます。
- 申請するアプリケーションの情報を登録
- Sandbox環境でデモ用のアプリケーションを開発
- Instagramへ審査依頼
- 審査が通ったらリリース
2.でデモ用のアプリケーション開発と書きましたが、Instagram APIの利用許可申請にあたっては実際に作ったアプリケーションの操作を撮影したデモ動画の提出が求められます。
これは申請する側からするとかなり負担なのですが、デモ用の最低限の機能を実装したプロトタイプを利用するにしても、実際にInstagram APIを叩いて認証を行う部分などを実装しないといけないため、単純なハリボテということにもいきません。ここがInstagram APIの申請のハードルを一番上げている要素だと考えられます。
それでは、ひとつひとつ見ていこうと思います。
申請するアプリケーションの情報を登録
まずはInstagramのDeveloperサイトにアクセスします。これはInstagramのアカウントを持っていれば誰でもアクセス出来るため、Developer用のアカウント登録などは必要ありません。
ここからRegister New Clientをクリックします。すると入力フォームの画面が出てきます。
入力する内容は下記の通りです。
- Application Name:アプリケーションの名前。”instagram”,”IG”,”insta”や”gram”をアプリケーションの名前の中に使うのは禁止
- Description:アプリケーションの詳細
- Company Name:会社名
- Website URL:サイトのURL
- Valid redirect URIs:リダイレクトのURI。アプリケーションで認証後にリダイレクトするURI。
- Privacy Policy URL:プライバシーポリシーページのURL
- Contact email:連絡先のメールアドレス
この中で重要になってくるのはValid redirect URIs
です。これはInstagramのAPIを利用してユーザーが認証した後に飛ばされる画面で、アクセストークンはこのURlにパラメータとして含んだ形で通知されます。(アクセストークンに関しては後でまた説明します)
試しにアプリケーションを作ってみたいという場合はここにhttp://example.com/
と入力しておいてください。それ以外の項目は自由に指定してください。
Company NameとPrivacy Policy URLに関しては多分あまり重要じゃないというか、もしかしたら見てすらいないかもしれません。実際Privacy Policyのページは日本語のものを書きましたが、審査にあたって特に指摘されることはありませんでした。
今回はテストなので下記のような感じで入力しておきます。
なお、Detailsタブの隣にSecurityタブがあります。
ここではDisable implicitOAuth:
のチェックを外しておきます。
入力を終えてRegisterボタンを押すと、Manage Clientsページに作成されたアプリケーションが表示されます。
Sandbox環境でデモ用のアプリケーションを開発
Manage Clientsページに表示されているCLIENT IDというIDがありますが、これはアプリケーションを特定するための重要なキーです。また、CLIENT STATUSにSandbox Mode
とあります。これは本稼働前のお試し利用中ということを表しており、この環境においてプロトタイプを実装し、デモ動画を撮って審査の依頼を行う必要があります。
この後CLIENT IDを利用していきますが、上記のスクリーンショットに書いてあるものとは異なる文字列になります。ご注意ください。
それでは、このIDを利用してInstagram APIを利用してみましょう。
APIの利用には大きく2段階のステップがあります。
ユーザーを認証する
まず、ユーザーが自身のInstagramアカウントを用いて認証を行う部分です。試しに下記のURLをアクセスしてみてください。ご自身のCLIENT IDを自分のCLIENT-ID
という部分に置換して利用してください。
https://instagram.com/oauth/authorize/?client_id=自分のCLIENT-ID&redirect_uri=http://example.com/&response_type=token
URLを見ると、先ほど取得したCLIENT ID及びリダイレクト先のURLが埋め込まれていることがわかるかと思います。こうすることで、どのユーザーがどのアプリケーションを利用する際に認証を求めているのか、そして認証後はどのページに飛ばせば良いのかがInstagram側が分かるようになっています。
アクセスするとこのような認証画面が出てきます。ここでは先ほどアプリケーションの登録を行ったInstagramアカウントを利用して認証を行ってください。
するとリダイレクト先に指定したhttp://example.com/
に遷移すると思います。ここでURLに注目します。
http://example.com/#access_token=7050697170.747172f.accd05d922934b07a08cd8ddec1f10e2
ここでドメイン以降に#access_token=アクセストークンという形でInstagramアカウント個別のトークンが発行されたことがわかります。このトークンを利用して、この後実際にInstagram APIを利用していきます。
もっと詳しい内容はこちらを御覧ください。
https://www.instagram.com/developer/authentication/
認証したユーザーがAPIを利用する
続いてこのACCESSTOKENを用いて試しに情報を取得してみましょう。ご自身のブラウザのURL内に埋め込まれたトークンを自分のACCESS-TOKEN
という部分に置換して利用してください。
- ユーザー自身の情報を取得する
https://api.instagram.com/v1/users/self/?access_token=自分のACCESS-TOKEN
- 最近の投稿情報を取得する
https://api.instagram.com/v1/users/self/media/recent/?access_token=自分のACCESS-TOKEN
それぞれのURLにアクセスすると、何やら文字情報で値が返ってきていることがわかると思います。
定義されているエンドポイントやレスポンスのJSON形式は下記のページから確認できます。
https://www.instagram.com/developer/endpoints/
Instagramへ審査依頼
上記の認証やAPI利用の流れが実装されたプロトタイプが完成したらInstagramへ審査の依頼をします。審査依頼はPermissionsタブのStart a submissionボタンから行うことができます。
まず1.Which use case best describes your Instagram integration?
ということで、どんな用途にInstagram APIを利用するのかを選択します。
現状ここで選択できるのは下の方にある3つのみで、
- My app allows people to login with Instagram and share their own content.
- My product helps brands and advertisers understand, manage their audience and media rights.
- My product helps broadcasters and publishers discover content, get digital rights to media, and share media with proper attribution.
のどれかでないと、その次に進むことができません。
続いてAPI use case:
という項目があり、APIの利用用途を記載します。
実際の申請にあたっては、アプリケーション(サービス)の概要や想定ターゲット、Instagram APIを利用することでターゲットに対してどのような価値を与えることが出来るのかを記載しました。
そこそこ簡潔に書いたので、1000文字以内くらいに収まりました。
そして最後にVideo Screencast URL:
に予め撮影しておいたアプリケーションの使用デモ動画のリンクを貼り付けます。
撮影した動画はGoogle Driveに保存しておいたので、貼り付けたのはそのGoogle DriveのURLです。
動画に関して、私は大体2分半くらいのものを取りました。ポイントとしては
- 先にどんな流れの動画にするかを決めて、必要な部分のみを実装した
- 申請全体に渡って英語なのでプロトタイプも英語で作成した
- ドメインを取得したりwebの公開は面倒だったのでローカル開発環境で実装した
- 画面に出てくる文言を読みながらビデオを見ると考え、ゆっくり撮影した
といったところです。
クオリティはそこそこで、こちらのAPiを使う目的が伝わることを優先して作りました。
審査が通ったらリリース
私の場合は一回の申請で許可が降りました。特にInstagram側から連絡が来るということもなく、Permissionタブ内でApprovedというステータスに切り替わり、同時にSandbox ModeからLiveに変わっていました。こんな感じです。
最後に
ということで、Instagram APIはほとんど何もできない割には審査が厳しく(めんどくさく)かなり骨が折れます。
そのためもしInstagram APIを利用するとしても、実際はクローラーで本当にやりたいことを実装して、その上で信頼感の醸成や権威付けのためにInstagram APIの審査に通っているということを示す。そのくらいにしか実利的な意味合いは無いのではないかと思います。
それでもInstagram APIの審査に通りたいという方がいらっしゃれば参考にしていただけると幸いです。