今週は、Facebookアプリの作成方法をノウハウを交えて紹介してきました。今日は仕上げとして、前回実装したアップロードフォームに、実際にアップロードを行う処理を実装します。public/index.phpのリスト6のコードのすぐ下にリスト8のコードを追加してください。
アップロード処理を実装する
先ほどと同様に無名関数を使って処理を実装していきます。まず(1)で、/{pageId}/uploadというURLでのリクエストに対して、リスト8が実行されるように指定しています。{pageId}のように{...}で囲まれた部分には任意の値が入り、無名関数の引数にマッチした値が渡されます。
(2)ではapiメソッドを呼び出して、ページ情報をAPIから取得しています。linkというキーからページのURLが取得できるので、「.」を使って「?sk=app_(App Id)」というパラメータをつなげることで、アプリのタブへのURLが完成します。このURLは、もともとアクセスしていたページに戻る際に利用します。
(3)の処理は、ログインしていない場合の処理です。未ログインのユーザーは、処理を行わずにFacebookのトップページに移動させます。(4)は、アップロードされたファイルを取得する処理です。ファイルが正しく送信されなかった場合は、エラーを表示します。(5)では、(4)で取得したファイルをFacebookにアップロードしています。apiメソッドの第3引数に「'source' => '@ファイル名'」と指定するとファイルがアップロードできます。アップロードが正しく終了した場合は、アップロードしたファイルのFacebook上でのIDが返されます。
(6)では、そのIDを使ってAPIから写真情報を取得しています。APIにアクセスする過程でエラーが発生した場合は、FacebookApiExceptionという例外が投げられるので、(7)でキャッチし、エラーを返すようにしています。
ここまでで、Facebookへのアップロードが完了しています。$photo変数にデータが格納されているので、変数をデータベースへ保存します。(8)は、PDO(PHP Data Object)を用いてデータベースに格納する処理です。ここでは写真のURLと、写真ページへのURLを保存します。アップロードが終わったら、元のFacebookページへリダイレクトします(9)。
アップロードされた写真を表示する
最後に、Facebookページに戻って、アップロードされた写真を表示します。写真は、Facebookにもアップロードされると同時に、情報を手元のデータベースにも格納しています。データの取得はAPIを経由せずにデータベースからデータを取得して行います*9。
public/index.phpを開き、page_tabページにリスト9の処理を追加します。(1)はデータベースから写真を取得する処理で、作成日の降順に30件取得します。(2)で取得した写真をphotosという名前でテンプレートに渡しています。最後にテンプレートに写真を出力します。
アップロード用のフォームの下部にリスト10の(1)の部分を追記します。(2)の部分でphotos変数に格納された写真情報をすべてループで表示します。これでアップロードされた写真も表示されるようになり、一通りの機能が実装できました。一例ですが、カレーライスの写真をいくつかアップロードした画面が図14です。

Facebookアプリを作る際はAPIを用いてFacebookとやり取りしますが、公式に提供されているPHP SDKやJavaScript SDKを用いると、簡単にAPIにアクセスできます。今回はあまり多くの機能を実装しませんでしたが、Facebookアプリがどのように動作しているかという仕組みはわかったと思います。Facebookアプリに興味を持った方は、ぜひいろいろと挑戦してみてください!
株式会社クロコス