Ir ao conteúdo
  • Cadastre-se

C++ Para Internet


Kaike Wesley

Posts recomendados

Olá,

Estou tentando criar um programa em C++ que atua da seguinte forma:
> Existe uma quantidade X de sites já guardados no programa, como exemplo: http://www.bbc.com;

> Ao iniciar o programa, ele sem abrir nenhum browser(não sei se é possível),  pega algum texto da página e guarda em um .txt

Basicamente é isso.

Bom, como eu acabei de finalizar a matéria de Lógica de Programação na faculdade estou meio perdido de por onde começar, durante minhas pesquisas acabei dando de cara que devo usar algumas bibliotecas, envolvendo Sockets ou a <windows.h> mas não consegui encontrar nada concreto para o que eu quero fazer ou como devo fazer.

Gostaria de um norte por assim dizer pra começar a fazer esse programa.

Link para o comentário
Compartilhar em outros sites

Boa noite, sim é possível, e também será complicado. Dessa vez não vou apresentar códigos. Digo a você, como também disse a outro usuário, o qual queria um código para obter endereço de um CEP, seu código seria semelhante ao dele. 

A unica diferença está no parser, pois a maior parte do conteúdo de uma pagina de site é escrita em HTML, e seria aonde você tem que buscar a área do texto, tal área deve ser determinada antes de se obter a pagina pelo socket. Assim você pode cortar o texto para salvar em um arquivo .txt, o único problema, é que um site como o bbc, estão sempre mudando, então você sempre precisa alterar o parser, para não ficar dando problema.

 

Exemplo de um site:

<html>

... header

<body>

<h1> Noticia ABC </h1>

... area com o conteúdo da noticia

</body>

<html>

 

Na parte verde, é o local onde sera feito a separação da noticia selecionada, do restante do site, com um parse simples, como um for, você pode obter o titulo Noticia ABC e depois você pode obter o resto da noticia, geralmente localizada em <p> ou <div>(Use um navegador para verificar o código de fonte do site)

 

Enfim, você utilizara apenas um socket para a comunicação com o site, stdio(ou iostream para c++) para funções padrões, e talvez malloc se necessário. Nada mais que isso.

Segue o tópico do outro usuário citado acima:

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

13 horas atrás, 1freakday disse:

Boa noite, sim é possível, e também será complicado. Dessa vez não vou apresentar códigos. Digo a você, como também disse a outro usuário, o qual queria um código para obter endereço de um CEP, seu código seria semelhante ao dele. 

A unica diferença está no parser, pois a maior parte do conteúdo de uma pagina de site é escrita em HTML, e seria aonde você tem que buscar a área do texto, tal área deve ser determinada antes de se obter a pagina pelo socket. Assim você pode cortar o texto para salvar em um arquivo .txt, o único problema, é que um site como o bbc, estão sempre mudando, então você sempre precisa alterar o parser, para não ficar dando problema.

 

Exemplo de um site:

<html>

... header

<body>

<h1> Noticia ABC </h1>

... area com o conteúdo da noticia

</body>

<html>

 

Na parte verde, é o local onde sera feito a separação da noticia selecionada, do restante do site, com um parse simples, como um for, você pode obter o titulo Noticia ABC e depois você pode obter o resto da noticia, geralmente localizada em <p> ou <div>(Use um navegador para verificar o código de fonte do site)

 

Enfim, você utilizara apenas um socket para a comunicação com o site, stdio(ou iostream para c++) para funções padrões, e talvez malloc se necessário. Nada mais que isso.

Segue o tópico do outro usuário citado acima:

 

 

Eu estou utilizando a IDE Falcom para programa em c++, de qualquer forma não compreendi muito bem a ideia do parser, se pudesse explicar seria grato. De qualquer forma eu estaria usando quais bibliotecas? Em si não encontro uma biblioteca chamada "socket" em si.

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Kaike Wesley disse:

Eu estou utilizando a IDE Falcom para programa em c++, de qualquer forma não compreendi muito bem a ideia do parser, se pudesse explicar seria grato. De qualquer forma eu estaria usando quais bibliotecas? Em si não encontro uma biblioteca chamada "socket" em si.

Bom dia, as bibliotecas usadas: winsock.h e iostream(ou stdio.h), no seu caso.

'Parsing' é um algorítimo para separar determinado conteúdo de um conteúdo mais amplo, a partir da análise sintática. Ele tem a finalidade de tornar possível a separação de dados de um determinado local sendo arquivo, site, etc., e assim é possível armazenar em uma estrutura de dados.

 

Segundo Exemplo: 

Temos um programa que adicionada sites ao banco de dados, a partir de um arquivo de texto, com os seguintes dados:

 

1 [BeginSite]

2 AddSite:'www.google.com'

3 AddSite:'www.etc.com'

4 AddSite:'www.blabla.com'

5 [EndSite]

 

Veja, temos um arquivo de dados com 5 linhas, mas esses dados ainda estão irregulares, pois eles não vão se auto adicionar no banco de dados.

Precisamos utilizar um parser para determinar o que adicionar no banco de dados.

Portanto, na linha 1 estamos informando que iremos começar a adicionar os dados de sites, e na linha 5 finalizamos a adição de dados, e o parser pode voltar a descansar na matrix.

Nessas 2 linhas(1 e 5), o parser vai buscar pelo caractere [ , e verificando com um vetor cheio de códigos pré-definidos, e assim é possível identificar que tipo de argumento é esse.

Exemplo em C:

const char *codigos[] = {"[BeginSite]", "[EndSite]", "AddSite"};
//...segmentos
//na linha 1
if(strcmp(linha, codigo[0]) == 0){
//BeginSite encontrado - começar a adicionar sites
}
//na linha 5
else if(strcmp(linha, codigo[1]) == 0){
//EndSite encontrado - finalizar adição de sites
}

 

 

Na linha 2,3,4 temos uma variável chamada AddSite, ela sera responsável para 'dizer' ao parser quando vamos adicionar um site no banco de dados.

Após AddSite temos dois símbolos importantes para a logica, que é ':'(dois pontos), que separa a variável AddSite, do resto da linha. 

E temos ' (apostrofo), é usado para destacar o valor da variável AddSite, no caso destaca o dado em si, o site a ser adicionado, o único que precisamos.

 

Resumindo, nosso parser tem que passar nas seguintes etapas:

1 - Identificar onde começa as variáveis AddSite ( começa a partir de BeginSite)

2 - Procurar uma variável AddSite

3 - Procurar o site da variável AddSite, na linha selecionada (www.google.com)

 

Depois, os dados recebidos são enviados para uma struct, ou em qualquer banco da dados.

 

P.S: Lembrando que BeginSite, AddSite, etc, são informações fictícias, elas não são especiais, são apenas texto em um arquivo. Podendo ser substituídas por qualquer palavra.

 

Eu não vou ficar enchendo de texto, por que a prática vale 1000 linhas, enfim, o parser se resume a apenas obter algum dado de um texto.

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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!