So posten Sie Bilder über die API auf Instagram

Lesezeit: 13 Minuten

So posten Sie Bilder uber die API auf Instagram
Altaf Hussain

Ich baue eine PHP-Anwendung, die das vom Benutzer hochgeladene Bild direkt auf Instagram posten muss, aber nach einer kurzen Suche habe ich festgestellt, dass es keine solche Funktion in der API gibt 🙁 und es fühlt sich komisch an … weil sie eine bereitstellen sollten. I Ich bin mir nicht sicher, ob es eine andere Möglichkeit gibt (außer den Apps für Android und iOS), Bilder mit PHP hochzuladen. Bitte geben Sie mir eine Idee, wenn es eine Möglichkeit gibt.

Das habe ich auch gelesen,

Wie teile ich mit PHP einen Link und ein Foto mit Instagram?

  • Es ist nicht möglich, Bilder über die API auf Instagram zu posten.

    – Amal Murali

    17. September 2013 um 8:18 Uhr

  • Ich frage mich, wie sie – blog.hootsuite.com/schedule-instagram-posts-in-hootsuite – Mach es… (Blogankündigung wurde vor 8 Stunden gepostet)

    – Mars Robertson

    5. August 2015 um 21:45 Uhr

  • @MichalStefanow Ich fand es auch eine gute Frage. Diese Blog-Ankündigung enthält auch einen Kommentar von Hootsuite (im Kommentarbereich unter dem Artikel), dass es aufgrund von API-Beschränkungen kein tatsächliches direktes Posten auf Instagram gibt und das endgültige Posten in Instagram erfolgen muss.

    – die allgemeine Monatslektüre

    5. Januar 2016 um 23:47 Uhr

  • Und Mitte 2019? Gibt es Änderungen?

    – Benutzerland

    8. Juli 2019 um 2:19 Uhr

  • Wie wäre es mit 2021, ist das immer noch nicht möglich?

    – Benutzer

    18. April 2021 um 23:34 Uhr

1646639653 705 So posten Sie Bilder uber die API auf Instagram
Lanze

Aktualisieren:

Instagram sperrt jetzt Konten und entfernt die Bilder basierend auf dieser Methode. Bitte mit Vorsicht verwenden.


Es scheint, dass jeder, der diese Frage beantwortet hat, mit etwas in der Art von it can't be done ist einigermaßen richtig. Offiziell können Sie mit ihrer API kein Foto auf Instagram posten. Wenn Sie die API jedoch zurückentwickeln, können Sie dies tun.

function SendRequest($url, $post, $post_data, $user_agent, $cookies) {
    $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);

    if($post) {
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
    }

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

function GenerateGuid() {
     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() {  
     $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)."https://stackoverflow.com/".mt_rand(1,3).'.'.mt_rand(3,5).'.'.mt_rand(0,5).'; '.$dpi.'; '.$res.'; samsung; '.$ver.'; '.$ver.'; smdkc210; en_US)';
 }

function GenerateSignature($data) {
     return hash_hmac('sha256', $data, 'b4a23f5e39b5929e0666ac5de94c89d1618a2916');
}

function GetPostData($filename) {
    if(!$filename) {
        echo "The image doesn't exist ".$filename;
    } else {
        $post_data = array('device_timestamp' => time(), 
                        'photo' => '@'.$filename);
        return $post_data;
    }
}


// Set the username and password of the account that you wish to post a photo to
$username="ig_username";
$password = 'ig_password';

// Set the path to the file that you wish to post.
// This must be jpeg format and it must be a perfect square
$filename="pictures/test.jpg";

// Set the caption for the photo
$caption = "Test caption";

// Define the user agent
$agent = GenerateUserAgent();

// Define the GuID
$guid = GenerateGuid();

// Set the devide ID
$device_id = "android-".$guid;

/* LOG IN */
// You must be logged in to the account that you wish to post a photo too
// Set all of the parameters in the string, and then sign it with their API key using SHA-256
$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, $agent, false);

