Instagram APIで定形業務を自動化してみた
Instagramのフレンド・タイムライン*1に流れてくる写真の中で、like_countの下1桁が "9" のものがあれば like し、like_countを繰り上げる
というよくある定形業務をInstagram APIで自動化してみました。
最近pythonを使うことが多いので python-instagram で行ってみます。
1. Instagram APIのDeveloperサインアップ
client_id, client_secretが貰えます。これを使ってaccess_tokenを取得します。
access_tokenの取得方法は http://instagram.com/developer/authentication/ に説明があります。日本語では「5分で使い始めるInstagramAPI」辺りが分かりやすいです。
ちなみにcallback urlは自分のブログ(というか今見てるここ)にしたけど事足ります。
2. access_token取得
まず、"code"というのを取得します。
APIから"like"するにはそれ用の権限が必要なので、codeを取得する際に
https://api.instagram.com/oauth/authorize/?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&scope=basic+comments+relationships+likes&response_type=code
のように scope を指定します。(この例ではbasic,comments,relationships,likesを申請してるけどlikesだけで今回の用途には十分なはず)
ブラウザ上でredirect_uriにリダイレクトされる際に、URLの末尾に?code=XXXXXXXXXX というのが付いてくるのでそれを使ってターミナルから
$ curl \ -F 'client_id=CLIENT_ID' \ -F 'client_secret=CLIENT_SECRET' \ -F 'grant_type=authorization_code' \ -F 'redirect_uri=REDIRECT_URI' \ -F 'code=XXXXXXXXXX' \ https://api.instagram.com/oauth/access_token
とかやってaccess_token入りのjsonをゲットします。
3. スクリプト実行
#!/usr/bin/env python ''' 定形業務自動化スクリプト by naoya_t ''' import instagram access_token = 'MY_ACCESS_TOKEN' def like_it_if_mod10_is_9(target_user_id): ''' like_countが下1桁が 9 の投稿で未likeなものを見つけたらlikeする ''' api = instagram.client.InstagramAPI(access_token=access_token) users, none = api.user_follows() for user in users: recent_media, next = api.user_recent_media(user_id=user.id, count=100) for media in recent_media: if media.like_count % 10 == 9 and not media.user_has_liked: print "o", media.id, user.username, media.link, \ media.like_count, api.like_media(media_id=media.id) print "->", media.like_count + 1 else: print " ", media.id, user.username, media.link, \ media.like_count, \ 'Liked' if media.user_has_liked else '---' if __name__ == '__main__': like_it_if_mod10_is_9(target_user_id)
このスクリプトをcrontabにでも仕掛けておけば、like_countの下1桁が 9 の未like写真を探しまわらなくても良くなります!
*1:本当は何て名前なのかは知らない