async Task<RootVimeo> LoadContentsImpl(IResourceNetworkLayer networkLayer, IProgress<float> progress, CancellationToken token)
            {
                using (var client = networkLayer.Clone())
                {
                    client.AddHeaders("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0");
                    client.AddHeaders("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
                    client.AddHeaders("Accept-Language", "ru,en;q=0.8,en-us;q=0.5,uk;q=0.3");
                    client.SetReferer("http://www.google.com");
                    var pageData = await client.Get(_originalUrl, token, progress, null, false);
                    string clipId = null;
                    if (Regex.Match(pageData, @"clip_id=(\d+)", RegexOptions.Singleline).Success)
                    {
                        clipId = Regex.Match(pageData, @"clip_id=(\d+)", RegexOptions.Singleline).Groups[1].ToString();
                    }
                    else if (Regex.Match(pageData, @"(\d+)", RegexOptions.Singleline).Success)
                    {
                        clipId = Regex.Match(pageData, @"(\d+)", RegexOptions.Singleline).Groups[1].ToString();
                    }

                    if (!string.IsNullOrWhiteSpace(clipId))
                    {
                        client.SetReferer(string.Format("http://vimeo.com/{0}", clipId));
                        var configResult = await client.Get(string.Format("http://player.vimeo.com/video/{0}/config", clipId), token, progress, null, false);
                        return JsonConvert.DeserializeObject<RootVimeo>(configResult);
                    }
                    else
                        return null;
                }
            }
            async Task <RootVimeo> LoadContentsImpl(IResourceNetworkLayer networkLayer, IProgress <float> progress, CancellationToken token)
            {
                using (var client = networkLayer.Clone())
                {
                    client.AddHeaders("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0");
                    client.AddHeaders("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
                    client.AddHeaders("Accept-Language", "ru,en;q=0.8,en-us;q=0.5,uk;q=0.3");
                    client.SetReferer("http://www.google.com");
                    var pageData = await client.Get(_originalUrl, token, progress, null, false);

                    string clipId = null;
                    if (Regex.Match(pageData, @"clip_id=(\d+)", RegexOptions.Singleline).Success)
                    {
                        clipId = Regex.Match(pageData, @"clip_id=(\d+)", RegexOptions.Singleline).Groups[1].ToString();
                    }
                    else if (Regex.Match(pageData, @"(\d+)", RegexOptions.Singleline).Success)
                    {
                        clipId = Regex.Match(pageData, @"(\d+)", RegexOptions.Singleline).Groups[1].ToString();
                    }

                    if (!string.IsNullOrWhiteSpace(clipId))
                    {
                        client.SetReferer(string.Format("http://vimeo.com/{0}", clipId));
                        var configResult = await client.Get(string.Format("http://player.vimeo.com/video/{0}/config", clipId), token, progress, null, false);

                        return(JsonConvert.DeserializeObject <RootVimeo>(configResult));
                    }
                    else
                    {
                        return(null);
                    }
                }
            }
 private static async Task <string> HttpGet(string uri, IResourceNetworkLayer networkLayer, IProgress <float> progress, CancellationToken token)
 {
     using (var headeredNetworkLayer = networkLayer.Clone())
     {
         networkLayer.AddHeaders("User-Agent", BotUserAgent);
         return(await networkLayer.Get(uri, token, progress, null, true));
     }
 }
        private async Task <ImgurInfo> GetResponse(string url, IResourceNetworkLayer networkLayer, IProgress <float> progress, CancellationToken token)
        {
            if (string.IsNullOrWhiteSpace(_apiKey))
            {
                throw new Exception("ApiKey not set for Imgur, please set it on ImageAquisition.ImgurAPIKey");
            }

            using (var network = networkLayer.Clone())
            {
                network.AddHeaders("Authorization", string.Format("Client-ID {0}", _apiKey));
                var responseString = await network.Get(url, token, progress, null, false);

                return(JsonConvert.DeserializeObject <ImgurInfo>(responseString));
            }
        }
        /// <summary>
        /// Returns the title of the YouTube video.
        /// </summary>
        public static async Task <string> GetVideoTitleAsync(string youTubeId, IResourceNetworkLayer networkLayer, IProgress <float> progress, CancellationToken token)
        {
            using (var client = networkLayer.Clone())
            {
                client.AddHeaders("User-Agent", BotUserAgent);
                var html = await client.Get("http://www.youtube.com/watch?v=" + youTubeId + "&nomobile=1", token, progress, null, true);

                var startIndex = html.IndexOf(" title=\"");
                if (startIndex != -1)
                {
                    startIndex = html.IndexOf(" title=\"", startIndex + 1);
                    if (startIndex != -1)
                    {
                        startIndex += 8;
                        var endIndex = html.IndexOf("\">", startIndex);
                        if (endIndex != -1)
                        {
                            return(html.Substring(startIndex, endIndex - startIndex));
                        }
                    }
                }
                return(null);
            }
        }
        private async Task<ImgurInfo> GetResponse(string url, IResourceNetworkLayer networkLayer, IProgress<float> progress, CancellationToken token)
        {
            if (string.IsNullOrWhiteSpace(_apiKey))
            {
                throw new Exception("ApiKey not set for Imgur, please set it on ImageAquisition.ImgurAPIKey");
            }

            using (var network = networkLayer.Clone())
            {
                network.AddHeaders("Authorization", string.Format("Client-ID {0}", _apiKey));
                var responseString = await network.Get(url, token, progress, null, false);
                return JsonConvert.DeserializeObject<ImgurInfo>(responseString);
            }
        }
		private static async Task<string> HttpGet(string uri, IResourceNetworkLayer networkLayer, IProgress<float> progress, CancellationToken token)
		{
            using (var headeredNetworkLayer = networkLayer.Clone())
            {
                networkLayer.AddHeaders("User-Agent", BotUserAgent);
                return await networkLayer.Get(uri, token, progress, null, true);
            }
		}
        /// <summary>
        /// Returns the title of the YouTube video. 
        /// </summary>
        public static async Task<string> GetVideoTitleAsync(string youTubeId, IResourceNetworkLayer networkLayer, IProgress<float> progress, CancellationToken token)
        {
			using (var client = networkLayer.Clone())
			{
				client.AddHeaders("User-Agent", BotUserAgent);
				var html = await client.Get("http://www.youtube.com/watch?v=" + youTubeId + "&nomobile=1", token, progress, null, true);
				var startIndex = html.IndexOf(" title=\"");
				if (startIndex != -1)
				{
					startIndex = html.IndexOf(" title=\"", startIndex + 1);
					if (startIndex != -1)
					{
						startIndex += 8;
						var endIndex = html.IndexOf("\">", startIndex);
						if (endIndex != -1)
							return html.Substring(startIndex, endIndex - startIndex);
					}
				}
				return null;
			}
        }