0

由于 twitter 很快就要贬低 API 版本 1,我决定转换旧的应用程序以允许它与新的 1.1 API 一起使用。根据我对 1.1 的了解,我知道您必须在拨打电话之前进行身份验证,并使用 JSON 而不是 RSS 来序列化数据。该应用程序是使用 xmal 和 c# 编码的 WPF

我能够使用 LINQ to Twitter 库成功进行身份验证,但是在使用 JSON 时我迷失了。这是我用于 API v1 的代码

 else if (auth.IsAuthorized && i == 2)
        {
            SyndicationClient client = new SyndicationClient();
            SyndicationFeed feed = await client.RetrieveFeedAsync(new Uri("https://api.twitter.com/1/statuses/user_timeline.rss?screen_name=ScreenName"));
            {
                _model.Tweets.Clear();
                foreach (var item in feed.Items)
                {
                    _model.Tweets.Add(new Tweet
                    {
                        Name = "@ExampleHandle",
                        Message = item.Title.Text,
                        Image = new BitmapImage(new Uri("ms-appx:Assets/test_image", UriKind.RelativeOrAbsolute)),
                    });
                }
            }

        }
    }

这是推文类的代码

 public class Tweet
{
    public String Name { get; set; }
    public String Message { get; set; }
    public ImageSource Image { get; set; }
}

我想知道是否有人可以指出我编写 JSON 等价物的正确方向。提前致谢!

4

2 回答 2

1

对于那些您稍后阅读此问题的人,我能够解决此问题。以下是我根据您的情况给出的答案。

如果你只是想使用 Json 而不是 RSS,你可以这样做:

   HttpClient client = new HttpClient();
            HttpResponseMessage response = await client.GetAsync(new Uri("https://api.twitter.com/1/statuses/user_timeline.json?screen_name=ScreenName"));
            string ApiResponse = await response.Content.ReadAsStringAsync();

            List<Tweet> tweets = await JsonConvert.DeserializeObjectAsync<List<Tweet>>(ApiResponse);
            _model.Tweets.Clear();
            foreach (var item in tweets)
            {
                _model.Tweets.Add(new Tweet
                {
                    Name = "@UserName",
                    Message = item.Text,
                    Image = new BitmapImage(new Uri("ms-appx:Assets/sampleLocalImage", UriKind.RelativeOrAbsolute)),
                });

但是,由于 API 1.1,您必须在每次调用 API 之前进行身份验证,以便使用 Linq to Twitter。下面是授权代码:

   var auth = new SingleUserAuthorizer
        {
            Credentials = new InMemoryCredentials
            {
                ConsumerKey = TwitterSettings.ConsumerKey,
                ConsumerSecret = TwitterSettings.ConsumerKeySecret,
                OAuthToken = TwitterSettings.AccessToken,
                AccessToken = TwitterSettings.AccessTokenSecret,
            }
        };
        auth.Authorize();

以及执行搜索的代码(如果使用 Twitter API 1.1,这是您要使用的代码):

 var twitterCtx = new TwitterContext(auth);

            var statusTweets =
           from tweet in twitterCtx.Status
           where tweet.Type == StatusType.User
                 && tweet.ScreenName == "ScreenName"
           select tweet;


            _model.Tweets.Clear();
            foreach (var item in statusTweets)
            {
                _model.Tweets.Add(new Tweet
             {
                 Name = item.User.Name,
                 Message = item.Text,
                 Image = new BitmapImage(new Uri(item.User.ProfileImageUrl)),
             });
于 2013-05-08T17:21:56.443 回答
0

我不熟悉 Twitter API,但我会假设一些组合HttpClient(如果你在 .NET 4.0 上,你可以在这里得到它)并且Newtonsoft.Json是合适的。

Newtonsoft.Json并非由 Microsoft 创作,但它是每个人都使用的包(包括 Microsoft 的默认 Web 模板)。在这一点上,旧的 Microsoft JSON 序列化的东西几乎已经死了。

于 2013-05-07T15:58:42.887 回答