php cURL e fotos do Instagram
Pergunta
Então, alguém tweeta um link para uma foto no Instagram: http://instagr.am/p/QSVkR8LS3H/
Isso redireciona de http://t.co/bOJ4EX2j para http://instagr.am/p/QSVkR8LS3H/ para a página real do Instagram http://instagram.com/p/QSVkR8LS3H/ onde reside a foto.
Legal.Tudo isso é bom e bom.Agora quero que um cURL siga o link tweetado e baixe aquela página final, que contém o <img> da foto.O script é basicamente assim:
$target = 'http://t.co/bOJ4EX2j';
$ch = curl_init();
curl_setopt ($ch, CURLOPT_HTTPGET, TRUE);
curl_setopt ($ch, CURLOPT_POST, FALSE);
curl_setopt ($ch, CURLOPT_COOKIEJAR, COOKIE_FILE); // Defined Constant
curl_setopt ($ch, CURLOPT_COOKIEFILE, COOKIE_FILE);
curl_setopt ($ch, CURLOPT_TIMEOUT, CURL_TIMEOUT); // Defined Constant
curl_setopt ($ch, CURLOPT_USERAGENT, WEBBOT_NAME); // Defined Constant
curl_setopt ($ch, CURLOPT_URL, $target); // Target site
curl_setopt ($ch, CURLOPT_REFERER, ''); // Referer value
curl_setopt ($ch, CURLOPT_VERBOSE, FALSE); // Minimize logs
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // No certificate
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, TRUE); // Follow redirects
curl_setopt ($ch, CURLOPT_MAXREDIRS, 4); // Limit redirections to four
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE); // Return in string
# Create return array
$return_array['FILE'] = curl_exec($ch);
$return_array['STATUS'] = curl_getinfo($ch);
$return_array['ERROR'] = curl_error($ch);
# Close PHP/CURL handle
curl_close($ch);
return $return_array;
Agora, este script tem muito mais componentes, mas isso é apenas a parte cURL.Agora, ele consegue cuspir que pousou na página final correta http://instagram.com/p/QSVkR8LS3H/) onde está a imagem - mas é isso que $return_array['FILE'] cospe:
500 Server Error
An internal server error occurred.
Mesmo quando você navega até a página no seu navegador, com os cookies desativados e sem entrar no Instagram (se estiver), a página carrega completamente!
O que diabos estou perdendo que não permite esse script enrolado para baixar a página do Instagram?!Funciona em quase todas as outras páginas que eu experimento!Só não Instagram.com?!
Por favor, alguém me ajude a resolver esse problema - eu apreciaria muito qualquer ajuda ou visão que alguém possa ter.
Solução
Se você estiver executando este código em um servidor e não em sua máquina local, é possível que haja algum proxy mal configurado entre o servidor e o Instagram.com.Verifique o código da sua máquina local, certificando-se de que também funciona em um navegador na mesma máquina.
Se você fizer isso funcionar e descobrir, como Justin Wood disse, que você tem uma página HTML e não a imagem que queria, posso ajudá-lo com um pouco de PHP para obter o URL da imagem (para o qual você teria que executar outro solicitação cURL).
Outras dicas
Como dito por muitos de nós, esse código parece funcionar perfeitamente.Tudo o que posso sugerir é que você verifique se o relatório de erros está ativado e, em seguida, verifique os logs de erros do PHP em seu diretório base.
Você também pode verificar se o módulo cURL está habilitado no PHP.ini.
Não tenho certeza do que mais poderia estar errado.