インスタグラムやってる人って、若い女性の方って印象がありますが、店舗や各種マーケティングを仕事で行っている人などもかなりやられているみたいですね。
ちなみに、僕はアカウントは作っていますが、写真をアップするような事はこれまでやった事がありません。
あれ?これってSNSのアカウントを登録しているけど、ほとんど使っていませんという、普通のサラリーマン的な発言みたいになってますが、インスタグラムは写真や動画共有という事でカメラ大好きな若者系が多いのも納得です。
僕のようなおっさんには無縁のツールかもしれませんね。
でも、仕事でインスタグラムはめちゃくちゃ操作していて、クローリングツールを作っている時に人の何倍も見ているため、もはやヘビーユーザーと言ってもいいのかもしれませんね。
でも自分の投稿は一切やっておりません。
インスタのコメントはログインしなくても全部取得できる
Instagramのコメント取得に関して、これまでログインをしてコメント一覧をスクレイピングするというやり方をやっていたのですが、cronバッチや、任意タイミングの度に日に何度もログインをしていると、どうやらバンされやすくなるという事がわかり、ログインをせずに記事に対するコメント情報を全て取得する方法がわかったので、やり方を書いておきます。
まず、クローラーツールでインスタグラムの記事ページにアクセスすると、コメントが取得できる情報にアクセスできます。
これは全ての基本ですが、そのページ内で"_sharedData"という変数に大体の情報が格納されています。
コメントは、たくさんのフィードバックがある場合には、_sharedDataは、max40件までしか格納されていません。
実際にはコメント数の値と、実際にコメントの配列数を比べてみて足りなければ次のページがあるのですが、もう一つの判断方法は、end_cursorという値が存在するかどうかで判断します。
次のデータを取りに行くのは、ajaxを使って行うのがいいでしょう。
クローラーツールを使ってもいいのですが、リクエストヘッダなどの情報を追加したり書き換えたりする必要があるので、ここからはJavascriptだけで操作するのが僕の場合は使いやすかったんですね。
このヘッダ情報というのが曲者で、ここが理解できるといとも簡単に取得できるようになります。
リクエストヘッダの仕様
基本的にはjQueryのajax機能を使ってもいいし、自分でXMLHttpRequest関数を操ってもいいのですが、重要なのは、送信ヘッダの中に、"X-Instagram-GIS"という情報を加えなければエラーが返ってしまうということです。
GIS情報って一体何なんでしょう?
この"X-Instagram-GIS"というkeyに対して、値は"_sharedData.rhx_gis"に格納されている値と下記のJSON構造を文字列化したものを":"コロンで繋いで、md5暗号化するといいようです。
# GIS-value
{
shortcode : ※開いているページのアカウントID,
first : ※任意の数値,
after : ※end_cursorの値
}
end_corsorの数珠つなぎ
そして、上記のヘッダ情報を送付して、ちゃんとコメントデータが受け取れるようになったら、その中に格納されているend_corsorに注目してみましょう。
冒頭でも出てきたこのend_corsorは、次のページがありますよというサインなので、存在する場合は、また同じ手順で次のコメント情報を取得しにいくという手順になります。
こうしてend_corsorの値が無くなるまでデータを取得したら、取得したデータの一覧から、全てのコメント情報を取得することができるという流れです。
奥が深いインスタグラム
スクレイピング作業を行っていると、こうした複雑な手順の中に、優れたセキュリティ技術を見出すこともできます。
正直クローラー対策でこういう事をやっているのはわかりますが、それを回避する輩もおおいという証拠ですね。
この先仕様が変わることを恐れていますが、そうなったらまたトライするまでですよ。
0 件のコメント:
コメントを投稿