186 votes

Comment puis-je obtenir les médias d'un utilisateur sur Instagram sans m'authentifier en tant qu'utilisateur ?

J'essaie de mettre les médias Instagram récents d'un utilisateur sur une barre latérale. J'essaie d'utiliser l'API d'Instagram pour récupérer les médias.

http://instagram.com/developer/endpoints/users/

La documentation indique qu'il faut obtenir https://api.instagram.com/v1/users/<user-id>/media/recent/ mais il est dit de passer un jeton d'accès OAuth. Un jeton d'accès représente l'autorisation d'agir au nom d'un utilisateur. Je ne veux pas que les utilisateurs doivent se connecter à Instagram pour voir cela sur la barre latérale. Ils ne devraient même pas avoir besoin d'avoir un compte Instagram.

Par exemple, je peux aller à http://instagram.com/thebrainscoop sans être connecté à Instagram et voir les photos. Je veux faire ça à travers l'API.

Dans l'API d'Instagram, les requêtes non authentifiées par l'utilisateur transmettent un identifiant client_id au lieu d'un access_token . Si j'essaie, cependant, je reçois :

{
  "meta":{
    "error_type":"OAuthParameterException",
    "code":400,
    "error_message":"\"access_token\" URL parameter missing. This OAuth request requires an \"access_token\" URL parameter."
  }
}

Alors, ce n'est pas possible ? N'y a-t-il aucun moyen de récupérer les derniers médias (publics) d'un utilisateur sans lui demander de se connecter d'abord à un compte Instagram via OAuth ?

340voto

350D Points 457
var name = "smena8m";
$.get("https://images"+~~(Math.random()*3333)+"-focus-opensocial.googleusercontent.com/gadgets/proxy?container=none&url=https://www.instagram.com/" + name + "/", function(html) {
if (html) {
    var regex = /_sharedData = ({.*);<\/script>/m,
        json = JSON.parse(regex.exec(html)[1]),
        edges = json.entry_data.ProfilePage[0].graphql.user.edge_owner_to_timeline_media.edges;

      $.each(edges, function(n, edge) {
          var node = edge.node;
          $('body').append(
              $('<a/>', {
              href: 'https://instagr.am/p/'+node.shortcode,
              target: '_blank'
          }).css({
              backgroundImage: 'url(' + node.thumbnail_src + ')'
          }));
      });
    }
});

html, body {
  font-size: 0;
  line-height: 0;
}

a {
  display: inline-block;
  width: 25%;
  height: 0;
  padding-bottom: 25%;
  background: #eee 50% 50% no-repeat;
  background-size: cover;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

Vous pouvez télécharger n'importe quel flux de photos d'un utilisateur d'Instagram au format JSON en utilisant . ?__a=1 à côté de l'adresse de la page de destination comme ceci . Pas besoin d'obtenir un nom d'utilisateur ou d'enregistrer une application, pas de jetons, pas d'oAuth.

min_id y max_id peuvent être utilisées pour la pagination, voici ce qui suit exemple

YQL peut ne pas fonctionner ici à l'intérieur de l'iframe découpé, vous pouvez donc toujours le vérifier manuellement dans Console YQL

MISE À JOUR AVRIL 2018 : Après les dernières mises à jour d'instagram, vous ne pouvez pas faire cela côté client (javascript) parce que les en-têtes personnalisés pour la demande signée ne peuvent pas être définis avec javascript en raison de CORS Access-Control-Allow-Headers restrictions. Il est encore possible de le faire via php ou toute autre méthode côté serveur avec une signature appropriée basée sur rhx_gis , csrf_token et les paramètres de la demande. Vous pouvez en savoir plus à ce sujet aquí .

MISE À JOUR DE JANVIER 2019 : YQL a été retiré, donc, vérifiez ma dernière mise à jour avec Google Image Proxy comme CORS proxy pour la page Instagram ! Ensuite, seul moment négatif - pagination non disponible avec cette méthode.

PHP solution :

    $html = file_get_contents('https://instagram.com/apple/');
    preg_match('/_sharedData = ({.*);<\/script>/', $html, $matches);
    $profile_data = json_decode($matches[1])->entry_data->ProfilePage[0]->graphql->user;

128voto

Ersan J Sano Points 1374

C'est tardif, mais cela vaut la peine si cela aide quelqu'un car je ne l'ai pas vu dans la documentation d'Instagram.

Pour exécuter GET sur https://api.instagram.com/v1/users/<user-id>/media/recent/ (au moment où nous écrivons ces lignes), vous n'avez pas besoin de jeton d'accès OAuth.

Vous pouvez effectuer https://api.instagram.com/v1/users/[USER ID]/media/recent/?client_id=[CLIENT ID]

[L'ID CLIENT] serait un ID client valide enregistré dans l'application par le biais de la gestion des clients (non lié à l'utilisateur). Vous pouvez obtenir [USER ID] à partir du nom d'utilisateur en effectuant une requête de recherche GET users : https://api.instagram.com/v1/users/search?q=[USERNAME]&client_id=[CLIENT ID]

62voto

Footniko Points 199

11.11.2017
Depuis qu'Instagram a changé la façon dont il fournit ces données, aucune des méthodes ci-dessus ne fonctionne aujourd'hui. Voici la nouvelle façon d'obtenir les médias des utilisateurs :
GET https://instagram.com/graphql/query/?query_id=17888483320059182&variables={"id":"1951415043","first":20,"after":null}
Où :
query_id - valeur permanente : 17888483320059182 (à noter qu'elle pourrait être modifiée à l'avenir).
id - id de l'utilisateur. Il peut être accompagné d'une liste d'utilisateurs. Pour obtenir la liste des utilisateurs, vous pouvez utiliser la requête suivante : GET https://www.instagram.com/web/search/topsearch/?context=blended&query=YOUR_QUERY
first - nombre d'articles à obtenir.
after - id du dernier élément si vous voulez obtenir des éléments de cet id.

52voto

Michael Points 136

J'ai pu obtenir les médias les plus récents d'un utilisateur en utilisant l'API suivante sans authentification (y compris la description, le nombre de likes et de commentaires).

https://www.instagram.com/apple/?__a=1

Par exemple

https://www.instagram.com/{username}/?__a=1

15voto

whizzzkid Points 876

Depuis la semaine dernière, Instagram a désactivé /media/ j'ai mis en place une solution de contournement qui fonctionne plutôt bien pour l'instant.

Pour résoudre les problèmes de chacun dans ce fil, j'ai écrit ceci : https://github.com/whizzzkid/instagram-reverse-proxy

Il fournit toutes les données publiques d'instagram en utilisant les points de terminaison suivants :

Obtenez les médias des utilisateurs :

https://igapi.ga/<username>/media
e.g.: https://igapi.ga/whizzzkid/media 

Obtenir le média de l'utilisateur avec le nombre de limites :

https://igapi.ga/<username>/media?count=N // 1 < N < 20
e.g.: https://igapi.ga/whizzzkid/media?count=5

Utilisez JSONP :

https://igapi.ga/<username>/media?callback=foo
e.g.: https://igapi.ga/whizzzkid/media?callback=bar

L'API proxy ajoute également les URL de la page suivante et de la page précédente à la réponse, de sorte que vous n'avez pas besoin de les calculer à votre place.

J'espère que vous l'aimerez !

Merci à @350D de l'avoir repéré :)

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