[DataContract]
public class TwitterEntityUrl : TwitterEntity
{
- [DataMember(Name = "display_url")]
- public string DisplayUrl { get; set; }
+ [DataMember(Name = "display_url", IsRequired = false)]
+ public string? DisplayUrl { get; set; }
- [DataMember(Name = "expanded_url")]
- public string ExpandedUrl { get; set; }
+ [DataMember(Name = "expanded_url", IsRequired = false)]
+ public string? ExpandedUrl { get; set; }
[DataMember(Name = "url")]
public string Url { get; set; }
.ToArray();
var expandedUrls = entities.OfType<TwitterEntityUrl>()
- .Select(x => new PostClass.ExpandedUrlInfo(x.Url, x.ExpandedUrl))
+ .Select(x => new PostClass.ExpandedUrlInfo(x.Url, x.ExpandedUrl ?? x.Url))
.ToArray();
// メモリ使用量削減 (同一のテキストであれば同一の string インスタンスを参照させる)
.ToArray();
var expandedUrls = entities.OfType<TwitterEntityUrl>()
- .Select(x => new PostClass.ExpandedUrlInfo(x.Url, x.ExpandedUrl))
+ .Select(x => new PostClass.ExpandedUrlInfo(x.Url, x.ExpandedUrl ?? x.Url))
.ToArray();
// 以下、ユーザー情報
{
entities ??= Enumerable.Empty<TwitterEntity>();
- var urls = entities.OfType<TwitterEntityUrl>().Select(x => x.ExpandedUrl);
+ var urls = entities.OfType<TwitterEntityUrl>().Select(x => x.ExpandedUrl ?? x.Url);
if (quotedStatusLink != null)
urls = urls.Append(quotedStatusLink.Expanded);
// 過去に存在した壊れたエンティティの対策
// 参照: https://dev.twitter.com/discussions/12628
- if (entity.DisplayUrl == null)
+ if (entity.DisplayUrl == null || entity.ExpandedUrl == null)
{
expandedUrl = MyCommon.ConvertToReadableUrl(targetText);
return $"""<a href="{E(entity.Url)}" title="{E(expandedUrl)}">{T(E(targetText))}</a>""";
var urlEntities = entities?.Urls ?? Array.Empty<TwitterEntityUrl>();
foreach (var entity in urlEntities)
+ {
+ if (entity.ExpandedUrl == null)
+ continue;
+
entity.ExpandedUrl = await ShortUrl.Instance.ExpandUrlAsync(entity.ExpandedUrl);
+ }
// user.entities には urls 以外のエンティティが含まれていないため、テキストをもとに生成する
var mergedEntities = urlEntities.AsEnumerable<TwitterEntity>()
var urlEntities = entities.Urls ?? Array.Empty<TwitterEntityUrl>();
foreach (var entity in urlEntities)
- entity.ExpandedUrl = await ShortUrl.Instance.ExpandUrlAsync(entity.ExpandedUrl);
+ entity.ExpandedUrl = await ShortUrl.Instance.ExpandUrlAsync(entity.ExpandedUrl ?? entity.Url);
var mergedEntities = entities.Concat(TweetExtractor.ExtractEmojiEntities(status.FullText));