Problème de téléchargement sur YouTube à l'aide de Google API Java Client


J'utilise la bibliothèque client Java de l'API Google (http://code.google.com/p/google-api-java-client/) pour télécharger une vidéo sur mon téléphone Android sur YouTube.

Voici le code que j'ai jusqu'à présent:

// Create the meta data
Entry entry = new Entry();
entry.group = new MediaGroup();
entry.group.title = "test title";
entry.group.description = "test description";
entry.group.category = new MediaCategory();
entry.group.category.Cat = "People\n";

XmlNamespaceDictionary namespaceDictionary = Util.NAMESPACE_DICTIONARY;

AtomContent aContent = new AtomContent();
aContent.entry = entry;
aContent.namespaceDictionary = namespaceDictionary;

// Create the actual video data
InputStreamContent bContent = new InputStreamContent();
bContent.inputStream =
    context.getContentResolver().openInputStream(media);
bContent.type = context.getContentResolver().getType(media);
bContent.length = videoAsset.getLength();

// Build up the POST request
MultipartRelatedContent multiContent = new MultipartRelatedContent();
multiContent.parts.add(aContent);
multiContent.parts.add(bContent);


HttpRequest request = transport.buildPostRequest();
request.url = YouTubeUrl.uploadUrl();
GoogleHeaders headers = (GoogleHeaders) request.headers;
headers.setSlugFromFileName("mytest.3gpp");
request.content = multiContent;
request.headers.contentType = multiContent.getType();

request.execute();

Malheureusement, je reçois une exception lors de l'appel de la demande.execute ():

03-06 23:28:58.887: WARN/System.err(18923): com.google.api.client.http.HttpResponseException: 415 Unsupported Media Type
03-06 23:28:58.897: WARN/System.err(18923):     at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:221)
03-06 23:28:58.897: WARN/System.err(18923):     at com.abless.vidshare.YouTubeAPI.upload(YouTubeAPI.java:118)
03-06 23:28:58.897: WARN/System.err(18923):     at com.abless.vidshare.VidShare.onActivityResult(VidShare.java:185)
03-06 23:28:58.897: WARN/System.err(18923):     at android.app.Activity.dispatchActivityResult(Activity.java:3931)
03-06 23:28:58.907: WARN/System.err(18923):     at android.app.ActivityThread.deliverResults(ActivityThread.java:3730)
03-06 23:28:58.907: WARN/System.err(18923):     at android.app.ActivityThread.handleSendResult(ActivityThread.java:3776)
03-06 23:28:58.907: WARN/System.err(18923):     at android.app.ActivityThread.access$2800(ActivityThread.java:135)
03-06 23:28:58.907: WARN/System.err(18923):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2166)
03-06 23:28:58.907: WARN/System.err(18923):     at android.os.Handler.dispatchMessage(Handler.java:99)
03-06 23:28:58.907: WARN/System.err(18923):     at android.os.Looper.loop(Looper.java:144)
03-06 23:28:58.907: WARN/System.err(18923):     at android.app.ActivityThread.main(ActivityThread.java:4937)
03-06 23:28:58.907: WARN/System.err(18923):     at java.lang.reflect.Method.invokeNative(Native Method)
03-06 23:28:58.917: WARN/System.err(18923):     at java.lang.reflect.Method.invoke(Method.java:521)
03-06 23:28:58.917: WARN/System.err(18923):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-06 23:28:58.917: WARN/System.err(18923):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-06 23:28:58.917: WARN/System.err(18923):     at dalvik.system.NativeStart.main(Native Method)

Qu'est-ce que je fais de mal? Il semble que Content-Length ne soit pas automatiquement spécifié par MultipartRelatedContent, cela pourrait-il être le problème? J'ai eu un coup d'oeil à la mise en œuvre du code, et MultipartRelatedContent.getLength() renvoie -1, ce qui n'est pas très utile.

Quelqu'un a-t-il réussi à utiliser la bibliothèque client Java de l'API Google pour télécharger avec succès une vidéo sur YouTube?

Merci.

-Alexandre

Edit: même si je remplis la partie Content-Length, j'obtiens toujours la même erreur (415 Type de média non pris en charge), donc cela ne la résout pas. Il semble presque que l'en-tête du message soit faux?

Author: Alexander, 2011-03-07

2 answers

Compris moi-même...il s'avère que le YouTubeURL a utilisé l'option JsonC. Après avoir commenté cette ligne, tout a fonctionné à merveille.

 0
Author: Alexander, 2011-03-08 02:22:03

Si quelqu'un est intéressé par un exemple utilisant le nouveau google-api-java-client, j'en ai attaché un à bug 16.

 0
Author: Florian, 2011-05-18 11:27:06