private static void ParseXml(Stream xmlData, XboxTitleInfo titleInfo) { XboxAssetDownloader.SendStatusChanged("Parsing online asset information, please wait..."); var ret = new List <XboxAssetInfo>(); using (var xml = XmlReader.Create(xmlData)) { while (xml.Read()) { if (!xml.IsStartElement()) { continue; } var name = xml.Name.ToLower(); if (!name.StartsWith("live:")) { continue; } name = name.Substring(5); if (name == "fulltitle") { xml.Read(); titleInfo.Title = xml.Value; } if (name != "image") { continue; } while (xml.Read() && !(!xml.IsStartElement() && xml.Name.ToLower() == "live:image")) { if (!xml.IsStartElement() || xml.Name.ToLower() != "live:fileurl") { continue; } xml.Read(); var url = new Uri(xml.Value); var fname = Path.GetFileNameWithoutExtension(url.LocalPath); if (fname.StartsWith("banner", StringComparison.CurrentCultureIgnoreCase)) { ret.Add(new XboxAssetInfo(url, XboxAssetType.Banner, titleInfo)); } else if (fname.StartsWith("background", StringComparison.CurrentCultureIgnoreCase)) { ret.Add(new XboxAssetInfo(url, XboxAssetType.Background, titleInfo)); } else if (fname.StartsWith("tile", StringComparison.CurrentCultureIgnoreCase)) { ret.Add(new XboxAssetInfo(url, XboxAssetType.Icon, titleInfo)); } else if (fname.StartsWith("screen", StringComparison.CurrentCultureIgnoreCase)) { ret.Add(new XboxAssetInfo(url, XboxAssetType.Screenshot, titleInfo)); } //Ignore anything else break; // We're done with this image } } } titleInfo.AssetsInfo = ret.ToArray(); XboxAssetDownloader.SendStatusChanged("Finished parsing asset information..."); }
public static void ParseXml(Stream xmlData, XboxTitleInfo titleInfo) { XboxAssetDownloader.SendStatusChanged("Parsing Title/Asset info..."); var ret = new List<XboxTitleInfo.XboxAssetInfo>(); XDocument marketData = XDocument.Load(xmlData); var liveXmlNamespace = marketData.Root.Attributes().First(p => p.Name.LocalName == "live"); string live = liveXmlNamespace.Value; var fullTitle = marketData.Descendants(XName.Get("fullTitle", live)).FirstOrDefault(); if(fullTitle == null) { return; } titleInfo.Title = fullTitle.Value; var description = marketData.Descendants(XName.Get("description", live)).First(); titleInfo.Description = description.Value; var assets = marketData.Descendants(XName.Get("image", live)); foreach(var asset in assets) { var fileUrl = asset.Element(XName.Get("fileUrl", live)).Value; var fileUri = new Uri(fileUrl); var fileName = Path.GetFileNameWithoutExtension(fileUrl); if(fileName.StartsWith("banner", StringComparison.CurrentCultureIgnoreCase)) { ret.Add(new XboxTitleInfo.XboxAssetInfo(fileUri, XboxTitleInfo.XboxAssetType.Banner, titleInfo)); continue; } if(fileName.StartsWith("background", StringComparison.CurrentCultureIgnoreCase)) { ret.Add(new XboxTitleInfo.XboxAssetInfo(fileUri, XboxTitleInfo.XboxAssetType.Background, titleInfo)); continue; } if(fileName.StartsWith("tile", StringComparison.CurrentCultureIgnoreCase)) { ret.Add(new XboxTitleInfo.XboxAssetInfo(fileUri, XboxTitleInfo.XboxAssetType.Icon, titleInfo)); continue; } if(fileName.StartsWith("screen", StringComparison.CurrentCultureIgnoreCase)) { ret.Add(new XboxTitleInfo.XboxAssetInfo(fileUri, XboxTitleInfo.XboxAssetType.Screenshot, titleInfo)); continue; } } titleInfo.AssetsInfo = ret.ToArray(); XboxAssetDownloader.SendStatusChanged("Finished parsing Title/Asset info..."); }
public static XboxTitleInfo FromTitleId(uint titleId, XboxLocale locale) { var ret = new XboxTitleInfo { TitleId = string.Format("{0:X08}", titleId), Locale = locale.ToString() }; var wc = new WebClient(); var url = string.Format( "http://catalog.xboxlive.com/Catalog/Catalog.asmx/Query?methodName=FindGames&Names=Locale&Values={0}&Names=LegalLocale&Values={0}&Names=Store&Values=1&Names=PageSize&Values=100&Names=PageNum&Values=1&Names=DetailView&Values=5&Names=OfferFilterLevel&Values=1&Names=MediaIds&Values=66acd000-77fe-1000-9115-d802{1:X8}&Names=UserTypes&Values=2&Names=MediaTypes&Values=1&Names=MediaTypes&Values=21&Names=MediaTypes&Values=23&Names=MediaTypes&Values=37&Names=MediaTypes&Values=46", locale.Locale, titleId); XboxAssetDownloader.SendStatusChanged("Downloading title/asset information..."); using (var stream = new MemoryStream(wc.DownloadData(url))) ParseXml(stream, ret); return(ret); }
public XboxTitleInfo[] GetTitleInfo(string keywords, XboxLocale locale) { var url = string.Format("http://marketplace.xbox.com/{0}/SiteSearch/xbox/?query={1}&PageSize=5", locale.Locale, HttpUtility.UrlEncode(keywords)); var wc = new WebClient(); var ret = new List <XboxTitleInfo>(); using (var stream = wc.OpenRead(url)) { if (stream == null) { return(ret.ToArray()); } var res = (XboxKeywordResponse)_serializer.ReadObject(stream); ret.AddRange(from entry in res.Entries where entry.DetailsUrl != null let tid = entry.DetailsUrl.IndexOf("d802", StringComparison.Ordinal) where tid > 0 && entry.DetailsUrl.Length >= tid + 12 select uint.Parse(entry.DetailsUrl.Substring(tid + 4, 8), NumberStyles.HexNumber) into titleId select XboxTitleInfo.FromTitleId(titleId, locale)); } return(ret.ToArray()); }
public XboxAssetInfo(Uri assetUrl, XboxAssetType assetType, XboxTitleInfo titleInfo) { AssetUrl = assetUrl; AssetType = assetType; _titleInfo = titleInfo; }
public XboxTitleInfo[] GetTitleInfo(uint titleId, XboxLocale locale) { return(new[] { XboxTitleInfo.FromTitleId(titleId, locale) }); }
private static void ParseHtml(string url, XboxTitleInfo titleInfo) { XboxAssetDownloader.SendStatusChanged("Fetching online assets, please wait..."); var ret = new List <XboxAssetInfo>(); try { var wc = new WebClient(); var tmp = new List <string>(); var data = Encoding.UTF8.GetString(wc.DownloadData(url)).Split('>'); for (var i = 0; i < data.Length; i++) { //game title if (data[i].ToLower().Contains("div id=\"gamedetails\"")) { var name = data[i + 1]; if (name.ToLower().Contains("<h1")) { name = data[i + 2]; titleInfo.Title = name.Substring(0, name.Length - 4); } } //banner image if (data[i].ToLower().Contains("bannerimage.src = ")) { var index = data[i].ToLower().IndexOf("http\\x3a", StringComparison.Ordinal); if (index > 0) { var index_end = data[i].ToLower().IndexOf("banner.png';", index, StringComparison.Ordinal); if (index_end > 0) { var name = data[i].Substring(index, index_end - index + 10); name = name.Replace("\\x3a", ":"); name = name.Replace("\\x2f", "/"); var banner_url = new Uri(name); ret.Add(new XboxAssetInfo(banner_url, XboxAssetType.Banner, titleInfo)); } } } //background image if (data[i].ToLower().Contains("style=\\\"background-image: url(")) { var index = data[i].ToLower().IndexOf("style=\\\"background-image: url(", StringComparison.Ordinal) + 30; if (index > 0) { var index_end = data[i].ToLower().IndexOf("background.jpg", index, StringComparison.Ordinal); if (index_end > 0) { var name = data[i].Substring(index, index_end - index + 14); var backgr_url = new Uri(name); ret.Add(new XboxAssetInfo(backgr_url, XboxAssetType.Background, titleInfo)); } } } //screenshots if (data[i].ToLower().Contains("div id=\"mediacontrol\" class=\"grid-18")) { int w = i + 1, n = 0; while (data[w + n].ToLower().Contains("div id=\"image")) { var index = data[w + n + 1].ToLower().IndexOf("http://", StringComparison.Ordinal); if (index > 0) { var index_end = data[w + n + 1].ToLower().IndexOf("screenlg", index, StringComparison.Ordinal); if (index_end > 0) { index_end = data[w + n + 1].ToLower().IndexOf(".jpg", index_end, StringComparison.Ordinal); var name = data[w + n + 1].Substring(index, index_end - index + 4); var screen_url = new Uri(name); ret.Add(new XboxAssetInfo(screen_url, XboxAssetType.Screenshot, titleInfo)); } } n += 3; } i = w + n; } } } catch { } titleInfo.AssetsInfo = ret.ToArray(); XboxAssetDownloader.SendStatusChanged("Finished parsing asset information..."); }
private static void ParseXml(Stream xmlData, XboxTitleInfo titleInfo) { XboxAssetDownloader.SendStatusChanged("Parsing Title/Asset info..."); var ret = new List<XboxAssetInfo>(); using(var xml = XmlReader.Create(xmlData)) { while(xml.Read()) { if(!xml.IsStartElement()) continue; var name = xml.Name.ToLower(); if(!name.StartsWith("live:")) continue; name = name.Substring(5); if(name == "fulltitle") { xml.Read(); titleInfo.Title = xml.Value; } if(name != "image") continue; while(xml.Read() && !(!xml.IsStartElement() && xml.Name.ToLower() == "live:image")) { if(!xml.IsStartElement() || xml.Name.ToLower() != "live:fileurl") continue; xml.Read(); var url = new Uri(xml.Value); var fname = Path.GetFileNameWithoutExtension(url.LocalPath); if(fname.StartsWith("banner", StringComparison.CurrentCultureIgnoreCase)) ret.Add(new XboxAssetInfo(url, XboxAssetType.Banner, titleInfo)); else if(fname.StartsWith("background", StringComparison.CurrentCultureIgnoreCase)) ret.Add(new XboxAssetInfo(url, XboxAssetType.Background, titleInfo)); else if(fname.StartsWith("tile", StringComparison.CurrentCultureIgnoreCase)) ret.Add(new XboxAssetInfo(url, XboxAssetType.Icon, titleInfo)); else if(fname.StartsWith("screen", StringComparison.CurrentCultureIgnoreCase)) ret.Add(new XboxAssetInfo(url, XboxAssetType.Screenshot, titleInfo)); //Ignore anything else break; // We're done with this image } } } titleInfo.AssetsInfo = ret.ToArray(); XboxAssetDownloader.SendStatusChanged("Finished parsing Title/Asset info..."); }
public static XboxTitleInfo FromTitleId(uint titleId, XboxLocale locale) { var ret = new XboxTitleInfo { TitleId = string.Format("{0:X08}", titleId), Locale = locale.ToString() }; var wc = new WebClient(); wc.Proxy = null; wc.Headers.Add(HttpRequestHeader.UserAgent, App.UserAgent); var url = string.Format( "http://catalog.xboxlive.com/Catalog/Catalog.asmx/Query?methodName=FindGames&Names=Locale&Values={0}&Names=LegalLocale&Values={0}&Names=Store&Values=1&Names=PageSize&Values=100&Names=PageNum&Values=1&Names=DetailView&Values=5&Names=OfferFilterLevel&Values=1&Names=MediaIds&Values=66acd000-77fe-1000-9115-d802{1:X8}&Names=UserTypes&Values=2&Names=MediaTypes&Values=1&Names=MediaTypes&Values=21&Names=MediaTypes&Values=23&Names=MediaTypes&Values=37&Names=MediaTypes&Values=46", locale.Locale, titleId); XboxAssetDownloader.SendStatusChanged("Downloading title/asset information..."); using(var stream = new MemoryStream(wc.DownloadData(url))) LocalOperations.ParseXml(stream, ret); return ret; }