Instagramの API がいつのまにかリリースされていました。
instagramの画像をだらだら眺めるものを作ってみたのときにはなかった気がするので最近ですかね?
(そういえば、最近iphoneアプリにinstagram系を見かけると思ってたけど、これがリリースされたからなのか)
というわけで、Instagram APIのpythonライブラリのpython-instagramを触ってみたいと思います。
1. python-instagramのサンプルを動かしてみる。
1-1. InstagramDeveloperでアプリを登録する。
ここの「Register your application」から登録します。
(その前にinstagramのアカウントがないとダメだった気がします。)
例)
Application Name:テスト
Description:テストアプリです。
Website:http://localhost:8515
OAuth redirect_uri:http://localhost:8515/oauth_callback
登録が完了すると「Manage」に登録したアプリケーションのCLIENT IDなどを確認できます。
1-2.python用のライブラリ python-instagramを取得する。
ここにpythonとrubyのライブラリがあるのでpythonのライブラリを取得します。
取得すると「sample_app.py」があるので、これを動かして動作を確認します。
1-3.準備
「python setup.py install」でインストールするとライブラリも良きにはからってくれます。
sample_app.pyを開いて以下を書き換えます。
・CONFIGのclient_id、client_secret、redirect_uriを1-1で登録した内容に書き換えます。
1-4.実行します。
ここまでをそれっぽい環境に作ってみるとこんな感じです。
[bash]
mkvirtualenv instagramapp
git clone git@github.com:Instagram/python-instagram.git
cd python-instagram/
python setup.py install
pip install bottle
vi sample_app.py
# CONFIGを修正
[/bash]
それでは、sample_app.pyを実行してブラウザで http://localhost:8515 にアクセスします。
[bash]
python sample_app.py
[/bash]
「Connect with Instagram」というリンクがあるのでクリックすると、Instagramへのログイン画面に遷移します。
ログインすると、今回作成したアプリからのアクセス許可を求める画面になります。
許可するので「Yes」をクリックします。
そうすると、redirect_uriに登録しているURLに遷移します。
サンプルのプログラムでは自分の投稿した最近の画像を表示するようになっています。
2. Instagramのpythonライブラリを使ってみる
2-1. client_idのみで利用してみる。
OAuthによる認証が必要ではない機能もあるので、それを使ってみます。
2-2. 実は動いてくれないライブラリ
ここまできて何だそりゃ! って感じですが、実は公式にあるpython-instagramは微妙にバグがあるみたいで使えなかったりします。media_popularとかやってみてもすぐエラーになります。
そこでforkして修正してるリポジトリがあるのでこっちのを使わせてもらいます。
が、それでもエラーになるので一部修正する。
さっきまでのファイルがあると思いますので、いれかえちゃいましょう。
[bash]
cd (python-instagramがあるディレクトリ)
rm -Rf python-instagram
git clone git://github.com/mgunneras/python-instagram.git
cd python-instagram
vi instagram/models.py
[/bash]
[diff]
diff –git a/instagram/models.py b/instagram/models.py
index 95e4799..3a74563 100644
— a/instagram/models.py
+++ b/instagram/models.py
@@ -104,7 +104,7 @@ class Location(ApiModel):
@classmethod
def object_from_dictionary(cls, entry):
point = None
– if entry[‘latitude’]:
+ if entry.get(‘latitude’, None):
point = Point(entry[‘latitude’],
entry[‘longitude’])
location = cls(entry.get(‘id’, 0),
[/diff]
[bash]
python setup.py install
[/bash]
2-3. client idのみでpopular検索してみる。
CLIENT IDには1-1で取得したCLIENT IDを設定します。
これで10件データを取得できます。
[python]
from instagram import InstagramAPI
api = InstagramAPI(client_id="e9c32d794cd64b049d4a0bea688134cd")
items = api.media_popular(count=10)
for item in items:
print "user name: %s" % item.user.username
[/python]
取得したデータの構造はここらに書いてます。
2-4.皆大好きねこ画像。
[python]
from instagram import InstagramAPI
api = InstagramAPI(client_id="e9c32d794cd64b049d4a0bea688134cd")
items, next = api.tag_recent_media(count=10, tag_name="cat")
for item in items:
print "user name: %s" % item.user.username
[/python]
3. わざわざpython使わなくてもjavascriptでもOK
Javascriptだけでも簡単にできるようです。こんなかんじです。
参考元:Instagram API が面白いかも – すぎゃーんメモ
InstagramAPIメモ
client.pyから。client.py,tests.pyをみたほうがよいっ。
MEDIA_ACCEPT_PARAMETERS = [“count”, “max_id”]
SEARCH_ACCEPT_PARAMETERS = [“q”, “count”]
media_popular
パラメータ:MEDIA_ACCEPT_PARAMETERS
media_search
パラメータ:SEARCH_ACCEPT_PARAMETERS + [‘lat’, ‘lng’, ‘min_timestamp’, ‘max_timestamp’],
media_likes
パラメータ:[‘media_id’]
like_media
パラメータ: [‘media_id’]
unlike_media
パラメータ:[‘media_id’]
create_media_comment
パラメータ:[‘media_id’, ‘text’]
delete_comment
パラメータ:[‘media_id’, ‘comment_id’]
media_comments
パラメータ:[‘media_id’]
media
パラメータ:[‘media_id’]
user_media_feed
パラメータ:MEDIA_ACCEPT_PARAMETERS
user_recent_media
パラメータ:MEDIA_ACCEPT_PARAMETERS + [‘user_id’]
user_search
パラメータ:SEARCH_ACCEPT_PARAMETERS
user_follows
パラメータ:[“user_id”]
user_followed_by
パラメータ:[“user_id”],
user
パラメータ:[“user_id”]
location_recent_media
パラメータ:MEDIA_ACCEPT_PARAMETERS + [‘location_id’]
location_search
パラメータ:SEARCH_ACCEPT_PARAMETERS + [‘lat’, ‘lng’, ‘foursquare_id’]
location
パラメータ:[“location_id”]
tag_recent_media
パラメータ:MEDIA_ACCEPT_PARAMETERS + [‘tag_name’]
tag_search
パラメータ:SEARCH_ACCEPT_PARAMETERS
tag
パラメータ:[“tag_name”]
user_follows
user_followed_by
user_incoming_requests
change_user_relationship
パラメータ:[“user_id”, “action”],