Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Range

Como acessar os codigos fonte dos sites em C#?

Recommended Posts

Ola pessoal, quero desenvolver aplicativos que acessem um determinados site. Por exemplo, tenho um aplicativo comum, quero digitar o nome de uma açao ex: "PETR3" no textbox do meu programa que irar digitar no textbox do site onde fica nova pesquisa e depois disso ira retornar os preço, oscilaçoes, em cada label correspondente. O site seria http://www.bmfbovespa.com.br/Cotacao-Rapida/ExecutaAcaoCotRapXSL.asp?gstrCA=&intIdiomaXsl=0

Um outro exemplo seria do site http://quebralink.algoritmizando.com/ gostaria de fazer aplicativos para uso proprio, ja procurei muitas coisa inclusive apostilas, mas a maioria nao respondia a minha duvida o mais proximo foi um exemplo do Qual é o meu ip? O codigo fonte achei em site, muito interessante,faz tempo que vi.

private void button1_Click(object sender, EventArgs e)

{

label1.Text = PegarIPExterno();

}

public static string PegarIPExterno()

{

System.Net.WebClient t = new System.Net.WebClient();

string meuip = t.DownloadString("http://meuip.datahouse.com.br");

return meuip

.Substring(

meuip.IndexOf("o Meu IP? ") + "o Meu IP? ".Length,

meuip.IndexOf("</title>") - meuip.IndexOf("o Meu IP? ")

- "o Meu IP? ".Length);

}

Eu nao sei como fazer isso, gostaria de contar com o apoio de vocês. Se alguem tiver alguma ideia, por favor comente.

