CData Software Blog

クラウド連携のCData Software の技術ブログです。

CData Facebook Driver の使い方・2種類の認証方法(埋め込みクレデンシャル・カスタムクレデンシャル)の解説

こんにちは。CData Software Japan リードエンジニアの杉本です。

今回はよく問い合わせをいただくFacebook Driverの使い方で躓きやすいポイントを解説したいと思います。

https://www.cdata.com/jp/drivers/facebook/

f:id:sugimomoto:20201020135202p:plain

Facebook Driver の認証方法について

まず、Facebook Driver は2種類の接続方法が存在することを理解する必要があります。

それが下記2つです。

  • CData アプリによる認証(埋め込みクレデンシャル)
  • カスタムアプリによる認証

デフォルトは前者の認証アプローチが使われますが、ユースケースによっては後者が必要となる場合があります。

CData アプリによる認証(埋め込みクレデンシャル)

Facebook DriverにはデフォルトでCData が取得したアプリ設定が埋め込まれています。特に意識せず接続を行うと、この認証方法が利用されます。

気をつけたいのはこの認証方法による権限です。FacebookAPIを使う時によく出てくる以下のような画面ですね。

f:id:sugimomoto:20201020135215p:plain

この認証による接続の場合は、以下の権限によるデータアクセスが可能です。

  • public_profile
  • email
  • 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です。

f:id:sugimomoto:20201020140211p:plain

もし対象の接続するページが決まっている場合は、AuthenticateAsPageの設定を行ってください。この設定ですと、投稿の取得がデフォルトでその対象ページに固定されます。

  • InitiateOAuth=GETANDREFRESH;
  • AuthenticateAsPage=2090225297738791;

f:id:sugimomoto:20201020135210p:plain

JDBCなどの場合は「jdbc:facebook:InitiateOAuth=GETANDREFRESH;AuthenticateAsPage=1677996745815257;」のようになります。

接続すると、ブラウザが立ち上がり、以下のようにログインアカウントの確認およびプロフィールとメールアドレスへのアクセス許可リクエストが表示されます。

f:id:sugimomoto:20201020135215p:plain

ログインをしてすすめるとビジネスアカウント・Facebookページへのアクセス許可が求められます。

f:id:sugimomoto:20201020135221p:plain

ここで対象となるビジネスアカウントおよびFacebookページへのアクセス許可が設定されているかどうか確認しておきましょう。

f:id:sugimomoto:20201020135226p:plain

確認後OKを押すと、接続が完了します。

f:id:sugimomoto:20201020135242p:plain

それでは、CData Software Japan Facebookページを見てみましょう。

f:id:sugimomoto:20201020135252p:plain

投稿データを取得したい場合は「Posts」テーブルを選択します。

例えば以下のようなSQLで対象のFacebookページの投稿一覧が表示できます。

SELECT ID,FromName,Name FROM Posts LIMIT 10;

f:id:sugimomoto:20201020135259p:plain

AuthenticateAsPageが設定されていない場合、このように取得できないので注意しましょう。

その場合、以下のようにTargetにFacebook Page Idを指定することで取得できます。

SELECT ID,FromName,Name FROM Posts WHERE Target = 'FacebookPageId' LIMIT 10;

cdn.cdata.com

カスタムアプリによる認証

もし、上記のCDataアプリには無い権限のデータを取得したい場合は、カスタムアプリを作成する必要があります。例えば個人アカウントでの投稿の取得などです。

カスタムアプリの作成は誰でも自由に行うことができますが、注意したいのはこのカスタムアプリを他のユーザーにも公開して、API連携を行うかどうか? という点です。

公開する場合は、Facebookアプリレビューが必要となり、そこには数々の確認がFacebookから求められます。

developers.facebook.com

ただ、もし自分自身の投稿だけを自分の権限範囲内だけで見たいのであれば、API Limit はありますが開発中のアプリでもCData Driverで接続することが可能です。

今回は開発中アプリを使って接続し、自分のFacebookアカウントの投稿を取得する方法を紹介します。

cdn.cdata.com

まず、Facebook for Developersにアクセスして、新しくアプリを作成します。

developers.facebook.com

f:id:sugimomoto:20201020135510p:plain

アプリの目的はユースケースに応じて、分かれますが、今回は個人のアカウントのデータ取得なので「その他」を選択します。

f:id:sugimomoto:20201020135516p:plain

任意の「アプリ表示名」を入力して、アプリIDを作成してください。

f:id:sugimomoto:20201020135520p:plain

作成後、Facebookログインの機能を追加します

f:id:sugimomoto:20201020135526p:plain

プラットフォームでは「ウェブ」を選択し

f:id:sugimomoto:20201020135533p:plain

サイトのURLを入力します。ここは特になんでもかまいません。

f:id:sugimomoto:20201020135540p:plain

次にFacebookログインの設定に移動し、「有効なOAuthリダイレクトURI」を入力します。

今回ローカルのDriverから接続するので、空いているローカルポートを指定した「http://localhost:33333」としました。

f:id:sugimomoto:20201020135554p:plain

最後に接続に必要となる「アプリID」と「APP SECRET」を取得しておきましょう。

f:id:sugimomoto:20201020135601p:plain

以上で準備は完了です。

あとは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";;」のような接続文字列になります。

これで接続を行うと、以下のようにブラウザが立ち上がり、アプリへのアクセス許可が求められます。先程の埋め込みクレデンシャルと異なり、「タイムラインの投稿」が表示されていることがわかります。

これで、ユーザーが投稿したデータを取得できるようになっています。

f:id:sugimomoto:20201020135608p:plain

ちなみに、Permissionsは開発中であれば、Facebookアプリ側での設定は特にいりません。テストとして必要な権限を指定してください。もちろんその分アクセス範囲には制約が発生します。

接続許可が完了したら、先程と同じPostsデータへのクエリを投げてみましょう。

ユーザーの投稿データが取得できれば、成功です。

SELECT ID,FromName,Name FROM Posts LIMIT 10;

f:id:sugimomoto:20201020135613p:plain

おわりに

このようにテーブルやアクセスしたいデータによって、Facebookアプリは設定方法が変わってきます。

少しづつ権限が異なるので、もしこのテーブルにアクセスしたいけど、どういった設定、Permissionsにしたらいいかわからない、ということがあれば、テクニカルサポートまでお気軽にお問い合わせください。

https://www.cdata.com/jp/support/submit.aspx