|
@@ -0,0 +1,49 @@
|
|
|
|
+import requests
|
|
|
|
+import facebook
|
|
|
|
+from django.conf import settings
|
|
|
|
+from .models import FacebookPage
|
|
|
|
+
|
|
|
|
+SHORT_LIVED_USER_TOKEN = getattr(settings, 'SHORT_LIVED_USER_TOKEN', None)
|
|
|
|
+APP_ID = getattr(settings, 'APP_ID', None)
|
|
|
|
+APP_SECRET = getattr(settings, 'APP_SECRET', None)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def short2long_lived_user_token(short_lived_user_token, app_id, app_secret):
|
|
|
|
+ access_token_url = f"https://graph.facebook.com/oauth/access_token?grant_type=fb_exchange_token&client_id={app_id}&client_secret={app_secret}&fb_exchange_token={short_lived_user_token}"
|
|
|
|
+
|
|
|
|
+ response = requests.get(access_token_url)
|
|
|
|
+
|
|
|
|
+ access_token_info = response.json()
|
|
|
|
+ user_long_token = access_token_info['access_token']
|
|
|
|
+ return user_long_token
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def get_pages(user_long_token):
|
|
|
|
+ api = facebook.GraphAPI(access_token=user_long_token, version='3.1')
|
|
|
|
+ res = api.get_object('/me/accounts')
|
|
|
|
+ pages = res.get('data')
|
|
|
|
+ return pages
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def insert_pages_into_db(pages):
|
|
|
|
+ for page in pages:
|
|
|
|
+ page_id = page.get('id', None)
|
|
|
|
+ try:
|
|
|
|
+ facebook_page = FacebookPage.objects.get(pk=page_id)
|
|
|
|
+ except FacebookPage.DoesNotExist:
|
|
|
|
+ facebook_page = FacebookPage(id=page_id)
|
|
|
|
+ page_name = page.get('name', None)
|
|
|
|
+ page_access_token = page.get('access_token', None)
|
|
|
|
+ facebook_page.name = page_name
|
|
|
|
+ facebook_page.token = page_access_token
|
|
|
|
+ facebook_page.save()
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+def store_pages():
|
|
|
|
+ token = short2long_lived_user_token(
|
|
|
|
+ short_lived_user_token=SHORT_LIVED_USER_TOKEN,
|
|
|
|
+ app_id=APP_ID,
|
|
|
|
+ app_secret=APP_SECRET
|
|
|
|
+ )
|
|
|
|
+ pages = get_pages(user_long_token=token)
|
|
|
|
+ insert_pages_into_db(pages=pages)
|