Instagram API access token

11 mei 2020

Een tijdje terug is de Instagram API verandert door Facebook. De key gaat nu via de Facebook Developer pagina. En omdat ik de eerste keer niet snapte hoe het moest (en waarschijnlijk niet de enige ben), heb ik een klein tutorial getypt.

Benodigdheden

Om de Instagram key aan te vragen heb je een aantal dingen nodig:

  • Internet (duhhh!)
  • Een domein
  • CMD (Terminal bij Mac gebruikers)
  • Instagram account
  • Facebook Developer account

Stap 1 Facebook developer

Eenmaal alle accounts aangemaakt. Begint het allemaal bij Facebook developer. Daar maak je een nieuwe app aan. Omdat ik meerdere sites beheer en onderhoudt noem ik de apps bij de domeinnaam. Bijvoorbeeld matyaspronk.

Als de app is aangemaakt voeg je een product toe aan de app. Omdat wij een instagram API key willen voegen we de instagram product toe. Links in het menu zie je nu Instagram staan met als subitem Basic Display, ga naar die pagina. Op deze pagina zie je een waarschuwing dat je de instellingen nog aanpassen. Want je app mist nog een platform. Dus op naar de instellingen pagina.

Scroll helemaal naar beneden en klik op Add Platform. Selecteer vervolgens website en vul de URL in van de site. Bijvoorbeeld https://mnpronk.nl. En klik Save Changes. Als je nu terug gaat naar de Basic Display pagina van Instagram, zie je dat de melding weg is.

Als alles goed gaat kan je nu de App binnen de Instagram product aanmaken. (ik weet het. Het klinkt heel dubbel allemaal. Creeer een app, doe een product erin en creeer vervolgens weer een app!) Geef die app een naam. De naam mag hetzelfde zijn als de hoofd app naam.

Nu kom je bij de instellingen van de Instagram app. Hierin zie je de Instagram App ID en de Instagram App Secret (deze hebben we later nog nodig.) Ook zie je 3 input velden genaamd Client OAuth Settings, Deauthorize en Data Deletion Request. Je kan op elk punt een ander URL invoeren, maar als je makkelijk wil doen, voer je drie keer hetzelfde URL, van de site waarop je de instagram key wil gebruiken, in (wat ook makkelijker te onthouden is.). En sla de gegevens weer op!

Stap 2 Instagram user koppelen

Als alles goed is gegaan zie je ook op de instellingen pagina de knop Add or Remove Instagram Testers. Wees niet getreurd als je het niet ziet, Links in het menu staat ook het item genaamd Roles. Deze komt op de zelfde pagina. Onderaan de lijst zie je Instagram Testers. Klik op Add Tester. Zoek vervolgens de instagram account op waarvan je die wil koppelen aan de site.

Nadat je dat gedaan heb, log in op Instagram (kan zowel op mobiel als PC. Uitleg gaat wel verder met PC!) Ga vervolgens naar je eigen profiel, klik op het tandwieltje en ga vervolgens naar de Apps en websites pagina. Op die pagina zie je bij het kopje uitnodigingen voor testers een 1 staan. Zo niet, dan heb je wat fout gedaan! Accepteer die uitnodiging als het klopt met de naam van de instagram app.

Tada! Nu heb je de Instagram account gekoppeld aan je Facebook Developer Instagram App. En kunnen we eindelijk de API key aanvragen!

Stap 3 API key aanvragen

Ik als programmeur vond dit gedeelte leuker om te doen dan al dat hiervoor! Voelde even wat meer aan als programmeren!

Hieronder de URL om de eerste fase te doen. Zoals je ziet hebben we een Instagram App ID (ik zei toch dat we die nodig hadden), de redirect URI (de url die je bij het veld Client OAuth Settings hebt ingevoerd) en de scope nodig hebben. Om alle gegevens mee te krijgen, vul je bij scope het volgende in: user_profile,user_media.

        https://api.instagram.com/oauth/authorize?client_id={instagram-app-id}&redirect_uri={redirect-uri}&scope={scope}&response_type=code
      

