Permalink
Browse files

Adding Chuncked suppoer.

  • Loading branch information...
dk8996 committed Dec 8, 2015
1 parent 9614979 commit 73b43c1ae4511d3712118f61f983bcbca4ef0c59
@@ -43,6 +43,10 @@
private final String IMPLICIT_PARAMS_STR;
private final HttpParameter[] IMPLICIT_PARAMS;
private final HttpParameter INCLUDE_MY_RETWEET;

private final String CHUNKED_INIT = "INIT";
private final String CHUNKED_APPEND = "APPEND";
private final String CHUNKED_FINALIZE = "FINALIZE";

private static final ConcurrentHashMap<Configuration, HttpParameter[]> implicitParamsMap = new ConcurrentHashMap<Configuration, HttpParameter[]>();
private static final ConcurrentHashMap<Configuration, String> implicitParamsStrMap = new ConcurrentHashMap<Configuration, String>();
@@ -244,6 +248,45 @@ public UploadedMedia uploadMedia(String fileName, InputStream image) throws Twit
, new HttpParameter[]{new HttpParameter("media", fileName, image)}).asJSONObject());
}

@Override
public UploadedMedia uploadMediaChunked(String fileName, InputStream media, long size) throws TwitterException {
UploadedMedia uploadedMedia = uploadMediaChunkedInit(size);
uploadMediaChunkedAppend(fileName, media, uploadedMedia.getMediaId());
return uploadMediaChunkedFinalize(uploadedMedia.getMediaId());
}

// twurl -H upload.twitter.com "/1.1/media/upload.json" -d
// "command=INIT&media_type=video/mp4&total_bytes=4430752"

private UploadedMedia uploadMediaChunkedInit(long size) throws TwitterException {
return new UploadedMedia(post(
conf.getUploadBaseURL() + "media/upload.json",
new HttpParameter[] { new HttpParameter("command", CHUNKED_INIT),
new HttpParameter("media_type", "video/mp4"), new HttpParameter("total_bytes", size) })
.asJSONObject());
}

// twurl -H upload.twitter.com "/1.1/media/upload.json" -d
// "command=APPEND&media_id=601413451156586496&segment_index=0" --file
// /path/to/video.mp4 --file-field "media"

private void uploadMediaChunkedAppend(String fileName, InputStream media, long mediaId) throws TwitterException {
post(conf.getUploadBaseURL() + "media/upload.json", new HttpParameter[] {
new HttpParameter("command", CHUNKED_APPEND), new HttpParameter("media_id", mediaId),
new HttpParameter("segment_index", 0), new HttpParameter("media", fileName, media) });
}

// twurl -H upload.twitter.com "/1.1/media/upload.json" -d
// "command=FINALIZE&media_id=601413451156586496"

private UploadedMedia uploadMediaChunkedFinalize(long mediaId) throws TwitterException {
return new UploadedMedia(
post(
conf.getUploadBaseURL() + "media/upload.json",
new HttpParameter[] { new HttpParameter("command", CHUNKED_FINALIZE),
new HttpParameter("media_id", mediaId) }).asJSONObject());
}

/* Search Resources */

@Override
@@ -181,4 +181,21 @@
* @since Twitter4J 4.0.3
*/
UploadedMedia uploadMedia(String fileName, InputStream media) throws TwitterException;

/**
* Uploads media using chunked approach to be attached via {@link #updateStatus(twitter4j.StatusUpdate)}.
* This should be used for videos.
* <br>This method calls https://api.twitter.com/1.1/media/upload.json
*
* @param fileName media file name
* @param media media body as stream
* @param size of the media in bytes
* @return upload result
* @throws TwitterException when Twitter service or network is unavailable
* @see <a href="https://dev.twitter.com/rest/public/uploading-media#chunkedupload">Uploading Media | Twitter Developers</a>
* @see <a href="https://dev.twitter.com/docs/api/1.1/post/statuses/update">POST statuses/update | Twitter Developers</a>
* @see <a href="https://dev.twitter.com/docs/api/multiple-media-extended-entities">Multiple Media Entities in Statuses</a>
* @since Twitter4J 4.0.3
*/
UploadedMedia uploadMediaChunked(String fileName, InputStream media, long size) throws TwitterException;
}

0 comments on commit 73b43c1

Please sign in to comment.