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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

4229閲覧

facebook-sdkを使って複数の画像を投稿したい

horik

総合スコア44

Facebook Graph API

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2016/06/15 15:43

編集2016/06/16 10:21

facebook-sdkで複数の画像付きの投稿がしたいと思っています。

このコードだと1つの画像しか添付できません。

python

1GraphAPI.put_photo(open('image.jpg', 'rb'), message='今日のディナー')

ライブラリの中を探っていくとput_photoはrequestを呼び出しているようだったので、
見よう見まねで以下のようにしてみましたが、image2.jpgのみ投稿されました。

python

1image1 = open('image.jpg', 'rb') 2image2 = open('image2.jpg', 'rb') 3GraphAPI.request('/me/photos', post_args={'message': '今日のディナー'}, files={'source': [image1, image2]})

公式ドキュメントを参考に以下を試しましたが3行目で
facebook.GraphAPIError: An unknown error has occurred.
というエラーが返ってきました。

python

1resp1 = GraphAPI.request('/me/photos', post_args={'url': 'http://localhost/image.jpg', 'published': 'false'}) 2resp2 = GraphAPI.request('/me/photos', post_args={'url': 'http://localhost/image2.jpg', 'published': 'false'}) 3GraphAPI.request('/me/feed', post_args={'message': '今日のディナー', 'attached_media[0]': {'media_fbid': resp1['id']}, 'attached_media[1]': {'media_fbid': resp2['id']}}) 4

さらにsdkを使わずにpostメソッドを送ってみたら同じエラーが返りました。

json

1{"error":{"message":"An unknown error has occurred.","type":"OAuthException","code":1,"fbtrace_id":"CHl2myso+t0"}}

python

1import requests 2data = { 3 'message': '今日のディナー', 4 'attached_media[0]': {'media_fbid': resp1['id']}, 5 'attached_media[1]': {'media_fbid': resp2['id']}, 6 'access_token': 'ここにアクセストークンが入る', 7} 8r = requests.post( 9 url='https://graph.facebook.com/v2.4/me/feed', 10 data=data, 11) 12print(r.text)

image.jpgとimage2.jpgを同時に1つの記事として投稿するにはどうすればいいでしょうか?
詳しい方がおられましたらご教示お願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

さっきの回答を書いた後にFacebookのAPIドキュメントを眺めたら、割とそのままなケースについての解説があるのですね。

下記の書き方でいけそうなことが確認できました。
attachment_media[0]にはjson形式の文字列を渡せば動くみたいです。

Python

1import json 2 3resp1 = GraphAPI.put_photo(open('image.jpg', 'rb'), published=False) 4resp2 = GraphAPI.put_photo(open('image2.jpg', 'rb'), published=False) 5GraphAPI.put_wall_post( 6 '今日のディナー', 7 attachment={ 8 'attached_media[0]': json.dump({'media_fbid': resp1['id']}), 'attached_media[1]': json.dumps{'media_fbid': resp2['id']}))

投稿2016/06/16 11:03

attakei

総合スコア2738

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

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

horik

2016/06/16 12:54

dictからjsonに変換すればよかったんですね! うまく投稿できました。ありがとうございます。
guest

0

使ったことがあるわけではにですが、ライブラリのソースを追ってみました。

facebook-sdkのGraphAPI.requestは内部でrequestsを使っているみたいです
requestsを使って複数ファイルをpostするサンプルがここにあるのですが、

python

1url = 'http://httpbin.org/post' 2multiple_files = [ 3 ('images', ('foo.png', open('foo.png', 'rb'), 'image/png')), 4 ('images', ('bar.png', open('bar.png', 'rb'), 'image/png'))] 5r = requests.post(url, files=multiple_files)

という使い方をするみたいなので、

python

1image1 = open('image.jpg', 'rb') 2image2 = open('image2.jpg', 'rb') 3GraphAPI.request( 4 '/me/photos', 5 post_args={'message': '今日のディナー'}, 6 files=[('source': image1), ('source': image2),] 7)

こうしたら、もしかしたら動くかもしれません。

投稿2016/06/16 10:24

attakei

総合スコア2738

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問