OSDN Git Service

TwitterApi.EscapeJsonStringメソッドをJsonUtilsクラスへ移動
[opentween/open-tween.git] / OpenTween / Api / DataModel / TwitterEntity.cs
1 // OpenTween - Client of Twitter
2 // Copyright (c) 2014 kim_upsilon (@kim_upsilon) <https://upsilo.net/~upsilon/>
3 // All rights reserved.
4 //
5 // This file is part of OpenTween.
6 //
7 // This program is free software; you can redistribute it and/or modify it
8 // under the terms of the GNU General Public License as published by the Free
9 // Software Foundation; either version 3 of the License, or (at your option)
10 // any later version.
11 //
12 // This program is distributed in the hope that it will be useful, but
13 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 // for more details.
16 //
17 // You should have received a copy of the GNU General Public License along
18 // with this program. If not, see <http://www.gnu.org/licenses/>, or write to
19 // the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
20 // Boston, MA 02110-1301, USA.
21
22 using System;
23 using System.Collections;
24 using System.Collections.Generic;
25 using System.Linq;
26 using System.Runtime.Serialization;
27 using System.Text;
28 using System.Threading.Tasks;
29
30 namespace OpenTween.Api.DataModel
31 {
32     // 参照: https://developer.twitter.com/en/docs/tweets/data-dictionary/overview/entities-object
33
34     [DataContract]
35     public class TwitterEntities : IEnumerable<TwitterEntity>
36     {
37         [DataMember(Name = "hashtags", IsRequired = false)]
38         public TwitterEntityHashtag[] Hashtags { get; set; }
39
40         [DataMember(Name = "media", IsRequired = false)]
41         public TwitterEntityMedia[] Media { get; set; }
42
43         [DataMember(Name = "symbols", IsRequired = false)]
44         public TwitterEntitySymbol[] Symbols { get; set; }
45
46         [DataMember(Name = "urls", IsRequired = false)]
47         public TwitterEntityUrl[] Urls { get; set; }
48
49         [DataMember(Name = "user_mentions", IsRequired = false)]
50         public TwitterEntityMention[] UserMentions { get; set; }
51
52         public IEnumerator<TwitterEntity> GetEnumerator()
53         {
54             var entities = Enumerable.Empty<TwitterEntity>();
55
56             if (this.Hashtags != null)
57                 entities = entities.Concat(this.Hashtags);
58
59             if (this.Media != null)
60                 entities = entities.Concat(this.Media);
61
62             if (this.Symbols != null)
63                 entities = entities.Concat(this.Symbols);
64
65             if (this.Urls != null)
66                 entities = entities.Concat(this.Urls);
67
68             if (this.UserMentions != null)
69                 entities = entities.Concat(this.UserMentions);
70
71             return entities.GetEnumerator();
72         }
73
74         IEnumerator IEnumerable.GetEnumerator()
75             => this.GetEnumerator();
76     }
77
78     [DataContract]
79     public abstract class TwitterEntity
80     {
81         [DataMember(Name = "indices")]
82         public int[] Indices { get; set; }
83     }
84
85     [DataContract]
86     public class TwitterEntityHashtag : TwitterEntity
87     {
88         [DataMember(Name = "text")]
89         public string Text { get; set; }
90     }
91
92     [DataContract]
93     public class TwitterEntityMedia : TwitterEntityUrl
94     {
95         [DataMember(Name = "additional_media_info", IsRequired = false)]
96         public TwitterMediaAdditionalInfo AdditionalMediaInfo { get; set; }
97
98         [DataMember(Name = "id")]
99         public long Id { get; set; }
100
101         [DataMember(Name = "id_str")]
102         public string IdStr { get; set; }
103
104         [DataMember(Name = "media_url_https")]
105         public string MediaUrlHttps { get; set; }
106
107         [DataMember(Name = "sizes")]
108         public TwitterMediaSizes Sizes { get; set; }
109
110         [DataMember(Name = "source_status_id")]
111         public long SourceStatusId { get; set; }
112
113         [DataMember(Name = "source_status_id_str")]
114         public string SourceStatusIdStr { get; set; }
115
116         [DataMember(Name = "type")]
117         public string Type { get; set; }
118
119         [DataMember(Name = "video_info", IsRequired = false)]
120         public TwitterMediaVideoInfo VideoInfo { get; set; }
121
122         [DataMember(Name = "ext_alt_text", IsRequired = false)]
123         public string AltText { get; set; }
124     }
125
126     [DataContract]
127     public class TwitterMediaSizes
128     {
129         [DataMember(Name = "thumb")]
130         public TwitterMediaSizes.Size Thumb { get; set; }
131
132         [DataMember(Name = "large")]
133         public TwitterMediaSizes.Size Large { get; set; }
134
135         [DataMember(Name = "medium")]
136         public TwitterMediaSizes.Size Medium { get; set; }
137
138         [DataMember(Name = "small")]
139         public TwitterMediaSizes.Size Small { get; set; }
140
141         [DataContract]
142         public class Size
143         {
144             [DataMember(Name = "h")]
145             public int Height { get; set; }
146
147             [DataMember(Name = "resize")]
148             public string Resize { get; set; }
149
150             [DataMember(Name = "w")]
151             public int Width { get; set; }
152         }
153     }
154
155     [DataContract]
156     public class TwitterMediaVideoInfo
157     {
158         [DataMember(Name = "aspect_ratio")]
159         public int[] AspectRatio { get; set; }
160
161         [DataMember(Name = "duration_millis", IsRequired = false)]
162         public long? DurationMillis { get; set; }
163
164         [DataMember(Name = "variants")]
165         public TwitterMediaVideoInfo.Variant[] Variants { get; set; }
166
167         [DataContract]
168         public class Variant
169         {
170             [DataMember(Name = "bitrate")]
171             public int? Bitrate { get; set; }
172
173             [DataMember(Name = "content_type")]
174             public string ContentType { get; set; }
175
176             [DataMember(Name = "url")]
177             public string Url { get; set; }
178         }
179     }
180
181     [DataContract]
182     public class TwitterMediaAdditionalInfo
183     {
184         [DataMember(Name = "title")]
185         public string Title { get; set; }
186
187         [DataMember(Name = "description")]
188         public string Description { get; set; }
189
190         [DataMember(Name = "embeddable")]
191         public bool Embeddable { get; set; }
192
193         [DataMember(Name = "monetizable")]
194         public bool Monetizable { get; set; }
195     }
196
197     [DataContract]
198     public class TwitterEntitySymbol : TwitterEntity
199     {
200         [DataMember(Name = "text")]
201         public string Text { get; set; }
202     }
203
204     [DataContract]
205     public class TwitterEntityUrl : TwitterEntity
206     {
207         [DataMember(Name = "display_url")]
208         public string DisplayUrl { get; set; }
209
210         [DataMember(Name = "expanded_url")]
211         public string ExpandedUrl { get; set; }
212
213         [DataMember(Name = "url")]
214         public string Url { get; set; }
215     }
216
217     [DataContract]
218     public class TwitterEntityMention : TwitterEntity
219     {
220         [DataMember(Name = "id")]
221         public long Id { get; set; }
222
223         [DataMember(Name = "id_str")]
224         public string IdStr { get; set; }
225
226         [DataMember(Name = "name")]
227         public string Name { get; set; }
228
229         [DataMember(Name = "screen_name")]
230         public string ScreenName { get; set; }
231     }
232
233     public class TwitterEntityEmoji : TwitterEntity
234     {
235         public string Text { get; set; }
236
237         public string Url { get; set; }
238     }
239 }