OSDN Git Service

5/28 (PDT, UTC-7) に追加予定の extended_entities に対応
authorKimura Youichi <kim.upsilon@bucyou.net>
Sun, 25 May 2014 14:44:33 +0000 (23:44 +0900)
committerKimura Youichi <kim.upsilon@bucyou.net>
Sun, 25 May 2014 14:46:41 +0000 (23:46 +0900)
https://dev.twitter.com/notifications/multiple-media-entities-in-tweets

OpenTween/Api/TwitterEntity.cs
OpenTween/Api/TwitterStatus.cs
OpenTween/Resources/ChangeLog.txt
OpenTween/Twitter.cs
OpenTween/UserInfoDialog.cs

index ed5453e..54585b5 100644 (file)
@@ -33,16 +33,16 @@ namespace OpenTween.Api
     [DataContract]
     public class TwitterEntities
     {
-        [DataMember(Name = "hashtags")]
+        [DataMember(Name = "hashtags", IsRequired = false)]
         public TwitterEntityHashtag[] Hashtags { get; set; }
 
         [DataMember(Name = "media", IsRequired = false)]
         public TwitterEntityMedia[] Media { get; set; }
 
-        [DataMember(Name = "urls")]
+        [DataMember(Name = "urls", IsRequired = false)]
         public TwitterEntityUrl[] Urls { get; set; }
 
-        [DataMember(Name = "user_mentions")]
+        [DataMember(Name = "user_mentions", IsRequired = false)]
         public TwitterEntityMention[] UserMentions { get; set; }
     }
 
index e064cf3..2066afc 100644 (file)
@@ -58,6 +58,9 @@ namespace OpenTween.Api
         [DataMember(Name = "entities")]
         public TwitterEntities Entities { get; set; }
 
+        [DataMember(Name = "extended_entities", IsRequired = false)]
+        public TwitterEntities ExtendedEntities { get; set; }
+
         [DataMember(Name = "favorite_count")]
         public int? FavoriteCount { get; set; }
 
@@ -127,6 +130,27 @@ namespace OpenTween.Api
         [DataMember(Name = "withheld_scope")]
         public string WithheldScope { get; set; }
 
+        /// <summary>
+        /// Entities と ExtendedEntities をマージした状態のエンティティを返します
+        /// </summary>
+        [IgnoreDataMember]
+        public TwitterEntities MergedEntities
+        {
+            get
+            {
+                if (this.ExtendedEntities == null)
+                    return this.Entities;
+
+                return new TwitterEntities
+                {
+                    Hashtags = this.ExtendedEntities.Hashtags ?? this.Entities.Hashtags,
+                    Media = this.ExtendedEntities.Media ?? this.Entities.Media,
+                    Urls = this.ExtendedEntities.Urls ?? this.Entities.Urls,
+                    UserMentions = this.ExtendedEntities.UserMentions ?? this.Entities.UserMentions,
+                };
+            }
+        }
+
         /// <exception cref="SerializationException"/>
         public static TwitterStatus ParseJson(string json)
         {
index 31ec5fa..bc9e7c7 100644 (file)
@@ -1,6 +1,8 @@
 更新履歴
 
 ==== Ver 1.2.1-beta1(2014/xx/xx)
+ * NEW: 5月28日(太平洋夏時間, UTC-7)から追加される予定の pic.twitter.com の複数枚画像表示に対応しました
+  - pic.twitter.com への複数枚画像の投稿は未対応です
  * CHG: 起動時に .NET Framework 4.5.1 以降がインストールされているか確認を行います
  * CHG: Foursquareの地図表示を swarmapp.com のURLでも表示可能にしました
  * FIX: 発言詳細欄から右クリックで日本語ハッシュタグを固定すると、エンコード状態のハッシュタグが登録される問題を修正
index d18ef9c..4021a46 100644 (file)
@@ -1538,7 +1538,7 @@ namespace OpenTween
                 post.RetweetedId = retweeted.Id;
                 //本文
                 post.TextFromApi = retweeted.Text;
-                entities = retweeted.Entities;
+                entities = retweeted.MergedEntities;
                 //Source取得(htmlの場合は、中身を取り出し)
                 post.Source = retweeted.Source;
                 //Reply先
@@ -1573,7 +1573,7 @@ namespace OpenTween
                 post.CreatedAt = MyCommon.DateTimeParse(status.CreatedAt);
                 //本文
                 post.TextFromApi = status.Text;
-                entities = status.Entities;
+                entities = status.MergedEntities;
                 //Source取得(htmlの場合は、中身を取り出し)
                 post.Source = status.Source;
                 post.InReplyToStatusId = status.InReplyToStatusId;
@@ -2204,7 +2204,7 @@ namespace OpenTween
                         post.RetweetedId = post.StatusId;
                         //本文
                         post.TextFromApi = retweeted.Text;
-                        entities = retweeted.Entities;
+                        entities = retweeted.MergedEntities;
                         //Source取得(htmlの場合は、中身を取り出し)
                         post.Source = retweeted.Source;
                         //Reply先
@@ -2231,7 +2231,7 @@ namespace OpenTween
 
                         //本文
                         post.TextFromApi = status.Text;
-                        entities = status.Entities;
+                        entities = status.MergedEntities;
                         //Source取得(htmlの場合は、中身を取り出し)
                         post.Source = status.Source;
                         post.InReplyToStatusId = status.InReplyToStatusId;
index d07a880..3e4525a 100644 (file)
@@ -208,7 +208,7 @@ namespace OpenTween
 
             if (status != null)
             {
-                var html = await this.Twitter.CreateHtmlAnchorAsync(status.Text, atlist, status.Entities, null);
+                var html = await this.Twitter.CreateHtmlAnchorAsync(status.Text, atlist, status.MergedEntities, null);
                 html = this.Owner.createDetailHtml(html +
                     " Posted at " + MyCommon.DateTimeParse(status.CreatedAt) +
                     " via " + status.Source);