if(strpos($login[1], "Sorry, an error occurred while processing this request.")) {
    echo "Request failed, there's a chance that this proxy/ip is blocked";
} else {            
    if(empty($login[1])) {
        echo "Empty response received from the server while trying to login";
    } else {            
        // Decode the array that is returned
        $obj = @json_decode($login[1], true);

        if(empty($obj)) {
            echo "Could not decode the response: ".$body;
        } else {
            // Post the picture
            $data = GetPostData($filename);
            $post = SendRequest('media/upload/', true, $data, $agent, true);    

            if(empty($post[1])) {
                 echo "Empty response received from the server while trying to post the image";
            } else {
                // Decode the response 
                $obj = @json_decode($post[1], true);

                if(empty($obj)) {
                    echo "Could not decode the response";
                } else {
                    $status = $obj['status'];

                    if($status == 'ok') {
                        // Remove and line breaks from the caption
                        $caption = preg_replace("/\r|\n/", "", $caption);

                        $media_id = $obj['media_id'];
                        $device_id = "android-".$guid;
                        $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';

                       // Now, configure the photo
                       $conf = SendRequest('media/configure/', true, $new_data, $agent, true);

                       if(empty($conf[1])) {
                           echo "Empty response received from the server while trying to configure the image";
                       } else {
                           if(strpos($conf[1], "login_required")) {
                                echo "You are not logged in. There's a chance that the account is banned";
                            } else {
                                $obj = @json_decode($conf[1], true);
                                $status = $obj['status'];

                                if($status != 'fail') {
                                    echo "Success";
                                } else {
                                    echo 'Fail';
                                }
                            }
                        }
                    } else {
                        echo "Status isn't okay";
                    }
                }
            }
        }
    }
}

Kopieren Sie einfach den obigen Code und fügen Sie ihn in Ihren Texteditor ein, ändern Sie die wenigen Variablen entsprechend und VOILA! Ich schrieb ein Artikel darüber und ich habe es viele Male getan. Sehen Sie sich eine Demo an Hier.

  • Anmeldung mit obigem Code ohne Telefon nicht möglich. Ich habe gerade localhost mit PC verwendet und habe gerade eine Fehlermeldung wie **** Leere Antwort vom Server erhalten, während ich versucht habe, mich anzumelden *** wie man diesen Fehler löst

    – Rabesh Lal Shrestha

    24. März 2015 um 12:22 Uhr

  • Gibt es bereits eine funktionierende .net-Variante dieses Codes? Ich kann nicht mit PHP arbeiten und eine .NET-Version dieses Codes wäre wirklich nützlich!

    – Yosoyke

    22. April 2015 um 19:11 Uhr

  • Ich konnte das Skript erfolgreich auf einem neuen Instagram-Konto ausführen.

    – Loretoparisi

    16. September 2015 um 12:17 Uhr

  • Wenn Sie bekommen status isnt okaystellen Sie sicher, dass CURL die Berechtigung hat, eine cookies.txt-Datei zu erstellen. chmod 777 /directory werde dies tun (sei vorsichtig). Ich erhalte eine Erfolgsmeldung von Ihrem Skript, aber der Beitrag wird nicht auf Instagram angezeigt. Funktioniert das noch?

    – kmoney12

    9. April 2016 um 9:27 Uhr

  • Der Code funktioniert gut, aber die GUI und die Geräte-ID ändern sich jedes Mal und Instagram hat mein Konto nach einem einzigen erfolgreichen Beitrag GESPERRT. das Foto wurde auch entfernt.

    – Alp Altunel

    14. April 2017 um 13:15 Uhr

So posten Sie Bilder uber die API auf Instagram
Albzi

Wenn Sie den von Ihnen geteilten Link lesen, lautet die akzeptierte Antwort:

Sie können keine Bilder über die API auf Instagram posten.

Das hat Instagram jetzt gesagt:

Jetzt können Sie Ihre Inhalte ab dem 26. Januar 2021 mit den Effekten der Instagram-APIs (neu) posten!

https://developers.facebook.com/blog/post/2021/01/26/introducing-instagram-content-publishing-api/

Hoffentlich hast du hier etwas Glück.

  • Nun, wenn es KEINEN Weg gibt, dann gibt es wohl auch keinen ‘anderen’ Weg.

    – Albzi

    17. September 2013 um 9:08 Uhr

  • @bart zum Zeitpunkt des Postings von @Ritu hat es Instagram gemacht und war es posts.so nicht postso.com

    – Albzi

    5. Januar 2015 um 8:34 Uhr

  • @usama leider nicht offiziell, aber ich habe Gerüchte gehört, dass Sie dies tun können, wenn Sie auf ihre Website gehen und sie auf die mobile Ansicht herunterskalieren. Habe es aber selbst nicht probiert

    – Albzi

    2. Juli 2017 um 13:16 Uhr

  • @Albzi Wenn Sie Google Chrome verwenden; Gehen Sie auf die Instagram-Website und klicken Sie mit der rechten Maustaste und verwenden Sie “Inspect”, um die Größe zu ändern und den Header in eine mobile Browsersignatur zu ändern. Möglicherweise müssen Sie die Instagram-Seite einmal in “Inspect” aktualisieren, aber Sie können die Website als Handy verwenden und Fotos posten und vieles mehr. Aber; Dies hilft nicht bei der API-Frage. Ich würde gerne ein Foto von PHP auf Instagram posten, das das Endergebnis unserer Teams zeigt.

    – Dawson Irvine

    20. Januar 2019 um 3:35 Uhr

  • Gutes Argument. @BrodaNoel, vielleicht sollte ich das auf keinen “offiziellen” Weg ändern.

    – Albzi

    27. Februar 2019 um 5:43 Uhr

AKTUALISIEREN
Es ist jetzt möglich:

https://developers.facebook.com/docs/instagram-api/content-publishing

Die Inhaltsveröffentlichungs-API ist eine Teilmenge von Instagram Graph-API-Endpunkten, mit denen Sie Medienobjekte veröffentlichen können. Das Veröffentlichen von Medienobjekten mit dieser API ist ein zweistufiger Prozess – Sie erstellen zuerst einen Medienobjektcontainer und veröffentlichen dann den Container in Ihrem Geschäftskonto.

  • Es ist erwähnenswert, dass „die Content-Publishing-API nur mit Facebook-Marketingpartnern und Instagram-Partnern in der geschlossenen Beta-Phase ist. Wir akzeptieren derzeit keine neuen Bewerber.“

    – William Schied

    7. April 2018 um 12:22 Uhr

  • Gilt dies nur für Geschäftskonten?

    – Sonnenfänger

    7. Februar 2019 um 21:03 Uhr

  • Wie ist das eine Antwort? Es ist nicht möglich, diese API ist nur für Partner…

    – Matej J

    2. März 2020 um 13:08 Uhr


  • Da steht Seite nicht gefunden!

    – Mohammed Imran

    23. Juli 2020 um 12:15 Uhr

Instagram ermöglicht es Unternehmen jetzt, ihre Posts zu planen, indem sie die neuen Beta-Endpunkte für die Inhaltsveröffentlichung verwenden.

https://developers.facebook.com/blog/post/2018/01/30/instagram-graph-api-updates/

Dieser Blogbeitrag jedoch – https://business.instagram.com/blog/instagram-api-features-updates – macht deutlich, dass sie diese API nur für ihre Facebook-Marketingpartner oder Instagram-Partner öffnen.

Um mit der Planung von Beiträgen zu beginnen, arbeiten Sie bitte mit einem unserer Facebook-Marketingpartner oder Instagram-Partner zusammen.

Dieser Link von Facebook – https://developers.facebook.com/docs/instagram-api/content-publishing – listet es als geschlossene Beta auf.

Die Inhaltsveröffentlichungs-API befindet sich nur mit Facebook-Marketingpartnern und Instagram-Partnern in der geschlossenen Betaphase. Wir nehmen derzeit keine neuen Bewerber an.

Aber so würdest du es machen:

Du hast ein Foto bei…

https://www.example.com/images/bronz-fonz.jpg

Sie wollen es mit dem Hashtag „#BronzFonz“ veröffentlichen.

Du könntest die verwenden /user/media edge, um den Container wie folgt zu erstellen:

POST graph.facebook.com 
  /17841400008460056/media?
    image_url=https%3A%2F%2Fwww.example.com%2Fimages%2Fbronz-fonz.jpg&
    caption=%23BronzFonz

Dies würde eine Container-ID (z. B. 17889455560051444) zurückgeben, die Sie dann wie folgt mit dem Edge /user/media_publish veröffentlichen würden:

