127 votes

Comment publier des photos sur instagram en utilisant l'API

Je construis une application php qui doit poster la photo téléchargée par l'utilisateur directement sur Instagram, mais après une recherche rapide, j'ai trouvé qu'il n'y a pas de telle fonction dans l'API :( et ça fait bizarre... parce qu'ils devraient en fournir une. Je ne suis pas sûr qu'il y ait un autre moyen (à part les applications pour Android et iOS) de télécharger une photo en utilisant php. Merci de me donner une idée s'il y a une possibilité.

J'ai également lu ceci ,

Comment partager un lien et une photo avec Instagram en utilisant PHP ?

6voto

Allen Wong Points 79

Pour tous ceux qui cherchent une solution pour poster sur Instagram en utilisant AWS lambda y marionnettiste ( chrome-aws-lambda ). Il a été noté que cette solution vous permettent de publier 1 photo par message uniquement . Si vous n'utilisez pas de lambda, remplacez simplement chrome-aws-lambda con puppeteer .

Pour le premier lancement de lambda, il est normal que cela ne fonctionne pas car instagram détecte "Tentative de connexion suspecte" . Il suffit d'aller sur la page d'instagram en utilisant votre PC et l'approuver tout devrait bien se passer.

Voici mon code, n'hésitez pas à l'optimiser :

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

il doit être le chemin du fichier local, s'il est url, téléchargez-le d'abord dans le dossier /tmp .

Mis à jour :

Instagram bloque maintenant toute tentative de connexion suspecte à moins que vous ne l'approuviez manuellement à chaque fois qu'elle est exécutée. Pour résoudre ce problème, il est préférable de sauvegarder vos cookies en json et de les importer dans puppeteer.

5voto

Amru E. Points 1658

Pour les utilisateurs qui trouvent cette question, vous pouvez passer les photos au flux de partage d'instagram (de votre application à l'écran des filtres) sur l'iPhone en utilisant les crochets iPhone : http://help.instagram.com/355896521173347 En dehors de cela, il n'y a actuellement aucun moyen dans la version 1 de l'api.

1voto

Tony Points 436

S'il a une interface utilisateur, il a une "API". Prenons l'exemple suivant : Je veux publier la photo que j'utilise dans chaque nouvel article de blog que je crée. Supposons que ce soit Wordpress.

  1. Créez un service qui surveille constamment votre blog via RSS.
  2. Lorsqu'un nouvel article de blog est publié, téléchargez l'image.
  3. (Facultatif) Utilisez une API tierce pour appliquer des superpositions et autres à votre photo.
  4. Placez la photo dans un endroit connu de votre PC ou de votre serveur.
  5. Configurez Chrome (lire ci-dessus) de manière à pouvoir utiliser le navigateur comme un mobile.
  6. À l'aide de Selenium (ou d'une autre de ces bibliothèques), simulez l'ensemble du processus de publication sur Instagram.
  7. Fait. Vous devriez l'avoir.

-1voto

Waheed Sabir Points 109

Il n'y a pas d'API pour poster une photo sur instagram en utilisant l'API , mais il y a un moyen simple qui est d'installer l'extension google " User Agent " il couvrira votre navigateur à Android mobile version chrome . Voici le lien de l'extension https://chrome.google.com/webstore/detail/user-agent-switcher/clddifkhlkcojbojppdojfeeikdkgiae?utm_source=chrome-ntp-icon

cliquez simplement sur l'icône de l'extension et choisissez chrome pour Android et ouvrez Instagram.com

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X