Question

Boa noite pessoal, estou com 1 problema super sério.

 

Lentidão na consulta!

demora cerca de 20 minutos pra exibir 200 produtos com todos os dados... é isso mesmo?

ou tem algo errado com meu código?

 

Se eu deixar apenas o foreach e puxar o titulo, a consulta é super rápido.. mesmo com 200 produtos.

dai se eu acrescento outra $meli pra pegar mais dados, o tempo aumenta, e como tive q usar várias pra poder obter todos os dados do produto, ficou super lerdo....

 

A pergunta é, existe outra forma de mostrar todos os dados dos produtos mais rapidamente? ou uma forma de optimizar meu código?

 

 

LISTANDO 200 PRODUTOS com vários dados [consulta demora 20 minutos]
$search = $meli->get('/sites/MLB/search?status=active&seller_id=33457480&limit=200');
foreach ($search['json']['results'] as &$searchItem):

 //Grava o ID do Anuncio para pegar a descricao e retira os - da string MLB
 $idanunci = $searchItem[id];
 $idanuncc = str_replace('-', '', $idanunci);

//Pega a Descrição do produto
 $descri = $meli->get("/items/$idanunci/descriptions");
 $descricaook = $descri['json'][0]['text'];

//Pega ID da Categoria / status e garantia do produto
 $dadoss = $meli->get("/items?ids=$idanunci");
 $dadoli = $dadoss['json'][0]['category_id'];

//Pega Nome da Categoria e Subcategoria pelo ID
 $catddd = $meli->get("/categories/$dadoli ");
 $catename = $catddd['json']['path_from_root'][0]['name']; //categ


 echo "<li> Titulo: ". $searchItem[title]; "</li>";  
 echo "<li> Categoria: ". $catename;"</li>";
 echo "<li> Descrição: <input type='text' value='$descricaook'>"; "</li>";

endforeach;

 

 

Se eu deixar o código dessa form, apenas com uma consulta tudo ocorre normalmente.. mesmo com 200 produtos.. 
LISTANDO 200 PRODUTOS com poucos dados [consulta super rápida 20 minutos]

$search = $meli->get('/sites/MLB/search?status=active&seller_id=33457480&limit=200');
foreach ($search['json']['results'] as &$searchItem):

echo "<li> Titulo: ". $searchItem[title]; "</li>";

endforeach;

Agora se eu acrescentar essas outras consultas dentro do foreach, a consulta demora... mas demora muito mesmo....

cerca de 20 minutos pra exibir 200 produtos.

$descri = $meli->get("/items/$idanunci/descriptions");
$dadoss = $meli->get("/items?ids=$idanunci");
$catddd = $meli->get("/categories/$dadoli ");

alguém ai sabe como melhorar meu código e fazer com que eu continue pegando todos dados dos produtos?

Share this post


Link to post
Share on other sites

18 answers to this question

Recommended Posts

  • 0

Fala Ronaldo!

 

O "problema da lentidão", são os GET adicionais que você faz. Vi que você está fazendo alguns GETs além do necessário, fiz a mesma funcionalidade que você, utilizando GET apenas para a descrição e para a categoria

$search = $meli->get('/sites/MLB/search?status=active&seller_id=33457480&limit=200');

foreach ($search['body']->results as $searchItem):

	//Pega a Descrição do produto
	$descri = $meli->get("/items/" . $searchItem->id . "/descriptions");

	//Pega Nome da Categoria e Subcategoria pelo ID
	$catddd = $meli->get("/categories/" . $searchItem->category_id);

	echo "<li>Titulo: " . $searchItem->title . "</li>";
	echo "<li>Categoria: " . $catddd['body']->path_from_root[0]->name . "</li>";
	echo "<li>Descrição: " . $descri['body'][0]->text . "</li>";

endforeach;

Share this post


Link to post
Share on other sites
  • 0

então eh isso! eu sabia q tinha algo de errado com a forma que eu estava fazendo. haha

 

Porem aconteceu um pequeno problema, a pagina fica em branco... não retorna nada...

 

estou tentando concertar aqui... mas ta dificil. heheh

 

acho q é algo nessa parte, porque nao retorna nada.

mas aparentemente ta certo!

foreach ($search['body']->results as $searchItem):

Porque dei um print_r($search) e retorna isso:

