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 :
Merci de votre aide !
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;
}
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
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;}
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;
}
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
.
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
}