>백엔드 개발 >PHP 튜토리얼 >공식 API를 사용하지 않고 어떻게 Instagram에 사진을 업로드할 수 있나요?

공식 API를 사용하지 않고 어떻게 Instagram에 사진을 업로드할 수 있나요?

Barbara Streisand
Barbara Streisand원래의
2024-12-01 20:31:11505검색

How Can I Upload Photos to Instagram Without Using the Official API?

인스타그램 API 리버스 엔지니어링: 사진 업로드에 대한 심층 분석

사진 게시를 위한 공식 API 기능이 없음에도 불구하고 인스타그램 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.