Mini Kabibi Habibi
using System;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;
using System.Drawing;
using System.Drawing.Imaging;
namespace RssReader.Web {
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class XpoService {
[OperationContract]
public string GetXmlContext(string url) {
string result = string.Empty;
WebClient client = new System.Net.WebClient();
Encoding mainEncoding = Encoding.UTF8;
client.Encoding = mainEncoding;
byte[] dataContent;
try {
dataContent = client.DownloadData(url);
} catch {
return string.Empty;
}
return GetXmlString(dataContent);
}
[OperationContract]
public string GetRssName(string url) {
WebClient client = new System.Net.WebClient();
Encoding mainEncoding = Encoding.UTF8;
client.Encoding = mainEncoding;
byte[] dataContent;
try {
dataContent = client.DownloadData(url);
} catch {
return string.Empty;
}
string stringContent = GetXmlString(dataContent);
if(string.IsNullOrEmpty(stringContent)) {
return string.Empty;
}
string pattern = @"<title>.*?</title>";
Match match = Regex.Match(stringContent, pattern);
if(match != null && match.Success) {
string name = match.Value;
name = name.Replace("<title>", "").Replace("</title>", "");
return name;
}
return string.Empty;
}
string GetXmlString(byte[] data) {
string result = string.Empty;
Encoding mainEncoding = Encoding.UTF8;
result = Encoding.UTF8.GetString(data);
result = result.Remove(0, result.IndexOf('<'));
string pattern = @"\<\?.*encoding="".*"" ?\?\>";
Match match = Regex.Match(result, pattern);
if(match != null && match.Success) {
string tmp = match.Value;
tmp = tmp.Remove(0, tmp.IndexOf("encoding=") + "encoding=".Length);
string encodingStr = tmp.Split('"')[1];
Encoding tmpEncoding;
try {
tmpEncoding = Encoding.GetEncoding(encodingStr);
if(tmpEncoding != null && tmpEncoding.EncodingName != mainEncoding.EncodingName) {
mainEncoding = tmpEncoding;
result = mainEncoding.GetString(data);
return result;
}
} catch {
return result;
}
}
return result;
}
[OperationContract]
public byte[] GetRssIconStream(string url) {
MemoryStream defaultStream = new MemoryStream();
#if DEMOLAUNCHER
DemoLauncher.Web.Properties.Resources.FeedIcon.Save(defaultStream, ImageFormat.Png);
#else
RssReader.Web.Properties.Resources.FeedIcon.Save(defaultStream, ImageFormat.Png);
#endif
byte[] defaultIcon = defaultStream.GetBuffer();
string defaultIconName = "favicon.ico";
string rootUrl = "http://" + url.Split('/')[2];
WebClient client = new System.Net.WebClient();
Encoding mainEncoding = Encoding.UTF8;
client.Encoding = mainEncoding;
byte[] dataContent;
try {
dataContent = client.DownloadData(rootUrl);
} catch {
return defaultIcon;
}
string stringContent = GetXmlString(dataContent);
if(string.IsNullOrEmpty(stringContent)) {
return defaultIcon;
}
string pattern = @"<link rel="".*?icon"".*?href="".*?""";
Match match = Regex.Match(stringContent, pattern, RegexOptions.IgnoreCase);
string iconLink;
if(match != null && match.Success) {
iconLink = match.Value;
iconLink = iconLink.Remove(0, iconLink.IndexOf("href=\"")).Split('"')[1];
if(!iconLink.StartsWith("http:")) {
iconLink = rootUrl + '/' + iconLink.TrimStart('/');
}
} else {
iconLink = rootUrl + '/' + defaultIconName;
}
byte[] linkData = null;
try {
linkData = client.DownloadData(iconLink);
} catch {
return defaultIcon;
}
MemoryStream linkStream = new MemoryStream(linkData);
Bitmap bitmap;
Icon icon;
MemoryStream convertedStream = new MemoryStream();
try {
icon = new Icon(linkStream);
bitmap = icon.ToBitmap();
} catch {
try {
bitmap = new Bitmap(linkStream);
} catch {
return defaultIcon;
}
}
bitmap.Save(convertedStream, ImageFormat.Png);
return convertedStream.GetBuffer();
}
[OperationContract]
public string[] GetXmlContexts(string[] urls) {
string[] result = new string[urls.Length];
WebClient client = new System.Net.WebClient();
client.Encoding = Encoding.UTF8;
for(int i = 0; i < urls.Length; i++) {
byte[] curData;
try {
curData = client.DownloadData(urls[i]);
result[i] = GetXmlString(curData);
} catch {
result[i] = string.Empty;
continue;
}
}
return result;
}
[OperationContract]
public Stream GetStream(string url) {
WebClient client = new System.Net.WebClient();
return client.OpenRead(url);
}
}
}