2

最初: GraphRequest を使用して Facebook に動画をアップロードするには 2 つの方法があるようです。「file_url」パラメーターを使用するもの。URL を指定すると、facebook が外部サーバーからビデオ ファイルをダウンロードします。それは次のようにうまく機能します:

let params = [
    "title": "...",
    "description": "...",
    "file_url": "http://example.com/videofile.mp4"
]

let rq = FBSDKGraphRequest(graphPath: "me/videos", parameters: params, HTTPMethod: "POST")

rq.startWithCompletionHandler { (conn, result, error) -> Void in
    // handle error etc..
}

Facebook がサーバーからファイルを読み込み、動画がタイムラインに表示されます。

もう 1 つの方法は、「source」パラメーターを使用して、リクエストでビデオを直接アップロードすることです。次のようになります。

let videoURL = NSURL.fileURLWithPath(NSBundle.mainBundle().pathForResource("testvideo", ofType: "mp4")!)
let rawData = NSData(contentsOfURL: videoURL)!

let params = [
    "title": "...",
    "description": "...",
    "source": rawData
]

ただし、これは次のエラー メッセージで失敗します。

The video you're trying to upload is in a format that isn't supported. Please try again with a video in a supported format.

ドキュメントを見ると、ビデオ データを「multipart/form-data」でエンコードする必要があるようです。ドキュメントにはw3へのリンクも含まれています。

しかし、これをどのように行うかは、私にとってまだ謎です。次のように、バイナリビデオデータを含むフォームデータ文字列を作成する多くの組み合わせを試しました。

var s = ""
s += "Content-Type: multipart/form-data; boundary=XXXXXXXXXXXXXXXXXXXX\r\n\r\n"
s += "--XXXXXXXXXXXXXXXXXXXX\r\n"
s += "Content-Type: application/octet-stream\r\n\r\n"

let p = "--XXXXXXXXXXXXXXXXXXXX--"

let data = NSMutableData()
data.appendData(s.asUTF8Data())
data.appendData(rawData)
data.appendData(p.asUTF8Data())

let params = [
    "title": "...",
    "description": "...",
    "source": data
]

との他の組み合わせ

s += "Content-Transfer-Encoding: binary\r\n"
s += "Content-Disposition: file; filename=\"video.mp4\"\r\n"

しかし、成功せずに。いつも同じエラー メッセージが表示されます。

The video you're trying to upload is in a format that isn't supported. Please try again with a video in a supported format.

では、ビデオ ファイルをフォーム データでラップするにはどうすればよいでしょうか。

念のため: いいえ、残念ながら、FBSDK v4 で既に提供されているビデオ共有機能は使用できません。

4

2 に答える 2