こんにちは。CData Software Japan リードエンジニアの杉本です。
今回はよく問い合わせをいただくFacebook Driverの使い方で躓きやすいポイントを解説したいと思います。
https://www.cdata.com/jp/drivers/facebook/
Facebook Driver の認証方法について
まず、Facebook Driver は2種類の接続方法が存在することを理解する必要があります。
それが下記2つです。
- CData アプリによる認証(埋め込みクレデンシャル)
- カスタムアプリによる認証
デフォルトは前者の認証アプローチが使われますが、ユースケースによっては後者が必要となる場合があります。
CData アプリによる認証(埋め込みクレデンシャル)
Facebook DriverにはデフォルトでCData が取得したアプリ設定が埋め込まれています。特に意識せず接続を行うと、この認証方法が利用されます。
気をつけたいのはこの認証方法による権限です。FacebookのAPIを使う時によく出てくる以下のような画面ですね。
この認証による接続の場合は、以下の権限によるデータアクセスが可能です。
- public_profile
- pages_manage_ads
- pages_manage_metadata
- pages_read_engagement
- pages_read_user_content
- read_insights
- ads_read
- business_management
例えば、接続しているユーザーのプロフィールデータを参照したり、自身が管理しているFacebookページの投稿を取得したりすることが可能です。
それでは実際にCData Facebook Driverからの接続を試してみましょう。
CDataアプリによる接続の場合は、以下のプロパティだけで接続できます。
- InitiateOAuth=GETANDREFRESH;
Fcebook ODBC Driverの場合は、デフォルトで「InitiateOAuth=GETANDREFRESH;」が付与されているので特に指定はいりません。そのまま「接続」をクリックするだけでOKです。
もし対象の接続するページが決まっている場合は、AuthenticateAsPageの設定を行ってください。この設定ですと、投稿の取得がデフォルトでその対象ページに固定されます。
- InitiateOAuth=GETANDREFRESH;
- AuthenticateAsPage=2090225297738791;
JDBCなどの場合は「jdbc:facebook:InitiateOAuth=GETANDREFRESH;AuthenticateAsPage=1677996745815257;」のようになります。
接続すると、ブラウザが立ち上がり、以下のようにログインアカウントの確認およびプロフィールとメールアドレスへのアクセス許可リクエストが表示されます。
ログインをしてすすめるとビジネスアカウント・Facebookページへのアクセス許可が求められます。
ここで対象となるビジネスアカウントおよびFacebookページへのアクセス許可が設定されているかどうか確認しておきましょう。
確認後OKを押すと、接続が完了します。
それでは、CData Software Japan Facebookページを見てみましょう。
投稿データを取得したい場合は「Posts」テーブルを選択します。
例えば以下のようなSQLで対象のFacebookページの投稿一覧が表示できます。
SELECT ID,FromName,Name FROM Posts LIMIT 10;
AuthenticateAsPageが設定されていない場合、このように取得できないので注意しましょう。
その場合、以下のようにTargetにFacebook Page Idを指定することで取得できます。
SELECT ID,FromName,Name FROM Posts WHERE Target = 'FacebookPageId' LIMIT 10;
カスタムアプリによる認証
もし、上記のCDataアプリには無い権限のデータを取得したい場合は、カスタムアプリを作成する必要があります。例えば個人アカウントでの投稿の取得などです。
カスタムアプリの作成は誰でも自由に行うことができますが、注意したいのはこのカスタムアプリを他のユーザーにも公開して、API連携を行うかどうか? という点です。
公開する場合は、Facebookアプリレビューが必要となり、そこには数々の確認がFacebookから求められます。
ただ、もし自分自身の投稿だけを自分の権限範囲内だけで見たいのであれば、API Limit はありますが開発中のアプリでもCData Driverで接続することが可能です。
今回は開発中アプリを使って接続し、自分のFacebookアカウントの投稿を取得する方法を紹介します。
まず、Facebook for Developersにアクセスして、新しくアプリを作成します。
アプリの目的はユースケースに応じて、分かれますが、今回は個人のアカウントのデータ取得なので「その他」を選択します。
任意の「アプリ表示名」を入力して、アプリIDを作成してください。
作成後、Facebookログインの機能を追加します
プラットフォームでは「ウェブ」を選択し
サイトのURLを入力します。ここは特になんでもかまいません。
次にFacebookログインの設定に移動し、「有効なOAuthリダイレクトURI」を入力します。
今回ローカルのDriverから接続するので、空いているローカルポートを指定した「http://localhost:33333」としました。
最後に接続に必要となる「アプリID」と「APP SECRET」を取得しておきましょう。
以上で準備は完了です。
あとはCData Driverで接続設定を行うだけです。ここで
- InitiateOAuth=GETANDREFRESH:ODBCの場合、省略
- OAuthClientId=669020007324619:アプリIDを指定
- OAuthClientSecret=XXXXXXXX:APP SECRETを指定
- CallbackURL=http://localhost:33333:有効なリダイレクトURIを指定
- Permission=user_posts,public_profile,email:ユーザーのデータにアクセスするための「public_profile,email」と投稿を取得するために必要な「user_posts」を指定
JDBCの場合は「jdbc:facebook:InitiateOAuth=GETANDREFRESH;OAuthClientId=669020007324619;OAuthClientSecret=XXXXXXXX;CallbackURL=http://localhost:33333;Other="Permissions=user_posts,public_profile,email";;」のような接続文字列になります。
これで接続を行うと、以下のようにブラウザが立ち上がり、アプリへのアクセス許可が求められます。先程の埋め込みクレデンシャルと異なり、「タイムラインの投稿」が表示されていることがわかります。
これで、ユーザーが投稿したデータを取得できるようになっています。
ちなみに、Permissionsは開発中であれば、Facebookアプリ側での設定は特にいりません。テストとして必要な権限を指定してください。もちろんその分アクセス範囲には制約が発生します。
接続許可が完了したら、先程と同じPostsデータへのクエリを投げてみましょう。
ユーザーの投稿データが取得できれば、成功です。
SELECT ID,FromName,Name FROM Posts LIMIT 10;
おわりに
このようにテーブルやアクセスしたいデータによって、Facebookアプリは設定方法が変わってきます。
少しづつ権限が異なるので、もしこのテーブルにアクセスしたいけど、どういった設定、Permissionsにしたらいいかわからない、ということがあれば、テクニカルサポートまでお気軽にお問い合わせください。