Iruca Log

Iruca Log

東京に住むWeb系エンジニアによるデータ分析ブログ

SNSでフォローする!

Facebookのフレンドのuser id一覧を簡単に抜き出す方法

f:id:iruca21:20170914085456p:plain


はじめに

こんにちは、irucaです。

以前の記事で、FacebookのGET invitable_friends APIを使って自分のフレンドの名前を抜き出す方法をご紹介しました。
www.iruca21.com


こちらの方法は公式のAPIを使って自分の全フレンドの情報を抜き出せるのは良いのですが、「user id」がどうやっても抜き出せません。
性別や誕生日など各フレンドの他のプロフィール情報をAPI抜き出すためには「user id」という各ユーザを識別する数字が必要になります。
おそらくFacebook運営側がスパム的な用途に利用されることを危惧して、現在はAPIを使用してフレンドのuser IDを抜き出す方法を全て削除しているのかと思います。
GET taggable friends というAPIを使用しても同様で、user IDを抜き出すことはできなさそうです。


というわけで今回は、自動的に抜き出すことはできないものの、Facebookのフレンドのuser-id一覧を抜き出す方法をご紹介します。


この作業はプログラムで完全に自動化できていませんが、自分のフレンド一覧を取得する程度であれば5分もかかりません。
また、HTMLを取得する部分をプログラムで作ることができれば全自動化できるかと思います。(いつかやります…)


PCのChromeから自分のFacebookフレンド一覧を含むHTMLを取得する

PCのChromeブラウザを使用していることを前提とします。

まずFacebookにログインします。
www.facebook.com

今回は自分のフレンド一覧のuser IDを取得するとして、自分の名前→友達 のボタンを押して友達一覧を表示してください。
こちらのページに出ているような、2列に友達がずらっと並ぶような画面になるかと思います。

フレンドが画面に全員分表示されていない場合は、画面を徐々に下にスクロールして、1ページに全フレンドがロードされている状態にしてください。(何百人もフレンドが居る場合ここが一番面倒くさい)

その状態で「F12」キーを押して、Chromeの開発者画面を表示します。

f:id:iruca21:20170917223141p:plain

こんな画面が出てびっくりするかもしれませんが、特にここに何か張り付けろというわけではないのでご安心を…。

「Elements」のタブを押して、HTMLの中のbodyの部分をごっそりコピーしてください。
ツリー構造を閉じて、body部全体を選択できるようにしてから下記画面のようにCopy Elementしてください。

f:id:iruca21:20170917224152p:plain

HTMLを文字列処理してフレンドのuser IDを抜き出す

この中にフレンドの情報がぎっしり詰まっているので、文字列処理で無理やりフレンドのuser_idを抜き出します。
pythonのコードを用意しました。
上でコピーしたHTMLをテキストファイルに保存して、pythonが実行できる環境に置いておいてください。

#!/usr/bin/python
#-*- coding:utf-8 -*-

"""
PCのChromeで表示したFacebookのフレンド一覧画面のHTMLから
無理やりフレンドのuser IDを抜き出す
"""
import re


# HTMLを保存してあるテキストファイルのパス
txtfile_path = "friends_list.txt"

with open(txtfile_path, "r") as f:
    data = f.read()

# 正規表現でuserIDが含まれる部分をひっかける
regex = r'data-profileid="(\d+)"'
pattern = re.compile(regex)

matched_iter = re.finditer( pattern, data )

friend_user_ids = []
for item in matched_iter:
    friend_user_ids.append( item.group(1) )

# 重複が含まれるので取り除く.
# friend_user_ids リストにフレンドそれぞれのuser_idが入っている
friend_user_ids = list(set(friend_user_ids))

# とりあえずprintしてみる
for user_id in friend_user_ids:
    print user_id

さて、実行してみます。

[root@hoge facebook]# python get_friends_ids.py
100002508154892
100003461917032
100004787117662
100002508656287
1604640123
100005012334870
100002312321076
100003112381785
100001452612361
...

こんな感じで各フレンドのuser IDを抽出することができました。(上の数値は適当な値です)

あとはGET user APIででもこのuser IDの値を使って色んな情報を取得して回ればよいというわけです。

もっと手っ取りばやくユーザ情報取得を試したければ、graph API explorerを使うのもよいでしょう。

まとめ

HTMLをコピーするという手動作業が入るものの、フレンドのuser-id一覧を取得する簡単な方法を紹介しました。
この方法を使えば、

「自分の友達って男と女何人ずつなんだろう」

「自分の友達の年齢分布が知りたいなあ」

とかそういう分析も容易にすることができるようになります。
みなさんもぜひ試してみてください。