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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Facebook Graph API

Facebook Graph APIとは Facebookのグラフデータベース用のAPIであり、対応言語はPHP、Perl、ActionScript、JavaScriptなどがあります。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

2562閲覧

facebookで画像複数投稿

chNOBUNAGA

総合スコア41

Facebook Graph API

Facebook Graph APIとは Facebookのグラフデータベース用のAPIであり、対応言語はPHP、Perl、ActionScript、JavaScriptなどがあります。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/05/05 06:46

編集2017/05/05 07:37

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

PHP

1$name_array=explode(',',$name); 2$mime_array=explode(',',$mime); 3$filename=""; 4$img_array=array(); 5for($k=0;$k<count($name_array);$k++){ 6$filename=WWW_ROOT.'contents/'.$name_array[$k].'.'.$mime_array[$k]; 7array_push($img_array,$filename); 8} 9$Img_src=implode(",", $img_array); 10$post['source']= $facebook->fileToUpload($Img_src); 11try { 12 $response = $facebook->post('/me/photos', $post, $access_token); 13} catch(Facebook\Exceptions\FacebookResponseException $e) { 14 // When Graph returns an error 15 echo 'Graph returned an error: ' . $e->getMessage(); 16 exit; 17} catch(Facebook\Exceptions\FacebookSDKException $e) { 18 // When validation fails or other local issues 19 echo 'Facebook SDK returned an error: ' . $e->getMessage(); 20 exit; 21}

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

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

追記

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

PHP

1$facebook = $this->__login(); 2$name_array=explode(',',$name); 3$mime_array=explode(',',$mime); 4$filename=""; 5$img_array=array(); 6for($k=0;$k<count($name_array);$k++){ 7$filename=WWW_ROOT.'contents/'.$name_array[$k].'.'.$mime_array[$k]; 8array_push($img_array,$facebook->fileToUpload($filename)); 9} 10$post['source']=$img_array; 11 12try { 13 $response = $facebook->post('/me/photos', $post, $access_token); 14} catch(Facebook\Exceptions\FacebookResponseException $e) { 15 // When Graph returns an error 16 echo 'Graph returned an error: ' . $e->getMessage(); 17 exit; 18} catch(Facebook\Exceptions\FacebookSDKException $e) { 19 // When validation fails or other local issues 20 echo 'Facebook SDK returned an error: ' . $e->getMessage(); 21 exit; 22} 23

error内容

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

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

複数画像を伴ったアップロード方法の実装例を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 07:03

編集2017/05/05 12:37
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

chNOBUNAGA

2017/05/05 07:08

ループというのは、具体的にどのようなものになるのでしょうか? なにをループするのでしょうか?
退会済みユーザー

退会済みユーザー

2017/05/05 07:33

ループするのは、ファイル個別のアップロードです。 必要なファイルをアップし終わったら、最後にpost()っていう流れは合ってると思います。
chNOBUNAGA

2017/05/05 07:37

追記しましたが、このやりかたであっていますでしょうか?
chNOBUNAGA

2017/05/05 07:38

失礼しました。今 foreach($img_array as $img) { $media[] = '{"media_fbid":"' . $facebook->fileToUpload($img) . '"}'; } $post['attached_media'] = $media; こちらをちょっと試してみます。
chNOBUNAGA

2017/05/05 07:49

実装してみましたが、 attached_mediaで行きませんでした。
退会済みユーザー

退会済みユーザー

2017/05/05 07:58

php向けSDKのソースを改めて確認してみましたが、私の書いた方法はだめですね。方法を探してみます。
退会済みユーザー

退会済みユーザー

2017/05/05 08:22 編集

[PHPで複数の画像をfacebookに投稿する方法 - [facebook/Webサービス] ぺんたん info](http://pentan.info/web_service/facebook/php_image_albums.html) っていう事例は見つけました、おそらく今でも有効なやり方のはず。 エンドポイント'/{user_id}/albums'に対するpost()を起こしてリターン値でアルバムidをゲットできるので、 次にエンドポイント`/アルバムid/photos`に対してfileToUpload()をアップロードしたいファイルの数、繰り返す形です。
chNOBUNAGA

2017/05/05 09:56

An active access token must be used to query information about the current user. このようなエラーが出てしまいました。
退会済みユーザー

退会済みユーザー

2017/05/05 10:45

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問