¿Cómo puedo obtener los medios de un usuario de Instagram sin autenticarme como usuario?
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_id
en 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?
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>
Puede descargar cualquier feed de fotos de usuario de Instagram en formato JSON utilizando ?__a=1
una 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_id
y max_id
las variables se pueden usar para la paginación, aquí hay un ejemplo
YQL
Es 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-Headers
restricciones. Todavía es posible hacer esto a través php
de cualquier otro método del lado del servidor con la firma adecuada basada en los parámetros de solicitud rhx_gis
y 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 CORS
proxy para la página de Instagram. Luego, el único momento negativo: la paginación no está disponible con este método.
PHP
solució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;
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]