POST graph.facebook.com
  /17841405822304914/media_publish
    ?creation_id=17889455560051444

Dieses Beispiel aus der Dokumente.

1646639654 387 So posten Sie Bilder uber die API auf Instagram
Dheeraj Thedijje

Ich habe versucht, IFTTT und viele andere Dienste zu verwenden, aber alle haben Dinge getan oder von Instagram auf einer anderen Plattform gepostet, nicht auf Instagram. Ich habe mehr darüber gelesen, dass Instagram derzeit keine solche API anbietet.

Die Verwendung von Blue Stack erfordert wiederum eine umfangreiche Installation und nur manuelles Ausführen von Dingen.

Sie können jedoch Ihr Google Chrome in der Desktop-Version verwenden, um einen Beitrag auf Instagram zu erstellen. Es braucht ein bisschen Anpassung.

  1. Öffnen Sie Ihr Chrome und durchsuchen Sie Instagram.com
  2. Gehen Sie zum Element prüfen, indem Sie mit der rechten Maustaste auf Chrom klicken.
  3. Wählen Sie im Dropdown-Menü oben rechts im Corener-Menü unter Entwicklertools weitere Tools aus.
  4. Wählen Sie weitere Netzwerkbedingungen aus.
  5. Sehen Sie sich im Abschnitt Netzwerkauswahl den zweiten Abschnitt mit dem Namen Benutzeragent an.
  6. Deaktivieren automatisch auswählenund wählen Sie aus Chrom für Android aus der Liste des angegebenen Benutzeragenten.
  7. Aktualisieren Sie Ihre Instagram.com-Seite.

Sie werden eine Änderung in der Benutzeroberfläche und die Option zum Posten auf Instagram bemerken. Ihr Leben ist jetzt einfach. Lassen Sie mich einen einfacheren Weg wissen, wenn Sie einen finden können.

Geben Sie hier die Bildbeschreibung ein

Ich schrieb weiter https://www.inteligentcomp.com/2018/11/how-to-upload-to-instagram-from-pc-mac.html darüber.

Funktionierender Screenshot

Geben Sie hier die Bildbeschreibung ein

  • Aber du kannst nichts posten.

    – Rajan Verma – Aarvy

    18. Mai 2020 um 3:54 Uhr

  • Ich habe gerade mit derselben Methode gepostet. Es funktioniert absolut gut. Siehe Screenshot im Update.

    – Dheeraj Thedijje

    18. Mai 2020 um 12:19 Uhr

  • das ist genial!

    – Thomas G.

    22. August 2020 um 14:16 Uhr

Für alle, die nach einer Lösung zum Posten auf Instagram suchen AWS-Lambda und Puppenspieler (chrom-aws-lambda). Beachten Sie, dass diese Lösung erlauben Ihnen, nur 1 Foto für jeden Beitrag zu posten. Wenn Sie Lambda nicht verwenden, ersetzen Sie es einfach chrome-aws-lambda mit puppeteer.

Beim ersten Start von Lambda ist es normal, dass dies nicht funktioniert, da Instagram dies erkennt „Verdächtiger Anmeldeversuch“. Rufen Sie einfach mit Ihrem PC die Instagram-Seite auf und genehmige essollte alles in Ordnung sein.

Hier ist mein Code, Sie können ihn gerne optimieren:

// instagram.js
const chromium = require('chrome-aws-lambda');

const username = process.env.IG_USERNAME;
const password = process.env.IG_PASSWORD;