Als het gelukt is, kom je nu op een instagram authorization pagina. Oftewel Instagram vraagt of je de site toe laat om de gegevens te gebruiken. (Zorg er wel voor dat je ingelogd ben met de juiste Instagram account.) Accepteer het en je komt op de home pagina van de gekozen site. Schrik niet! De URL bovenaan staat namelijk de Auth. code. Bijvoorbeeld:

        https://mnpronk.nl/auth/?code=AQBx-hBsH3...#_
      

Kopieer de code zonder #_ (dit hoort namelijk niet bij de code) en zet het ff in een kladblok bestandje. Als je de code kwijt ben, roep je de URL opnieuw aan (nu hoef je niet te authorizeren.) Vul de onderstaande stuk in met de gegevens en de code en open de CMD/Terminal.

Omdat er een verschil zit tussen de CMD/Terminal van Apple en Windows, heb ik hieronder beide POST requesten neergezet. Deze staan ook in de generator (link is te vinden onderaan het bericht).

Mac
        curl -X POST \
        https://api.instagram.com/oauth/access_token \
        -F client_id={instagram-app-id} \
        -F client_secret={instagram-app-secret} \
        -F grant_type=authorization_code \
        -F redirect_uri={redirect-uri} \
        -F code={code}
      
Windows
        curl -d "client_id={instagram-app-id}&client_secret={instagram-app-secret}&grant_type=authorization_code&redirect_uri={redirect-uri}&code={code}" -X POST https://api.instagram.com/oauth/access_token
      

Eenmaal verstuurd via de CMD/Terminal krijg je de access_token, de key die nodig heb. De POST bericht terug is zowel bij Apple CMD/Terminal als bij Windows CMD hetzelfde. Oftewel gefeliciteerd! Je heb een key die 1 dag geldig is! Bijvoorbeeld:

        {
          "access_token": "IGQVJ...",
          "user_id": 17841405793187218
        }
      

Stap 4 Long-Lived Access Tokens

Als je net zoals ik geen zin heb om elke dag een nieuwe token aan te vragen, kan je de token omruilen voor een long-lived access token. Het enige wat je nodig heb is de short-lived tokenen de instagram-app-secret. Vul het onderstaande in met de gegevens en verstuur het via het CMD/Terminal.

        curl -i -X GET "https://graph.instagram.com/access_token?grant_type=ig_exchange_token&client_secret={instagram-app-secret}&access_token={short-lived-access-token}"
      

Als resultaat krijg je het volgende (als de shor lived token nog geldig is):

        {
          "access_token": "IGQVJ...",
          "token_type": "bearer",
          "expires_in": 5183944  // Number of seconds until token expires
        }
      

Deze token is 60 dagen geldig, klinkt beter in mijn oren dan om de dag. Ook bieden ze aan om de long-lived token te verversen. Je hebt dan alleen de oude long-lived token nodig. Dan heb je volgende URL nodig:

        curl -i -X GET "https://graph.instagram.com/refresh_access_token?grant_type=ig_refresh_token&access_token={long-lived-access-token}"
      

Afsluiting

Met al deze informatie kan je in principe een automatisch systeem maken, waarmee je heel gemakkelijk de token kan verversen. Maar deze tutorial is voornamelijk om een token aan te maken. Voor een simpele link generator klik op de knop hieronder.

Hieronder nog een voorbeeldje met wat je kan doen met deze access token. Ik heb onder tussen bij meerdere sites dit toegepast, zoals bij jurriansvisions.nl.

Als je een automatisch systeem heb gemaakt, hoor ik het graag. Dan kan ik dat ook bij mij toepassen. Succes en als er vragen zijn, kan je mij altijd berichten! Stay safe and happy coding!

Instagram token generator

tech & design: MNP Developer