0

こんにちは、すべてのデータ ページを取得する必要があります。写真と各トピックの名前の場合。ページはこちらです。

私は2つの選択肢があることを知っています。これで、ページ全体の画像しか取得できません。しかし、すべてをキャッチするための補完的な方法が最善の方法であることを誰かが知っている場合:

int startIndex = e.Result.IndexOf(@"><img");
string result = e.Result;            
result = e.Result.Substring(startIndex, e.Result.Length - startIndex);
startIndex = result.IndexOf(".php?src=") + 9;
int endIndex = result.IndexOf(".jpg", startIndex);
string link = result.Substring(startIndex, endIndex - startIndex) + ".jpg";
MessageBox.Show(link);
imagem.Source = new BitmapImage(new Uri(link));

別の方法はこれです。データを保持するクラスを作成してリストを作成しましたが、文字列「パターン」は完全に間違っているに違いありません。このタイプの弦に乗るのが好きではなかったからです。別のトピックからコピーして、これに基づいて独自のトピックを作成しようとしました:

private void ConsultaPopularVideos(string uri)
        {
            WebClient web2 = new WebClient();
            web2.DownloadStringAsync(new Uri(uri));
            web2.DownloadStringCompleted += web2_DownloadStringCompleted;
        }

        void web2_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            if (!e.Cancelled && e.Error == null && !String.IsNullOrEmpty(e.Result))
            {
                _popVideos = new List<PopularVideos>();
                // Aqui você pega todos os links da página
                // P.S.: Se a página mudar, você tem que alterar o pattern aqui.
                string pattern = @"\<a\shref\=[\""|\'](?<url>[^\""|\']+)[\""|\']\stitle\=[\""|\'](?<title>[^\""|\']+).php?src=[\""|\'](?<img>[^\""|\']+)[\""|\']\s\width='275'";


                // Busca no HTML todos os links
                MatchCollection ms = Regex.Matches(e.Result, pattern, RegexOptions.Multiline);


                Debug.WriteLine("----- OK {0} links encontrados", ms.Count);

                foreach (Match m in ms)
                {
                    // O pattern acima está dizendo onde fica o Url e onde fica o nome do artista
                    // e esses são resgatados aqui
                    Group url = m.Groups["url"];
                    MessageBox.Show(m.Groups.ToString());
                    Group title = m.Groups["title"];
                    Group img = m.Groups["img"];

                    if (url != null && title != null && img != null)
                    {
                        //Debug.WriteLine("author: {0}\nUrl: {1}", author.Value, url.Value);

                        // Se caso tenha encontrado o link do artista (pois há outros links na página) continua
                        if (url.Value.ToLower().IndexOf("/") > -1)
                        {
                            // Adiciona um objeto Artista à lista
                            PopularVideos video = new PopularVideos(title.Value, url.Value, img.Value);
                            _popVideos.Add(video);                            
                        }
                    }
                }
                listBoxPopular.ItemsSource = _popVideos;
            }
        }

クラス:

class PopularVideos
    {
        public PopularVideos() { }
        public PopularVideos(string nome, string url, string img)
        {
            Nome = nome;
            Url = new Uri(url);
            BitmapImage Img = new BitmapImage(new Uri(img));
        }
        public string Nome { get; set; }
        public string Img { get; set; }
        public Uri Url { get; set; }
    }
4

1 に答える 1