• 0
JANO_AUTOPECAS

Produto não é publicado no ML

Question

 

Boa tarde pessoal, estou tentando postar um item para testar conforme a API manda, mas não está sendo publicado, não dá erro, mas também não publica, estou usando Java, alguém saberia aonde estou errando??? meu token está Ok...

Meli m = (Meli) request.getSession().getAttribute("meli");

            m.authorize(request.getParameter("code"), "http://localhost:8084/MinhaApp/Autenticacao.jsp");

            FluentStringsMap params = new FluentStringsMap();
            JSONObject jsonAnuncio = new JSONObject();

            params.add("access_token", m.getAccessToken());
            jsonAnuncio.put("title", "ProdutoTESTE");
            jsonAnuncio.put("category_id", "MLB1051");
            jsonAnuncio.put("listing_type_id", "gold_pro");
            jsonAnuncio.put("condition", "new");
            jsonAnuncio.put("available_quantity", "8");
            jsonAnuncio.put("pictures", "[{\"source\":\"http://cancelando.com/wp-content/uploads/2017/09/como-cancelar-compra-mercado-livre.jpg\"}]");
            jsonAnuncio.put("price", "999999");
            jsonAnuncio.put("buying_mode", "buy_it_now");
            jsonAnuncio.put("currency_id", "BRL");
            jsonAnuncio.put("description", "É um item maneiro.");
            
            Response r = m.post("/items?access_token=$ACCESS_TOKEN", params, jsonAnuncio.toString());

 

Share this post


Link to post
Share on other sites

10 answers to this question

Recommended Posts

  • 0
11 hours ago, JANO_AUTOPECAS said:

 

Boa tarde pessoal, estou tentando postar um item para testar conforme a API manda, mas não está sendo publicado, não dá erro, mas também não publica, estou usando Java, alguém saberia aonde estou errando??? meu token está Ok...


Meli m = (Meli) request.getSession().getAttribute("meli");

            m.authorize(request.getParameter("code"), "http://localhost:8084/MinhaApp/Autenticacao.jsp");

            FluentStringsMap params = new FluentStringsMap();
            JSONObject jsonAnuncio = new JSONObject();

            params.add("access_token", m.getAccessToken());
            jsonAnuncio.put("title", "ProdutoTESTE");
            jsonAnuncio.put("category_id", "MLB1051");
            jsonAnuncio.put("listing_type_id", "gold_pro");
            jsonAnuncio.put("condition", "new");
            jsonAnuncio.put("available_quantity", "8");
            jsonAnuncio.put("pictures", "[{\"source\":\"http://cancelando.com/wp-content/uploads/2017/09/como-cancelar-compra-mercado-livre.jpg\"}]");
            jsonAnuncio.put("price", "999999");
            jsonAnuncio.put("buying_mode", "buy_it_now");
            jsonAnuncio.put("currency_id", "BRL");
            jsonAnuncio.put("description", "É um item maneiro.");
            
            Response r = m.post("/items?access_token=$ACCESS_TOKEN", params, jsonAnuncio.toString());

 

Qual o conteúdo de "r" ?

Share this post


Link to post
Share on other sites
  • 0
19 hours ago, JANO_AUTOPECAS said:

 

Boa tarde pessoal, estou tentando postar um item para testar conforme a API manda, mas não está sendo publicado, não dá erro, mas também não publica, estou usando Java, alguém saberia aonde estou errando??? meu token está Ok...


Meli m = (Meli) request.getSession().getAttribute("meli");

            m.authorize(request.getParameter("code"), "http://localhost:8084/MinhaApp/Autenticacao.jsp");

            FluentStringsMap params = new FluentStringsMap();
            JSONObject jsonAnuncio = new JSONObject();

            params.add("access_token", m.getAccessToken());
            jsonAnuncio.put("title", "ProdutoTESTE");
            jsonAnuncio.put("category_id", "MLB1051");
            jsonAnuncio.put("listing_type_id", "gold_pro");
            jsonAnuncio.put("condition", "new");
            jsonAnuncio.put("available_quantity", "8");
            jsonAnuncio.put("pictures", "[{\"source\":\"http://cancelando.com/wp-content/uploads/2017/09/como-cancelar-compra-mercado-livre.jpg\"}]");
            jsonAnuncio.put("price", "999999");
            jsonAnuncio.put("buying_mode", "buy_it_now");
            jsonAnuncio.put("currency_id", "BRL");
            jsonAnuncio.put("description", "É um item maneiro.");
            
            Response r = m.post("/items?access_token=$ACCESS_TOKEN", params, jsonAnuncio.toString());

 

precisamos do retorno para saber qual o erro indicado (inclusive com o erro você poderá resolver 99% dos casos de problemas, pois é autoexplicativo)

Share this post


Link to post
Share on other sites
  • 0
{"message":"body.invalid_field_types","error":"[[message:invalid property type: [pictures] expected List but was String value: [{\"source\":\"http://cancelando.com/wp-content/uploads/2017/09/como-cancelar-compra-mercado-livre.jpg\"}], references:[item.pictures]]]","status":400,"cause":[]}

Creio que o erro seja na URL da foto passada, a URL existe, porém talvez a String passada como parâmetro não esteja da maneira adequada, falou que esperava uma List, alguém saberia de qual maneira essa List poderia ser passada como parâmetro?.

Edited by JANO_AUTOPECAS

Share this post


Link to post
Share on other sites
  • 0
10 hours ago, JANO_AUTOPECAS said:

