用C#从Twitter获取照片?

5
我正在尝试在一个.Net WPF应用程序中实现一个功能,当用户将照片发布到我的标签上时,自动显示来自twitpic的照片。
我使用的是Twitterizer2 API库,所有从搜索中获得的推文都有它们的链接作为t.co链接(我认为这是来自Twitter)。我不知道如何解析这些链接以获取图像并将它们发送给用户。
4个回答

2

感谢关于MediaEntity的更新,我没有意识到这已经是Twitterizer的一部分了! - SelAromDotNet
有没有完整的源代码示例,可以作为最终解决方案? - Kiquenet

0

我不知道Twitterizer2 API是如何工作的,但我认为您可以用两种方式解决问题:

  1. 在官方Twitter API中搜索一些能够帮助您解析这些链接的东西(看看推文实体);
  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

这个方法可以(对于Twitpic),但请注意,您将为每个图像进行网络调用,这需要时间和带宽来解决。 - Ricky Smith
如何在不进行网络调用的情况下下载图像?我刚提出了一种从编码链接中提取它们的方法。他如何处理显示图像取决于他自己 :) - as-cii
如果您计算下载图像数据的网络调用,则您的代码将为每个图像执行2个网络调用。您正在做的不是提取图像数据,而是图像的URL,客户端需要再次调用该URL以进行下载。这就是我所说的,您正在进行1个额外的网络调用。我发布了一个链接到示例代码,该代码将直接从Twitter获取URL。数据已经包含在结果中。 - Ricky Smith

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

所有附加的媒体和音频链接将在entities\media中,如果您想获取第一个附加项的路径,假设您已将推文保存在enumerableTwitts中,则您的代码将是:

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

你应该使用 try-catch,因为有些推文没有附加文件


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接