1 // OpenTween - Client of Twitter
2 // Copyright (c) 2007-2011 kiri_feather (@kiri_feather) <kiri.feather@gmail.com>
3 // (c) 2008-2011 Moz (@syo68k)
4 // (c) 2008-2011 takeshik (@takeshik) <http://www.takeshik.org/>
5 // (c) 2010-2011 anis774 (@anis774) <http://d.hatena.ne.jp/anis774/>
6 // (c) 2010-2011 fantasticswallow (@f_swallow) <http://twitter.com/f_swallow>
7 // (c) 2011 Egtra (@egtra) <http://dev.activebasic.com/egtra/>
8 // All rights reserved.
10 // This file is part of OpenTween.
12 // This program is free software; you can redistribute it and/or modify it
13 // under the terms of the GNU General Public License as published by the Free
14 // Software Foundation; either version 3 of the License, or (at your option)
17 // This program is distributed in the hope that it will be useful, but
18 // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
19 // or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22 // You should have received a copy of the GNU General Public License along
23 // with this program. If not, see <http://www.gnu.org/licenses/>, or write to
24 // the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
25 // Boston, MA 02110-1301, USA.
28 using System.Collections.Generic;
31 using System.Runtime.Serialization;
33 using System.Runtime.Serialization.Json;
41 // http://code.google.com/intl/ja/apis/ajaxlanguage/documentation/#fonje
42 // デベロッパー ガイド - Google AJAX Language API - Google Code
44 private const string TranslateEndPoint = "http://ajax.googleapis.com/ajax/services/language/translate";
45 private const string LanguageDetectEndPoint = "https://ajax.googleapis.com/ajax/services/language/detect";
48 private static List<string> LanguageTable = new List<string>
161 public class TranslateResponseData
163 [DataMember(Name = "translatedText")] public string TranslatedText;
168 private class TranslateResponse
170 [DataMember(Name = "responseData")] public TranslateResponseData ResponseData = null;
171 [DataMember(Name = "responseDetails")] public string ResponseDetails = null;
172 [DataMember(Name = "responseStatus")] public HttpStatusCode ResponseStatus = 0;
177 public class LanguageDetectResponseData
179 [DataMember(Name = "language")] public string Language;
180 [DataMember(Name = "isReliable")] public bool IsReliable;
181 [DataMember(Name = "confidence")] public double Confidence;
185 private class LanguageDetectResponse
187 [DataMember(Name = "responseData")] public LanguageDetectResponseData ResponseData = null;
188 [DataMember(Name = "responseDetails")] public string ResponseDetails = null;
189 [DataMember(Name = "responseStatus")] public HttpStatusCode ResponseStatus = 0;
192 public bool Translate(string srclng, string dstlng, string source, ref string destination, ref string ErrMsg)
194 var http = new HttpVarious();
195 var apiurl = TranslateEndPoint;
196 var headers = new Dictionary<string, string>();
197 headers.Add("v", "1.0");
200 if (string.IsNullOrEmpty(srclng) || string.IsNullOrEmpty(dstlng))
204 headers.Add("User-Agent", MyCommon.GetUserAgentString());
205 headers.Add("langpair", srclng + "|" + dstlng);
207 headers.Add("q", source);
210 if (http.GetData(apiurl, headers, out content))
212 var serializer = new DataContractJsonSerializer(typeof(TranslateResponse));
213 TranslateResponse res;
217 res = MyCommon.CreateDataFromJson<TranslateResponse>(content);
221 ErrMsg = "Err:Invalid JSON";
225 if (res.ResponseData == null)
227 ErrMsg = "Err:" + res.ResponseDetails;
230 var _body = res.ResponseData.TranslatedText;
231 var buf = HttpUtility.UrlDecode(_body);
233 destination = string.Copy(buf);
239 public string LanguageDetect(string source)
241 var http = new HttpVarious();
242 var apiurl = LanguageDetectEndPoint;
243 var headers = new Dictionary<string, string>();
244 headers.Add("User-Agent", MyCommon.GetUserAgentString());
245 headers.Add("v", "1.0");
246 headers.Add("q", source);
248 if (http.GetData(apiurl, headers, out content))
250 var serializer = new DataContractJsonSerializer(typeof(LanguageDetectResponse));
253 var res = MyCommon.CreateDataFromJson<LanguageDetectResponse>(content);
254 return res.ResponseData.Language;
264 public string GetLanguageEnumFromIndex(int index)
266 return LanguageTable[index];
269 public int GetIndexFromLanguageEnum(string lang)
271 return LanguageTable.IndexOf(lang);
275 #region "UrlShortener"
276 // http://code.google.com/intl/ja/apis/urlshortener/v1/getting_started.html
277 // Google URL Shortener API
280 private class UrlShortenerParameter
282 [DataMember(Name = "longUrl")] public string LongUrl = null;
286 private class UrlShortenerResponse
291 public string Shorten(string source)
293 var http = new HttpVarious();
294 var apiurl = "https://www.googleapis.com/urlshortener/v1/url";
295 var headers = new Dictionary<string, string>();
296 headers.Add("User-Agent", MyCommon.GetUserAgentString());
297 headers.Add("Content-Type", "application/json");
299 http.PostData(apiurl, headers);