{"message":"body.invalid_field_types","error":"[[message:invalid property type: [pictures] expected List but was String value: [{\"source\":\"http://cancelando.com/wp-content/uploads/2017/09/como-cancelar-compra-mercado-livre.jpg\"}], references:[item.pictures]]]","status":400,"cause":[]}

Creio que o erro seja na URL da foto passada, a URL existe, porém talvez a String passada como parâmetro não esteja da maneira adequada, falou que esperava uma List, alguém saberia de qual maneira essa List poderia ser passada como parâmetro?.

@JANO_AUTOPECAS, você é programador? list é um array

Share this post


Link to post
Share on other sites
  • 0
18 hours ago, JANO_AUTOPECAS said:

{"message":"body.invalid_field_types","error":"[[message:invalid property type: [pictures] expected List but was String value: [{\"source\":\"http://cancelando.com/wp-content/uploads/2017/09/como-cancelar-compra-mercado-livre.jpg\"}], references:[item.pictures]]]","status":400,"cause":[]}

Creio que o erro seja na URL da foto passada, a URL existe, porém talvez a String passada como parâmetro não esteja da maneira adequada, falou que esperava uma List, alguém saberia de qual maneira essa List poderia ser passada como parâmetro?.

Voce está tentando incluir um array como se fosse uma string

 

JSONArray arr = new JSONArray();
arr.put(new JSONObject().put("source", "URL"));
arr.put(new JSONObject().put("source", "URL2"));
jsonObjSend.put("pictures", arr);

(Eu fiz de cabeça , mas a idéia é essa)

Share this post


Link to post
Share on other sites
  • 0
10 hours ago, gbandoni said:

Voce está tentando incluir um array como se fosse uma string

 


JSONArray arr = new JSONArray();
arr.put(new JSONObject().put("source", "URL"));
arr.put(new JSONObject().put("source", "URL2"));
jsonObjSend.put("pictures", arr);

(Eu fiz de cabeça , mas a idéia é essa)

Cara muito obrigado pela atenção, funcionou certinho.

Você saberia como poderia mandar o arquivo do PC ao invés de URL?

vi que temos que mandar para o mercado livre para depois recuperarmos o id, porém na API só tem exemplo em curl como abaixo

curl -F file=@/home/user/picture.jpg

Quero fazer via java..

Share this post


Link to post
Share on other sites
  • 0
1 hour ago, JANO_AUTOPECAS said:

Cara muito obrigado pela atenção, funcionou certinho.

Você saberia como poderia mandar o arquivo do PC ao invés de URL?

vi que temos que mandar para o mercado livre para depois recuperarmos o id, porém na API só tem exemplo em curl como abaixo


curl -F file=@/home/user/picture.jpg

Quero fazer via java..

a API é RESTful, o exemplo é com curl pois é genérico, basta usar as opções de chamada HTTP da sua linguagem

Share this post


Link to post
Share on other sites
  • 0
12 hours ago, JANO_AUTOPECAS said:

Cara muito obrigado pela atenção, funcionou certinho.

Você saberia como poderia mandar o arquivo do PC ao invés de URL?

vi que temos que mandar para o mercado livre para depois recuperarmos o id, porém na API só tem exemplo em curl como abaixo


curl -F file=@/home/user/picture.jpg

Quero fazer via java..

 

Vou te dar uma dica que eu considero valiosa

Usa e abusa do Postman .

Se tu conseguir fazer no postman ( e 99% delas tu vai conseguir) você pode usar o gerador de código para gerar o básico vou ter dar um exemplo

Tu quer subir imagem via disco local e na documentação ele lista o comando como


 
curl -F file=@/home/user/picture.jpg https://api.mercadolibre.com/pictures?access_token=$ACCESS_TOKEN

 

Se tu for em File\Import tu cola o comando

image.png.e88c607e4ff19de63a4d4d43cdb4c70b.png

Tu vai ver que ele cria uma entrada com base na sintaxe

image.png.84f5ceba20fff00775d52aaf91ea9629.png

Em body tu vai precisar mudar o tipo de parametro de text para file. Ai em File tu pode selecionar um arquivo local em disco

image.png.139eb4229c6a74849eb8f6702c48e603.png

 

Tudo configurado ? Teste e veja o resultado , se funcionou ótimo , se não verifique os erros e teste até conseguir.

Funcionou ? Clica no botão Code

image.png.6a14bc0a696a22e0e6f25d20e995ca5d.png

Ele gera um código super básico, mas serve de ponto de partida

image.png.495b0f837b10b6f33e8441c8915e0e5a.png

 

Eu não acho esse código a melhor solução (isso deve dar dor de cabeça em manutenções futuras)

 

HttpResponse<String> response = Unirest.post("https://api.mercadolibre.com/pictures?access_token=XXXXX")
  .header("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW")
  .header("Content-Type", "application/x-www-form-urlencoded")
  .header("cache-control", "no-cache")
  .header("Postman-Token", "108d9878-863b-410c-92cc-3cd902f42f43")
  .body("------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"file\"\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--")
  .asString();

Uma pequena alteração ja melhora a funcionalidade dele

HttpResponse<String> response = Unirest.post("https://api.mercadolibre.com/pictures?access_token=XXXXX")
  .header("Content-Type", "application/x-www-form-urlencoded")
  .header("cache-control", "no-cache")
  .field("file", new File("C:\temp\imagem.jpg"))
  .asString();

Espero que tenha ficado mais facil de entender

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...