web-dev-qa-db-fra.com

Où puis-je trouver l'ID de média Instagram d'une image

Je cherche la MediaID d'une image Instagram qui a été téléchargée. Il devrait ressembler à 

1234567894561231236_33215652

J'ai découvert que le dernier ensemble d'entiers est le usersID

Par exemple: ceci est le lien pour l'image directement, cependant je ne vois pas mediaID au format correct?

http://distilleryimage11.ak.instagram.com/d33aafc8b55d11e2a66b22000a9f09de_7.jpg

alors que c'est le lien

http://instagram.com/p/Y7GF-5vftL/

Je ne souhaite pas utiliser l'API car tout ce dont j'ai besoin est le MediaID d'une image sélectionnée.

28
Taz

Donc, la "meilleure façon" la plus votée est un peu dépréciée, voici donc mon montage et d'autres solutions:

Javascript + jQuery

$.ajax({
    type: 'GET',
    url: 'http://api.instagram.com/oembed?callback=&url='+Url, //You must define 'Url' for yourself
    cache: false,
    dataType: 'json',
    jsonp: false,
    success: function (data) {
       var MediaID = data.media_id;
   }
});

PHP

$your_url = "" //Input your url
$api = file_get_contents("http://api.instagram.com/oembed?callback=&url=" . your_url);      
$media_id = json_decode($api,true)['media_id'];

Donc, ceci est juste une version mise à jour du code de @ George et fonctionne actuellement. Cependant, j'ai fait d'autres solutions, et certaines évitent même une requête ajax:


Shortcode Ajax Solution

Certaines URL Instagram utilisent une syntaxe d'URL raccourcie. Cela permet au client d’utiliser simplement le shortcode à la place de l’identifiant de média si cela est demandé correctement.

Un exemple d'URL de shortcode ressemble à ceci: https://www.instagram.com/p/Y7GF-5vftL/

Le Y7GF-5vftL est votre shortcode pour l'image.

En utilisant l'expression rationnelle:

var url = "https://www.instagram.com/p/Y7GF-5vftL/"; //Define this yourself
var Key = /p\/(.*?)\/$/.exec(url)[1];

Dans le même champ, Key contiendra votre shortcode. Maintenant, pour demander, disons, une image basse résolution en utilisant ce shortcode, vous feriez quelque chose comme ce qui suit:

    $.ajax({
        type: "GET",
        dataType: "json",
        url: "https://api.instagram.com/v1/media/shortcode/" + Key + "?access_token=" + access_token, //Define your 'access_token'
        success: function (RawData) {
            var LowResURL = RawData.data.images.low_resolution.url;
        }
    });

Il y a beaucoup d'autres informations utiles, y compris l'ID de média, dans la structure RawData renvoyée. Consignez-la ou consultez la documentation de l'API pour voir.


Solution de conversion de shortcode

Vous pouvez en fait convertir votre shortcode en id assez facilement! Voici un moyen simple de le faire en javascript:

function shortcodeToInstaID(Shortcode) {
      var char;
      var id = 0;
      var alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
      for (var i = 0; i < Shortcode.length; i++) {
          char = Shortcode[i];
          id = (id * 64) + alphabet.indexOf(char);
      }
      return id;
  }

Remarque: si vous voulez une solution node.js plus robuste, ou si vous voulez voir comment vous pourriez la reconvertir, consultez le module/de Slang's sur npm .


Solution pleine page

Et si vous avez l'URL d'une page Instagram complète comme: https://www.instagram.com/p/BAYYJBwi0Tssh605CJP2bmSuRpm_Jt7V_S8q9A0/

Eh bien, vous pouvez réellement lire le code HTML pour trouver une méta-propriété contenant l’ID de média. Il existe également quelques autres algorithmes que vous pouvez effectuer sur l'URL elle-même pour l'obtenir, mais je pense que cela nécessite trop d'effort, nous allons donc garder les choses simples. Soit interrogez la balise Metaal:ios:url ou parcourez le code HTML. Puisque les métatags lus sont affichés partout, je vais vous montrer comment itérer. 

REMARQUE: ceci est un peu instable et risque d'être corrigé. Cette méthode ne fonctionne PAS sur une page qui utilise une zone d'aperçu. Ainsi, si vous lui donnez le code HTML actuel lorsque vous cliquez sur une image du profil WILL cassera et renverra un mauvais identifiant de média.

function getMediaId(HTML_String) {
  var MediaID = "";
  var e = HTML_String.indexOf("al:ios:url") + 42; //HTML_String is a variable that contains all of the HTML text as a string for the current document. There are many different ways to retrieve this so look one up. 
  for (var i = e; i <= e + 100; i++) { //100 should never come close to being reached
      if (request.source.charAt(i) == "\"")
         break;
      MediaID += request.source.charAt(i);
  }
  return MediaID;
}

Et voilà, différentes manières d'utiliser l'API d'Instagram pour obtenir un identifiant de média. J'espère que l'on résoudra vos difficultés.

15
Anselm

Voici un meilleur moyen:

http://api.instagram.com/oembed?url=http://instagram.com/p/Y7GF-5vftL/

Rendez-vous en tant qu'objet json et vous pourrez facilement en extraire le média

Par exemple, dans PHP

$api = file_get_contents("http://api.instagram.com/oembed?url=http://instagram.com/p/Y7‌​GF-5vftL/");      
$apiObj = json_decode($api,true);      
$media_id = $apiObj['media_id'];

Par exemple, dans JS

$.ajax({     
    type: 'GET',     
    url: 'http://api.instagram.com/oembed?callback=&url=http://instagram.com/p/Y7GF-5vftL‌​/',     
    cache: false,     
    dataType: 'jsonp',     
    success: function(data) {           
        try{              
            var media_id = data[0].media_id;          
        }catch(err){}   
    } 
});
78
George

Voici une meilleure façon de même:

Aucun appel d'API! Et j’ai lancé la conversion d’un media_id en une shortcode comme bonus supplémentaire.

Basé sur argottravail extraordinaire pour comprendre la conversion. Nathan'swork conversion de base10 en base64 en php. Et rgbflawed'sfonctionne le reconvertissant dans l’autre sens (avec un alphabet modifié). #effort d'équipe

function mediaid_to_shortcode($mediaid){

    if(strpos($mediaid, '_') !== false){
        $pieces = explode('_', $mediaid);
        $mediaid = $pieces[0];
        $userid = $pieces[1];
    }

    $alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
    $shortcode = '';
    while($mediaid > 0){
        $remainder = $mediaid % 64;
        $mediaid = ($mediaid-$remainder) / 64;
        $shortcode = $alphabet{$remainder} . $shortcode;
    };

    return $shortcode;

}

function shortcode_to_mediaid($shortcode){

    $alphabet='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';

    $mediaid = 0;

    foreach(str_split($shortcode) as $letter) {
        $mediaid = ($mediaid*64) + strpos($alphabet, $letter);
    }

    return $mediaid;

}
11
ggwarpig

Vous pouvez en fait déduire le MediaId du dernier segment du lien en utilisant une méthode que j'ai décrite ici: http://carrot.is/coding/instagram-ids . Cela fonctionne en mappant le segment d'URL par des codes de caractères et en convertissant l'id en un nombre de base 64.

