page_utils.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import requests
  2. import facebook
  3. from django.conf import settings
  4. from .models import FacebookPage
  5. SHORT_LIVED_USER_TOKEN = getattr(settings, 'SHORT_LIVED_USER_TOKEN', None)
  6. APP_ID = getattr(settings, 'APP_ID', None)
  7. APP_SECRET = getattr(settings, 'APP_SECRET', None)
  8. def short2long_lived_user_token(short_lived_user_token, app_id, app_secret):
  9. 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}"
  10. response = requests.get(access_token_url)
  11. access_token_info = response.json()
  12. user_long_token = access_token_info['access_token']
  13. return user_long_token
  14. def get_pages(user_long_token):
  15. api = facebook.GraphAPI(access_token=user_long_token, version='3.1')
  16. res = api.get_object('/me/accounts')
  17. pages = res.get('data')
  18. return pages
  19. def insert_pages_into_db(pages):
  20. for page in pages:
  21. page_id = page.get('id', None)
  22. try:
  23. facebook_page = FacebookPage.objects.get(pk=page_id)
  24. except FacebookPage.DoesNotExist:
  25. facebook_page = FacebookPage(id=page_id)
  26. page_name = page.get('name', None)
  27. page_access_token = page.get('access_token', None)
  28. facebook_page.name = page_name
  29. facebook_page.token = page_access_token
  30. facebook_page.save()
  31. def store_pages():
  32. token = short2long_lived_user_token(
  33. short_lived_user_token=SHORT_LIVED_USER_TOKEN,
  34. app_id=APP_ID,
  35. app_secret=APP_SECRET
  36. )
  37. pages = get_pages(user_long_token=token)
  38. insert_pages_into_db(pages=pages)