Je me demandais comment ink361 créait un flux RSS Instagram à partir d'un nom d'utilisateur.
Exemple de flux: http://ink361.com/feed/user/snoopdogg
Article de blog: http://blog.ink361.com/post/23664609916/new-rss-instagram-feed-feature-on-ink361-com
Toute perspicacité serait appréciée.
Merci.
Instagram a une API RSS accessible au public, il est difficile de trouver des informations à ce sujet, mais cela fonctionne pour les balises (nous l'utilisons).
Pour les balises, la syntaxe est la suivante:
http://instagr.am/tags/some-tag-you-want-to-follow/feed/recent.rss
Je ne sais pas s'ils ont quelque chose de similaire pour les flux d'utilisateurs, car j'ai dit qu'il était vraiment difficile de trouver des informations à ce sujet et que cela pouvait disparaître d'un jour à l'autre en faveur de l'API officielle, mais pour l'instant cela fonctionne pour Mots clés.
Voici un article de blog officiel à ce sujet (bien qu'il ne couvre que les tags): http://blog.instagram.com/post/8755963247/introducing-hashtags-on-instagram
La réponse de @ user2543857 était bonne. Malheureusement, la structure des données Instagram a changé. À la date de publication, cela fonctionnera. Copiez/collez dans un fichier sur votre serveur PHP et utilisez comme: yoursite.com/instarss.php?user=name_of_instagram_user Cela renverra un flux XML/RSS valide.
MODIFIER !! Naturellement, la sortie de la page/JSON a changé avec le nouveau look/feel d'Instagram. Voici le code mis à jour (juin 2015):
<?php
if (!isset($_GET['user'])) {
exit('Not a valid RSS feed. You didn\'nt provide an Instagram user. Send one via a GET variable. Example .../instarss.php?user=snoopdogg');
}
header('Content-Type: text/xml; charset=utf-8');
$html = file_get_contents('http://instagram.com/'.$_GET['user'].'/');
$html = strstr($html, '{"static_root');
$html = strstr($html, '</script>', true);
//$html = substr($html,0,-6);
$html = substr($html, 0, -1);
$data = json_decode($html);
// print_r($data->entry_data->ProfilePage[0]->user->media->nodes);
$rss_feed = '<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel>';
$rss_feed .= '<title>'.$_GET['user'].'\'s Instagram Feed</title><atom:link href="http://'.$_SERVER['HTTP_Host'].$_SERVER["REQUEST_URI"].'" rel="self" type="application/rss+xml" /><link>http://instagram.com/'.$_GET['user'].'</link><description>'.$_GET['user'].'\'s Instagram Feed</description>';
foreach($data->entry_data->ProfilePage[0]->user->media->nodes as $node) {
$rss_feed .= '<item><title>';
if(isset($node->caption) && $node->caption != '') {
$rss_feed .= htmlspecialchars($node->caption, ENT_QUOTES, ENT_HTML5);
} else {
$rss_feed .= 'photo';
}
// pubdate format could also be: "D, d M Y H:i:s T"
$rss_feed .= '</title><link>https://instagram.com/p/'.$node->code.'/</link><pubDate>'.date("r", $node->date).'</pubDate><dc:creator><![CDATA['.$_GET['user'].']]></dc:creator><description><![CDATA[<img src="'.$node->display_src.'" />]]></description><guid>https://instagram.com/p/'.$node->code.'/</guid></item>';
} // foreach "node" (photo)
$rss_feed .= '</channel></rss>';
echo $rss_feed;
?>
En fait, n'utilisez pas le code ci-dessus. Je vais essayer de maintenir ce Gist à l'avenir.
EDIT Décembre 2016: Je suis fatigué de courir après la sortie d'Instagram qui change constamment pour la gratter et la faire changer quelques mois plus tard. Je dirais qu'il suffit d'utiliser l'API .. Si vous êtes toujours intéressé à créer un flux RSS à partir de la page d'un utilisateur, ce Gist devrait vous donner une idée de la façon de le faire.
Merci à torvin pour l'astuce.
Voici comment obtenir des images Instagram sur votre site sans utiliser l'API.
Créer un fichier json à partir de l'URL et du nom d'utilisateur (définissez-le comme un travail cron, X fois par jour)
<?
$html = file_get_contents('http://instagram.com/username/');
$html = strstr($html, '["lib');
$html = strstr($html, '</script>', true);
$html = substr($html,0,-6);
file_put_contents("username.json",$html);
?>
Afficher quelques images du flux json
<?
$json = file_get_contents('username.json');
$data = json_decode($json);
$img1 = $data[2][0]->props->userMedia[0]->images->standard_resolution->url;
$img2 = $data[2][0]->props->userMedia[1]->images->standard_resolution->url;
$img3 = $data[2][0]->props->userMedia[2]->images->standard_resolution->url;
print '<img src="'.$img1.'" />';
print '<img src="'.$img2.'" />';
print '<img src="'.$img3.'" />';
?>
Vous pouvez accéder au flux pour tout utilisateur d'Instagram en utilisant /users/user-id/media/recent
Point de terminaison API. Ce point de terminaison nécessite un access_token
que vous pouvez obtenir en autorisant certains utilisateurs avec Instagram (pas nécessairement celui pour lequel vous demandez le flux). Le processus de réception de access_token
est décrit ici .
Donc, ce que ink361 peut faire, c'est obtenir un access_token
pour eux-mêmes (leur utilisateur sur Instagram) et l'utiliser pour faire /users/user-id/media/recent
les demandes de flux d'autres utilisateurs. Aussi simple que cela.
Si j'étais ink361, je ne ferais qu'explorer les pages Instagram, analyser le HTML et le transformer en RSS. Aucune API, aucune autorisation, aucun problème.
Malheureusement, la solution de user2543857 ci-dessus ne fonctionne plus. Voici une version qui fonctionne avec la source de la page de profil actuelle.
Créez un fichier JSON à partir de l'URL et du nom d'utilisateur (définissez-le comme un travail cron, X fois par jour)
<?php
$json = file_get_contents('http://instagram.com/username');
$json = strstr($json, '{"entry_data"');
$json = strstr($json, '</script>', true);
$json = rtrim($json,';');
file_put_contents("username.json",$json);
?>
Afficher quelques images du flux JSON
<?php
$json = file_get_contents('username.json');
$data = json_decode($json,true);
$img1 = $data['entry_data']['UserProfile'][0]['userMedia'][0]['images']['thumbnail']['url'];
$img2 = $data['entry_data']['UserProfile'][0]['userMedia'][1]['images']['thumbnail']['url'];
$img3 = $data['entry_data']['UserProfile'][0]['userMedia'][2]['images']['thumbnail']['url'];
print '<img src="'.$img1.'" />';
print '<img src="'.$img2.'" />';
print '<img src="'.$img3.'" />';
?>