2011-10-08 11 views
5

私は、ユーザーがハッシュタグに投稿したときにtwitpicから自動的に写真を表示するための.Net WPFアプリケーションに機能を実装しようとしています。C#でTwitterから写真を入手しますか?

私はTwitterizer2 APIライブラリを使用しています。私の検索で得られたすべてのツイートはt.coリンクとしてリンクされています(これはTwitterのものだと思います)。私はこれらのリンクを解析して画像をユーザに送信する方法を知らない。

答えて

0

私はどのようにTwitterizer2 APIの機能を知らないが、私はあなたの2つの方法で問題を解決できると思う:

  1. 検索公式TwitterのAPIで解析そのようなリンクに役立ちます何かが(Tweet Entitiesを見て);
  2. URLのコンテンツをダウンロードして解析します。

    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); 
        } 
    } 
    
    :私は、以下の機能のようなものを示唆している第二のアプローチについては

(この解析は、私は、その後の人々に発見した最初の画像に基づいていますが、それはTwitPicの画像に対してのみ機能そうつぶやき)

使用状況を想像することができたようです:

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

これは(twitpicのために)動作しますが、各画像のWeb呼び出しを行い、並べ替えに時間と帯域幅がかかることに注意してください。 –

+0

Webcallを作成せずにイメージをダウンロードするにはどうすればよいですか?私はちょうど* encoded *リンクからそれらを抽出する方法を提案しました。 *彼が処理している画像は*彼が担当しています:) –

+0

画像データをダウンロードするWeb呼び出しをカウントしている場合、コードは各画像に対して2つのWebコールを実行します。あなたがやっていることは画像データを抽出するのではなく、クライアントがダウンロードするためにそのURLに別の呼び出しをしなければならない画像へのURLです。それは私が話していることです、あなたは1つの余分なWeb呼び出しをしています。私は、Twitterから直接URLを取得するサンプルコードへのリンクを投稿しました。データはすでに結果に含まれています。 –

2

あなたがツイッターで返されたメディアエンティティデータに依存することができます。

あなたは、私がここに戻ってしばらく掲載サンプルと、について説明を見ることができます:http://www.twitterizer.net/528/finding-urls-hashtags-and-mentions-using-entities/

サンプルは、それが含まれていませんが、画像や動画の情報を提供し、新しいTwitterMediaEntityクラスがあります。私は(Twitterizer nuget packageで)このようなものを使用

+0

MediaEntityのアップデートをありがとう、私はこれがすでにTwitterizerの一部であることを認識していませんでした! – SelAromDotNet

+0

完全なソースコードサンプルを扱う最終的な解決策はどれですか? – Kiquenet

0

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

すべてが任意のつぶやきでメディアやオーディオURLを添付して、エンティティになりますメディア を\とメディアがあればポストに取り付けた項目の配列になりますあなたが

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

になります可能性があり、あなたのツイートはenumerableTwitts に保存したとして最初の添付項目のパスを取得したいツイートの一部を持っていないので、あなたはのtry-catchを使用する必要がありますttachファイル

関連する問題