1 // OpenTween - Client of Twitter
2 // Copyright (c) 2012 kim_upsilon (@kim_upsilon) <https://upsilo.net/~upsilon/>
3 // All rights reserved.
5 // This file is part of OpenTween.
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)
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
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.
23 using System.Collections.Generic;
26 using System.Net.Http;
27 using System.Runtime.Serialization.Json;
29 using System.Text.RegularExpressions;
30 using System.Threading;
31 using System.Threading.Tasks;
33 using System.Xml.Linq;
34 using System.Xml.XPath;
35 using OpenTween.Connection;
36 using OpenTween.Models;
38 namespace OpenTween.Thumbnail.Services
40 class ViaMe : IThumbnailService
42 public static readonly Regex UrlPatternRegex =
43 new Regex(@"^https?://via\.me/-(\w+)$");
45 protected HttpClient http
46 => this.localHttpClient ?? Networking.Http;
48 private readonly HttpClient localHttpClient;
55 public ViaMe(HttpClient http)
56 => this.localHttpClient = http;
58 public override async Task<ThumbnailInfo> GetThumbnailInfoAsync(string url, PostClass post, CancellationToken token)
60 var match = ViaMe.UrlPatternRegex.Match(url);
64 var postId = match.Groups[1].Value;
68 var apiUrl = "http://via.me/api/v1/posts/" + postId;
70 var json = await this.http.GetByteArrayAsync(apiUrl)
71 .ConfigureAwait(false);
73 using (var jsonReader = JsonReaderWriterFactory.CreateJsonReader(json, XmlDictionaryReaderQuotas.Max))
75 var xElm = XElement.Load(jsonReader);
77 var thumbUrlElm = xElm.XPathSelectElement("/response/post/thumb_url");
78 if (thumbUrlElm == null)
81 var textElm = xElm.XPathSelectElement("/response/post/text");
83 return new ThumbnailInfo
86 ThumbnailImageUrl = thumbUrlElm.Value,
87 TooltipText = textElm?.Value,
91 catch (HttpRequestException) { }