2011-10-08 13 views
5

Sto cercando di implementare una funzionalità in un'applicazione WPF .Net per visualizzare automaticamente le foto da twitpic quando gli utenti le pubblicano sul mio hashtag.Ottieni foto da Twitter in C#?

Sto utilizzando la libreria API di Twitterizer2, tutti i tweet provenienti dalla mia ricerca hanno i loro collegamenti come link t.co (penso che sia da Twitter). Non so come analizzare questi collegamenti per ottenere le immagini per inviarle agli utenti.

risposta

0

Non so come funziona API Twitterizer2 ma credo che si possa risolvere il problema in due modi:

  1. Cerca nella Gazzetta API di Twitter qualcosa che ti aiuta a parse tali collegamenti (guardo Tweet Entities);
  2. Scaricare autonomamente il contenuto dell'URL e analizzarlo;

Per il secondo approccio Vorrei suggerire qualcosa di simile alla funzione qui sotto (questa analisi si basa sulla prima foto che ho trovato sul mio popolo seguiti tweets in modo funziona solo per le immagini TwitPic):

private static Uri GetPicture(string twitterUri) 
{ 
    using (var webClient = new WebClient()) 
    { 
     string html = webClient.DownloadString(twitterUri); 
     int imgIndex = html.IndexOf("<img class=\"photo\" id=\"photo-display\""); 
     int srcStartIndex = html.IndexOf("src", imgIndex) + 5; 
     int srcEndIndex = html.IndexOf("\"", srcStartIndex); 
     string imgSrc = html.Substring(srcStartIndex, srcEndIndex - srcStartIndex); 
     return new Uri(imgSrc); 
    } 
} 

Come si può immaginare l'utilizzo è:

Uri imgUri = GetPicture("http://t.co/RQu9hZn8"); // this is a real image 
+0

Questo funzionerà (per twitpic), ma sappiate che effettuerete chiamate Web per ciascuna immagine e che occorrerà tempo e larghezza di banda per risolverlo. –

+0

Come si scarica un'immagine senza fare una webcall? Ho appena proposto un metodo per estrarli da un collegamento * codificato *. Come gestisce * le immagini che mostrano * dipende da lui :) –

+0

Se stai contando la chiamata web per scaricare i dati dell'immagine, il tuo codice eseguirà 2 webcalls per ogni immagine. Quello che stai facendo non estrarrà i dati dell'immagine, ma l'url per l'immagine, che il client dovrebbe effettuare un'altra chiamata a quell'url da scaricare. Questo è ciò di cui sto parlando, stai effettuando 1 chiamata web extra. Ho pubblicato un link al codice di esempio che otterrà l'url direttamente da Twitter. I dati sono già inclusi nei risultati. –

2

potete contare sui dati di media entità che viene restituito da Twitter.

potete vedere un campione e spiegazione che ho postato qualche tempo fa qui: http://www.twitterizer.net/528/finding-urls-hashtags-and-mentions-using-entities/

Il campione non lo include, ma c'è una nuova classe di TwitterMediaEntity che fornisce informazioni sulle immagini e video.

+0

grazie per l'aggiornamento su MediaEntity, non mi ero reso conto che questo già faceva parte di Twitterizer! – SelAromDotNet

+0

qualsiasi soluzione finale con esempio di codice sorgente completo a lavorare su di esso? – Kiquenet

0

Ho usato qualcosa di simile (con il Twitterizer nuget package)

li.Text = tweet.text; 
foreach(Twitterizer.Entities.TwitterEntity te in tweet.Entities) 
{ 
    if(te.GetType() == (typeof(Twitterizer.Entities.TwitterMediaEntity))) 
    { 
     var b = (Twitterizer.Entities.TwitterMediaEntity) te; 
     li.Text += "<img src=\"" + b.MediaUrl + "\" />"; 
    } 
} 
0

tutti attribuiamo media e URL audio in qualsiasi Tweet saranno in entità \ Media e media saranno array di oggetti che si attaccano con il post, se si vuole ottenere il percorso del primo elemento allegato come si supponga di aver salvato i tuoi tweets in enumerableTwitts vostra potrebbe sarà

foreach (dynamic t in enumerableTwitts) 
      { 
dynamic media = t["entities"]["media"]; 
         string media_url = media[0]["media_url"].ToString(); 
} 

si dovrebbe usare try-catch perché alcuni dei tweet non hanno un ttach files

Problemi correlati