瀏覽代碼

added all utility functions to store all pages under account

Mohidul Islam 4 年之前
父節點
當前提交
697a924af1

+ 0 - 6
facebook/admin.py

@@ -1,6 +0,0 @@
-from django.contrib import admin
-from .models import FacebookPage, FacebookReview
-
-
-admin.site.register(FacebookPage)
-admin.site.register(FacebookReview)

+ 0 - 0
facebook/__init__.py → facebook_app/__init__.py


+ 13 - 0
facebook_app/admin.py

@@ -0,0 +1,13 @@
+from django.contrib import admin
+from .models import FacebookPage, FacebookReview
+
+
+class FacebookPageAdmin(admin.ModelAdmin):
+    fields = ('id', 'name', 'token')
+    list_display = ('id', 'name', 'token',)
+    readonly_fields = ('id', 'token')
+    search_fields = ('name', 'id',)
+
+
+admin.site.register(FacebookPage, FacebookPageAdmin)
+admin.site.register(FacebookReview)

+ 1 - 1
facebook/apps.py → facebook_app/apps.py

@@ -2,4 +2,4 @@ from django.apps import AppConfig
 
 
 class FacebookConfig(AppConfig):
-    name = 'facebook'
+    name = 'facebook_app'

+ 0 - 0
facebook/migrations/0001_initial.py → facebook_app/migrations/0001_initial.py


+ 0 - 0
facebook/migrations/__init__.py → facebook_app/migrations/__init__.py


+ 0 - 0
facebook/models.py → facebook_app/models.py


+ 49 - 0
facebook_app/page_utils.py

@@ -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)

+ 0 - 0
facebook/tests.py → facebook_app/tests.py


+ 0 - 0
facebook/views.py → facebook_app/views.py


+ 2 - 1
review_automation/settings/base.py

@@ -1,5 +1,6 @@
 import os
 from .config import *
+from .facebook_conf import *
 
 BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 
@@ -29,7 +30,7 @@ PROJECTS_APPS = [
     'analytics.apps.AnalyticsConfig',
     'name_extractor.apps.NameExtractorConfig',
     'yelp.apps.YelpConfig',
-    'facebook.apps.FacebookConfig'
+    'facebook_app.apps.FacebookConfig'
 ]
 
 INSTALLED_APPS = DJANGO_DEFAULT_APPS + THIRD_PARTY_APPS + PROJECTS_APPS