Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich Fotos auf Instagram hochladen, ohne die offizielle API zu verwenden?

Wie kann ich Fotos auf Instagram hochladen, ohne die offizielle API zu verwenden?

Barbara Streisand
Barbara StreisandOriginal
2024-12-01 20:31:11506Durchsuche

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

Reverse Engineering der Instagram-API: Ein tiefer Einblick in Foto-Uploads

Obwohl es keine offizielle API-Funktion zum Posten von Bildern gibt, ist eine Problemumgehung durch Reverse Engineering der Instagram-API möglich . Durch die Verwendung des bereitgestellten Code-Snippets können Sie Bild-Uploads direkt aus PHP durchführen.

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);

Wichtiger Hinweis:

Instagram kann Konten sperren, die diese Methode verwenden. Verwenden Sie es mit Vorsicht und auf eigenes Risiko.

Das obige ist der detaillierte Inhalt vonWie kann ich Fotos auf Instagram hochladen, ohne die offizielle API zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn