• 0
Sign in to follow this  
ronaldoguedess

Aprendendo a Manipular Notificações do ML [Duvidas]

Question

Ola tudo bem?

Ainda estou aprendendo a usar essa API, já fiz bastante coisa... mas agora estou começando a aprender usar as notificações e estou tento problemas..

 

 

Estou usando esse código para receber as notificações:

<?
header("HTTP/1.1 200 OK");

function logfile($str){
    $file='log.txt';
    $myfile = fopen(dirname(__FILE__)."/log.txt", "w") or die("Unable to open file!");
    fwrite($myfile, $str);
    fclose($myfile);
}
$notifications=file_get_contents("php://input");
logfile($notifications);

?>

Dai eu executo o arquivo, e recebo apenas uma linha! cheguei a fazer varias perguntas, edições de preço em produtos... mas nao recebo todas...

 

{"resource":"/questions/4013133275","user_id":"xxxxxxxxxxxxxx","topic":"questions","application_id":xxxxxxxx,"attempts":1,"sent":"2016-04-05T14:16:17.548Z","received":"2016-04-05T14:16:17.541Z"}

 

 

 

 

DUVIDAS:

 

- Como faço pra receber uma lista das notificações? pq no script acima recebo apenas 1.

 

- De quanto em quanto tempo devo botar o arquivo para ser executado com o CRON ?

 

- O ideal é salvar no DB o ID para nao salvar a mesma duas vezes??

 

- Como posso visualizar a lista no arquivo de notificações? pois preciso ler os arquivos para poder salvar no DB.

 

 

 

 

 

Share this post


Link to post
Share on other sites

18 answers to this question

Recommended Posts

  • 0

vamos as suas dúvidas:

 

1. falta entendimento e conceito de sua parte, o próprio nome diz: NOTIFICAÇÃO, ou seja, você está sendo notificado e não consultando

 

2. novamente o mesmo, não é você quem consulta

 

3. isto irá depender da sua necessidade, tamanho do seu sistema, disponibilidade do seu server

 

4. não existe uma lista

Share this post


Link to post
Share on other sites
  • 0

Obrigado pelas dicas! realmente eu estava meio confuso...

 

Acabei de verificar, realmente.. o sistema trabalha de forma autônoma... 

 

fiz uma alteração no script, e coloquei pra sempre criar um nome diferente... 

fiz perguntas e alterações... a cada alteração o script cria um novo arquivo, agora entendi o funcionamento do sistema.

 

 

Agora a duvida que me restou:

Como pegar a notificação e gravar ela no banco de dados MSQL usando PHP?

 

Não consigo exibir ela no meu arquivo PHP para tratar e Gravar no DB... 

Pode me indicar o caminho ou mostrar algum exemplo de como salvar as notificações no DB usando PHP e MYSQL?

Edited by ronaldoguedess

Share this post


Link to post
Share on other sites
  • 0

Bom @ronaldoguedes, se você não sabe fazer uma conexão MySQL no PHP (que é algo extremamente simples), acho que em vez de desenvolver uma aplicação para o ML você deveria procurar um curso de programação PHP básico

Share this post


Link to post
Share on other sites
  • 0

Eu sei PHP/MSQL, o que não estou sabendo é interceptar os dados da notificação para poder grava-las... 

 

Não consigo pegar os dados pra gravar...

Não misture as coisas, se não pode ajudar, deixa aberto minha pergunta em vez de ficar dizendo pra eu fazer curso...

A

credito que alguém poderá me ajudar...

 

Estou aqui pra aprender, não estou pedindo código pronto.. apenas pedindo uma ajuda.

Também não estou aqui pra discutir, mas não gostei da forma que me respondeu.

Share this post


Link to post
Share on other sites
  • 0

Para quem precisar:

 

Uma simples forma para gravar notificações no DB.

<?
header("HTTP/1.1 200 OK");
include "conectar.php";

$notifications=file_get_contents("php://input");
$xx = mysql_query("INSERT INTO notifications_ml (fieldone) VALUES ('$notifications')");

?>

Fiz esse esquema apenas para teste, mas ja da pra ser usado...

Agora vou usar o explode e gravar cada coisa no seu campo...  qualquer coisa posto aqui.

 

 

 

Duvida a estrutura da aplicação:

 

Depois devo criar um arquivo php para ler o banco de dados onde ficaram minhas notificações, e usar o cron para sincronizar os dados com meu sistema certo?

pois estou fazendo um sistema para mostrar perguntas, pedidos, e até mesmo dar baixa no estoque dos produtos da minha loja virtual assim que o produto for vendido la.

Share this post


Link to post
Share on other sites
  • 0

Eu sei PHP/MSQL, o que não estou sabendo é interceptar os dados da notificação para poder grava-las... 

 

Não consigo pegar os dados pra gravar...

Não misture as coisas, se não pode ajudar, deixa aberto minha pergunta em vez de ficar dizendo pra eu fazer curso...

A

credito que alguém poderá me ajudar...

 

Estou aqui pra aprender, não estou pedindo código pronto.. apenas pedindo uma ajuda.

Também não estou aqui pra discutir, mas não gostei da forma que me respondeu.

 

 

o que eu disse não é nada além da realidade, se não sabe através do código informado de notifications (que é um código que por sinal já deram mastigado) inserir uma simples rotina de inserção em banco de dados é sinal que flata sim base de conhecimento... não duvido que programe PHP, mas entre programar com base em códigos prontos e realmente conhecer a linguagem , são cosias bem diferentes... até porque para a linguagem PHP é bem simples e fácil de ser usada (principalmente por ser uma linguagem interpretada)

 

o que me "assusta" é ver pessoas sem a base necessária desenvolvendo e vendendo sistemas para empresas... sim, você precisa de mais base e isso fica claro pela dúvida... goste ou não, espero que leve de forma construtiva para seu crescimento como programador

Share this post


Link to post
Share on other sites
  • 0

Para quem precisar:

 

Uma simples forma para gravar notificações no DB.

<?
header("HTTP/1.1 200 OK");
include "conectar.php";

$notifications=file_get_contents("php://input");
$xx = mysql_query("INSERT INTO notifications_ml (fieldone) VALUES ('$notifications')");

?>

 

DICA: MYSQL_QUERY é deprecated nas novas versões do PHP pois é muito inseguro, para uma aplicação como esta utilize PDO

Share this post


Link to post
Share on other sites
  • 0

Depois de algumas horas aqui... consegui gravar no banco de dados... tudo separadinho... e sem usar explode!

 

Postarei aqui o código que fiz para testes..

o código php esta com funções obsoletas mas.. acredito que assim dará pra compreenderem melhor!

<?
header("HTTP/1.1 200 OK");
include "conectar.php";

$notifications=file_get_contents("php://input");
$obj = json_decode($notifications);

$on = $obj->resource;
$tw = $obj->user_id;
$tr = $obj->topic;
$fo = $obj->application_id;
$fi = $obj->attempts;
$si = $obj->sent;
$se = $obj->received;

$xx = mysql_query("INSERT INTO notifications_ml (resource, user_id, topic, application_id, attempts, sent, received) VALUES ('$on', '$tw', '$tr', '$fo', '$fi', '$si', '$se')");
?>

A versão final irei usar com PDO como sugeriu... mas isso fica pra depois... 

Nesse arquivo de notificações tera apenas isso... e também uma validação para gravar apenas se tiver dados... pra evitar de gravar dados em branco..

 

O próximo passo é criar um arquivo que ira ler essas notificações e mostrar perguntas, pedidos,  e alterações nos produtos!

 

 

 

 

Não sei se estou no caminho certo, mas é assim que eu imagino que funciona.

 

Notificação > Gravo no Banco de Dados > Cron para Ler as notificações de tempos em tempos > Listo elas na minha pagina e as trato como quero.

Share this post


Link to post
Share on other sites
  • 0

sim, o caminho é esse! é recomendado que a página de notifications permanecer leve e fazer o tratamento depois (ou instantaneamente) em separado, podendo ser através de uma rotina Cron se o volume não for muito grande

Share this post


Link to post
Share on other sites
  • 0

Obrigado por me guiar! 

essa é a primeira API que mexo...  por isso estou tento problemas.. mas acredito que estou indo bem!

Estava meio por fora das coisas, nem a notificação eu sabia ao certo como funcionava... mas agora estou melhor!

 

 

Obrigado pela dica... acredito que assim da forma que esta não vai pesar muito certo? acrecentarei apenas uma verificação, se nao tiver dados, não grava no DB.

pois os tratamentos farei no cron a seguir... em uma pagina separada!

 

Qualquer duvida volto a postar!

Share this post


Link to post
Share on other sites
  • 0

Dependendo do crescimento do seu sistema, pode chegar um momento que o seu MySQL não suportará a escrita de notificações + leitura de dados e seu serviço pode ficar offline.

 

Gravar cada notificação em arquivo no disco é loucura.

 

Sugiro dar uma lida no redis (http://redis.io/), ele é um armazenador de dados na memória.

 

Sugestão de desenvolvimento.

 

Vi que você está utilizando PHP então:

 

1 - Instale o redis em seu servidor.

2 - Crie um PHP que receba a notificação, exatamente como você já fez

$notifications=file_get_contents("php://input");

jogue todo esse conteúdo para o REDIS e vá armazenando lá.

 

3 - Crie outro script PHP para ler as filas do REDIS e consultar as API's do MercadoLivre

4 - Após cada leitura de notificação remova a notificação do redis.

5 - Adicione um cron para que execute o seu PHP de leitura do redis para que rode a cada 1 minuto.

 

Isso é apenas uma sugestão, avalie e implemente da melhor forma para o seu desenvolvimento.

 

Abraços,

Wesley.

Share this post


Link to post
Share on other sites
  • 0

Obrigado pela dica Wesley!

Assim que meu sistema tiver rodando certinho vou melhorar ele!

 

 

O exemplo que eu tinha feito para gerar arquivo la era apenas para teste! estava aprendendo a usar o sistema..

agora esta gravando no banco de dados certinho... tudo separado...

 

 

Veja!

<?
header("HTTP/1.1 200 OK");
include "conectar.php";

$notifications=file_get_contents("php://input");
$obj = json_decode($notifications);

$on = $obj->resource;
$tw = $obj->user_id;
$tr = $obj->topic;
$fo = $obj->application_id;
$fi = $obj->attempts;
$si = $obj->sent;
$se = $obj->received;

//Verifica se o campo 'received' não esta vazio
if ($se != ""){
$xx = mysql_query("INSERT INTO notifications_ml (resource, user_id, topic, application_id, attempts, sent, received) VALUES ('$on', '$tw', '$tr', '$fo', '$fi', '$si', '$se')");
}
?>
Edited by ronaldoguedess

Share this post


Link to post
Share on other sites
  • 0

Dependendo do crescimento do seu sistema, pode chegar um momento que o seu MySQL não suportará a escrita de notificações + leitura de dados e seu serviço pode ficar offline.

 

Gravar cada notificação em arquivo no disco é loucura.

 

Sugiro dar uma lida no redis (http://redis.io/), ele é um armazenador de dados na memória.

 

Sugestão de desenvolvimento.

 

Vi que você está utilizando PHP então:

 

1 - Instale o redis em seu servidor.

2 - Crie um PHP que receba a notificação, exatamente como você já fez

$notifications=file_get_contents("php://input");

jogue todo esse conteúdo para o REDIS e vá armazenando lá.

 

3 - Crie outro script PHP para ler as filas do REDIS e consultar as API's do MercadoLivre

4 - Após cada leitura de notificação remova a notificação do redis.

5 - Adicione um cron para que execute o seu PHP de leitura do redis para que rode a cada 1 minuto.

 

Isso é apenas uma sugestão, avalie e implemente da melhor forma para o seu desenvolvimento.

 

Abraços,

Wesley.

 

Aproveitando o tópico, e que você é entendido do assunto. Sabe se em uma app .net para desktop é possível receber as notificações também? Se sim, pode me dar um norte?

Share this post


Link to post
Share on other sites
  • 0

Para receber as notificações é obrigatório ter uma URL de acesso público. Não sei se seria o caso da sua aplicação desktop.  :unsure:

 

Abs,

Wesley.

 

Como você já entende mais do assunto. Pode me dar um norte (Dica). De como você faria? O app é totalmente desktop desenvolvido na plataforma .net. O que puder me sugerir, ainda que trabalhoso, será de grande valia. 

 

Abraços,

Ulisses Hen

Share this post


Link to post
Share on other sites
  • 0

Como você já entende mais do assunto. Pode me dar um norte (Dica). De como você faria? O app é totalmente desktop desenvolvido na plataforma .net. O que puder me sugerir, ainda que trabalhoso, será de grande valia. 

 

Abraços,

Ulisses Hen

Ulisses

No seu caso é problema de conceito de desenvolvimento de sistema, repense-o.

Ele deve ser visto pela internet para que possa usar as notificações. Porém, ... numa das palestras do ML, se eu não estou enganado foi o próprio Wesley que falou, foi dito que é preferencial que as databases sejam locais, e não estejam na web.

 

Você precisa usar um webserver ou criar um listener para receber as notificações. Já foi indicado no forum uma solução para desenvolvimento offline.

 

curta

Share this post


Link to post
Share on other sites
  • 0

Ulisses

No seu caso é problema de conceito de desenvolvimento de sistema, repense-o.

Ele deve ser visto pela internet para que possa usar as notificações. Porém, ... numa das palestras do ML, se eu não estou enganado foi o próprio Wesley que falou, foi dito que é preferencial que as databases sejam locais, e não estejam na web.

 

Você precisa usar um webserver ou criar um listener para receber as notificações. Já foi indicado no forum uma solução para desenvolvimento offline.

 

curta

 

Obrigado pelas referências. Sou relativamente novo no fórum, e por isso posso não ter acompanhado alguns assuntos. Vou repensar minha app como indicado e possivelmente fazer um webservice. 

 

Muito obrigado novamente Rodrigo.

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
Sign in to follow this