0

twitter はまもなく API バージョン 1 を廃止するので、古いアプリケーションを変換して、新しい 1.1 API で動作できるようにすることにしました。1.1 について私が知っていることから、呼び出しを行う前に認証を行い、データをシリアル化するために RSS ではなく JSON を使用する必要があることがわかっています。アプリケーションは、xmal と c# を使用して WPF でコーディングされています。

LINQ to Twitter Library を使用して正常に認証できましたが、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

後でこの質問を読んだ人のために、私はこの問題を解決することができました. 以下は、状況に応じた私の回答です。

RSS の代わりに Json を使用する場合は、次のようにします。

   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 のため、Linq to Twitter を使用するために API への呼び出しごとに認証を受ける必要があります。承認のコードは次のとおりです。

   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 に精通していませんが、 (.NET 4.0 を使用している場合は、ここからHttpClient入手できます)の組み合わせが適切であると想定します。Newtonsoft.Json

Newtonsoft.Jsonは Microsoft によって作成されたものではありませんが、誰もが使用するパッケージです (Microsoft の既定の Web テンプレートを含む)。古い Microsoft JSON シリアライゼーションは、この時点でほとんど死んでいます。

于 2013-05-07T15:58:42.887 に答える