public async Task UpdateStatus(string status, AdvancedTweet replyToTweet)
        {
            OAuthClient client = new OAuthClient(accessToken);

            try
            {
                using (var content = new HttpFormUrlEncodedContent(new[] { new KeyValuePair <string, string>("status", status) }))
                {
                    var postAddress = "https://api.twitter.com/1.1/statuses/update.json?status=";
                    postAddress += Uri.EscapeUriString(status);
                    if (replyToTweet != null)
                    {
                        postAddress += "&in_reply_to_status_id=" + replyToTweet.tweet.id;
                    }
                    var res = await client.PostAsync(postAddress, null);//TODO: なぜHttpFormUrlEncodedContentが使えないのか調べる

                    if (!res.IsSuccessStatusCode)
                    {
                        var errors = JsonConvert.DeserializeObject <Errors>(res.Content.ToString());
                        throw new Exception("ErrorCode: " + errors.errors[0].code + "\n" + errors.errors[0].message);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(accessToken.screenName + "でツイートできませんでした。", ex);
            }
        }
Exemple #2
0
        protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
        {
            AdvancedTweet itemObject = (AdvancedTweet)item;

            if (itemObject.tweetRole == AdvancedTweet.TweetRoles.Tweet)
            {
                switch (itemObject.state)
                {
                case AdvancedTweet.States.Tweet:
                    return(TweetTemplate);

                case AdvancedTweet.States.Retweeted:
                    return(EventTemplate);

                default:
                    return(new DataTemplate());
                }
            }
            else if (itemObject.tweetRole == AdvancedTweet.TweetRoles.LoadButton)
            {
                return(LoadButtonTemplate);
            }
            else
            {
                return(new DataTemplate());
            }
        }
        private void QuoteTweet(object sender, RoutedEventArgs e)
        {
            AdvancedTweet tweet = (AdvancedTweet)((Button)sender).DataContext;
            var           url   = "https://twitter.com/statuses/" + tweet.tweet.id_str;

            TweetTextBox.TweetTextBox.Text = TweetTextBox.TweetTextBox.Text + url;
        }
Exemple #4
0
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            var data = (AdvancedTweet)e.Parameter;

            tweet = data;
            Init();

            Windows.UI.Core.SystemNavigationManager.GetForCurrentView().BackRequested += _BackRequested;
        }
 private void CreateRequestUrl(int count, AdvancedTweet oldTweet, ref string requestUrl)
 {
     requestUrl += "?count=" + count.ToString();
     if (oldTweet != null)
     {
         if (oldTweet.state == AdvancedTweet.States.Retweeted)
         {
             oldTweet = new AdvancedTweet(oldTweet.source, accessToken);
         }
         requestUrl += "&max_id=" + oldTweet.tweet.id_str;
     }
 }
        public static List <AdvancedTweet> DeserializeTweets(string json, AccessToken accessToken)
        {
            var tweets  = JsonConvert.DeserializeObject <List <Tweet> >(json);
            var newList = AdvancedTweet.ConvertTweets(tweets, accessToken);
            List <AdvancedTweet> returnList = new List <AdvancedTweet>();

            foreach (AdvancedTweet tweet in newList)
            {
                returnList.Add(FormatTweet(tweet));
            }
            return(returnList);
        }
Exemple #7
0
        private void RetweetButtonClicked(object sender, RoutedEventArgs e)
        {
            AdvancedTweet tweet = (AdvancedTweet)((Button)sender).DataContext;

            tmpRetweet = tweet;
            var items  = RetweetUserListBox.Items;
            var select = from item in items
                         where ((UserAccessToken)item).screenName == tmpRetweet.accessToken.screenName
                         select item as UserAccessToken;

            RetweetUserListBox.SelectedItem = select.First();
            RetweetFlyout.ShowAt((Button)sender);
        }
Exemple #8
0
        private async void RetweetCommand(object sender, RoutedEventArgs e)
        {
            RetweetFlyout.Hide();
            Tweet tweet;

            if (tmpRetweet.state == AdvancedTweet.States.Retweeted)
            {
                tweet = tmpRetweet.source;
            }
            else
            {
                tweet = tmpRetweet.tweet;
            }
            var users = RetweetUserListBox.SelectedItems;

            foreach (var user in users)
            {
                await Retweet(tweet, (UserAccessToken)user);
            }
        }
Exemple #9
0
        private async void GetReplys(AdvancedTweet sourceTweet)
        {
            if (!string.IsNullOrEmpty(sourceTweet.tweet.in_reply_to_status_id_str))
            {
                try
                {
                    var client = new TwitterClient(tweet.accessToken);
                    var reply  = await client.GetTweet(sourceTweet.tweet.in_reply_to_status_id_str);

                    replyTweets.Add(reply);
                    GetReplys(reply);
                }
                catch (Exception ex)
                {
                    var message = new MessageDialog(ex.Message);
                    await message.ShowAsync();

                    return;
                }
            }
        }
        public async Task <List <AdvancedTweet> > GetSearchResult(int count, AdvancedTweet oldTweet, string word)
        {
            var requestUrl = "https://api.twitter.com/1.1/search/tweets.json";

            word        = Uri.EscapeUriString(word);
            requestUrl += "?q=" + word;
            requestUrl += "&count=" + count.ToString();
            if (oldTweet != null)
            {
                if (oldTweet.state == AdvancedTweet.States.Retweeted)
                {
                    oldTweet = new AdvancedTweet(oldTweet.source, accessToken);
                }
                requestUrl += "&max_id=" + oldTweet.tweet.id_str;
            }
            OAuthClient         client   = new OAuthClient(accessToken);
            HttpResponseMessage response = new HttpResponseMessage();

            try
            {
                response = await client.GetAsync(requestUrl);
            }
            catch (Exception ex)
            {
                throw new Exception("ネットワークエラーでタイムラインを取得できません", ex);
            }

            if (response.IsSuccessStatusCode)
            {
                var json = await response.Content.ReadAsStringAsync();

                return(MyJsonConverter.DeserializeSearchResult(json, accessToken));
            }
            else
            {
                throw new Exception("レスポンスメッセージのStatusCodeがSuccessではありません。");
            }
        }
Exemple #11
0
        protected async override void OnNavigatedTo(NavigationEventArgs e)
        {
            Windows.UI.Core.SystemNavigationManager.GetForCurrentView().BackRequested += _BackRequested;

            UserListPageDataTransfer param = (UserListPageDataTransfer)e.Parameter;
            TwitterClient            client;
            UserAccessToken          token;

            switch (param.mode)
            {
            case UserListMode.Retweeted:
                AdvancedTweet tweet = param.tweet;
                client           = new TwitterClient(tweet.accessToken);
                userAccessTokens = await client.GetUserListFromTweets("https://api.twitter.com/1.1/statuses/retweets/" + tweet.tweet.id + ".json?count=100");

                break;

            case UserListMode.Followed:
                token            = param.userAccessToken;
                client           = new TwitterClient(token.accessToken);
                userAccessTokens = await client.GetUserListById("https://api.twitter.com/1.1/followers/ids.json?cursor=-1&screen_name=" + token.screenName + "&count=" + 100);

                break;

            case UserListMode.Following:
                token            = param.userAccessToken;
                client           = new TwitterClient(token.accessToken);
                userAccessTokens = await client.GetUserListById("https://api.twitter.com/1.1/friends/ids.json?cursor=-1&screen_name=" + token.screenName + " &count=" + 100);

                break;

            case UserListMode.Favorited:
                break;
            }

            accountList.DataContext = userAccessTokens;
        }
Exemple #12
0
        private async void Init()
        {
            tokens = TmpUserData.Accounts;
            RetweetUserListBox.DataContext = tokens;

            var client = new TwitterClient(tweet.accessToken);

            try
            {
                tweet = await client.GetTweet(tweet.tweet.id_str);

                mainTweetGrid.DataContext = tweet;
                replyTweets = new ObservableCollection <AdvancedTweet>();
                RelatedTweetsItemsControl.DataContext = replyTweets;
                GetReplys(tweet);
            }
            catch (Exception ex)
            {
                var message = new MessageDialog(ex.Message);
                await message.ShowAsync();

                return;
            }
        }
        public async Task <List <AdvancedTweet> > GetUserTimeline(int count, string screenName, AdvancedTweet oldTweet)
        {
            var requestUrl = "https://api.twitter.com/1.1/statuses/user_timeline.json";

            CreateRequestUrl(count, oldTweet, ref requestUrl);
            requestUrl += "&screen_name=" + screenName;
            return(await GetTimelineByUrl(requestUrl));
        }
 /// <summary>
 /// タイムラインを取得するメソッド
 /// </summary>
 /// <param name="count">取得するツイート数</param>
 /// <param name="lastTweet">続きを取得するときに利用(nullでよい)</param>
 /// <param name="requestUrl">リクエストURL(home_timelineなのか、mention_timelineなのか...)</param>
 /// <returns></returns>
 public async Task <List <AdvancedTweet> > GetTimeline(int count, AdvancedTweet oldTweet, string requestUrl)
 {
     CreateRequestUrl(count, oldTweet, ref requestUrl);
     return(await GetTimelineByUrl(requestUrl));
 }
Exemple #15
0
 public UserListPageDataTransfer(UserListMode mode, AdvancedTweet tweet)
 {
     this.mode  = mode;
     this.tweet = tweet;
 }
Exemple #16
0
 public CreateTweetPageTransfer(CreateTweetPageTransferRole role, AdvancedTweet tweet)
 {
     this.role  = role;
     this.tweet = tweet;
 }
        private static AdvancedTweet FormatTweet(AdvancedTweet tweet)
        {
            //まずはTweetがRetweetなのか、などの振り分け。
            if (tweet.tweet.retweeted_status != null)
            {
                tweet.message  = "@" + tweet.tweet.user.screen_name + " retweeted";
                tweet.source   = tweet.tweet;
                tweet.tweet    = tweet.tweet.retweeted_status;
                tweet.state    = AdvancedTweet.States.Retweeted;
                tweet.subImage = "Assets/TwitterIcons/retweet.png";
            }
            else
            {
                tweet.state = AdvancedTweet.States.Tweet;
            }



            if (tweet.tweet.entities.urls != null)
            {
                foreach (Url url in tweet.tweet.entities.urls)
                {
                    tweet.tweet.text = tweet.tweet.text.Replace(url.url, url.display_url);
                }
            }
            if (tweet.tweet.entities.media != null)
            {
                foreach (Media url in tweet.tweet.entities.media)
                {
                    tweet.tweet.text = tweet.tweet.text.Replace(url.url, url.display_url);
                }
            }

            //mentionに自分がいたらツイートの色を変える
            foreach (var mention in tweet.tweet.entities.user_mentions)
            {
                if (mention.screen_name == tweet.accessToken.screenName)
                {
                    tweet.ButtonColor = new SolidColorBrush(Windows.UI.Colors.Azure);
                }
            }

            //textのフォントサイズ指定(できれば毎回StoreSettingsを呼び出したくないぞ...)
            var settings = new StoreSettings();
            var index    = settings.TryGetValueWithDefault("TextFontSize", 1);

            switch (index)
            {
            case 0:
                tweet.tweet.text_font_size = 17;
                break;

            case 1:
                tweet.tweet.text_font_size = 12;
                break;

            case 2:
                tweet.tweet.text_font_size = 7;
                break;

            default:
                break;
            }

            Regex rx = new Regex("<a href=\"(?<url>.*?)\".*?>(?<text>.*?)</a>");
            var   mc = rx.Match(tweet.tweet.source);

            if (mc.Success)
            {
                tweet.tweet.source = mc.Groups["text"].Value;
            }
            tweet.createdAtDatetime         = DateTime.ParseExact(tweet.tweet.created_at, "ddd MMM dd HH:mm:ss zzz yyyy", CultureInfo.InvariantCulture);
            tweet.tweet.created_at_time     = tweet.createdAtDatetime.ToString("HH:mm");
            tweet.tweet.created_at_datetime = tweet.createdAtDatetime.ToString("yyyy/MM/dd HH:mm:ss");

            tweet.tweet.text = WebUtility.HtmlDecode(tweet.tweet.text);
            return(tweet);
        }