ホームページ >バックエンド開発 >PHPチュートリアル >公式 API を使用せずに Instagram に写真をアップロードするにはどうすればよいですか?
写真を投稿するための公式 API 関数は存在しませんが、Instagram の API をリバース エンジニアリングすることで回避策が可能です。提供されたコード スニペットを利用すると、PHP から直接画像をアップロードできます。
function SendRequest($url, $post, $post_data, $user_agent, $cookies) { // Set cURL options for API requests $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://i.instagram.com/api/v1/'.$url); curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Handle post requests if($post) { curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); } // Cookie handling if($cookies) { curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookies.txt'); } else { curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookies.txt'); } $response = curl_exec($ch); $http = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return array($http, $response); } // Utility functions function GenerateGuid() { // Generate a random GUID return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535)); } function GenerateUserAgent() { // Generate a random user agent $resolutions = array('720x1280', '320x480', '480x800', '1024x768', '1280x720', '768x1024', '480x320'); $versions = array('GT-N7000', 'SM-N9000', 'GT-I9220', 'GT-I9100'); $dpis = array('120', '160', '320', '240'); $ver = $versions[array_rand($versions)]; $dpi = $dpis[array_rand($dpis)]; $res = $resolutions[array_rand($resolutions)]; return 'Instagram 4.'.mt_rand(1,2).'.'.mt_rand(0,2).' Android ('.mt_rand(10,11).'/'.mt_rand(1,3).'.'.mt_rand(3,5).'.'.mt_rand(0,5).'; '.$dpi.'; '.$res.'; samsung; '.$ver.'; '.$ver.'; smdkc210; en_US)'; } function GenerateSignature($data) { // Generate an API signature return hash_hmac('sha256', $data, 'b4a23f5e39b5929e0666ac5de94c89d1618a2916'); } function GetPostData($filename) { // Generate post data for image upload if(!$filename) { echo "The image doesn't exist ".$filename; } else { $post_data = array('device_timestamp' => time(), 'photo' => '@'.$filename); return $post_data; } } // Example usage $username = 'your_username'; $password = 'your_password'; $filename = 'your_image.jpg'; $caption = 'your_caption'; $user_agent = GenerateUserAgent(); $device_id = "android-".GenerateGuid(); // Log in to Instagram $data ='{"device_id":"'.$device_id.'","guid":"'.$guid.'","username":"'.$username.'","password":"'.$password.'","Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"}'; $sig = GenerateSignature($data); $data = 'signed_body='.$sig.'.'.urlencode($data).'&ig_sig_key_version=4'; $login = SendRequest('accounts/login/', true, $data, $user_agent, false); // Post the picture $data = GetPostData($filename); $post = SendRequest('media/upload/', true, $data, $user_agent, true); // Configure the picture $data = '{"device_id":"'.$device_id.'","guid":"'.$guid.'","media_id":"'.$media_id.'","caption":"'.trim($caption).'","device_timestamp":"'.time().'","source_type":"5","filter_type":"0","extra":"{}","Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"}'; $sig = GenerateSignature($data); $new_data = 'signed_body='.$sig.'.'.urlencode($data).'&ig_sig_key_version=4'; $conf = SendRequest('media/configure/', true, $new_data, $user_agent, true);
重要なお知らせ:
Instagram では、この方法を使用したアカウントが禁止される場合があります。ご自身の責任において慎重に使用してください。
以上が公式 API を使用せずに Instagram に写真をアップロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。