Ir ao conteúdo
  • Cadastre-se

Como acessar os codigos fonte dos sites em C#?


Range

Posts recomendados

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.

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

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?

Link para o comentário
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;
}
}

Link para o comentário
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

Link para o comentário
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!

Link para o comentário
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!

Link para o comentário
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!

Link para o comentário
Compartilhar em outros sites

  • 6 meses depois...
Visitante: Inndy
 

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!

Link para o comentário
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();
}
}
}
}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!