2011-10-08 20 views
5

Tôi đang cố triển khai tính năng trong ứng dụng .Net WPF để tự động hiển thị ảnh từ twitpic khi người dùng đăng ảnh lên thẻ bắt đầu bằng # của tôi.Tải ảnh từ twitter trong C#?

Tôi đang sử dụng thư viện API Twitterizer2, tất cả các tweet đến từ tìm kiếm của tôi đều có liên kết của họ dưới dạng liên kết t.co (tôi nghĩ đây là từ Twitter). Tôi không biết cách phân tích các liên kết này để có được hình ảnh để gửi chúng cho người dùng.

Trả lời

0

Tôi không biết làm thế nào Twitterizer2 công trình API nhưng tôi nghĩ rằng bạn có thể giải quyết vấn đề của bạn theo hai cách:

  1. Tìm kiếm tại công Twitter API cái gì đó giúp bạn phân tích cú pháp liên kết như vậy (nhìn vào Tweet Entities);
  2. Tự tải xuống nội dung của URL đó và phân tích cú pháp đó;

Đối với phương pháp thứ hai tôi sẽ đề nghị một cái gì đó giống như chức năng bên dưới (phân tích này được dựa trên hình ảnh đầu tiên tôi đã tìm thấy trên người sau đó tôi tweets nên nó chỉ hoạt động cho hình ảnh 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); 
    } 
} 

Như bạn có thể tưởng tượng việc sử dụng là:

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

Thao tác này sẽ hoạt động (cho twitpic), nhưng lưu ý rằng bạn sẽ thực hiện cuộc gọi web cho từng ảnh và sẽ mất thời gian và băng thông để phân loại. –

+0

Bạn sẽ tải xuống hình ảnh mà không cần tạo webcall như thế nào? Tôi vừa đề xuất một phương pháp để trích xuất chúng từ liên kết * được mã hóa *. Cách anh ấy xử lý * hình ảnh hiển thị * tùy thuộc vào anh ấy :) –

+0

Nếu bạn đang tính cuộc gọi web để tải xuống dữ liệu hình ảnh, khi đó mã của bạn sẽ thực hiện 2 webcalls cho mỗi hình ảnh. Những gì bạn đang làm sẽ không trích xuất dữ liệu hình ảnh, nhưng url đến hình ảnh, mà khách hàng sẽ phải thực hiện một cuộc gọi đến url đó để tải xuống. Đó là những gì tôi đang nói về, bạn đang thực hiện thêm 1 cuộc gọi web. Tôi đăng một liên kết đến mẫu mã sẽ nhận được url trực tiếp từ twitter. Dữ liệu đã được đưa vào kết quả. –

2

bạn có thể dựa trên các dữ liệu thực thể truyền thông được trả về bởi Twitter.

Bạn có thể thấy một mẫu và Giải thích rằng tôi đã đăng một thời gian trở lại đây: http://www.twitterizer.net/528/finding-urls-hashtags-and-mentions-using-entities/

Mẫu không bao gồm nó, nhưng có một lớp mới TwitterMediaEntity đó cung cấp thông tin về hình ảnh và video.

+0

cảm ơn vì đã cập nhật trên MediaEntity, tôi đã không nhận ra rằng đây là một phần của Twitterizer rồi! – SelAromDotNet

+0

bất kỳ giải pháp cuối cùng nào có mẫu mã nguồn đầy đủ hoạt động về nó? – Kiquenet

0

tôi đã sử dụng một cái gì đó như thế này (với 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

tất cả đính kèm phương tiện truyền thông và URL âm thanh trong bất kỳ tweet sẽ vào đơn vị \ phương tiện truyền thông và phương tiện truyền thông sẽ là hàng loạt các vật phẩm đính kèm với bài nếu bạn muốn nhận được con đường của mục kèm theo đầu tiên là giả sử bạn đã tweet của bạn lưu trong enumerableTwitts của bạn có thể sẽ

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

bạn nên sử dụng try-catch vì một số tweets không có một ttach files

Các vấn đề liên quan