|
@@ -1,20 +1,47 @@
|
|
|
-import facebook
|
|
|
-from .models import FacebookPage
|
|
|
+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
|
|
|
- api = facebook.GraphAPI(access_token=token, version='3.1')
|
|
|
- response = api.get_object(
|
|
|
- id=page_id,
|
|
|
- fields='ratings.fields(open_graph_story,reviewer)'
|
|
|
- )
|
|
|
- # reviews has two fields ['ratings', 'id']
|
|
|
- ratings = response.get('ratings')
|
|
|
+ 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 = ratings.get('data')
|
|
|
+ data = response.get('data')
|
|
|
return data
|
|
|
|
|
|
|
|
|
-def store_reviews_into_db(reviews):
|
|
|
- pass
|
|
|
+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'))
|