Instagram API を使って Like しようとすると OAuthPermissionsException

投稿者: Anonymous

instagram apiを利用しようとしています。

いいね!に関するアクセス権を取得しようとしているのですが、
AccessTokenの取得は不自由なく完了し(認証時点でscope=likesを追加しました)、
テストしてみました。

http://www.dcrew.jp/ja-instagram-api-doc-v1/index.php/likes

curl -F 'access_token=1961041054.ec1e284.835d91aab88f4326a48eaac38555686d' 
https://api.instagram.com/v1/media/1029547297065157969_307880528/likes

その結果、下記のレスポンスが返ってきました。

{"meta":
  {"error_type":"OAuthPermissionsException",
   "code":400,
   "error_message":"This request requires scope=likes,
                    but this access token is not authorized with this
                    scope. The user must re-authorize your application
                    with scope=likes to be granted write permissions."}
}

likesは間違いなく認証時に要求したので、なぜかと思い、developerページを確認したところ、
こんなチェックボックスがありました。

■ Enforce signed requests
Requires the use of your Client Secret to sign all API requests.
Use this option to instruct Instagram to check requests for a signature passed in the 'sig' parameter and validate it.
This signature is a SHA256 hash of the endpoint and key/value pairs of all parameters for the request,
using the Client Secret.
If this option is set, calls with mismatched signatures will fail.
This technique helps protect your OAuth Client from impersonation attempts from malicious developers.
Only enable this option for server-to-server calls.
See the Secure API Requests documentation for details.

関係ありそうだと思い、チェックを入れて再認証し実行したところ、

Invalid signed-request: Missing required parameter 'sig'

というエラーになりました。
頭を抱えており、英語は苦手ですが公式ドキュメントに飛んだところ、このようなページを見つけました。
これはドキュメント内の「いいね!を付ける」部分にリンクしてあったページです。

https://help.instagram.com/contact/185819881608116

ここを見ると、ライセンスうんぬんが書いてあるのですが、
一番下のラジオボタンをいろいろいじってみたところ、一般的にはアクセスが許可されていないということなのでしょうか?

また、「許可されていないなら、Selenium使って無理やりいいね!つけてやる」
というのはまずいことでしょうか?

直接開発とは関係の無い話かもしれませんが、よろしくお願いします。

解決

Publishing guidelines and signed requests – Instagram Developers

Starting today, any newly created client_id that wishes to issue POST and DELETE requests to the Likes or Relationships API endpoints will first have to request that access.

https://help.instagram.com/contact/185819881608116

The ability to POST and DELETE likes, follows and comments is restricted to applications that offer business services and not consumer facing apps.

というわけで、2015年4月からは別途申請が必要になったようです。そして一般ユーザー向けのアプリに対して利用を許可するつもりはないみたいですね。

また AccessToken を取得する際にスコープを指定したとありますが、指定したはずなのに、承認画面にはLikeに関する権限が記載されなかったという話を見つけました。指定しても無視される、ということかもしれません。


■ Enforce signed requests

そのアプリケーションがAPIを利用する際に、全てのリクエストを署名しますよ、という設定です。セキュリティを高めるための設定というだけで、本件とは関係ありません。

参考 http://syncer.jp/instagram-api-matome#sec-10

また、「許可されていないなら、Selenium使って無理やりいいね!つけてやる」 というのはまずいことでしょうか?

これだという条項は見つけられませんでしたが、まあ規約違反でしょうね。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *