Jump to content

Recolher dados de outro site


rfrancisco
 Share

Recommended Posts

Olá!

Bom, não sou nenhum expert em PHP mas estou a tentar aprender, se alguém me puder dar uma ajuda com esta questão agradeço  👍

O que quero fazer é definir algo especifico, um texto, uma div, etc num site e mostrar noutro site, como se fosse uma iframe mas em que defino exactamente o que quero "transportar"em vez da página toda.

Já procurei mas talvez não esteja a ir pelos termos correctos, se me puderem dar umas luzes agradeço, de forma a aprender também...

Obrigado,

Roberto Francisco

"bater código"

Link to comment
Share on other sites

O que tu pedes é impossível. O que podes fazer é limitar a quantidade que lês (por exemplo, ler só 50 Kb em vez de 150kb (a página toda)).

Senão não tens maneira a não ser que controles o site que queres ler.

O que se costuma fazer no caso de não se controlar a página é filtrar os dados usando a biblioteca do PHP HTMLDOM e depois regex (regular expressions).

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

O problema é retirar de lá que o queres, e para isso é melhor usar, como disse o brunoais, o regex.

Se o que lhe interessa é só parte do código HTML (como ele disse. Um div) o melhor é mesmo usar o HTMLDOM do php

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Vamos a um exemplo concreto para ser mais fácil.

Imaginemos que eu quero criar uma lista de produtos automaticamente da loja da amazon...

Aqui http://migre.me/3xdJZ como é que eu posso recolher o nome do produto e a descrição e colocar numa lista noutro website?

Aqui há uns tempos li algo sobre seleccionar linhas e "enviá-las" para mostrar noutro site...não sei se era bem isso! 👍

"bater código"

Link to comment
Share on other sites

<?php
function get_web_page( $url )
{
    $options = array(
        CURLOPT_RETURNTRANSFER => true,     // return web page
        CURLOPT_HEADER         => false,    // don't return headers
        CURLOPT_FOLLOWLOCATION => true,     // follow redirects
        CURLOPT_ENCODING       => "",       // handle all encodings
        CURLOPT_USERAGENT      => "spider", // who am i
        CURLOPT_AUTOREFERER    => true,     // set referer on redirect
        CURLOPT_CONNECTTIMEOUT => 120,      // timeout on connect
        CURLOPT_TIMEOUT        => 120,      // timeout on response
        CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects
    );

    $ch      = curl_init( $url );
    curl_setopt_array( $ch, $options );
    $content = curl_exec( $ch );
    $err     = curl_errno( $ch );
    $errmsg  = curl_error( $ch );
    $header  = curl_getinfo( $ch );
    curl_close( $ch );

    $header['errno']   = $err;
    $header['errmsg']  = $errmsg;
    $header['content'] = $content;
    return $header;
}

$content = get_web_page("http://www.amazon.com/Canon-XA10-Professional-Camcorder-8-Blade/dp/B004HW7DY8/ref=sr_1_1?s=photo&ie=UTF8&qid=1294606967&sr=1-1");

if (preg_match('/<span id="btAsinTitle" (?:.*?)>(.*?)<\/span>/', $content['content'], $matches)) {
  $titulo = $matches[0];
}

if (preg_match('/<h2>Product Description<\/h2>(?:.*?)?<div class="content">(.*?)<hr/s', $content['content'], $matches)) {
  $descricao = $matches[1];
}

echo $titulo;
echo "<br>";
echo $descricao;
?>

Melhores cumprimentos,João Lopes***Esta mensagem foi escrita ao abrigo do novo Acordo Ortográfico***

Link to comment
Share on other sites

<?php
//...
$content = get_web_page("http://www.amazon.com/Canon-XA10-Professional-Camcorder-8-Blade/dp/B004HW7DY8/ref=sr_1_1?s=photo&ie=UTF8&qid=1294606967&sr=1-1");

if (preg_match('/<span id="btAsinTitle" (?:.*?)>(.*?)<\/span>/', $content['content'], $matches)) {
  $titulo = $matches[0];
}

if (preg_match('/<h2>Product Description<\/h2>(?:.*?)?<div class="content">(.*?)<hr/s', $content['content'], $matches)) {
  $descricao = $matches[1];
}

echo $titulo;
echo "<br>";
echo $descricao;
?>

I don't like your regex. It searches a part of the string twice without need.

Also: the delimiters '/' aren't the best to be used for this kind of regex text.

Não gosto do teu regex, ele procura 2x na string original sem necessidade.

Os delimitadores '/' não são o melhor para ser usado neste tipo de texto regex.

<?php
//...
$content = get_web_page("http://www.amazon.com/Canon-XA10-Professional-Camcorder-8-Blade/dp/B004HW7DY8/ref=sr_1_1?s=photo&ie=UTF8&qid=1294606967&sr=1-1");

//Get all you want and the rest of the page (the .* is way... way... fast!)
if (preg_match('%<span id="btAsinTitle" (?:.*?)>(.*?)</span>(.*)%', $content['content'], $matches)) {
  //Get the catched group
  $titulo = $matches[1];
}

//Use what is left of the file to find what you want
if (preg_match('%<h2>Product Description</h2>(?:.*?)?<div class="content">(.*?)<hr%s', $matches[2], $matches)) {
  $descricao = $matches[1];
}

echo $titulo;
echo "<br>";
echo $descricao;
?>

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

You may use '~' instead of '/', or '%', it worked with '/'.

Yeah, your example is fine, but he asked for an example, i gave him a working example.

Anyway, why are we speaking english?

Bem... Esqueci-me de mudar de dicionário. Parece que aconteceu-te o mm.

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Por causa do inglês no código?

Ou da resposta?

Não sei bem se estás a insinuar que o código não é meu ou se estás a falar verdade.

O código não é meu, procurei por "Get source code from curl" e encontrei essa funçãozita já feita...

O regex não precisei de ir procurar.

Anyway, pra proxima retiro os comentários e mudo o nome da função...

Melhores cumprimentos,João Lopes***Esta mensagem foi escrita ao abrigo do novo Acordo Ortográfico***

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.