Mini Kabibi Habibi

Current Path : C:/Users/Public/Documents/DXperience 13.1 Demos/Silverlight/Bin/
Upload File :
Current File : C:/Users/Public/Documents/DXperience 13.1 Demos/Silverlight/Bin/XpoService.svc.cs

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);
        }
    }
}