import requests from .models import FacebookPage, FacebookReview BASE_URL = 'https://graph.facebook.com' RECOMMENDATION_STR2NUM = {'negative': False, 'positive': True} def get_page_reviews(page_id): token = FacebookPage.objects.get(id=page_id).token url = f'{BASE_URL}/{page_id}/ratings?fields=open_graph_story&limit=25&access_token={token}' response = requests.get(url).json() # ratings has one field ['data'] which contain all reviews data = response.get('data') return data def store_reviews_into_db(page_id): reviews = get_page_reviews(page_id=page_id) for review in reviews: graph_story = review.get('open_graph_story') ''' >>> graph_story.keys() dict_keys(['id', 'message', 'start_time', 'type', 'data']) ''' review_id = graph_story.get('id') message = graph_story.get('message') start_time = graph_story.get('start_time') recommendation_type = RECOMMENDATION_STR2NUM[graph_story.get('data')['recommendation_type']] review, created = FacebookReview.objects.update_or_create( id=review_id, recommendation_type=recommendation_type, review_text=message, create_time=start_time, page_id=page_id ) if created: print(f'New Facebook review has been created at {page_id}!') def populate_facebook_reviews(): page_ids = FacebookPage.objects.values('id') for page_id in page_ids: store_reviews_into_db(page_id=page_id.get('id'))