review_utils.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import requests
  2. from .models import FacebookPage, FacebookReview
  3. BASE_URL = 'https://graph.facebook.com'
  4. RECOMMENDATION_STR2NUM = {'negative': False, 'positive': True}
  5. def get_page_reviews(page_id):
  6. token = FacebookPage.objects.get(id=page_id).token
  7. url = f'{BASE_URL}/{page_id}/ratings?fields=open_graph_story&limit=25&access_token={token}'
  8. response = requests.get(url).json()
  9. # ratings has one field ['data'] which contain all reviews
  10. data = response.get('data')
  11. return data
  12. def store_reviews_into_db(page_id):
  13. reviews = get_page_reviews(page_id=page_id)
  14. for review in reviews:
  15. graph_story = review.get('open_graph_story')
  16. '''
  17. >>> graph_story.keys()
  18. dict_keys(['id', 'message', 'start_time', 'type', 'data'])
  19. '''
  20. review_id = graph_story.get('id')
  21. message = graph_story.get('message')
  22. start_time = graph_story.get('start_time')
  23. recommendation_type = RECOMMENDATION_STR2NUM[graph_story.get('data')['recommendation_type']]
  24. review, created = FacebookReview.objects.update_or_create(
  25. id=review_id,
  26. recommendation_type=recommendation_type,
  27. review_text=message,
  28. create_time=start_time,
  29. page_id=page_id
  30. )
  31. if created:
  32. print(f'New Facebook review has been created at {page_id}!')
  33. def populate_facebook_reviews():
  34. page_ids = FacebookPage.objects.values('id')
  35. for page_id in page_ids:
  36. store_reviews_into_db(page_id=page_id.get('id'))