module.exports.post = async function(fileToUpload, caption){
    const browser = await chromium.puppeteer.launch({
        args: [...chromium.args, '--window-size=520,700'],
        defaultViewport: chromium.defaultViewport,
        executablePath: await chromium.executablePath,
        headless: false,
        ignoreHTTPSErrors: true,
    });
    const page = await browser.newPage();
    await page.setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) FxiOS/7.5b3349 Mobile/14F89 Safari/603.2.4');
    await page.goto('https://www.instagram.com/', {waitUntil: 'networkidle2'});
    
    const [buttonLogIn] = await page.$x("//button[contains(., 'Log In')]");
    if (buttonLogIn) {
        await buttonLogIn.click();
    }

    await page.waitFor('input[name="username"]');
    await page.type('input[name="username"]', username)
    await page.type('input[name="password"]', password)
    await page.click('form button[type="submit"]');

    await page.waitFor(3000);
    const [buttonSaveInfo] = await page.$x("//button[contains(., 'Not Now')]");
    if (buttonSaveInfo) {
        await buttonSaveInfo.click();
    }

    await page.waitFor(3000);
    const [buttonNotificationNotNow] = await page.$x("//button[contains(., 'Not Now')]");
    const [buttonNotificationCancel] = await page.$x("//button[contains(., 'Cancel')]");
    if (buttonNotificationNotNow) {
        await buttonNotificationNotNow.click();
    } else if (buttonNotificationCancel) {
        await buttonNotificationCancel.click(); 
    }

    await page.waitFor('form[enctype="multipart/form-data"]');
    const inputUploadHandle = await page.$('form[enctype="multipart/form-data"] input[type=file]');

    await page.waitFor(5000);
    const [buttonPopUpNotNow] = await page.$x("//button[contains(., 'Not Now')]");
    const [buttonPopUpCancel] = await page.$x("//button[contains(., 'Cancel')]");
    if (buttonPopUpNotNow) {
        await buttonPopUpNotNow.click();
    } else if (buttonPopUpCancel) {
        await buttonPopUpCancel.click(); 
    }

    await page.click('[data-testid="new-post-button"]')
    await inputUploadHandle.uploadFile(fileToUpload);

    await page.waitFor(3000);
    const [buttonNext] = await page.$x("//button[contains(., 'Next')]");
    await buttonNext.click();

    await page.waitFor(3000);
    await page.type('textarea', caption);

    const [buttonShare] = await page.$x("//button[contains(., 'Share')]");
    await buttonShare.click();
    await page.waitFor(3000);

    return true;
};
// handler.js

await instagram.post('/tmp/image.png', '#text');

Es muss ein lokaler Dateipfad sein, wenn es sich um eine URL handelt, laden Sie sie zuerst in den /tmp-Ordner herunter.

Aktualisiert:

Instagram blockiert jetzt alle verdächtigen Anmeldeversuche, es sei denn, Sie genehmigen sie bei jeder Ausführung manuell. Um das zu lösen, speichern Sie Ihre Cookies besser als JSON und importieren Sie sie in Puppeteer.

  • Aber du kannst nichts posten.

    – Rajan Verma – Aarvy

    18. Mai 2020 um 3:54 Uhr

  • Ich habe gerade mit derselben Methode gepostet. Es funktioniert absolut gut. Siehe Screenshot im Update.

    – Dheeraj Thedijje

    18. Mai 2020 um 12:19 Uhr

  • das ist genial!

    – Thomas G.

    22. August 2020 um 14:16 Uhr

Für Benutzer, die diese Frage finden, können Sie Fotos mithilfe von iPhone-Hooks an den Instagram-Sharing-Flow (von Ihrer App an den Filterbildschirm) auf dem iPhone weitergeben: http://help.instagram.com/355896521173347 Abgesehen davon gibt es in Version 1 der API derzeit keine Möglichkeit.

  • @Ritu interessant. Es muss dann möglich sein, aber es scheint nicht so, als ob die API dies zulässt. Danke fürs Teilen, ich will es mir anschauen.

    – Amru E.

    11. Dezember 2013 um 17:44 Uhr

  • Ich habe mich auch gefragt, wie sie es machen. Bitte teilen Sie es mit, wenn Sie etwas Relevantes erhalten.

    – Ritu

    12. Dezember 2013 um 5:39 Uhr

  • Es scheint, dass die meisten nicht autorisierten Clients die API zurückentwickeln, indem sie den SSL-Verkehr von der App zum Server entschlüsseln und überwachen. Dies gilt zumindest für Snapchat. Könnte hier genauso sein.

    – Amru E.

    25. November 2014 um 9:28 Uhr

  • Die Flume-App für Mac postet auch in Ihrem Feed

    – Josua – Pendo

    4. Januar 2017 um 14:06 Uhr

964140cookie-checkSo posten Sie Bilder über die API auf Instagram

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy