web-dev-qa-db-fra.com

Trouver l'URL des médias Instagram par ID

Grâce à un appel HTTP pas très officiel, je trouve l'ID de média, l'URL de l'image et le nom d'utilisateur des publications Instagram.

Mais j'ai besoin de l'URL de chaque message sur Instagram et je ne sais pas comment le trouver.

Existe-t-il une URL telle que instagram.com/something/{mediaID} qui redirige vers instagram.com/p/{mediaSlug}, ou une autre méthode permettant de rechercher un slug par ID de média (sans utiliser l'API officielle, bien sûr!)?

Par exemple, j'ai: 

Numéro unique: 1238578393243739028_1408429375

ID de média: 1238578393243739028

Code d'utilisateur: 1408429375

Et je voudrais :

https://www.instagram.com/p/BEwUHyDxGOU/

Merci de votre aide !

7
Pierre

Solution Java:

 public static String getInstagramPostId(String mediaId) {
String postId = "";
try {
long id = Long.parseLong(mediaId.substring(0, mediaId.indexOf('_')));
String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
while (id > 0) {
long remainder = (id % 64);
id = (id - remainder) / 64;
postId = alphabet.charAt((int)remainder) + postId;
}
} catch (Exception e) {
e.printStackTrace();
}

return postId;
}
4
JhonnyTawk

cela peut être utile:

1) L’algorithme pour générer l’URL par vous-même http://carrot.is/coding/instagram-ids

2) Également, Instagram a un point de terminaison d’API privé pour générer les URL par ID_média: https://i.instagram.com/api/v1/media/1212073297261212121_121212123111/permalink/ , Mais il est protégé par un cookie ID de session

4
Alex Torson

J'ai trouvé une solution pour iOS objectif-C:

-(NSString *) getInstagramPostId:(NSString *)mediaId {
NSString *postId = @"";
@try {
    NSArray *myArray = [mediaId componentsSeparatedByString:@"_"];
    NSString *longValue = [NSString stringWithFormat:@"%@",myArray[0]];
    long itemId = [longValue longLongValue];
    NSString *alphabet = @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
    while (itemId > 0) {
        long remainder = (itemId % 64);
        itemId = (itemId - remainder) / 64;
        unsigned char charToUse = [alphabet characterAtIndex:(int)remainder];
        postId = [NSString stringWithFormat:@"%c%@",charToUse , postId];
    }
} @catch(NSException *exception) {
    NSLog(@"%@",exception);
}
return postId;}
2
JhonnyTawk

Partage de l'implémentation en JavaScript, en utilisant un paquet big-integer ( https://www.npmjs.com/package/big-integer )

var bigInt = require('big-integer');

function getShortcodeFromTag(tag) {
  let id = bigInt(tag.split('_', 1)[0]);
  const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
  let remainder;
  let shortcode = '';

  while (id.greater(0)) {
    let division = id.divmod(64);
    id = division.quotient;
    shortcode = `${alphabet.charAt(division.remainder)}${shortcode}`;
  }

  return shortcode;
}
2
benomite

Basé sur great http://carrot.is/coding/instagram-ids article, voici l'exemple d'implémentation de Ruby sur la conversion d'identificateurs numériques en identificateurs de chaînes:

def translate(post_id)
  dict = [?A..?Z, ?a..?z, 0..9].map(&:to_a).flatten
  dict += ['-', '_']

  post_id = post_id.split('_').first.to_i
  to_radix(post_id, 64).map { |d| dict[d] }.join
end

def to_radix(int, radix)
  int == 0 ? [] : (to_radix(int / radix, radix) + [int % radix])
end

Où vous appelez simplement translate('1238578393243739028_1408429375') et récupérez BEwUHyDxGOU.

1
Milovan Zogovic

Solution Swift 4.2:

func getInstagramPostId(_ mediaId: String?) -> String? {
    var postId = ""
    do {
        let myArray = mediaId?.components(separatedBy: "_")
        let longValue = "\(String(describing: myArray?[0]))"
        var itemId = Int(Int64(longValue) ?? 0)
        let alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"
        while itemId > 0 {
            let remainder: Int = itemId % 64
            itemId = (itemId - remainder) / 64

            let charToUse = alphabet[alphabet.index(alphabet.startIndex, offsetBy: Int(remainder))]
            postId = "\(charToUse)\(postId)"
        }
    }
    return postId
}
0
JhonnyTawk