1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- 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'))
|