Editado por Range

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Busquei inclusive pelo webservice, mas não entendi muito a respeito disso. Continuo procurando algumas informaçoes. Por favor galera alguma ideia?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Acho que você deve ir em desenvolvimento de sites, essas informações são obtidas via importação de xml conheço por PHP

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Fala Rafael tudo bem?

    Olha eu procurei pelo arquivo xml que inclusive é utilizado pelo webserviço, o problema é como conseguir esse arquivo xml. Utilizo o Microsoft Visual C# 2008 Express Edition para desenvolver esses aplicativos. Ontem mesmo fui verificar como é a linguagem php e vi que é diferente. Gostaria de saber como conseguir esse xml?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Cara em C# pra você pegar o resultado do HTML da pagina é assim:


    WebClient web = new WebClient();
    web.DownloadStringAsync(new Uri("http://www.algum-site.com", UriKind.RelativeOrAbsolute));
    web.DownloadStringCompleted += (sender, e) => {
    if (e.Error == null) {
    string htmlDaPagina = e.Result;
    }
    }

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Fala Brasilio tudo OK?

    Muito bom esse codigo que você postou, mas a minha principal duvida é como ler uma determinda linha de uma pagina por exemplo:

    <td class="tdString">Preço</td>

    <td class="tdValor">

    R$ 6,07</td>

    </tr>

    <tr>

    <td class="tdString">Oscilação</td>

    <td class="tdValor"><span class="ValorPositivo">0,17%

    </span></td>

    </tr>

    <tr>

    <td class="tdString">Nº de Negócios</td>

    <td class="tdValor">767</td>

    </tr>

    </table>

    E neste caso quero obter a linha onde esta o situado o preço, só depois esperar que retorner o valor para o label1 do meu programa.

    Nao sei como programar isso para ler esses codigo.:o

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Você pode usar E.R

    Você tem que saber como vai ser o codigo html da pagina, se fosse xml seria simples e fácil, mas como é html você vai ter que fazer na marra.

    Exemplo: Vamos imaginar que o codigo html fosse esse


    ----------- Todo o codigo html antes disso --------
    <table id="produtos">
    <tr>
    <td rowspan="2">Produto 1</td>
    </tr>
    <tr>
    <td class="preco">Preço</td>
    <td class="valor">R$ 10,00</td>
    </tr>
    </table>
    ---------- Continua todo o codigo --------

    Então o que precisamos achar é um ponto estatico de inicio e de onde se encontra o valor no codigo html pra assim poder pegar os valores que você quer, no nosso caso aqui são as linhas

    <table id="produtos"> que inicia, a partir dessa linha que vamos encontrar o valor

    <td class="valor">R$ 10,00</td> Essa é a linha onde se encontra o valor

    Então fazemos uma E.R pra achar essas linhas


    Regex regexStart = new Regex(@"<table id=\"produtos\">"); // Linha de partida
    Regex regexValor = new Regex(@"<td class=\"valor\">(.+?)</td>"); // Valor
    Regex regexStop = new Regex(@"</table>"); // Para de buscar o valor
    bool buscar = false
    //
    // Faz o loop linha a linha
    //
    foreach (string linha in htmlDaPagina.Split('\n')) {
    buscar = (buscar == false && regexStart.IsMatch(linha)) ? true : false;
    buscar = (buscar && regexStop.IsMatch(linha)) ? false : buscar;

    if (regexValor.IsMatch(linha) && buscar) {
    seu_label.text = regexValor.Match(linha).Groups[1].Value;
    }
    }

    É mais ou menos isso ai, acho que com isso da pra você tirar uma base.

    Vê ai se você consegue, qualquer coisa post ai de novo!

    Editado por gandalfnho
    Mensagem toda em fointe chamativa

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Fala Brasilio, é mais ou menos isso que estou procurando, muito obrigado mesmo, agora eu vou começar a pesquisar sobre o Regex e aprofundar mais. E por falar nisso fui testar esse codigo e o meu compilador Microsoft Visual C# 2008 Express Edition nao esta aceitando as aspas que estar entre o produto e valor que foi mencionado e esta informando o seguinte " Caractere '\' inesperado".

    E uma outra duvida que tenho é como conseguir esse xml? Fica no proprio site ou eu terei que fazer? É em qualquer site que consegue essa xml?

    E mais uma vez obrigado!

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Quanto ao erro basta tirar o arroba(@) que estão antes das aspas, dei uma vacilada ai, foi mau!

    fica assim Regex regexStart = new Regex("<table id=\"produtos\">"); ou Regex regexStart = new Regex(@"<table id=\\"produtos\\">");

    Quanto ao XML nem todo site disponibiliza isso, alguns sites sim outros não, na maior parte das vezes não. Se o html da pagina estiver bem escrito você poderia interpretar ele como um XML, se ele for validado ele pode ser facilmente lido como xml, mais isso de codigo validado é outra coisa bem rara também, então você fica a merce de ler o html mesmo.

    Então é isso ai, espero que você consiga, e desulpa ai meu erro de sintax!

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Olá Basílio,

    Tentei usar seu exemplo de código mas não consegui obter os valores de que preciso? Você poderia me ajudar? Segue anexo e abaixo em vermelho as informações do HTML que preciso ler e também mais abaixo o meu código:

    //////////////////////////// html ////////////////////////////////////////////////////

    </style>

    </li>

    <li class="sep"></li>

    <li class="esp60">Cota??o

    <br />

    <strong>

    1,80</strong> </li>

    <li class="sep"></li>

    <li class="txtVerde ">Varia??o

    <br />

    <strong>

    <font color='green'> +0,27%</font>

    </strong></li>

    <li class="sep"></li>

    <li>Data

    <br />

    <strong>

    10:38

    07/12/2011</strong> </li>

    /////////////////////////// Meu código //////////////////////////////////////////////

    string url = "http://www.investshop.com.br/aspx/PopUpQuotes.aspx?Papel=DOLCM";

    #region Proxy Authentication

    HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);

    System.Net.WebProxy wp = WebProxy.GetDefaultProxy();

    wp.UseDefaultCredentials = true;

    wr.Proxy = wp;

    wr.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1";

    #endregion

    // Define o TimeOut de leitura

    wr.Timeout = 30000; // 10 segundos

    // Lê a resposta

    WebResponse resp = wr.GetResponse();

    System.IO.Stream stream = resp.GetResponseStream();

    // Declara uma string para reeber o html

    string htmldapagina = "";

    // Preenche a String

    using (StreamReader reader = new StreamReader(stream))

    {

    htmldapagina = reader.ReadToEnd();

    //MessageBox.Show(htmldapagina);

    Regex regexStart = new Regex(@"<li class='esp60'>Cota??o"); // Linha de partida

    Regex regexValor = new Regex(@"<strong>(.+?)</strong>"); // Valor

    Regex regexStop = new Regex(@"</li>"); // Para de buscar o valor

    txtcotacao.Text = regexValor.ToString();

    ///////////////////////////////////////////////////////////////////////////////

    Não consegui nem ler o primeiro valor que preciso....

    Agradeço desde já...

    Inndy

    Você pode usar E.R

    Você tem que saber como vai ser o codigo html da pagina, se fosse xml seria simples e fácil, mas como é html você vai ter que fazer na marra.

    Exemplo: Vamos imaginar que o codigo html fosse esse


    ----------- Todo o codigo html antes disso --------
    <table id="produtos">
    <tr>
    <td rowspan="2">Produto 1</td>
    </tr>
    <tr>
    <td class="preco">Preço</td>
    <td class="valor">R$ 10,00</td>
    </tr>
    </table>
    ---------- Continua todo o codigo --------

    Então o que precisamos achar é um ponto estatico de inicio e de onde se encontra o valor no codigo html pra assim poder pegar os valores que você quer, no nosso caso aqui são as linhas

    <table id="produtos"> que inicia, a partir dessa linha que vamos encontrar o valor

    <td class="valor">R$ 10,00</td> Essa é a linha onde se encontra o valor

    Então fazemos uma E.R pra achar essas linhas


    Regex regexStart = new Regex(@"<table id=\"produtos\">"); // Linha de partida
    Regex regexValor = new Regex(@"<td class=\"valor\">(.+?)</td>"); // Valor
    Regex regexStop = new Regex(@"</table>"); // Para de buscar o valor
    bool buscar = false
    //
    // Faz o loop linha a linha
    //
    foreach (string linha in htmlDaPagina.Split('\n')) {
    buscar = (buscar == false && regexStart.IsMatch(linha)) ? true : false;
    buscar = (buscar && regexStop.IsMatch(linha)) ? false : buscar;

    if (regexValor.IsMatch(linha) && buscar) {
    seu_label.text = regexValor.Match(linha).Groups[1].Value;
    }
    }

    É mais ou menos isso ai, acho que com isso da pra você tirar uma base.

    Vê ai se você consegue, qualquer coisa post ai de novo!

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Inndy, tenta isso:


    string url = "http://www.investshop.com.br/aspx/PopUpQuotes.aspx?Papel=DOLCM";

    #region Proxy Authentication
    HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
    System.Net.WebProxy wp = WebProxy.GetDefaultProxy();
    wp.UseDefaultCredentials = true;
    wr.Proxy = wp;
    wr.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1";
    #endregion

    // Define o TimeOut de leitura
    wr.Timeout = 30000; // 10 segundos

    // Lê a resposta
    WebResponse resposta = wr.GetResponse();
    System.IO.Stream stream = resposta.GetResponseStream();

    // Declara uma string para reeber o html
    string htmldapagina = "";

    // Preenche a String
    using (StreamReader reader = new StreamReader(stream))
    {

    htmldapagina = reader.ReadToEnd();

    Regex regexStart = new Regex("<li class=\"esp60\">"); // Linha de partida
    Regex regexValor = new Regex("(.+?)</strong> </li>");
    Regex regexVariacao = new Regex("> (.+?)</font>");
    Regex regexHora = new Regex("(2?[0–3]|1?[0-9]|0?[0-9])\\d{2})");
    Regex regexData = new Regex(@"^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((19|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$");
    Regex regexStop = new Regex("</ul>"); // Para de buscar o valor
    bool buscar = false;
    //
    // Faz o loop linha a linha
    //
    foreach (string linha in htmldapagina.Split('\n'))
    {

    if (regexStart.IsMatch(linha))
    buscar = true;
    else if (buscar && regexStop.IsMatch(linha))
    break;

    if (regexValor.IsMatch(linha) && buscar) {
    if(String.IsNullOrEmpty(txtcotacao.Text))
    txtcotacao.Text = regexValor.Match(linha).Groups[1].Value.Trim();
    }
    else if (regexVariacao.IsMatch(linha) && buscar)
    {

    txtvariacao.Text = regexVariacao.Match(linha).Groups[1].Value.Trim();
    }

    else if (regexHora.IsMatch(linha) && buscar)
    {

    txthora.Text = regexHora.Match(linha).Value.Trim();
    }

    else if (regexData.IsMatch(linha) && buscar)
    {

    txtdata.Text = regexData.Match(linha).Groups[1].Value.Trim();
    }
    }
    }
    }

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×