LoginSignup
2
0

More than 5 years have passed since last update.

複数のFacebookアカウントの投稿を取得し、1つのAPIで返す

Posted at

背景

個人ではあまりないことですが、企業だと複数のFacebookアカウントを持っていることがあると思います。縦割り組織の場合だと、商品のカテゴリーごとに勝手にアカウント作って運用していることはよくあることだと思います。それぞれのカテゴリー毎に発信することも重要ですが、まとめて閲覧できる場を作りたいと思い開発しました。

前準備

(1) facebook for developersでアカウント開設

(2) マイアプリを作成後、設定画面でapp secretとApp IDをコピー

(3) 無期限アクセストークンの取得
無期限APIの取得方法はこちらが参考になりました。
画面のキャプチャ付きでわかりやすいです。
Facebook API ページの無期限 Access Token 取得方法

構成

図1.png

LambdaでTokenやFacebookのアカウント情報を記載し、GraphAPIを使用します

コード

lambda_function.py
import os
import json
import datetime
import requests
import boto3
from dateutil.parser import parse
from boto3.dynamodb.conditions import Key, Attr

endpoint = os.environ['endpoint']
# https://graph.facebook.com/v3.0/

aaaaAccount = {'123456789':'***************'}
bbbbAccount = {"987654321":"***************"}
# id : token

accountlist = aaaaAccount
accountlist.update(bbbbAccount)

def lambda_handler(event, context):

    feedList = {}

    for key, item in accountlist.items():
        jsonData = get_accountList(key,item)
        for feedData in jsonData['feed']['data']:
            if 'message' in feedData.keys() and 'shares' in feedData.keys():
                feedList[feedData['created_time']] = {'message':feedData['message'],'sharecount':feedData['shares']['count'],'name':jsonData['name'],'picture':jsonData['picture']['data']['url'],'link':jsonData['link']}
    sortData = sorted(feedList.items(),reverse=True)
    retrun sortData

def get_accountList(facebookId,token):
    param = '?fields=about%2Cfeed.limit(3)%7Bmessage%2Ccreated_time%2Cshares%7D%2Cfan_count%2Cpicture%2Clink%2Cname&access_token=' + token
    url = endpoint + facebookId + param
    return requests.get(url).json()

改善したい点

・管理用のアカウントで無期限のtokenを発行 or 毎回tokenを取得できれば、管理下のアカウント毎にAPI実行しなくて済むので方法があればそちらに変更したい。
・API用のパラメーターをエンコードしたものを記述しているが、視認性向上のためプログラムでエンコードしたい。(下記コードだとlimit(3)の()がエンコードされたせいかうまくいかなかった。)
・dynamoDB or CloudFrontを使用して毎回APIをたたかないようにして、レスポンス向上したい

param = urllib.parse.quote('/?fields=about,feed.limit(3),fan_count,picture,link&access_token=') + token
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0