2012-05-10 9 views
7

Sto tentando di implementare una richiesta upload_with_media da ajax utilizzando la libreria twitteroauth di Abraham (TwitterOAuth v0.2.0-beta2). Ho avuto problemi con i messaggi di base, ma quando provo ad includere i supporti ho questa come una risposta:update_with_media utilizzando twitteroauth di abraham

"{"request":"\/1\/statuses\/update_with_media.json","error":"Error creating status."}" 

Il mio codice per la pubblicazione multimediale si presenta così:

$image = $_FILES["media"]["tmp_name"]; 

    $parameters = array(
     'media[]' => "@{$image};type=image/jpeg;filename={$image}", 
     'status' => $status 
    ); 

    if(isset($reply_id)) { 
     $parameters['in_reply_to_status_id'] = $reply_id; 
    } 
    $post = $twitteroauth->post('https://upload.twitter.com/1/statuses/update_with_media.json', $parameters); 
    echo json_encode($post); 

Ho verificato che tutti i dati vengono inviati a questo script correttamente e sono anche riusciti a ottenere un post update_with_media utilizzando gli stessi dati sopra e la libreria tmhOAuth, ma come il resto del mio widget utilizza twitteroauth, preferirei mantenere le cose uniformi. Ho anche provato con e senza il .json apposto sul finale e non ho visto alcuna differenza. Qualcuno può mostrarmi un esempio di un'implementazione di successo di update_with_media usando twitteroauth? Non riesco a capire cosa sto sbagliando.

+1

TwitterOAuth attualmente non supporta arrivi dei media. Spero di aggiungere supporto in futuro. – abraham

+0

@abraham, qualche idea quando ci aspettiamo il supporto per i caricamenti dei media? Inoltre, cosa suggerisci a coloro che vogliono ancora caricare i media tramite il loro script? – Joey

risposta

0

Suggerisco di utilizzare Fiddler2 o uno strumento simile per esaminare e confrontare i messaggi che escono con twitteroauth e anche con tmhOAuth. Vedrai la differenza.

Nella mia esperienza, questo è l'aspetto di un POST HTTP su Twitter, utilizzando update_with_media. {Xml, json}. Il suffisso che usi influenza solo la risposta, credo. (La vostra applicazione deve impostare l'intestazione di autorizzazione in un modo che è specifico per vostra app.)

Si vuole arrivare twitteroauth di inviare qualcosa come il seguente

POST https://upload.twitter.com/1/statuses/update_with_media.xml HTTP/1.1 
Authorization: OAuth oauth_callback="oob", oauth_consumer_key="xxxxxxxxxxxx", oauth_nonce="7774328k", oauth_signature="pUYjRnccmrBYiO1j9cliETsw%2B5s%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1318300521", oauth_token="59152613-vrlZ2edX56PudQtBmpAWd3SPDt9cPyAhibO7ysl6W", oauth_version="1.0" 
Content-Type: multipart/form-data; boundary=======c49479438c600bf59345e====== 
Host: upload.twitter.com 
Content-Length: 7320 
Connection: Keep-Alive 

--======c49479438c600bf59345e====== 
Content-Disposition: form-data; name="status" 

working on a Tweet tool that uses the OAuth Manager library. 
--======c49479438c600bf59345e====== 
Content-Disposition: file; name="media[]"; filename="ThisIsAPicture.png" 
Content-Type: image/png 

    ...binary png data here... 

--======c49479438c600bf59345e======-- 
+0

caro @Cheeso spiegheresti le righe precedenti .. dove inserire questo codice e come eseguire? È sopra php –

+0

Questi sono messaggi. Vuoi che il tuo codice generi questi messaggi. Non lo esegui. Questa è l'uscita. – Cheeso

+0

http://stackoverflow.com/questions/11243612/does-abrahams-twitteroauth-library-work-for-update-with-media quale problema con questo? Mi potete aiutare? –

4

Provate ad usare codebird-php https://github.com/mynetx/codebird-php

Si scopre che fa il trucco nonostante sia l'ultimo nella lista di librerie di php suggerite da Twitter. Basta prendere codebird.php e cacert.pem dal repository git.

include_once('codebird.php'); 
    \Codebird\Codebird::setConsumerKey($consumer_key, $consumer_secret); 
    $cb = \Codebird\Codebird::getInstance(); 
    $cb->setToken($token, $token_secret); 
    $status = 'Gamo, I just tweeted with an image!'; 
    $filename = '/home/asdf/test.png'; 
    $cb->statuses_updateWithMedia(array('status' => $status, 'media[]' => $filename)); 
+1

Dopo aver lottato per un'ora per ottenere l'Abraham twitteroauth per farlo, ho trovato la tua risposta e in 3 minuti ha funzionato. Grazie! –

+0

Sono stato alle prese con auto tweeting per giorni ora. Ora ho trovato il tuo codice, sembra ancora più semplice di qualsiasi altro e non riesco ancora a farlo funzionare. Ho scaricato i file codebird (codebird.php e cacert.pem) dichiarati variabili chiave e token e cambiato $ nomefile per puntare a un'immagine sul mio server. ( – ahojvole

+0

@ahojvole Mi dispiace, ho sentito questa libreria un anno fa Forse l'autore di codebird ha cambiato qualcosa, dovresti controllare con la documentazione di codebird – gtsouk

4

Dopo aver affrontato durante l'orario di una soluzione per UPDATE_WITH_MEDIA con twitteraouth biblioteca, ho trovato la seguente soluzione che funziona bene:

  • Primo: la libreria originale PHP legati da Twitter Dev here non funziona.

NON sta lavorando con UPDATE_WITH_MEDIA

Il diference di base è che l'originale ha la funzione di "post" senza parametro "$ multipart". Questo parametro è ciò che consente di inviare ciò che Twiiter richiede nella documentazione: un post enctype multipart.Quindi alla fine il codice di base è il seguente:

$image_path="folder/image.jpg"; 

$handle = fopen($image_path,'rb'); 
$image = fread($handle,filesize($image_path)); 
fclose($handle); 

$params = array(
    'media[]' => "{$image};type=image/jpeg;filename={$image_path}", 
    'status' => "Put your message here, must be less than 117 characters!" 
); 
$post = $connection->post('statuses/update_with_media', $params, true); 

IMPORTANTE! Se provi questo codice con la libreria originale, scoprirai un errore. Devi scaricare dal link sopra e sostituire entrambi i file (OAuth.php e twitteroauth.php) nel tuo progetto.

+0

Brilliant! Grazie, questo ha funzionato anche per me. la biblioteca di Natefanaro purtroppo non funziona con PHP 5.5+ a causa dei requisiti di CURLFile. La tua soluzione e il ramo collegato della libreria sono le uniche opzioni su questo thread quello ha funzionato per me. Immagino anche che fopen sia un modo migliore per gestire l'immagine in quanto dovrebbe consentire di inserire anche un'immagine remota. – Warpstone

0

voglio mandato collegamento URL con param stato

come: si mette messaggio qui

+0

Dovresti [fare una nuova domanda] (http://stackoverflow.com/questions/ask). –