Skip to content

Commit

Permalink
Sketch loading events from Faacebook Graph API
Browse files Browse the repository at this point in the history
These changes add an utility call (and a Makefile call) to fetch
events from Pyladies Facebook Pages.
  • Loading branch information
gabisurita committed Mar 7, 2017
1 parent 660932e commit a0728db
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 0 deletions.
3 changes: 3 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -144,5 +144,8 @@ endif
virtualenv:
$(VIRTUALENV) $(VENV)

load-facebook-events:
$(PY) -c "import utils; utils.load_facebook_events(utils.PYLADIES_FACEBOOK_PAGES)"


.PHONY: up html help clean regenerate serve serve-global devserver publish github newpost newpage
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ Markdown==2.6.7
ghp-import==0.4.1
PyYAML==3.12
beautifulsoup4==4.5.1
facebook-sdk==2.0.0
89 changes: 89 additions & 0 deletions utils/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
import os
from datetime import datetime

import yaml
from facebook import GraphAPI


PYLADIES_FACEBOOK_PAGES = [
'pyladies',
'PyLadiesBrazil',
'PyLadiesSP',
'pyladiescps',
'PyLadiesTeresina',
'PyLadiesNatal',
'PyLadiesDuqueDeCaxias',
'pyladiesvale',
'pyladiesfloripa',
'PyLadiesCuritiba',
'pyladiesdf',
'pyladiesrp',
'PyLadiesSaoCarlos',
'pyladiesbh',
'pyladiespucrio',
'PyLadiesFortaleza',
'pyLadiesPHB',
'fundao.pyladies',
'pyladiesrio',
'PyLadiesPicos',
'pyladiesbelem',
'PyLadiesSalvador',
'pyladiesrecife',
'PyLadiesMaceio',
'pyladiespoa',
'PyLadiesSLZ',
]


def load_facebook_events(nodes, token=os.environ.get('FACEBOOK_TOKEN')):
"""
Load events from Facebook pages to the events file.
..important:
In order for this function to work, you need to to provide a valid
Facebook Graph API token. You can get yours easily on
https://developers.facebook.com/tools/explorer
:param nodes: Facebook nodes to load public events from.
:param token: Facebook Graph API token.
"""

# Facebook settings
graph = GraphAPI(access_token=token)

with open('data/events.yml', 'r') as events_file:
existing_events = yaml.load(events_file)

# Get facebook metadata on existing entries
facebook_ids = {entry.get('facebook-id') for entry in existing_events}

fetched_events = []

for node in nodes:
event_node = "{}/events".format(node)
node_events = graph.get_object(event_node, limit=1000)

for event in node_events['data']:

# If event already exists, just ignore
if event['id'] in facebook_ids:
continue

format_date = datetime.strptime(event['start_time'],
'%Y-%m-%dT%H:%M:%S%z')

fetched_events.append({
'name': event['name'],
'url': 'https://facebook.com/{}'.format(event['id']),
'local': event.get('place', {}).get('name', ''),
'date': format_date.strftime('%d-%m-%Y'),
'facebook_id': str(event['id'])
})

with open('data/events.yml', 'a') as events_file:
for entry in fetched_events:
events_file.write('\n')
yaml.dump([entry], events_file,
default_flow_style=False,
allow_unicode=True)

0 comments on commit a0728db

Please sign in to comment.