2013년 5월 20일 월요일

[python] facebook 친구 리스트 파징


페이스북에서 특정 계정의 친구 리스트를 얻는 방법엔 여러가지가 있을 수 있다.

하지만 가장 쉬운 방법은 아래의 url 을 사용해서 json 데이터를 파징하는 방법일 것이다.

graph api를 사용할 필요가 없고, access token 이 필요 없기 때문에 정말 쉽게 리스트를 얻을 수 있다.

페이스북의 경우 로그인을 하지 않으면 특정 계정의 친구 리스트를 볼 수 없는데,

아래의 방법을 사용할 경우 계정의 uid 만 있으면 쉽게 리스트를 파징할 수 있다.

여기서 uid란 유저의 id가 아닌 facebook이 계정마다 정해주는 숫자를 의미한다.

이 숫자는 http://graph.facebook.com/유저프로필url 에서 알아낼 수 있다.

페이스북에 관한 연구를 진행할 때 소스를 참고하면 데이터를 모으는데 많은 도움이 될 듯 하다.

하지만 무단으로 개인정보를 수집하는 용도로 사용하지 않기를 바란다.

# -*- coding:utf-8 -*-
# author = 'carpedm20'

import urllib
from urllib2 import urlopen
from json import loads

def get_friend_list(f_num):
    f = urllib.urlopen('https://www.facebook.com/ajax/typeahead_friends.php?u=' + f_num  + '&__a=1')

    s = f.read()
    f.close()

    json = s.replace('for (;;);{"__ar":1,"payload":','').replace(',"bootloadable":{},"ixData":[]}','')
    try:
        json = loads(json)
    except:
        return []

    f_list=[]

    for f in json['friends']:
        f_list.append(str(f['i']))

    print " # of json : " + str(len(f_list))

    return f_list

if __name__ == "__main__" :
    f_num = "페이스북 계정 uid"
    friend_list = get_friend_list(f_num)

간단하게 7명의 친구 리스트를 파징해서 networkx 모듈을 사용해 그래프를 그리면 아래와 같이 나온다.

더욱 많은 데이터를 수집하고나서 그려보면 페이스북에서의 소셜 네트워크가 뚜렷하게 나타날 것이다.


댓글 4개:

  1. 이렇게 찾아본 사람들이 있는지, 유저네임으로는 이제 제이슨 파일 추출이 안되고, 특정 아이디넘버(랜덤인듯?) 232334 이런식으로 입력해야 되네요 ㅠ

    답글삭제
  2. 유저 id가 아닌 페이스북이 계정마다 정한 숫자를 나타내기 위해 uid라는 단어를 사용했는데 조금 애매한 부분이 있었던거 같네요. 아이디 넘버는 만들어진 시기와 상관이 있어 보입니다만, 단순히 몇개의 계정을 보고 페이스북이 정한 규칙을 알 수는 없어보입니다. uid 는 http://graph.facebook.com/계정프로필url 에서 json 파일로 알아내실 수 있습니다.

    답글삭제
  3. 쇼트컷이 있엇군요.
    저 facebook 제이슨 파일 URL나, 이런 facebook 그래프URL 은 어디서 알아내시는건가요?
    요즘 잼있게 포스팅 보고 있습니다.

    답글삭제
  4. 친구 리스트 주소는 검색을 통해 찾았고, 그래프 url 은 facebook api 문서를 읽다가 알아냈습니다 :)

    답글삭제