Array ( [statusCode] => 200 [body] => {"site_id":"MLB","seller":{"id":33457480,"seller_reputation":{"power_seller_status":null},"real_estate_agency":false,"car_dealer":false},"paging":{"total":1115,"offset":0,"limit":1},"results":[{"id":"MLB562360281","site_id":"MLB","title":"Bieleta Estabilizadora Diant. Captiva - Original","subtitle":null,"seller":{"id":33457480,"power_seller_status":null,"car_dealer":false,"real_estate_agency":false},"price":170,"currency_id":"BRL","available_quantity":1,"sold_quantity":1,"buying_mode":"buy_it_now","listing_type_ ...

...

 

Sera que é um problema com meu server local? alguma função nao habilitada? versão antiga da meli.php?

 

 

E parabéns, esse fórum vai manter tudo mais organizado. 

Obrigado Wesley.

 

Me diz uma coisa, quando esse código tiver funcionando, em quantos segundos ele me traz os 200 resultados? tem ideia?

abrass

Share this post


Link to post
Share on other sites
  • 0

Eu fiz alguns testes aqui e para mim os resultados aparecem, quanto a demora nos resultados vai depender muito da conexão do seu servidor.

No seu caso, eu recomendaria dar uma olhada neste repo: https://github.com/petewarden/ParallelCurl É uma classe capaz de fazer vários cURL requests ao mesmo tempo.

 

Sobre minha versão do PHP

php --version
PHP 5.3.10-1ubuntu3.11 with Suhosin-Patch (cli) (built: Apr 4 2014 01:27:23)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies

Abraços,

Wesley!

Share this post


Link to post
Share on other sites
  • 0

entendi, ja q esta funcionando o problema pode ser aqui entao!

 

estou rodando em localhost... no windows. usando o WAMP SERVER.

 

sera q é alguma funcao que esta desabilitada no meu php?

ou é uma versao antiga do meli.php e base_meli.php? estou usando esses arquivos de 3 meses atraz.

 

verifique se ta certo fazendo favor essas funçoes do php.

wamp_zpsc8fb9b41.jpg

 

Abraços

Share this post


Link to post
Share on other sites
  • 0

Aee Wesley, deu certo! Muito obrigado.. era isso entao! meli.php deprecated. hehehe

 

Agora o tempo melhorou muito... consegui puxar 100,00 registros completos em 3 minutos e meio.

é assim mesmo ou tem como melhorar esse tempo?

 

Se não tiver como ta otimo, mas se tiver como melhorar me diga como q tentarei.

 

Obrigado!

Share this post


Link to post
Share on other sites
  • 0

Um pequeno problema. :(

tudo rodando perfeitamente em local host, quando coloco no servidor surge esse erro:

Testei em 2 tipos de servidores... sabem o motivo?

 

 

Warning: Missing argument 2 for Meli::__construct(), called in /home/autopeca/public_html/product_images/f/sistema_copiar_produtos.php on line 25 and defined in/home/autopeca/public_html/product_images/f/meli.php on line 43

 

 

Lembrando que localhost funciona perfeitamente! 

 

 

 

 

Essa é a linha  43 do Meli.php

public function __construct($client_id, $client_secret, $access_token = null, $refresh_token = null) {
Edited by ronaldoguedess

Share this post


Link to post
Share on other sites
  • 0

eu não mechi na classe meli, ela ta como baixei.

é estranho pq tudo funciona normal localhost, mas quando jogo no servidor nao funciona!

 

chamo ela assim:

<?
 include("conectar.php");
 session_start();
 require 'meli.php';


$meli = new Meli(array('appId'  	=> 'xxxxxx',	'secret' 	=> 'xxxxx',));


?>

ta certo?

Share this post


Link to post
Share on other sites
  • 0

Opa, essa parte deu certo.. porem continuou um erro no foreach que esqueci de postar aqui. 
 
Warning: Invalid argument supplied for foreach() in/home/autopeca/public_html/product_images/f/sistema_copiar_produtos.php on line 74

$seller = "33457480"; $limite = "5"; $offset = "10";
$search = $meli->get('/sites/MLB/search?status=active&seller_id='.$seller.'&limit='.$limite.'&offset='.$offset.'');
foreach ($search['body']->results as $searchItem):

ta tudo certo não esta?

Edited by ronaldoguedess

Share this post


Link to post
Share on other sites
  • 0

 

Fala Ronaldo!

 

O "problema da lentidão", são os GET adicionais que você faz. Vi que você está fazendo alguns GETs além do necessário, fiz a mesma funcionalidade que você, utilizando GET apenas para a descrição e para a categoria

$search = $meli->get('/sites/MLB/search?status=active&seller_id=33457480&limit=200');

foreach ($search['body']->results as $searchItem):

	//Pega a Descrição do produto
	$descri = $meli->get("/items/" . $searchItem->id . "/descriptions");

	//Pega Nome da Categoria e Subcategoria pelo ID
	$catddd = $meli->get("/categories/" . $searchItem->category_id);

	echo "<li>Titulo: " . $searchItem->title . "</li>";
	echo "<li>Categoria: " . $catddd['body']->path_from_root[0]->name . "</li>";
	echo "<li>Descrição: " . $descri['body'][0]->text . "</li>";

endforeach;

Bom pelo que entendi ele quer todas informações e não só essas que você soliciou

Share this post


Link to post
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