質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.09%

facebookで画像複数投稿

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,694

score 41

PHPでfacebook複数投稿をしたいのですが、
思うようにいきません。

$name_array=explode(',',$name);
$mime_array=explode(',',$mime);
$filename="";
$img_array=array();
for($k=0;$k<count($name_array);$k++){
$filename=WWW_ROOT.'contents/'.$name_array[$k].'.'.$mime_array[$k];
array_push($img_array,$filename);
}
$Img_src=implode(",", $img_array);
$post['source']= $facebook->fileToUpload($Img_src);
try {
  $response = $facebook->post('/me/photos', $post, $access_token);
} catch(Facebook\Exceptions\FacebookResponseException $e) {
  // When Graph returns an error
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
  // When validation fails or other local issues
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}

配列を渡したのですが、どうもうまくいきません。

どうぞよろしくお願いします。

追記

下記のように編集しましたが、うまくアップロードされないようです。

$facebook = $this->__login();
$name_array=explode(',',$name);
$mime_array=explode(',',$mime);
$filename="";
$img_array=array();
for($k=0;$k<count($name_array);$k++){
$filename=WWW_ROOT.'contents/'.$name_array[$k].'.'.$mime_array[$k];
array_push($img_array,$facebook->fileToUpload($filename));
}
$post['source']=$img_array;

try {
  $response = $facebook->post('/me/photos', $post, $access_token);
} catch(Facebook\Exceptions\FacebookResponseException $e) {
  // When Graph returns an error
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
  // When validation fails or other local issues
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}

error内容

Graph returned an error: (#324) Requires upload file

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

+1

これまでのコメントのやり取りを踏まえて、
全面的に書き直しますことをお許し下さい。

複数画像を伴ったアップロード方法の実装例を2つ見つけましたが、
どちらもAPIバージョンが古そうです。

PHPで複数の画像をfacebookに投稿する方法 - [facebook/Webサービス] ぺんたん info
Facebook 3枚連続で画像投稿するよ(PHP) | Tips Note by TAM

共通して言えるのは、
・まずアルバムを作り、アルバムのidを取得する。
・アルバムのidをエンドポイントに使ってファイルアップロードのポストをする。
という流れのようです。

手順の中で使用するアクセストークンについては、
アクセストークン - Facebookログイン
に詳しい解説があり、ユーザー用のアクセストークンとページ用のアクセストークンは別だそうです。
PHPからアクセストークンを取得する方法については、
Facebookでログイン - ウェブSDK
にサンプルコードがあります。

アルバムの作成は、
Graph API Reference: Album /album-id
User Albums
を見るとエンドポイントは'/{user-id}/albums'っぽいですが、
アクセストークンを取得したあとなら'/me/albums'でも良かったりしないかな。

$response = $fb->post('/me/albums', ['name' => 'アルバム名', 'message' => 'アルバムの説明']);


とか。
$response->idにアルバムidが得られるはず。

写真のアップロードは、
エンドポイントを'/アルバムid/photos'として
アップロードしたいファイルの数だけ繰り返しアップロードすればよし。

・・・と、あくまでドキュメントなどから総合的にひねり出したもので、
一切コーディングしてないからてきとーですみません。

Qiitaさんの記事、日本語訳があるので、
こちらもどうぞ。
4, Facebook API 公式ドキュメント翻訳 PHP SDK について - Qiita
(4番だけじゃなく1~4全部。)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/05 18:56

    An active access token must be used to query information about the current user.

    このようなエラーが出てしまいました。

    キャンセル

  • 2017/05/05 19:45

    スタートガイド - ウェブSDK <https://developers.facebook.com/docs/php/gettingstarted>
    リダイレクトからアクセストークンを取得
    にある例:login-callback.php
    を参考にアクセストークンを取得するように修正してみては。

    キャンセル

  • この投稿は削除されました

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.09%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る