ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

[Resolvido] - Obter Json usando indy

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
leo_bruno
Profissional
Profissional


Registrado: Sexta-Feira, 16 de Abril de 2010
Mensagens: 666

MensagemEnviada: Qua Nov 15, 2017 11:24 am    Assunto: [Resolvido] - Obter Json usando indy Responder com Citação

Olá pessoALL:

Eu preciso passar uma querystring pra obter Json em string, mas não estou sabendo como fazer.

Recebo "Socket error 10054" "Connection reset by peer".

Se eu faço um teste pelo browser colocando diretamente a query http://www.theimdbapi.org/api/"movie"?movie_id=tt0418279 , funciona normalmente.

Estou utilizando o metodo correto (Post)?

Alguém tem experiência com isso pra me ajudar?


Aqui esta minha classe:

Código:

unit TheIMDBApi;

interface
uses
  System.SysUtils, IdHTTP, System.Classes, FMX.Dialogs;

type
  TTheImdbApi = class(TObject)
    private
      function GetJsonInfo(aImdbCode: String):string;
    public
      procedure Teste;
  end;

implementation

{ TTheImdbApi }

const
  cUrl = 'http://www.theimdbapi.org/api/"movie"?';

function TTheImdbApi.GetJsonInfo(aImdbCode: String): string;
const
  cIdMetodo = '"TTheImdbApi.GetJsonInfo"  Responsável por obter a informação do filme na API The IMDB.' + sLineBreak;
var
  _Http : TIdHTTP;
  _ParamList : TStringList;
begin
  _Http := TIdHTTP.Create(nil);
  _ParamList := TStringList.Create;
  _ParamList.Add('movie_id=' + aImdbCode);
  try
    try
      Result := _Http.Post(cURL, _ParamList);
    except
      on e:exception do
      begin
        Result := '';
        raise Exception.Create(cIdMetodo + e.Message);
      end;
    end;
  finally
    FreeAndNil(_Http);
    _ParamList.Free;
  end;
end;

procedure TTheImdbApi.Teste;
begin
  Showmessage(GetJsonInfo('tt0418279'));
end;


Editado pela última vez por leo_bruno em Qui Nov 16, 2017 11:47 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qua Nov 15, 2017 2:15 pm    Assunto: Responder com Citação

Boa tarde,

Não tenho experiência com isso mas experimente fazer uns testes com o método Get:

Código:
function GetJsonInfo(aImdbCode: String): string;
const
  cIdMetodo = '"TTheImdbApi.GetJsonInfo"  Responsável por obter a informação do filme na API The IMDB.' + sLineBreak;
var
  _Http : TIdHTTP;
begin
  _Http := TIdHTTP.Create(nil);
  try
    _Http.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; rv:56.0) Gecko/20100101 Firefox/56.0';
    try
      Result := _Http.Get(cURL + 'movie_id=' + aImdbCode);
    except
      on e:exception do
      begin
        Result := '';
        raise Exception.Create(cIdMetodo + e.Message);
      end;
    end;
  finally
    FreeAndNil(_Http);
  end;
end;


obs: parece que o fórum acrescentou aspas duplas na url deixando o "movie" entre aspas

Espero que ajude

_________________
Assinatura: https://www.imoveisemexposicao.com.br/imoveis-venda-guarulhos!bonsucesso-residencial-casa
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
strak2012
Colaborador
Colaborador


Registrado: Segunda-Feira, 13 de Janeiro de 2014
Mensagens: 1518
Localização: Maceió - AL

MensagemEnviada: Qua Nov 15, 2017 4:57 pm    Assunto: Responder com Citação

Primeiramente verifique a questão da aspa dupla mencionada acima

Código:
cUrl = 'http://www.theimdbapi.org/api/""movie""?';


Provavelmente elas não existe;

Segundamente se é que existe o termo existe, podes manter o método post isso depende da api que estar online, se aceita get ou post ou ambos.

Se basei no response este deve ter retorno de uma string contendo o json em questão, e razão por acreditar que o método correto é o post e não o get seria os paramentos usado no post.

Com a string json basta converter-lo em um objeto Tjsonobject e pronto tudo feito.

Para mais detalhe ou duvida favor deixar seu fedback.
_________________
Tudo podemos quando tudo sabemos!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail MSN Messenger
leo_bruno
Profissional
Profissional


Registrado: Sexta-Feira, 16 de Abril de 2010
Mensagens: 666

MensagemEnviada: Qui Nov 16, 2017 7:40 am    Assunto: Responder com Citação

Obrigado Imex e Strak2012 pelas resostas.

Entrei em contato com os mantenedores da API e fui informado que somente suportam "Get".

Então simplifiquei pra ver se funcionava.

Comecei um outro projeto, desta vez em VCL, pra testar.

Código:

procedure TForm1.btn1Click(Sender: TObject);
var
  _text : string;
begin
  _text := idhtp1.Get('http://www.theimdbapi.org/api/"movie"?movie_id=tt0418279');
  ShowMessage(_text);
end;


Referente às aspas, foi o forum que adicionou.

Mesmo neste exemplo simples usando GET, continuo recebendo forbbiden.

Se eu passo a mesma string pelo browser, funciona numa boa. Desta maneira assumo que a API esta funcionando e deve ser alguma coisa do meu lado.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Qui Nov 16, 2017 9:19 am    Assunto: Responder com Citação

Faça um teste com o código abaixo:

Código:
var
  Json: string;
  HTTP1: TIdHTTP;
begin
  with HTTP1 do
  begin
    HTTP1 := TIdHTTP.Create(nil);
    try
      Request.Accept := 'text/html, */*';
      Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon)';
      Request.ContentType := 'application/x-www-form-urlencoded';
      HandleRedirects := True;
      Json := Get('http://www.theimdbapi.org/api/"movie"?movie_id=tt0418279');
      ShowMessage(Json);
    finally
      Free;
    end;
  end;
end;


No endereço dentro da variável Json deixe a palavra "movie" sem aspas.
Ao postar dentro da tag [code] está sendo acrescentado estas aspas indevidamente.
_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
leo_bruno
Profissional
Profissional


Registrado: Sexta-Feira, 16 de Abril de 2010
Mensagens: 666

MensagemEnviada: Qui Nov 16, 2017 11:46 am    Assunto: Responder com Citação

natanbh1, muito obrigado, funcionou pereitamente.

O meu get não tinha funcionado por não ter especificado os parâmetros que você listou.

natanbh1 escreveu:
Faça um teste com o código abaixo:

Código:
var
  Json: string;
  HTTP1: TIdHTTP;
begin
  with HTTP1 do
  begin
    HTTP1 := TIdHTTP.Create(nil);
    try
      Request.Accept := 'text/html, */*';
      Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon)';
      Request.ContentType := 'application/x-www-form-urlencoded';
      HandleRedirects := True;
      Json := Get('http://www.theimdbapi.org/api/""movie""?movie_id=tt0418279');
      ShowMessage(Json);
    finally
      Free;
    end;
  end;
end;


No endereço dentro da variável Json deixe a palavra ""movie"" sem aspas.
Ao postar dentro da tag [code] está sendo acrescentado estas aspas indevidamente.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB