





























Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Os melhores documentos à venda: Trabalhos de alunos formados
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
como fazer bots com PHP, referencia da PackPub, traduzido com o uso do Google Tradutor.
Tipologia: Manuais, Projetos, Pesquisas
Oferta por tempo limitado
Compartilhado em 19/09/2019
5
(3)1 documento
1 / 37
Esta página não é visível na pré-visualização
Não perca as partes importantes!
Em oferta
Por Shay Michael Anderson Setembro de 2013 Melhore suas habilidades de arranque e crie seus próprios bots da web com o PHP
Passo 1 - configuração do ambiente de desenvolvimento Enquanto você já deve estar familiarizado com as funções básicas de PHP e lógica, vou descrever o ambiente de desenvolvimento básico, que você deve usar ao ler e usar o código neste livro. Conforme mencionado anteriormente, estarei usando padrões de codificação PHP 5.4 em todos os exemplos de código neste livro. Portanto, você deve usar um servidor web equipado com um básico PHP 5.4. Além disso, durante o curso deste livro, vou usar linhas de comando para executar aplicativos PHP usando um servidor web com um sistema operacional Linux (Ubuntu 12 para ser exato). No meu servidor Ubuntu, eu instalaria o PHP com o seguinte suporte de linha de comando usando: cópia de
Você pode verificar a versão do PHP instalada em seu servidor web de duas maneiras. Primeiro, se você tem um PHP CLI ( Command Line Interface ) SAPI ( Servidor API ) instalado no seu servidor web, você pode usar uma linha de comando para obter a versão do PHP. Aqui está um exemplo de linha de comando em um servidor web Linux: cópia de
Isso imprimirá algo como: cópia de PHP 5.4.6-1ubuntu1.1 (cli) (built: Nov 15 2012 01:18:34)Copyright (c) 1997-2012 The PHP GroupZend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies No exemplo anterior, meu servidor web está preparado com o PHP 5.4.6 instalado. A segunda maneira de verificar a versão do PHP em seu servidor web é configurar um script PHP que exibirá as informações do servidor web PHP em uma página da Web. Para fazer isso, execute as seguintes etapas:
cópia de
2. Salve o /var/www/info.php arquivo e abra a página da Web em um navegador da Web. Por exemplo, o URL para a página da Web podeparecer algo como: cópia de http://localhost/info.php
Se você não está familiarizado com o relatório de erros do PHP ( www.php.net/manual/en/function.error-reporting.php ) e exibindo erros de PHP ( www.php.net/manual/en/errorfunc.configuration.php#ini .display-errors ), eu sugeriria ler sobre esses dois tópicos. Qualquer programador de PHP proficiente deve estar acostumado a relatórios de erros do PHP e exibir erros de PHP. Eu recomendo que você desenvolva os bots deste livro, e todos os outros códigos deste livro, em um ambiente de desenvolvimento e não um ambiente de produção. No seu ambiente de desenvolvimento, eu sugeriria que o PHP exibisse erros, avisos e notificações. Sem estes ativados, você pode se perder com alguns dos exemplos neste livro. Passo 2 - aplicativos de linha de comando Embora você possa desenvolver bots e testá-los usando aplicativos PHP típicos baseados no navegador, às vezes é útil desenvolver e testar bots usando aplicativos de linha de comando PHP. Eu prefiro usar aplicativos de linha de comando para desenvolver bots e testá-los, porque os aplicativos de linha de comando nos permitem um melhor uso de memória, mensagens / alertas em tempo real e a capacidade de disparar processos escravos (um tópico avançado, fora do escopo deste livro). Neste livro, estarei usando aplicativos PHP típicos baseados no navegador, porque será mais fácil para a maioria dos programadores. No entanto, abrangeria o uso de aplicativos de linha de comando PHP aqui, caso você prefira desenvolver e testar seus robôs usando aplicativos de linha de comando. Criar um aplicativo de linha de comando PHP é muito simples. Então, se você nunca criou um antes, não se preocupe em ter que aprender muita lógica nova. Vamos criar um aplicativo de linha de comando PHP simples agora. Para criar um aplicativo de linha de comando PHP e executá-lo em seu servidor web, você precisará de uma CLI PHP. Então, instale isso antes de tentar a execução de um aplicativo de linha de comando PHP. No meu servidor web (Linux, Ubuntu), posso instalar uma CLI PHP usando a seguinte linha de comando: cópia de # sudo apt-get install php5-cli Salve um arquivo chamado 01_command_line_app.phpem seu servidor web, em um diretório que você usará para todo o código neste livro () e adicione o seguinte código ao project_directory/01_command_line_app.phparquivo: cópia de **#!/usr/bin/env php
else // PHP cURL library not installed { echo 'Please install PHP cURL library'; } No código anterior, usamos a biblioteca cURL para criar uma solicitação HTTP GET simples (o tipo de solicitação padrão para a biblioteca cURL é um GET). Como você pode ver, esta é uma maneira bastante simples de executar um pedido HTTP GET em PHP. No entanto, como eu disse anteriormente, neste livro, vou usar a file_get_contents()função PHP para executar solicitações HTTP.Agora que discutimos o nosso ambiente de desenvolvimento, padrões de codificação e como as solicitações e respostas HTTP básicas funcionam, vamos criar uma classe de solicitação HTTP que realmente faça algo útil. Novamente, se você não está familiarizado com o desenvolvimento de classes PHP e usando objetos PHP, você procurará investigar esses tópicos antes de ler esta seção. Embora este livro seja um livro inicial para o desenvolvimento de bots do PHP, eu quero ensinar-lhe a maneira correta de desenvolver bots, o que significa usar o poder e a reutilização de classes e objetos, também conhecido como OOP ( Object-Oriented Programming ). Quando usamos classes bem desenhadas, podemos usá-las como objetos em nosso projeto atual, que estamos desenvolvendo para essas classes. Além disso, outros projetos futuros que exigem o mesmo tipo de funcionalidade e lógica podem usar essas classes como objetos. Se você deseja ser um programador produtivo e bem sucedido, você precisará aceitar esse ponto de vista, se você ainda não o fez. Nesta seção, vou ajudá-lo a desenvolver uma classe de solicitação HTTP básica que poderemos usar em todos os nossos bots que precisam desse tipo de ferramenta. Mais tarde, criaremos uma classe de resposta HTTP que permitirá facilmente a nossa classe de solicitação retornar objetos em vez de matrizes de informações, o que será muito útil. Antes de começar a desenvolver uma aula, você deve sempre passar algum tempo projetando-a principalmente. Desta forma, você não terá que pensar tanto enquanto estiver desenvolvendo a classe. Então, vamos passar um pouco de tempo pensando no design da nossa classe de solicitação HTTP. Aqui estão alguns requisitos que precisaremos na nossa classe de solicitação HTTP:
cópia de
cópia de /**] ]); $http_response_header = NULL; // allow updating $res_body = file_get_contents($url, false, $context); return self::__parseResponse($res_body, $http_response_header); } O método anterior é muito direto. Primeiro, aceitamos os valores de URL e tempo limite. Então, nós configuramos um personalizado stream_context, que é usado quando buscamos a solicitação HEAD HTTP. Então, usamos a função PHP embutida file_get_contents()para enviar a solicitação HTTP HEAD. Finalmente, devolvemos o \HTTP\Responseobjeto, que é criado em nosso __parseResponse()método. Passo 2 - aula de resposta HTTP Agora, precisamos criar uma Responseclasse HTTP que possa ser usada para transformar facilmente nossos dados de resposta HTTP em um objeto utilizável. Desta forma, uma vez que recebemos uma resposta HTTP em nossa Requestclasse, simplesmente passamos os dados de resposta para o nosso Responseobjeto e não precisamos pensar em todos os detalhes e métodos necessários para usar os dados de resposta HTTP em nossos aplicativos. Crie um arquivo chamado Response.phpno diretório do pacote HTTP e adicione o código disponível project_directory/lib/HTTP/Response.phpno arquivo de download do código fonte do livro no site do Packt Publishing. Como você pode ver, é preciso algumas linhas de código para criar nossa \HTTP\Responseclasse, no entanto, a classe é muito simples. Primeiro, definimos códigos de status de resposta HTTP e mensagens de código de status. Os códigos de status são usados pelos servidores da Web para indicar o status da resposta. Por exemplo, se uma solicitação HTTP GET for enviada para um servidor web e o servidor web retornar um código de status de resposta HTTP 200 , sabemos que o pedido foi tratado com sucesso. Você pode ver, observando os Responsecódigos de status da classe e as mensagens do código de status, que há uma variedade de códigos de status e mensagens que o servidor da Web pode responder. Em seguida, no __construct()método da Responseclasse, aceitamos o código de status, type(tipo de conteúdo) body, e header. Estes são os únicos parâmetros que precisamos para executar operações como inicialização ou instanciação com o Responseobjeto para que ele funcione adequadamente para nós. Por que usar objetos? Agora que temos nossos \HTTP\Requeste \HTTP\Responseobjetos concluídos, vejamos por que estamos desenvolvendo classes e usando objetos ( Programação Orientada a Objetos ou OOP ) em vez de usar linhas processuais de código ( Programação Orientada a Procedimentos ou POP ). Para ilustrar este ponto, eu vou fazer você executar sua primeira solicitação HEAD HTTP com nossas HTTPclasses. Crie um arquivo chamado 02_http.phpno diretório do projeto onde ele terá acesso ao /project_directory/lib/HTTPdiretório. Adicione o seguinte código ao 02_http.phparquivo localizado em /project_directory/: cópia de
'. print_r($response, true). '';Passo 3 - usando arquivos de bootstrap Agora que temos o nosso HTTPconjunto de pacotes pelo espaço para nome HTTP, preenchido, podemos usá-lo facilmente para outros projetos e aplicativos. Às vezes, especialmente quando se utilizam grandes pacotes ou arquivos de bibliotecas, é difícil lembrar ou descobrir o que exatamente precisa ocorrer para que possamos obter um pacote pronto para uso em nossos próprios aplicativos de software. Um pacote pode exigir configurações de configuração extensivas, carregamento automático de classe, carregamento comum de arquivos, pacotes externos ou arquivos de bibliotecas e muito mais. Uma solução simples para esse problema é usar um arquivo de inicialização. Um arquivo bootstrap pode ser usado para inicializar tudo o que o pacote precisa para carregar e inicializar corretamente. Nosso HTTPpacote não exige muito carregamento de arquivos ou qualquer configuração, mas, por uma questão de exemplo, vamos criar um arquivo de inicialização simples para o nosso HTTPpacote:
cópia de
3. Agora, em nosso 02_http.php arquivo, modifique o código para usar nosso bootstrap.php arquivo em vez de carregar os arquivos daclasse manualmente: cópia de
success) { echo 'Successful requestecho 'Error: request failed, status code: '
. $response->getStatusCode(). '
'; // prints status code } // print out HTTP response (\HTTP\Response object) echo '
'. print_r($response, true). ''; Embora este seja um exemplo extremamente simples de como um arquivo de bootstrap pode ser usado para tornar o uso de um pacote mais fácil, ainda é benéfico para qualquer programador que use nosso código. Além disso, em seções posteriores deste livro, estaremos usando arquivos de bootstrap quando desenvolvamos nosso pacote de bot. Passo 4 - criando nosso primeiro bot, WebBot Neste ponto do livro, você deve estar ciente e confortável com solicitações e respostas HTTP, como desenvolver HTTPpacotes (cobertos anteriormente no livro) e por que usamos arquivos de bootstrap. Com o conhecimento que você ganhou, agora estamos prontos para desenvolver nosso primeiro bot, que será um botão simples que reúne dados (documentos) com base em uma lista de URLs e conjuntos de dados (valores de campo e campo) que precisaremos. Primeiro, vamos começar criando nosso diretório de pacotes bot. Então, crie um diretório chamado WebBotpara que os arquivos em nosso project_directory/libdiretório se parecem com o seguinte: cópia de '-- project_directory|-- lib | |-- HTTP (our existing HTTP package) | | '-- (HTTP package files here) | '-- WebBot | |-- bootstrap.php| |-- Document.php | '-- WebBot.php |-- (our other files)'-- 03_webbot.php Como você pode ver, temos um diretório e uma estrutura de arquivos muito limpos e simples que qualquer programador pode facilmente seguir e entender. Passo 5 - a classe WebBot Em seguida, abra o arquivo de WebBot.phparquivo e adicione o código do arquivo de download do código fonte do livro project_directory/lib/WebBot/WebBot.phpno site do Packt Publishing. Em nossa WebBotclasse, utilizamos primeiro o __construct()método para passar arraydos URLs (ou documentos) que queremos buscar, e os arraycampos de documento são usados para definir conjuntos de dados e padrões de expressão regulares. Os padrões de expressão regulares são usados para preencher os valores do conjunto de dados (ou valores do campo do documento). Se você não está familiarizado com expressões regulares, agora seria um bom momento para estudá-los. Então, no __construct()método, verificamos se existem URLs para buscar ou não. Se lá, definimos uma mensagem de erro informando esse problema. Em seguida, usamos o __formatUrl()método para formatar os URLs que buscamos dados. Este método também definirá o protocolo correto: HTTP ou HTTPS ( Hypertext Transfer Protocol Secure ). Se o protocolo já estiver definido para o URL, por exemplo http://www.[dom].com, ignoramos a configuração do protocolo. Além disso, se a configuração de configuração da classe conf_force_httpsestiver configurada true, forçamos o protocolo HTTPS novamente, a menos que o protocolo já esteja definido para o URL. Em seguida, utilizamos o execute()método para buscar dados para cada URL, definir e adicionar os Documentobjetos aos arraydocumentos e rastrear estatísticas de documentos. Este método também implementa a lógica fetchdelay que atrasará cada busca por x número de segundos, se configurada nas configurações de configuração da classe conf_delay_between_fetches. Também incluímos a lógica que só permite extrações de URL distintas, o que significa que, se já obtivemos dados para uma URL, não a buscaremos novamente; Isso elimina as buscas de dados de URL duplicados. O Documentobjeto é usado como um contêiner para os dados da URL, e podemos usar o Documentobjeto para usar os dados da URL, os campos de dados e os respectivos valores de campo de dados. No execute()método, você pode ver que realizamos uma \HTTP\Request::get()solicitação usando o URL e nosso valor de tempo limite padrão - que é definido com as configurações de configuração da classe conf_default_timeout. Em seguida, passamos o \HTTP\Responseobjeto que é retornado pelo \HTTP\Request::get()método para o Documentobjeto. Em seguida, o Documentobjeto usa os dados do \HTTP\Responseobjeto para criar os dados do documento. Finalmente, incluímos o getDocuments()método, que simplesmente retorna todos os Documentobjetos em um arrayque podemos usar para nossos próprios propósitos conforme desejamos.
cópia de
[title] => Array ( [0] => Google ) [h2] => Array ( [0] => Account Options ) ) Document: chrome URL: http://www.google.com/intl/en/chrome/browser/ Array ( [title] => Array ( [0] => Chrome Browser ) [h2] => Array ( [0] => Customize your browser [1] => Get Chrome for Mobile [2] => Up to 15 GB free storage [3] => Get a fast, free web browser ) ) Document: products URL: http://www.google.com/intl/en/about/products/ Array ( [title] => Array
( [0] => Google - Products ) [h2] => Array ( [0] => Web[1] => Mobile [2] => Media [3] => Geo [4] => Specialized Search [5] => Home & Office [6] => Social [7] => Innovation ) ) Podemos ver os resultados que nosso bot está operando como esperado. Primeiro, podemos ver que obtivemos um total de três documentos, três documentos foram obtidos com sucesso, e o bot não conseguiu obter zero documentos. Podemos então ver o título, URL e campos (e valores de campo) para cada documento. O bot analisou com sucesso cada campo e valor do campo. Este tipo de bot seria útil para colher vários tipos de documentos e campos de documentos de sites ou serviços web desejados.