0

Linq を twitter に接続して wp8 アプリで動作させようとしています。利用可能なドキュメントをすべて調べましたが、これを理解できませんでした。デモを試すと(著者は wp8 で動作すると言っています)、エラーが発生します。私は ApplicationOnlyAuthorizer を使用しています。私の意図は、公開ツイートを読めるようにすることです (ログインしてツイートを送信することはできません)。

MainPage.cs

public MainPage()
{
     this.InitializeComponent();
     UserTweetsWidget = new UserTweetsViewModel("xxxxxxxx", 20);
     this.DataContext = this;
}

TweetModel.cs

public class TweetModel
{
    public string ScreenName { get; set; }
    public string UserName { get; set; }
    public string Image { get; set; }
    public string Text { get; set; }
    public string PublicationDate { get; set; }
}

UserTweetsViewModel.cs

public class UserTweetsViewModel
{
    public string Label { get; set; }
    public ObservableCollection<TweetModel> Tweets { get; set; }

    private const string consumerKey = “xxxxxxx”;
    private const string consumerSecret = “xxxxxx”;
    private const string twitterAccessToken = “xxxxxxxxxxxxxxxxx”;
    private const string twitterAccessTokenSecret = “xxxxxxxxxx”;

    public UserTweetsViewModel(string userName, int count)
    {
        String _n= userName;
        int _c= count;
        InitializeAsync(_n, _c);
    }

    private async Task InitializeAsync(string userName, int count)
    {
        this.Label = string.Format("Tweets by @{0}", userName);
        Tweets = await GetTwitterUserTimeLine(userName, count);
    }

    private async Task<ObservableCollection<TweetModel>> GetTwitterUserTimeLine(string userName, int count)
    {
        ObservableCollection<TweetModel> result = new ObservableCollection<TweetModel>();

        var auth = new ApplicationOnlyAuthorizer
        {
            CredentialStore = new InMemoryCredentialStore
            {
                ConsumerKey = consumerKey,
                ConsumerSecret = consumerSecret,
                OAuthToken= twitterAccessToken,
                OAuthTokenSecret= twitterAccessTokenSecret
            }
        };

        await auth.AuthorizeAsync();             
        TwitterContext twitterCtx = new TwitterContext(auth);

       var tweets = twitterCtx.Status.Where(tweet => tweet.ScreenName == userName && tweet.Type == StatusType.Home).Take(count).ToList();

        foreach (var item in tweets)
        {               
            TweetModel tweet = new TweetModel()
            {
                Text = item.Text,
                ScreenName = item.User.Name,
                UserName = "@" + item.ScreenName,
                PublicationDate = Convert.ToString(item.CreatedAt),
                Image = item.User.ProfileImageUrl                      
            };
            result.Add(tweet);
        }
        return result;
    }
}

ありがとう、ボブ

4

1 に答える 1

2

問題は、AuthorizeAsync メソッドを待っていないことだと思います。

まず、をメソッドにGetTwitterUserTimeLine変換する必要があります。async

private async Task<ObservableCollection<TweetModel>> GetTwitterUserTimeLine(string userName, int count)

次に、呼び出しauth.AuthorizeAsyncを待ってを呼び出すことができます。

await auth.AuthorizeAsync();

このようにして、メソッドは実行を続行する前に、承認が完了するまで待機します。

アップデート:

ViewModel からこのメソッドを呼び出すには、ViewModel に InitializeAsync という新しいメソッドを作成します。

private async Task InitializeAsync()

そのメソッドで、GetTwitterUserTimeLine を次のように呼び出します。

Tweets = await GetTwitterUserTimeLine(username, count);

最後に、viewmodel コンストラクターから InitializeAsync メソッドを呼び出す必要があります。

お役に立てれば。

于 2014-02-10T14:12:31.210 に答える