Facebook new javascript sdk- caricamento di foto con esso!

Sto cercando di caricare una foto nell’album di Facebook con questo codice javaScript.

FB.api('/me/photos', 'post', { access_token: GetToken(), name: 'uploaded photo', source: '@http://example.com/example.jpg' }, function(response) { if (!response || response.error) { alert('Error occured ' + response.error.message); } else { alert('Post Id: ' + response.id); } }); 

Qualcuno può aiutarmi con questo codice. Questo codice non restituisce nulla.

Supponendo che tu voglia fare questo in puro JavaScript / JQuery – dovrai usare un iframe come destinazione di un modulo, c’è un avvertimento – non sarai in grado di usare i dati di ritorno (l’ID / successo della chiamata ) a causa della stessa politica di origine.

Per prima cosa crea un modulo che manterrà l’input del file e qualsiasi altra variabile che desideri impostare:

 

Ecco la funzione principale utilizzata che crea un iframe, punta il modulo per usarlo e quindi recupera l’ultima foto dall’album usando FQL.

 function fileUpload(form, action_url, div_id) { // Create an iframe var iframe = document.createElement("iframe"); iframe.setAttribute('id', "upload_iframe"); iframe.setAttribute('name', "upload_iframe"); iframe.setAttribute('width', "0px"); iframe.setAttribute('height', "0px"); iframe.setAttribute('border', "0"); iframe.setAttribute('style', "width: 0; height: 0; border: none;"); // Add to document. form.parentNode.appendChild(iframe); window.frames['upload_iframe'].name = "upload_iframe"; iframeId = document.getElementById("upload_iframe"); // Add event to detect when upload has finished var eventHandler = function () { if (iframeId.detachEvent) { iframeId.detachEvent("onload", eventHandler); } else { iframeId.removeEventListener("load", eventHandler, false); } setTimeout(function() { try { $('#upload_iframe').remove(); } catch (e) { } }, 100); FB.api({ method: 'fql.query', query: 'SELECT src_big,pid,caption,object_id FROM photo WHERE aid= "' + albumID + '" ORDER BY created DESC LIMIT 1' }, function(response) { console.log(response); } ); } if (iframeId.addEventListener) iframeId.addEventListener('load', eventHandler, true); if (iframeId.attachEvent) iframeId.attachEvent('onload', eventHandler); // Set properties of form... form.setAttribute('target', 'upload_iframe'); form.setAttribute('action', action_url); form.setAttribute('method', 'post'); form.setAttribute('enctype', 'multipart/form-data'); form.setAttribute('encoding', 'multipart/form-data'); // Submit the form... form.submit(); } 

In fase di runtime conoscerai presumibilmente l’object albumObjectID da una precedente chiamata e avrai il token di accesso dall’object session che viene restituito dal login o dalla sessione onauthchange.

 var url = 'https://graph.facebook.com/' + albumObjectID + '/photos?access_token=' + accessToken; fileUpload($('#upload-photo-form')[0], url, $('#upload-photo-div')[0]);` 

Ovviamente questo non è un codice di produzione, ci sono alcune cose che puoi fare per migliorarne l’affidabilità (come il controllo della larghezza, dell’altezza, della didascalia e dei tag dell’immagine inviata all’immagine più recente). Controllo dell’ultima immagine prima e dopo il tentativo di caricamento, ecc.

PS: attenzione per l’albumObjectID vs albumID, sono diversi tuttavia entrambi possono essere ottenuti utilizzando alcune semplici query FQL. (es .: SELECT aid, object_id, can_upload, name FROM album WHERE owner = me() AND name = "My Album Name" )

Spero che questo ti aiuti.
CameraSchoolDropout

Non sei lontano dalla query giusta.

per prima cosa, assicurati di avviare js sdk e richiedere le autorizzazioni per postare.

quindi, i tuoi due campi sono messaggio e URL:

 var data = array(); data['message'] = 'hello world'; data['url'] = 'http://google.com/moo.jpg'; FB.api('/me/photos', 'post', data, function(response){ if (!response || response.error) { //alert('Error occurred'); } else { //alert('Post ID: ' + response.id); } }); 
 // UPLOAD A LOCAL IMAGE FILE, BUT THIS CAN NOT BE DONE WITHOUT USER'S MANUAL OPERATION BECAUSE OF SECURITY REASONS function fileUpload() { FB.api('/me/albums', function(response) { var album = response.data[0]; // Now, upload the image to first found album for easiness. var action_url = 'https://graph.facebook.com/' + album.id + '/photos?access_token=' + accessToken; var form = document.getElementById('upload-photo-form'); form.setAttribute('action', action_url); // This does not work because of security reasons. Choose the local file manually. // var file = document.getElementById('upload-photo-form-file'); // file.setAttribute('value', "/Users/nseo/Desktop/test_title_03.gif") form.submit(); }); } // POST A IMAGE WITH DIALOG using FB.api function postImage1() { var wallPost = { message: "Test to post a photo", picture: "http://sofit.miximages.com/facebook/flower29.jpg" }; FB.api('/me/feed', 'post', wallPost , function(response) { if (!response || response.error) { alert('Failure! ' + response.status + ' You may logout once and try again'); } else { alert('Success! Post ID: ' + response); } }); }