インスタの投稿(画像・動画)を定期的に自動で保存する

インスタの投稿(画像・動画)を定期的に自動で保存する データ分析

「インスタの分析を行いたい」
「インスタの投稿を自動で取得したい」

このような場合には、この記事の内容が参考となります。
この記事では、インスタの投稿を自動で定期的に保存する方法を説明しています。

本記事の内容

  • インスタの投稿を一括取得する方法
  • 投稿を一括取得する場合の問題点
  • 問題点を解決する方法
  • インスタの投稿を自動で定期的に保存する方法

それでは、上記に沿って解説していきます。

インスタの投稿を一括取得する方法

インスタの投稿を一括取得する方法は、次の記事で解説しています。
InstaloaderというPythonライブラリ・ツールを利用します。

しかし、Instaloaderを非ログインで使い続けると必ずエラーが出ます。
そのときの対応方法は、次の記事でまとめています。

上記で挙げた記事の内容に従えば、インスタの投稿を一括取得することが可能です。
まずは、投稿を一括取得するところまで実施してみてください。

以上、インスタの投稿を一括取得する方法を説明しました。
次は、投稿を一括取得する場合の問題点

投稿を一括取得する場合の問題点

実例をもとに説明を行います。
新庄監督のインスタ投稿を対象にしましょう。

新庄監督のインスタ投稿を一括で保存するには、次のコマンドを利用します。

instaloader --login=your_username shinjo.freedom

このコマンドは、すべての投稿にアクセスして動画や画像を取得します。
そのため、初回時はこのコマンドで何も問題はありません。

ただ、このコマンドは非常に無駄が多いのです。
このコマンドは毎回すべての投稿にアクセスします。

そして、未取得の投稿であれば新規保存します。
実際のログでこの動きを確認しましょう。

$ instaloader --login=your_username shinjo.freedom
Loaded session from /home/username/.config/instaloader/session-your_username.
Logged in as your_username.
[1/1] Downloading profile shinjo.freedom
shinjo.freedom/2021-12-12_17-42-59_UTC_profile_pic.jpg already exists
Retrieving posts from profile shinjo.freedom.
[  1/337] shinjo.freedom/2022-03-21_12-56-26_UTC.jpg [札幌パルコ  B1F・特設会場 1F 正面ウィンドウ・衣装…] json 
[  2/337] shinjo.freedom/2022-03-21_12-55-17_UTC.jpg [新しいLINEスタンプが出来たらしい😅🙇‍♂️✋‼️] json 
[  3/337] shinjo.freedom/2022-03-20_14-53-54_UTC.jpg exists [今日でオープン戦が終わり いよいよ開幕に向けてキャンプから…] unchanged json 
[  4/337] shinjo.freedom/2022-03-20_09-47-23_UTC.jpg exists [林ヘッドコーチの サングラス姿に 全国のヘッドコーチ ファ…] unchanged json
〜

この処理は、「ctrl + c」で強制的に終了させました。
放置すれば、337件の全投稿にアクセスしたはずです。

実は、数日前に335件の投稿をすべて保存していました。
その際は、同じコマンドを利用しています。

そのため、すでに335件は取得済です。
次のログの「exists」や「unchanged」に注目してください。

[  3/337] shinjo.freedom/2022-03-20_14-53-54_UTC.jpg exists [今日でオープン戦が終わり いよいよ開幕に向けてキャンプから…] unchanged json 
[  4/337] shinjo.freedom/2022-03-20_09-47-23_UTC.jpg exists [林ヘッドコーチの サングラス姿に 全国のヘッドコーチ ファ…] unchanged json

不要なアクセスですよね。
これが、あと300回以上生じるのはさすがに無駄と言えます。

Instagramから変な制限を受けるのは、できる限りで避けたいです。
そのためには、できるだけ無駄なアクセスは減らす方がよいでしょう。

以上、投稿を一括取得する場合の問題点を説明しました。
次は、問題点を解決する方法を説明します。

問題点を解決する方法

投稿を一括取得する場合の問題点を解決しましょう。
そうしないと、インスタからアクセス制限を受けるかもしれません。

その解決策として、次のコマンドを利用します。

instaloader --login=your_username --fast-update shinjo.freedom

「–fast-update」が、オプションとして追加されています。
335件の状態(2件分は削除)にして、上記コマンドを実行します。

$ instaloader --login=your_username --fast-update shinjo.freedom
Loaded session from /home/username/.config/instaloader/session-your_username.
Logged in as your_username.
[1/1] Downloading profile shinjo.freedom
shinjo.freedom/2021-12-12_17-42-59_UTC_profile_pic.jpg already exists
Retrieving posts from profile shinjo.freedom.
[  1/337] shinjo.freedom/2022-03-21_12-56-26_UTC.jpg [札幌パルコ  B1F・特設会場 1F 正面ウィンドウ・衣装…] json 
[  2/337] shinjo.freedom/2022-03-21_12-55-17_UTC.jpg [新しいLINEスタンプが出来たらしい😅🙇‍♂️✋‼️] json 
[  3/337] shinjo.freedom/2022-03-20_14-53-54_UTC.jpg exists [今日でオープン戦が終わり いよいよ開幕に向けてキャンプから…] unchanged json 
Saved session to /home/username/.config/instaloader/session-your_username.

3件目の投稿を取得した時点で、処理が自動的に終了しました。
公式(英語)にある説明通りです。

--fast-updateが与えられると、Instaloaderは既にダウンロードされた最初の画像に到着した時点で停止します。

初回時とか2回目以降とか考えるのは、少し面倒です。
それであれば、常時「–fast-update」を付けるのもアリかもしれません。

以上、問題点を解決する方法を説明しました。
次は、インスタの投稿を自動で定期的に保存する方法を説明します。

インスタの投稿を自動で定期的に保存する方法

ここでは、Linux(Ubuntu)をベースに説明を行います。
ここまでの内容を理解していれば簡単と言えます。

シェルスクリプトを書くだけです。
まず、instaloaderのパスを特定します。

$ which instaloader
/home/username/venv/bin/instaloader

Pyhon仮想環境を利用していても、問題ありません。
Pyhon仮想環境については、次の記事で解説しています。

次に、注意するのは実行する場所ですね。
instaloaderを実行するディレクトリにまで移動する必要があります。

それらを考慮すると、次のようなシェルスクリプトになります。

instaloader.sh

cd /home/username/data
/home/username/venv/bin/instaloader --login=your_username --fast-update shinjo.freedom

あとは、このシェルスクリプトをcronに設定すれば出来上がりです。
毎日6時に起動するようにします。

0 6 * * * /home/username/script/instaloader.sh > /home/username/log/instaloader.log 2>&1

cronについては、次の記事で解説しています。

これらの設定により、毎日インスタの投稿を自動で取得できます。

以上、インスタの投稿を自動で定期的に保存する方法を説明しました。

タイトルとURLをコピーしました