Par exemple, étant donné le lien que vous avez mentionné ( http://instagram.com/p/Y7GF-5vftL ), nous obtenons le dernier segment (Y7GF-5vftL), puis nous le mappons en codes de caractères à l'aide de base64 url- alphabet sécurisé (24:59:6:5:62:57:47:31:45:11_64). Ensuite, nous convertissons ce nombre base64 en base10 (448979387270691659).

Si vous ajoutez votre userId après un _, vous obtenez l'ID complet dans le formulaire que vous avez spécifié. Toutefois, puisque le MediaId est unique sans l'ID utilisateur, vous pouvez en réalité l'omettre de la plupart des demandes.

Enfin, j'ai créé un module Node.js appelé instagram-id-to-url-segment pour automatiser cette conversion:

convert = require('instagram-id-to-url-segment');
instagramIdToUrlSegment = convert.instagramIdToUrlSegment;
urlSegmentToInstagramId = convert.urlSegmentToInstagramId;

instagramIdToUrlSegment('448979387270691659'); // Y7GF-5vftL
urlSegmentToInstagramId('Y7GF-5vftL'); // 448979387270691659
11
slang

Essayez la solution de cette question: Comment puis-je obtenir un lien direct Instagram à partir d'une entité Twitter?

Vous pouvez obtenir uniquement l'image en ajoutant/media/à l'URL. En utilisant votre

Vous pouvez même spécifier une taille,

L'un des t (vignette), m (moyen), l (grand). La valeur par défaut est m.

Donc, pour une miniature: http://instagr.am/p/QC8hWKL_4K/media/?size=t

8
cluzt

Votre identifiant de média est: 448979387270691659_45818965 Voici comment l'obtenir.

  1. Accédez à instgram.com/nomutilisateur.
  2. Cliquez sur la photo dont vous voulez l'identifiant.
  3. (Instructions de Chrome) clic droit sur la photo (devrait être une image popup)
  4. Inspecter l'élément
  5. Recherchez dans le texte sélectionné, vous devriez voir quelque chose comme ceci photo448979387270691659_45818965

Il devrait y avoir votre photo d'identité.

Pour une raison quelconque, cela ne semble fonctionner qu'avec la fenêtre contextuelle, et non avec l'URL de l'image.

6
user1992271

En JS pur (à condition que votre navigateur puisse gérer les XHR, ce que tous les principaux navigateurs [y compris IE> 6] peuvent):

function igurlretrieve(url) {

  var urldsrc = "http://api.instagram.com/oembed?url=" + url;

  //fetch data from URL data source
  var x = new XMLHttpRequest();
  x.open('GET', urldsrc, true);
  x.send();

  //load resulting JSON data as JS object
  var urldata = JSON.parse(x.responseText);

  //reconstruct data as "instagram://" URL that can be opened in iOS app
  var reconsturl = "instagram://media?id=" + urldata.media_id;
  return reconsturl;

}

À condition que ce soit votre objectif (ouvrir simplement la page dans l'application Instagram Instagram, c'est exactement ce dont il s'agit - cela devrait être fait, surtout si vous ne voulez pas supporter des frais de licence.

3
realkstrawn93

Voici la solution python pour le faire sans appel à api.

def media_id_to_code(media_id):
    alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'
    short_code = ''
    while media_id > 0:
        remainder = media_id % 64
        media_id = (media_id-remainder)/64
        short_code = alphabet[remainder] + short_code
    return short_code


def code_to_media_id(short_code):
    alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'
    media_id = 0;
    for letter in short_code:
        media_id = (media_id*64) + alphabet.index(letter)

    return media_id
3
Abdul Majeed

Même chose que vous pouvez implémenter en Python 

import requests,json

def get_media_id(media_url):
   url = 'https://api.instagram.com/oembed/?callback=&url=' + media_url
   response = requests.get(url).json()
   print(response['media_id'])

get_media_id('MEDIA_URL')
0
Shubham Gupta

modifier

L'application Instagram Instagram est désormais enregistrée pour les liens http réguliers à ouvrir dans l'application Instagram et cette méthodologie de lien profond n'est plus nécessaire.

vieux

Swift 4 solution d'analyse de code court

private static func instagramDeepLinkFromHTTPLink(_ link: String) -> String? {
    guard let shortcode = link.components(separatedBy: "/").last else { return nil }

    // algorithm from https://stackoverflow.com/a/37246231/337934
    let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"
    var mediaId: Int = 0
    for (_, char) in shortcode.enumerated() {
        guard let index = alphabet.index(of: char) else { continue }
        mediaId = (mediaId * 64) + index.encodedOffset
    }

    return "instagram://media?id=\(mediaId)"
}
0
SamB

Vous pouvez utiliser l'API multimédia shortcode d'instagram. Si vous utilisez php, vous pouvez utiliser le code suivant pour obtenir le shortcode à partir de l'URL de l'image:

$matches = [];

preg_match('/instagram\.com\/p\/([^\/]*)/i', $url, $matches);

if (count($matches) > 1) {
    $shortcode = $matches[1];
}

Puis envoyez une demande à l'API en utilisant votre jeton d'accès (Remplacez ACCESS-TOKEN par votre jeton).

$apiUrl = sprintf("https://api.instagram.com/v1/media/shortcode/%s?access_token=ACCESS-TOKEN", $shortcode);
0
totas