J'utilise l'API non documentée d'Instagram https://www.instagram.com/<user>/?__a=1
pour obtenir un flux utilisateur public sur un site Web. Depuis un certain temps maintenant, cela ne fonctionne plus, probablement parce que Facebook l'a supprimé. Existe-t-il un autre moyen d'obtenir facilement les données d'un compte instagram?
J'ai construit un petit serveur qui fait cette transformation. Vous recevrez les données instagram comme avant avec ? __ a = 1 (comme JSON) - amusez-vous ????
https://www.instapi.io/u/<username>
Il y a des données JSON dans https://www.instagram.com/<user>/
. Vous pouvez utiliser regexp pour trouver ce dont vous avez besoin.
Échantillon
// This regexp gets widest possible dict around "profile_pic_url"
// but inside tag <script type="text/javascript">...</script>
let r = new RegExp('<script type="text\/javascript">' +
'([^{]+?({.*profile_pic_url.*})[^}]+?)' +
'<\/script>');
let source = document.documentElement.outerHTML;
let jsonStr = source.match(r)[2];
let data = JSON.parse(jsonStr);
console.log('data', data);
let oldVariantOfData = data['entry_data']['ProfilePage'][0];
console.log('oldVariantOfData', oldVariantOfData);
La même réponse est attachée dans la réponse html de l'url du profil, j'exécute cette solution temporelle (quand je ne peux pas utiliser l'API) en python:
url_recent_media = 'https://www.instagram.com/%s/' % instagram_id
response = urllib2.urlopen(url_recent_media)
insta_html = response.read()
insta_html_split = insta_html.split('"ProfilePage":[')
if len(insta_html_split) > 1:
insta_html_split_2 = insta_html_split[1].split(']},"gatekeepers"')
if len(insta_html_split_2) > 1:
json_dict = json.loads(insta_html_split_2[0])
J'espère que cela vous aidera.
vous pouvez essayer sans utiliser l'API instagram.
import json, urllib2
img_dicts = []
url = 'https://www.instagram.com/{}/'.format(instagram_username)
try:
r = urllib2.urlopen(url, timeout=10.0)
instagram_html = r.read()
instagram_html_data = instagram_html.split('"ProfilePage":[')
if len(instagram_html_data) > 1:
instagram_html_final_data = instagram_html_data[1].split(']},"gatekeepers"')
if len(instagram_html_final_data) > 1:
json_dict = json.loads(instagram_html_final_data[0])
media = json_dict['graphql']['user']['Edge_owner_to_timeline_media']['edges']
for obj in media:
img_dicts.append({
'id': obj['node']['id'],
'caption': obj['node']['Edge_media_to_caption']['edges'][0]['node']['text'],
'imgurl_standard': obj['node']['display_url'],
'imgurl_lower': obj['node']['thumbnail_resources'][4]['src'],
'imgurl_thumb': obj['node']['thumbnail_resources'][3]['src']
})
img_dicts
vous donnera des images de différentes qualités et des légendes de messages Instagram.