画像のアップロード

今回は、画像ファイルをアップロードしてみます。Facebook で用意している PHPSDK は、内部的には curl を使用しているので、かなり簡単にファイルアップロードできちゃいます。

画像ファイルの投稿は、publish_stream権限 が必要なのですが、今までのサンプルを実行していればもう既に取得しているのでそこら辺は省略して、いきなりコードを載せちゃいます。

<?php

require 'facebook/facebook.php';

$user_token = 'アクセストークン';

$facebook = new Facebook(array(
    'appId' => 'アプリID',
    'secret' => 'アプリの秘訣',
    'cookie' => false,
));

try
{
    $path = 'C:\temp\無題.jpg';
    $facebook->setFileUploadSupport(true);
    $res = $facebook->api(
            "/me/photos",
            "POST",
            array(
                "access_token"  => $user_token,
                "message"       => "APIから写真を投稿します",
                "picture"       => mb_convert_encoding("@{$path}", "SJIS", "UTF-8"),
            )
        );
    var_dump($res);
}
catch(FacebookApiException $e)
{
    var_dump($e->getResult());
}

前回同様、php fb.php として実行しまして、うまくいけば写真IDが返ってきます。

では簡単に説明を。

ファイルアップロードオプション

setFileUploadSupport 関数でファイルアップロードしてもいいことを FacebookPHP ライブラリに設定します。最初これがわからなくてドはまりしました。

ファイルパスの指定

curl にファイル名を渡す時は先頭に "@" を付けるルールになってるので注意。また、日本語のファイル名でも大丈夫なのですが、Windowsだと文字コードSJISにしておかないといけません。(PHPソースファイル自体はUTF-8で作成されていることを想定)

ファイルアップロードの対象

Facebookの仕様で、画像ファイルはアルバムで管理されることになっています。アプリ(API)経由でファイルをアップロードすると、Facebookが自動的にアプリに対応するアルバムを作成してくれます。2枚目以降の画像ファイルは、そのアルバムに対して追加することになります。

もちろん、指定したアルバムに対してファイルアップロードすることも可能で、やり方は、APIの引数を以下のように変更します。

   "/me/photos",
=> "/アルバムID/photos",

アルバムIDの調べ方は、Facebookにログインして、アルバム編集ページに行けばURLからわかります。

https://www.facebook.com/album.php?fbid=アルバムID&id=xxx&aid=yyy

fbid ってやつがそれです。