誰かが Instagram で写真へのリンクをツイートします: http://instagr.am/p/QSVkR8LS3H/
これにより、http://t.co/bOJ4EX2jからhttp://instagr.am/p/QSVkR8LS3H/へ、写真が存在する実際の Instagram ページhttp://instagram.com/p/QSVkR8LS3H/にリダイレクトされます。
涼しい。それはすべて良いことです。ここで、cURL でツイートされたリンクをたどって、写真の < img > を含む最終ページをダウンロードする必要があります。スクリプトは基本的に次のようになります。
$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;
このスクリプトにはさらに多くのコンポーネントがありますが、それは cURL 部分だけです。今、画像がある正しい最終ページhttp://instagram.com/p/QSVkR8LS3H/に着陸したことを吐き出すことができますが、これは $return_array['FILE'] が吐き出すものです:
500 Server Error
An internal server error occurred.
ブラウザーでページに移動し、Cookie をオフにして、Instagram にサインインしていない場合でも (サインインしていた場合)、ページは完全に読み込まれます。
InstagramページをダウンロードするためのcURLスクリプトを許可していないのに、一体何が欠けているのでしょうか?! 私が試した他のほぼすべてのページで機能します。Instagram.comだけじゃない!?
誰かがこの問題を解決するのを手伝ってください-誰かが持っているかもしれない助けや洞察を大いに感謝します.