私はSOに関連した最新の回答が見つかりませんでした。iOS Swift:TwitterKitでTwitterにビデオを投稿するには?
ここに私が現在使用しているコードはありますが、すべてのリクエストは正しく処理されますが、ビデオは掲載されていませんか?
if let userID = Twitter.sharedInstance().sessionStore.session()?.userID {
var client = TWTRAPIClient(userID: userID)
let text: String = "Testing Video"
let videoLength: String = "\(self.video.length)"
print(videoLength)
var initError: NSError?
var message = ["status": text, "command" : "INIT", "media_type" : "video/m4v", "total_bytes" : videoLength]
let preparedRequest: NSURLRequest = client.URLRequestWithMethod("POST", URL: self.strUploadUrl, parameters: message, error: &initError)
client.sendTwitterRequest(preparedRequest, completion: { (urlResponse: NSURLResponse?, responseData: NSData?, error: NSError?) -> Void in
if error == nil {
do {
let json: NSDictionary = try (NSJSONSerialization.JSONObjectWithData(responseData!, options: NSJSONReadingOptions(rawValue: 0)) as? NSDictionary)!
print("JSON is \(json)")
let mediaID = json.objectForKey("media_id_string") as! String
client = TWTRAPIClient(userID: userID)
var uploadError: NSError?
let videoString = self.video.base64EncodedStringWithOptions([])
message = ["command" : "APPEND", "media_id" : mediaID, "segment_index" : "0", "media" : videoString]
let preparedRequest = client.URLRequestWithMethod("POST", URL: self.strUploadUrl, parameters: message, error: &uploadError)
client.sendTwitterRequest(preparedRequest, completion: { (urlResponse: NSURLResponse?, responseData: NSData?, error: NSError?) -> Void in
if error == nil {
client = TWTRAPIClient(userID: userID)
var finalizeError: NSError?
message = ["command":"FINALIZE", "media_id": mediaID]
let preparedRequest = client.URLRequestWithMethod("POST", URL: self.strUploadUrl, parameters: message, error: &finalizeError)
client.sendTwitterRequest(preparedRequest, completion: { (urlResponse: NSURLResponse?, responseData: NSData?, error: NSError?) -> Void in
if error == nil {
client = TWTRAPIClient(userID: userID)
var sendError: NSError?
let message = ["status": text, "wrap_links": "true", "media_ids": mediaID]
//var updateMessage = NSMutableDictionary(dictionary: message)
let preparedRequest = client.URLRequestWithMethod("POST", URL: self.strStatusUrl, parameters: message , error: &sendError)
client.sendTwitterRequest(preparedRequest, completion: { (urlResponse: NSURLResponse?, responseData: NSData?, error: NSError?) -> Void in
})
} else {
print("Command FINALIZE failed \n \(error!)")
}
})
} else {
print("Command APPEND failed")
}
})
}
catch {
print("\(error)")
}
}
else {
print("\(error.debugDescription)Command INIT failed")
}
})
}
ビデオがアップロードされていないことを除いて、上記のコードはすべて動作しています。私は何が欠けているのか分からず、ビデオを投稿するとTwitterの文書は非常に貧弱です。
これは優れた実装であり、初めて試したときにうまく機能しました。一つのことは、レスポンスデータのif-letからあなたのconnectionErrorガードを引き出す必要があるということです。長い動画ではエラーが返ってきましたが、応答データはありませんでした。そのエラーをチェックアウトするまでエラーは表示されませんでした。 Twitterのドキュメントでは、同期のアップロードでは最大動画の長さは30、非同期の場合は140秒ですが、この非同期メソッドを使用して30秒を超える動画をアップロードすると、400エラー(TWTRComposerViewControllerが発生するエラーと同じエラー)が発生します。その140秒の制限に達する方法に関するアイデア? –
見つかった: "制約はmedia_categoryパラメータに基づいて変化するかもしれない"と言われていますが、それ以上のガイダンスは難しいです。基本的には、30秒を超える動画の場合は、「media_category」:「tweet_video」をINITパラメータに追加してから、ファイナライズステージの後に、ビデオが持つ応答を得るまで、最後のステージのリクエストを繰り返す必要があります完成した処理。準備が整っていなければ、応答はなく、400エラーが発生します。その後、最終段階に進むことでツイートを完成させることができます。 https://www.jwz.org/blog/2016/06/twitters-musical-chairs-video-specifications/#comment-167386 –