2011-10-08 60 views
5

我試圖在.Net WPF應用程序中實現一項功能,當用戶將它們發佈到我的哈希標籤時,它會自動顯示來自twitpic的照片。從C#中的twitter獲取照片?

我正在使用Twitterizer2 API庫,所有來自我的搜索的推文都鏈接爲t.co鏈接(我認爲這是來自Twitter)。我不知道如何解析這些鏈接來獲取圖像發送給用戶。

回答

0

我不知道我怎麼Twitterizer2 API的作品,但覺得你可以用兩種方式解決問題:

  1. 搜索在官方Twitter API的東西,可以幫助你解析這樣的鏈接(看Tweet Entities );
  2. 親自下載該URL的內容並解析它;

對於第二種方法,我建議類似下面的函數(此分析是基於第一張照片我已在跟着人發現鳴叫所以它僅適用於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); 
    } 
} 

正如你能想象的用法是:

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

這將工作(對於twitpic),但請注意,您將爲每個圖像進行網絡通話,這需要時間和帶寬進行整理。 –

+0

如何下載圖片而不進行網絡通話?我剛剛提出了一種從* encoded *鏈接中提取它們的方法。他如何處理*顯示*的圖像取決於他:) –

+0

如果您正在計算網絡電話以下載圖像數據,那麼您的代碼將爲每個圖像執行2次網絡調用。你在做什麼不會提取圖像數據,而是圖像的url,客戶端將不得不再次調用該url來下載。這就是我正在談論的,你正在做一個額外的網絡電話。我發佈了一個示例代碼的鏈接,它將直接從twitter獲取URL。數據已包含在結果中。 –

2

你可以依靠是由Twitter返回的媒體實體的數據。

你可以看到樣品,並交代,我貼了一段時間後在這裏:http://www.twitterizer.net/528/finding-urls-hashtags-and-mentions-using-entities/

樣品不包括它,但有一個新的TwitterMediaEntity類,給出了圖像和視頻信息。

+0

感謝MediaEntity的更新,我沒有意識到這已經是Twitterizer的一部分! – SelAromDotNet

+0

任何最終解決方案與完整的源代碼示例工作呢? – Kiquenet

0

我用這樣的事情(與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

都重視媒體和音頻網址在任何鳴叫會在實體\媒體 和媒體將是與後如果重視項目的數組你想獲得第一附加項的路徑假設你有你的鳴叫保存在enumerableTwitts 你可能會

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

你應該使用的try-catch,因爲一些鳴叫沒有ttach文件