5

我正在尝试在 .Net WPF 应用程序中实现一项功能,以在用户将它们发布到我的主题标签时自动显示来自 twitpic 的照片。

我正在使用 Twitterizer2 API 库,来自我搜索的所有推文都将其链接作为 t.co 链接(我认为这是来自 Twitter)。我不知道如何解析这些链接以获取图像以将它们发送给用户。

4

4 回答 4

2

您可以依赖 Twitter 返回的媒体实体数据。

您可以看到我不久前在此处发布的示例和说明:http: //www.twitterizer.net/528/finding-urls-hashtags-and-mentions-using-entities/

该示例不包括它,但有一个更新的TwitterMediaEntity类提供有关图像和视频的信息。

于 2011-10-11T02:10:38.373 回答
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
于 2011-10-08T16:38:30.057 回答
0

我使用了类似的东西(使用Twitterizer nuget 包

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 + "\" />";
    }
}
于 2012-10-31T10:04:10.600 回答
0

任何推文中的所有附加媒体和音频 URL 都将位于实体\媒体中,如果您想获取第一个附加项目的路径,媒体将是与帖子附加的项目数组,因为假设您将推文保存在 enumerableTwitts 中,您可以

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

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

于 2015-08-28T06:31:38.920 回答