2017-12-18

【Python Instagram API ①】PythonでInstagramのAPIの認証を行う

QiitaにInstagram APIを使ってWebページに表示するというPHPむけの記事があったのですが、Python向けのInstagram APIの記事がなかったのでちょっと試してみました。まず、この記事ではPythonクライエントでInstagramのAPIの認証回りをやってみたいと思います。





最終的にやりたいこととしては


  • Instagram APIをPythonから認証して利用できるようにする
  • 特定のハッシュタグをつぶやいた投稿に対して、いいねする
  • 自動化する


です。APIを利用することで、Instaを自動化させたり、データベースに情報を保存したり、Web上で運用したり等、Webマーケでも結構使えそうなAPIです。エンジニアでこっちに手を出す人がいないのは、やっぱり理系な文化だからなんですかね。




余談は置いておいて、まずInstagram APIをPythonから認証して利用できるようにするから順におってやっていきたいと思います。

環境


Python3
WSL(Windows Subsystem For Linux)
Windows10

Instagram Developerに登録


Instagram APIを使ってWebページに表示するを参考に、以下の値を取得してきてください。ちなみにAPIを利用する場合は、専用のページが必要となります。


認証する前に、Instagramのアカウント、適当なホームページを所持している必要があります。また、Developerに登録後、以下の値を取得する必要があります。


  • 取得したClient ID
  • 設定したClient Secret
  • 設定したValid redirect URIs


となります。


アクセストークンの取得


以下のURLに、該当する値(Client IDと、Valid redirect URIs)を入れて、アクセスします。

https://instagram.com/oauth/authorize/?client_id=「取得したCLIENT ID」&redirect_uri=「設定したValid redirect URIs」&response_type=token

2017/12/19追記)APIの仕様が変わり、以下のようなURLにアクセスする必要性が生まれました。詳しくはこちらの記事を参照してください。

https://api.instagram.com/oauth/authorize/?client_id=Client id&redirect_uri=リダイレクトURL&response_type=token&scope=public_content

以下のようなエラーが表示された場合、Instagram DeveloperのManage > Security > Disable implicit OAuthを消去すると治ります。この解説をみるとわかりやすいと思います。

{“code”: 403, “error_type”: “OAuthForbiddenException”, “error_message”: “Implicit authentication is disabled”}

うまくいくと、以下のようなページに飛びます。




Authorizeをクリックすると、Valid redirect URIsに飛びます。飛んだ先のページにURLに、アクセストークンが表示されるようになります。

https://review-of-my-life.blogspot.jp/#access_token="ここにアクセストークンが入っています。"
ここのアクセストークンをメモしておきましょう。


Python Client for Instagram APIを利用できなくなった?



Python Client for Instagram APIを利用して、instagramのAPIを利用してみましょう。

追記)と思ったのですが、実はつい最近にInstagramのAPIの仕様が変更されたらしく、こちらのクライエントではInstagramが動かないようです。


RequestsでAPI認証してみる


そこで、InstagramのAPIを利用するためにPythonのRequestsというライブラリを利用してみたいと思います。InstagramのAPIのエンドポイントは、日本語だとInstagram APIでwebサービスを作りたい全ての人に向けて書きましたが、英語だと公式ドキュメントが参考になりそうですね。


さっそく認証して、なんらかの値を取得してみましょう。まずは、あるタグがどれだけ投稿されているかしらべます。公式ドキュメントのAPIのエンドポイントを見ながら、実行してみます。ちなみに僕はInstagramをほとんど使わないのでよくわからないのですが、おそらくこのタグはタイトルのことを言っているのかな?

api.py

import requests

access_token = "" #Access Tokenを入れる
client_secret = "" #Client Secretを入れる
tagName = "VR"  #検索キーワード
response = requests.get("https://api.instagram.com/v1/tags/{}?access_token={}".format(tagName,access_token))
print(response.text) #取得したデータをJSON形式で返す

こちらのファイルを実行しますと、以下のような結果が取得できます。

kdmgs110@DESKTOP-4HHEO95:/mnt/c/workspace/pydev/instagram-hashtag$ python3 api.py
{"data": {"name": "vr", "media_count": 1296523}, "meta": {"code": 200}}

とりあえずハッシュタグでVRとつぶやかれたmediaの個数が出てきました。APIからデータを取得できているようですね。


ということで次の記事では、Instagram APIを利用して、ほかにどんなことができるのかを調べてみたいと思います。



注目の投稿

 PythonのTweepyを利用して、Twitter APIを利用している。 その中で、ハマったポイントをメモしておく。 まず、Searchに関して。 Twitter検索は、クライアントアプリ側では、全期間の検索が可能になっている。 一方で、APIを利用する際は、過去1週間しか...