¿Cómo puedo obtener los medios de un usuario de Instagram sin autenticarme como usuario?

Resuelto Peeja asked hace 11 años • 21 respuestas

Estoy intentando poner los medios recientes de Instagram de un usuario en una barra lateral. Estoy intentando utilizar la API de Instagram para recuperar los medios.

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

La documentación dice GET https://api.instagram.com/v1/users/<user-id>/media/recent/, pero dice que se debe pasar un token de acceso de OAuth. Un token de acceso representa la autorización para actuar en nombre de un usuario. No quiero que los usuarios inicien sesión en Instagram para ver esto en la barra lateral. Ni siquiera deberían necesitar tener una cuenta de Instagram.

Por ejemplo, puedo ir a http://instagram.com/thebrainscoop sin iniciar sesión en Instagram y ver fotos. Quiero hacerlo a través de la API.

En la API de Instagram, las solicitudes no autenticadas por el usuario pasan un archivo client_iden lugar de un archivo access_token. Sin embargo, si intento eso, obtengo:

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

Entonces, ¿no es esto posible? ¿No hay forma de recuperar los medios (públicos) más recientes de un usuario sin pedirle que inicie sesión primero en una cuenta de Instagram a través de OAuth?

Peeja avatar Jun 29 '13 04:06 Peeja
Aceptado

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>
Expandir fragmento

Puede descargar cualquier feed de fotos de usuario de Instagram en formato JSON utilizando ?__a=1una dirección junto a la página de destino como esta . No es necesario obtener una identificación de usuario ni registrar una aplicación, ni tokens, ni oAuth.

min_idy max_idlas variables se pueden usar para la paginación, aquí hay un ejemplo

YQLEs posible que no funcione aquí dentro del iframe recortado, por lo que siempre puedes verificarlo manualmente en la consola YQL.

ACTUALIZACIÓN DE ABRIL DE 2018: Después de las últimas actualizaciones de Instagram, no puede hacer esto en el lado del cliente (javascript) porque los encabezados personalizados para solicitudes firmadas no se pueden configurar con javascript debido a CORS Access-Control-Allow-Headersrestricciones. Todavía es posible hacer esto a través phpde cualquier otro método del lado del servidor con la firma adecuada basada en los parámetros de solicitud rhx_gisy csrf_token. Puedes leer más sobre esto aquí .

ACTUALIZACIÓN DE ENERO DE 2019: YQL se retiró, así que consulte mi última actualización con Google Image Proxy como CORSproxy para la página de Instagram. Luego, el único momento negativo: la paginación no está disponible con este método.

PHPsolución:

    $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;
350D avatar Nov 18 '2015 15:11 350D

Esto llega tarde, pero vale la pena si ayuda a alguien, ya que no lo vi en la documentación de Instagram.

Para realizar GET https://api.instagram.com/v1/users/<user-id>/media/recent/(en el momento de escribir este artículo), en realidad no necesita el token de acceso de OAuth.

puedes realizarhttps://api.instagram.com/v1/users/[USER ID]/media/recent/?client_id=[CLIENT ID]

[ID DE CLIENTE] sería una identificación de cliente válida registrada en la aplicación a través de la administración de clientes (no relacionada con el usuario en absoluto). Puede obtener [ID DE USUARIO] del nombre de usuario realizando la solicitud de búsqueda de usuarios OBTENER: https://api.instagram.com/v1/users/search?q=[USERNAME]&client_id=[CLIENT ID]

Ersan J Sano avatar Dec 11 '2013 21:12 Ersan J Sano