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.
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.
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/Y7GF-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){}
}
});
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;
}
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
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
Votre identifiant de média est: 448979387270691659_45818965
Voici comment l'obtenir.
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.
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.
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
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')
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)"
}
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);