-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFacebook-scraper.py
36 lines (30 loc) · 1.32 KB
/
Facebook-scraper.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from tinydb import TinyDB , Query
from botocore.exceptions import ClientError
from facepy import GraphAPI
from Skynet import FaceDatabase
import json
with open('creds', "r") as f:
data = json.load(f)
graph = GraphAPI(data['facebook'])
db = TinyDB('facebook.json')
facedb = FaceDatabase('creds', table='skynetdb', collection='Skynet', bucket='skynetdb')
query_item = Query()
for person in db.all():
if 'pic' not in person or True:
print "Getting data for {} ({})".format(person['name'].encode('utf-8'), person['id'].encode('utf-8'))
pic = graph.get('/{}/picture'.format(person['id']), type='large')
try:
person_data = {'First Name': person['name'].split()[0].encode('utf-8'),
'Last Name': person['name'].split()[1].encode('utf-8')}
except IndexError:
person_data = {'First Name': person['name'].encode('utf-8'),
'Last Name': None}
try:
facedb.add_face(pic, person_data)
db.update({'pic': True}, query_item.id == person['id'])
except FaceDatabase.FaceDatabaseException, e:
print "Error: {} for {} ({})".format(e, person['name'].encode('utf-8'), person['id'].encode('utf-8'))
if 'already has a picture in skynetdb' not in str(e):
db.update({'pic': False}, query_item.id == person['id'])
else:
db.update({'pic': True}, query_item.id == person['id'])