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); } }
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; }
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); }
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); }
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); } }
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ではありません。"); } }
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; }
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)); }
public UserListPageDataTransfer(UserListMode mode, AdvancedTweet tweet) { this.mode = mode; this.tweet = tweet; }
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); }