Ir ao conteúdo
  • Cadastre-se
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





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

×