コード例 #1
0
class FacebookResource:

    FB_URL_PATTERN = re.compile('(?:(?:http|https)://)?(?:www.)?(mbasic.facebook|m\.facebook|facebook|fb)\.(com|me)/')

    def __init__(self, app_id, app_secret):
        self.facebook = GraphAPI()
        self.facebook.access_token = self.facebook.get_app_access_token(app_id, app_secret)

    def extract_fanpage_name_from_url(self, url: str):
        if self.FB_URL_PATTERN.match(url, 0):
            sub_url = self.FB_URL_PATTERN.sub('', url)
            return sub_url.rsplit('/', 1)[0].replace('/', '')
        return url

    def get_all_posts(self, page_name: str):
        return self.__get_all_connections(page_name, 'posts')

    def get_all_comments(self, post_id: str):
        return self.__get_all_connections(post_id, 'comments')

    def __get_all_connections(self, id: str, connection: str, **args):
        assert id is not None
        assert connection is not None

        while True:
            page = self.facebook.get_connections(id, connection, **args)
            for item in page['data']:
                yield item
            next_page = page.get('paging', {}).get('next')
            if not next_page:
                return
            args = parse_qs(urlparse(next_page).query)
            del args['access_token']
コード例 #2
0
ファイル: connector.py プロジェクト: henry0910/BenarReports
 def __init__(self):
     
     graph_api = GraphAPI()
     
     self.access_token = graph_api.get_app_access_token(config.FACEBOOK_APP_ID, config.FACEBOOK_APP_SECRET)
     self.api_connection = facebook.GraphAPI(self.access_token, version=config.FACEBOOK_VERSION)
     
     self.validate_connection()
コード例 #3
0
def facebook_callback(request):
    graph = GraphAPI()

    # Получаем Long Term Access Token
    if request.GET.get('code'):
        access_token = graph.get_access_token_from_code(
            request.GET.get('code'), host_url('autoposting-facebook-callback'),
            settings.FACEBOOK_APP_ID, settings.FACEBOOK_APP_SECRET)

    else:
        access_token = graph.get_app_access_token(settings.FACEBOOK_APP_ID,
                                                  settings.FACEBOOK_APP_SECRET)

    graph.access_token = access_token['access_token']
    access_token_response = graph.extend_access_token(
        settings.FACEBOOK_APP_ID, settings.FACEBOOK_APP_SECRET)
    access_token = access_token_response['access_token']
    access_token_expires_at = datetime.datetime.now() + datetime.timedelta(
        seconds=int(access_token_response.get('expires', 60 * 60 * 24 * 60)))

    # Получаем список access_token для каждой из групп, что у нас есть в настройках
    graph = GraphAPI(access_token=access_token)
    group_access_tokens = {}
    after = None
    while True:
        if after:
            objects = graph.get_object('me/accounts', limit=25, after=after)

        else:
            objects = graph.get_object('me/accounts', limit=25)

        for group in objects['data']:
            if group['category'] == 'Community':
                group_access_tokens[group['id']] = group['access_token']

        if objects['paging'].get('next'):
            after = objects['paging']['cursors']['after']

        else:
            break

    facebook_autoposting = FacebookAutoposting.objects.all()
    for fb_autoposting in facebook_autoposting:
        if not group_access_tokens.get(fb_autoposting.page_id):
            messages.error(request,
                           'Access Token for %s not found' % fb_autoposting)
            continue

        fb_autoposting.access_token = group_access_tokens.get(
            fb_autoposting.page_id)
        fb_autoposting.access_token_expires_at = access_token_expires_at
        fb_autoposting.save()

    return redirect(
        reverse('admin:autoposting_facebookautoposting_changelist'))
コード例 #4
0
class FacebookResource:

    FB_URL_PATTERN = re.compile(
        '(?:(?:http|https)://)?(?:www.)?(mbasic.facebook|m\.facebook|facebook|fb)\.(com|me)/'
    )

    def __init__(self, app_id, app_secret):
        self.facebook = GraphAPI()
        self.facebook.access_token = self.facebook.get_app_access_token(
            app_id, app_secret)

    def extract_fanpage_name_from_url(self, url: str):
        if self.FB_URL_PATTERN.match(url, 0):
            sub_url = self.FB_URL_PATTERN.sub('', url)
            return sub_url.rsplit('/', 1)[0].replace('/', '')
        return url

    def get_all_posts(self, page_name: str):
        return self.__get_all_connections(page_name, 'posts')

    def get_all_comments(self, post_id: str):
        return self.__get_all_connections(post_id, 'comments')

    def __get_all_connections(self, id: str, connection: str, **args):
        assert id is not None
        assert connection is not None

        while True:
            page = self.facebook.get_connections(id, connection, **args)
            for item in page['data']:
                yield item
            next_page = page.get('paging', {}).get('next')
            if not next_page:
                return
            args = parse_qs(urlparse(next_page).query)
            del args['access_token']