1
Help us understand the problem. What are the problem?

posted at

updated at

【Python】特定ユーザーの最新の投稿にいいねしたアカウントを全件取得する

初めに

 ことすたぐらむフォロー機能2のいいねしたアカウントのユーザーIDを全件取得する工程になります。
 こちらと、フォロー機能1で搭載した画面からのフォローを組み合わせることで、フォロー機能2は完成します。
 順に解説していきます。

最新の投稿にいいねしたアカウントを全件取得する

ライブラリをインポートする

 まずはライブラリをインポートしましょう。インポートするライブラリはinstaloaderです。instaloaderについては別記事で詳しく書こうと思いますが、非常に使いやすいライブラリです。

instagram.py
import instaloader

ログインIDとパスワードを定義する

 instaloaderでInstagramにログインするための情報を設定しましょう。

instagram.py
import instaloader

#IDとpasswordを定義
INSTAGRAM_ID = 自分のユーザーID
INSTAGRAM_PASSWORD = 自分のパスワード

Instagramにログインする

 では実際にログインをしてまいります。こちらの解説は以前の記事で行っております。

instagram.py
import instaloader

#IDとpasswordを定義
INSTAGRAM_ID = 自分のユーザーID
INSTAGRAM_PASSWORD = 自分のパスワード

#Instagramにログインする
loader = instaloader.Instaloader()
loader.login(INSTAGRAM_ID, INSTAGRAM_PASSWORD)

任意のユーザーの投稿をすべて取得する

 instaloaderにはProfileクラスが用意されています。このクラスのメソッドを使用して、Profileインスタンスを作成する際に渡した引数のアカウントの情報を取得することができます。

instagram.py
id = 投稿を見るアカウントのユーザーID
profile = instaloader.Profile.from_username(loader.context, id)

 .from_usernameはProfileインスタンスを作成する際に、引数としてアカウントIDを渡しますという意味です。これでProfileインスタンスが作成できました。こちらを使用して投稿をすべて取得するコードは以下のになります。

instagram.py
import instaloader

#IDとpasswordを定義
INSTAGRAM_ID = 自分のユーザーID
INSTAGRAM_PASSWORD = 自分のパスワード

loader = instaloader.Instaloader()
loader.login(INSTAGRAM_ID, INSTAGRAM_PASSWORD)

id = 投稿を見るアカウントのユーザーID

profile = instaloader.Profile.from_username(loader.context, id)
posts = profile.get_posts()

 Profileインスタンス.get_posts()ですべての投稿を取得することができます。簡単ですね。

最新の投稿を取得する

.get_posts()の戻り値はNodeIteraterです。順番は最新の投稿からになっています。ですので初歩的な関数next()を使用して最新の投稿のみを取得しましょう。
 ソースコードは以下になります。

instagram.py
import instaloader

#IDとpasswordを定義
INSTAGRAM_ID = 自分のユーザーID
INSTAGRAM_PASSWORD = 自分のパスワード

loader = instaloader.Instaloader()
loader.login(INSTAGRAM_ID, INSTAGRAM_PASSWORD)

id = 投稿を見るアカウントのユーザーID

profile = instaloader.Profile.from_username(loader.context, id)
posts = profile.get_posts()
#最新の投稿を取得する
post = next(posts)

最新の投稿にいいねしたアカウントを全件取得する

 では最新の投稿が取得できたので、いいねしたアカウントを全件取得しましょう。instaloaderの.get_posts()の戻り値はNodeIteraterですが、中身はPostオブジェクトになります。
 Postクラスにはいいねしたアカウントを全件取得できるget_likes()という関数があります。戻り値はNodeIteraterです。
 そちらを使用して全件取得するコードは以下のとおりです。

instagram.py
users = post.get_likes()

usersの中身はuserオブジェクトです。userクラスにはusernameプロパティーがあります。こちらがアカウントのユーザーIDになります。
 Iteraterなので、for文で回してしまいましょう。
 完成形のコードは以下になります。

instagram.py
import instaloader

#IDとpasswordを定義
INSTAGRAM_ID = 自分のユーザーID
INSTAGRAM_PASSWORD = 自分のパスワード

loader = instaloader.Instaloader()
loader.login(INSTAGRAM_ID, INSTAGRAM_PASSWORD)

id = 投稿を見るアカウントのユーザーID

profile = instaloader.Profile.from_username(loader.context, id)
posts = profile.get_posts()
i = iter(posts)
post = next(i)
for user in post.get_likes():
    print(user.username)

実行方法

 コマンドプロンプトを開いて以下のコマンドで実行できます。

実行方法
python instagram.py

終わりに

 ことすたぐらむのローカルソースの作成も佳境を迎えました。そろそろサーバー側の記事も書いていきますね。
 ぜひご指摘、ご質問などコメントよろしくお願いします。
 最後まで読んでいただき感謝です。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
1
Help us understand the problem. What are the problem?