web-dev-qa-db-fra.com

Récupérer plus de 150 commentaires Instagram

Le problème

J'aimerais pouvoir voir tous les commentaires sur n'importe quel morceau de média Instagram , même si le média a plus de 150 commentaires. À l'heure actuelle, il est apparemment impossible de voir plus que les 20 commentaires les plus récents sur un média sur le site Instagram et si l'on utilise soit la Instagram API Console soit la Instagram API Bibliothèques , les 150 commentaires les plus récents sont retournés sans options de pagination ou de visualisation des commentaires d'ajout.

Ce que j'ai essayé

J'ai d'abord, bien sûr, essayé la documentation requête de commentaire des médias dans la console fournie et dans mon propre environnement. Dans les deux cas, un maximum de 150 commentaires ont été renvoyés. Perplexe, j'ai commencé à chercher plus d'informations en ligne.

Après avoir lu attentivement la Documentation de l'API Instagram , testé divers points de terminaison dans la Console de l'API Instagram , et lu diverses questions sur StackOverflow dans la balise Instagram et Instagram Google API Group questions sur plusieurs sujets Instagram, je me suis demandé s'il y avait une chance que quelque chose soit sans-papiers que je pourrais essayer.

La documentation point final du média récent de l'utilisateur inclut des paramètres pour max_id et max_timestamp qui permettent de paginer sur les médias les plus récents pour un utilisateur donné en récupérant les médias qui précèdent max_id ou max_timestamp. Étant donné que chaque commentaire est accompagné de created_time et id attributs, j'ai essayé d'ajouter les paramètres pour max_id et max_timestamp (séparément ou ensemble) pour divers ID de commentaire et horodatages afin d'essayer de parcourir les commentaires. Aucune de mes tentatives n'a fonctionné.

Je suis maintenant au point mort à moins que quelqu'un n'ait une autre suggestion.

Exemple spécifique

En utilisant Instagram API Console , j'ai pris les mesures suivantes pour essayer d'obtenir tous les commentaires pour cette photo .

  1. Je me suis authentifié pour un OAuth2 jeton
  2. A lancé une requête de recherche d'utilisateur pour coltonlhaynes pour obtenir l'utilisateur id: 9610843
  3. Exécuté une requête multimédia récente de l'utilisateur pour l'ID utilisateur: 9610843 pour obtenir les médias les plus récents
  4. Collecte d'informations sur les médias les plus récents (la photo liée ci-dessus)
    • médias id: 698057751201132903_9610843
    • commentaire count: 1375
  5. A lancé une requête de commentaire média pour l'ID média: 698057751201132903_9610843 pour obtenir les commentaires les plus récents
  6. Rassemblé des informations sur le commentaire le moins récent
    • created time: 1397460230
    • commentaire id: 698269477955776593
  7. A lancé une requête de commentaire média pour l'ID média: 698057751201132903_9610843 avec les chaînes de paramètres de requête supplémentaires suivantes pour tenter de parcourir les commentaires, mais a reçu les mêmes résultats qu'à l'étape 6
    • ?max_timestamp=1397460230
    • ?max_id=698269477955776593
    • ?max_timestamp=1397460230&max_id=698269477955776593
    • ?max_id=698269477955776593&max_timestamp=1397460230

Notez s'il vous plaît

À ma connaissance, il n'y a pas de solution à ce problème, mais depuis l'équipe de développement Instagram a déclaré qu'elle ne surveillera plus le groupe Google et surveillera plutôt StackOverflow, je mets cela ici .

69
Ally

Ok, cela va être une solution très "Hacky", et je ne suis pas actuellement configuré pour le faire moi-même (en raison du manque d'ADSL à la maison) mais je peux fournir un guide étape par étape sur la façon dont j'aborderais ce problème.

Tout d'abord, vous aurez besoin d'un outil appelé "Charles Web Debuging Proxy"

Il y a un tutoriel sur le site sur la façon d'activer le "débogage SSL" dans charles, (qui vous obligera à installer un nouveau "certificat racine" sur votre appareil mobile, pour le faire croire que les transactions https signées par charles sont réellement signées par instagram.com)

Maintenant, configurez votre appareil mobile pour acheminer toutes les demandes via ledit proxy (qui devra être installé sur votre réseau Wi-Fi local.)

allez sur https://www.google.com et vérifiez que charles enregistre à la fois les demandes et les réponses.

Une fois que tout est correctement configuré, vous pouvez jeter un œil aux appels API que l'application instagram elle-même utilise pour générer lesdites pages de commentaires.

9
Damian Nikodem

La réponse générique ici est " non, ce n'est pas possible via des points de terminaison réguliers".

Instagram mis à jour Limites de taux (après 17 novembre 2015). Toutes les limites de taux sur la plate-forme Instagram sont contrôlées séparément pour chaque jeton d'accès et sur une fenêtre coulissante d'une heure. Les applications en direct ont des limites de taux plus élevées que les applications en mode Sandbox.

Quelles sont les prochaines limitations dans le contexte mondial:

Limites de taux globales

Les limites de taux globales sont appliquées, y compris tous les appels d'API effectués par une application par jeton d'accès sur la fenêtre coulissante d'une heure , quel que soit le point de terminaison particulier. Des limites de taux s'appliquent également aux demandes invalides ou mal formées.

  • Sandbox LIMITE DE TAUX: 500/heure
  • Live LIMITE DE TAUX: 5000/heure

Plus séparément les limitations pour les points de terminaison des commentaires:

Limites de débit spécifiques aux terminaux

Les points de terminaison utilisés pour publier (POST ou DELETE) ont des limites de débit qui sont appliquées par point de terminaison. Tous les appels effectués vers ces points d'extrémité par votre OAuth client sont également pris en compte dans les limites de taux globales indiquées ci-dessus.

  • Sandbox /media/media-id/ commentaires : 30/heure
  • Live /media/media-id/ commentaires : 60/heure

Si votre application dépasse l'une de ces limites de débit, vous recevrez une réponse avec un code de réponse HTTP de 429 (Too Many Requests).

Dès que la plate-forme Instagram le contrôle par access token base, vous pourriez atteindre de plus grandes limites en utilisant le multithread avec plusieurs jetons d'accès. Mais il a des mises en garde: 1. tout ne peut pas être mis en parallèle à partir de jetons d'accès multiples, car le contexte sera différent. 2. Cela pourrait contredire Politique de plate-forme et TOS

2
Farside

Ce n'est pas du tout "hacky".

Comme Instagram donne le lien où vous pouvez recevoir tous les commentaires ici: https://instagram.com/developer/endpoints/comments/

Tout ce que vous avez à faire est de parcourir le lien qu'Instagram vous donne. Je l'ai fait comme ça. J'utilise l'API pour le faire de cette façon.

  public function getUserMediaComments($id, $limit = 0) {
    return $this->_makeCall('media/'.$id.'/comments', true, array('count' => $limit));
  }

Le $ id est le media_id de l'image. Si vous oubliez cette fonction avec l'identifiant de l'image, vous recevrez tous les commentaires.

Ce n'était pas si difficile quand j'ai découvert cette façon.

Vous pouvez également le faire comme ceci tout en y enseignant. :

$comments = json_decode(file_get_contents('https://api.instagram.com/v1/' . 'media/'. $image->id . '/comments?access_token='. $data->access_token));

Il vous renvoie à la fois un tableau des commentaires des images.

0