2011-10-08 10 views
5

Estoy tratando de implementar una función en una aplicación .Net WPF para mostrar automáticamente fotos de twitpic cuando los usuarios las publiquen en mi hashtag.Obtener fotos de twitter en C#?

Estoy usando la biblioteca de API de Twitterizer2, todos los tweets que provienen de mi búsqueda tienen sus enlaces como enlaces t.co (creo que esto es de Twitter). No sé cómo analizar estos enlaces para que las imágenes se las envíen a los usuarios.

Respuesta

0

No sé cómo funciona la API Twitterizer2 pero creo que se podría resolver su problema de dos maneras:

  1. Buscar en Twitter Oficial API algo que le ayuda a análisis sintáctico dichos enlaces (miro Tweet Entities);
  2. Descargue el contenido de esa URL y analícela;

Para el segundo enfoque que sugeriría algo así como la función de abajo (este análisis se basa en la primera imagen que he encontrado en mi pueblo, seguido tweets por lo funciona sólo para imágenes 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); 
    } 
} 

Como se puede imaginar el uso es:

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

Esto funcionará (para twitpic), pero tenga en cuenta que realizará llamadas web para cada imagen y que llevará tiempo y ancho de banda clasificar. –

+0

¿Cómo descargarías una imagen sin hacer una llamada web? Acabo de proponer un método para extraerlos de un enlace * codificado *. Cómo maneja * las imágenes que muestran * depende de él :) –

+0

Si está contando la llamada web para descargar los datos de la imagen, entonces su código realizará 2 llamadas web para cada imagen. Lo que está haciendo no extraería los datos de la imagen, sino la url de la imagen, que el cliente tendría que hacer otra llamada a esa url para descargar. De eso es de lo que estoy hablando, estás haciendo 1 llamada web adicional. Publiqué un enlace al código de muestra que obtendrá la url directamente desde twitter. Los datos ya están incluidos en los resultados. –

2

usted puede confiar en los datos de entidades de medios que se devuelve por Twitter.

se puede ver una muestra y explicación que he publicado hace un tiempo aquí: http://www.twitterizer.net/528/finding-urls-hashtags-and-mentions-using-entities/

La muestra no lo incluye, pero hay una nueva clase TwitterMediaEntity que da información sobre imágenes y vídeos.

+0

gracias por la actualización de MediaEntity, ¡no me había dado cuenta de que esto ya formaba parte de Twitterizer! – SelAromDotNet

+0

cualquier solución final con el código fuente completo de la muestra trabajando al respecto? – Kiquenet

0

he usado algo como esto (con la 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

todo adjuntar medios de comunicación y el URL de audio en cualquier Tweet estarán en entidades \ media y medios de comunicación serán variedad de artículos que se conectan con el post si desea obtener la ruta del primer elemento que se adjunta como supongamos que ha guardado en sus tweets enumerableTwitts su podría convertir

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

se debe utilizar try-catch porque algunos de los tweets no tienen una ttach files

Cuestiones relacionadas