Twitterのタイムラインの内容をRichTextBoxやTextBlockで表示する(リンクの付加など)ためのコード
(CoreTweet使用)
Twitterのタイムラインの内容をRichTextBoxやTextBlockで表示する(リンクの付加など)ためのコード
(CoreTweet使用)
public static void TwitterObectToInline(InlineCollection inlines, CoreTweet.Core.CoreBase obj, bool clearInlines = false){if (obj == null || obj == null) return;// 内容の消去if (clearInlines) inlines.Clear();string text = null;IList<Entity> dic = null;// エンティティのリスト作成if (obj is Status){var status = (Status)obj;text = status.Text;dic = ConcatArray<Entity>( // エンティティの結合status.Entities.UserMentions,status.Entities.Urls,status.Entities.Symbols,status.Entities.Media,status.Entities.HashTags);}else if (obj is DirectMessage){var message = (DirectMessage)obj;text = message.Text;dic = ConcatArray<Entity>(message.Entities.UserMentions,message.Entities.Urls,message.Entities.Symbols,message.Entities.Media,message.Entities.HashTags);}if (dic == null) return;if (dic.Count > 0){// エンティティが含まれている場合// エンティティの出現番号順に並び替えdic = dic.OrderBy(entity => entity.Indices[0]).ToList();// エンティティの開始が0文字目で無い場合に文字列を挿入if (dic[0].Indices[0] != 0)inlines.Add(HttpUtility.HtmlDecode(text.Substring(0, dic[0].Indices[0])));// エンティティの追加dic.ForEach((entity, index) =>{// *** リンクの生成 ***var link = new Hyperlink(){Cursor = Cursors.Hand,};if (entity is UserMentionEntity){var user = (UserMentionEntity)entity;link.Inlines.Add(string.Format("@{0}", user.ScreenName));}else if (entity is UrlEntity){var url = (UrlEntity)entity;link.Inlines.Add(url.DisplayUrl);}else if (entity is SymbolEntity){var symbol = (SymbolEntity)entity;link.Inlines.Add(string.Format("{0}{1}",text[symbol.Indices[0]] == '$' ? '$' : '#',symbol.Text));}else if (entity is MediaEntity){var media = (MediaEntity)obj;link.Inlines.Add(media.MediaUrl.AbsoluteUri);}inlines.Add(link);// *** エンティティ間/前後の文字列の挿入 ***var len = entity.Indices[1]; // エンティティの文字列の最終if (len != text.Length){if (dic.Count > index + 1)inlines.Add(HttpUtility.HtmlDecode(text.Substring(len, dic[index + 1].Indices[0] - len)));elseinlines.Add(HttpUtility.HtmlDecode(text.Substring(len, text.Length - len)));}});}else inlines.Add(HttpUtility.HtmlDecode(text));dic.Clear();dic = null;}